Dear Juanjo,
sorry for the breakage and thanks for the patch.
On Wed, Jun 26, 2013 at 4:36 PM, Juan Jose Garcia-Ripoll jj.garcia.ripoll@csic.es wrote:
I have real trouble deciphering the new make-build code but I have come to the conclusion that the :DLL target has been eliminated.
The current :DLL target claims to "Link together all the dynamic library used by this system into a single one." which is not what ECL's :DLL target was doing.
ECL's :DLL/:SHARED-LIBRARY target did the same as :STATIC-LIBRARY, which is to link all FASL files into a single, linkable file, but in the shared library form.
The elimination of this feature and the replacement with a possibly empty behavior (I see no opeartion associated to DLL at all), breaks ECL's users code and expectations, having had already some bug reports for that.
There was never the intent to break the :dll target, but we still don't have a test case for it in the test suite, so the feature is fragile. Can you add a #+ecl test for it in test/test-bundle.script? I'm not sure exactly how it's supposed to work, so I prefer you do it.
I tried to integrate your patch, with modifications, in 3.0.1.12. It looks like it works to me. Can you test again?
Then I tried to compile the latest ECL from git and now it's all broken for me (on Ubuntu Linux amd64).
The worse thing is that I no longer seem to understand ASDF's internal's logic well enough to provide any reliable kind of fix, but what I attached seems to do the job just as well. In this patch, since the DLL operation does nothing on any other platform, I took the liberty to condition it on ECL/MKCL
I'm not sure what there is to understand or not understand. ASDF internals are actually much cleaner than they used to be: these days they actually make sense.
The main magic methods for bundles are: (defmethod component-depends-on ((o bundle-compile-op) (c system)) (defmethod input-files ((o bundle-compile-op) (c system)) (defmethod perform ((o bundle-compile-op) (c system)) The component-depends-on finds all the components that will have to be linked, each with a lib-op or compile-op operation, depending on the bundle being monolithic or not. The input-files extracts the list of files to link from these dependencies and crucially depends on all these being direct dependencies. The perform does the magic linking.
I kept the defclass on all implementations, because it's simpler than to add a bunch of #+(or ecl mkcl) everywhere, or to add more special cases to the symbol definition test in test/test-utilities.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Whatever says the law, it is only ever forbidden but to get caught. — Faré