[asdf-devel] ASDF's MAKE-BUILD breaks ECL's DLL target

Faré fahree at gmail.com
Wed Jun 26 21:57:32 UTC 2013


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 at 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é



More information about the asdf-devel mailing list