Summary: please update asdf to 2.26.9 to test some major improvements
in its build algorithm.
ASDF had a few major bugs remaining from ASDF 1.
To fix them, its traverse algorithm was, once again, rewritten and
vastly simplified. It's almost readable, now!
To start with, I fixed this long-standing bug, whereby when a system
was recompiled, this didn't trigger the recompilation of systems that
depended on it as part of the same operate session: If you have a
system B that depends on a system A, and A is modified, re-loading B
will cause A to be recompiled, but not B.
https://bugs.launchpad.net/asdf/+bug/479522
This was starting to annoying me a lot, since it causes systems such
as xcvb-utils to often fail to recompile, getting its
automatically-generated package all out of sync. One reason this bug
survived so long is that there were rumors of people relying on the
bug as a "feature". But ever since 2.21, we had the ability with
:force-not to selectively avoid rebuilding
But this led to the deeper issue that ASDF only knew about timestamps
local to a immediate operation, and was not propagating timestamps
from one component to those that depended on it, which means the
previous fix only worked within the same session: if you loaded B in
one session, modified A, recompiled A in another session, then loaded
B in a third session, the latter wouldn't trigger a recompilation of
B: each file looks locally up-to-date, and is blissfully unaware that
it is too old as compared to its dependencies.
https://bugs.launchpad.net/asdf/+bug/1087609
I fixed this bug too, which required some major modifications, overall
a simplification, in the way ASDF works. For backwards compatibility
(if it's not backwards, it's not compatible), I had to keep some of
the previous APIs, such as the misnamed operation-done-p the signature
of which I couldn't change. As users, you shouldn't notice that
anything changed. If you are power users, you may notice that do-first
dependencies have been eliminated. There is now only one kind of
dependencies, in-order-to, which does the right thing in both cases of
output-files or no output-files.
It was way too much debugging, but it's now done. Please test.
When all this is cleaned up and released, I'm tempted to declare the
launchpad milestone "asdf 2.1" reached, and open a start a new
milestone 2.2 (numbers obviously disconnected from actual version
numbers, these days).
Enjoy!
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Thinking is the hardest work there is, which is probably the reason why
so few engage in it. — Henry Ford
In the previous thread, I wondered whether to merge asdf-encodings into asdf.
Any feedback on the proposal?
SCL plans to essentially do this in their upcoming release (1.4?).
It's again about 20KB, to add to the current 223KB (feature and size inflation).
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
The major advances in civilization are processes that all but wreck the
societies in which they occur.
— A.N. Whitehead
In ASDF 2.26.8, I fixed long-standing bug lp#479522 "wanted: recompile
system when dependency changes".
https://bugs.launchpad.net/asdf/+bug/479522
It was this left-over from ASDF 1, whereby if a system A is modified,
it is recompiled, but this does not cause the recompilation of a
system B that depends-on A.
Back in the dark days of ASDF 1, when computers were slow and
compilation was at a premium, this was considered a "feature" by some,
though a bug by many more. Bug-compatibility made us preserve this
dubious behavior into ASDF 2.
Since ASDF 2.21, the :FORCE-NOT feature of OPERATE allows you to avoid
compilation of whichever systems you specify, so you don't need to
rely on bugs of the implementation to achieve your desired effect.
The bug is now fixed. If you were relying on it, please use :FORCE-NOT instead.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Wishing without work is like fishing without bait.
I haven't heard any objection to my plan of merging asdf-bundle into
asdf, but I have not any actively supporting mention either — just the
fact that it will moderately enhance the lives of Quicklisp, ECL and
MKCL maintainers. I'm leaving you a few more days to send me feedback
before I actually do it.
In the meantime, I added a precompiled-system feature to asdf-bundle.
You can distribute a library as fasl-only, by first (1) compiling it
with fasl-op on your build image:
(asdf:operate 'asdf::fasl-op :my-library)
Then copying the output file (first (asdf:output-files (make-instance
'asdf::fasl-op) (asdf:find-system :my-library))
to some destination of your choice.
(2) in your user's image, have a .asd that looks like that, or better,
evaluate the form as part of your initialization, without the need for
a .asd:
(defsystem :my-library :class :precompiled-system :fasl
#p"/path/to/my-library.system.fasl")
The fasl argument can be a logical pathname or an expression that will
be evaluated later.
This way, user libraries can use defsystem :depends-on and find the
library whether its source is present or whether a .fasl was made
available.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
We are always in anarchy. But we pay a hefty price maintaining the illusion
that we aren't, and another one being misled by the illusion.
On Thu, Nov 29, 2012 at 9:50 PM, Faré <fahree(a)gmail.com> wrote:
> On Thu, Nov 29, 2012 at 11:18 AM, Juan Jose Garcia-Ripoll
> <juanjose.garciaripoll(a)gmail.com> wrote:
>> On Thu, Nov 29, 2012 at 2:41 PM, Faré <fahree(a)gmail.com> wrote:
>>>
>>> Now, do we want to distribute asdf-bundle.lisp as a separate system
>>> asdf-bundle.asd?
>>> Do we want to distribute it as part of asdf.asd the way we used to do
>>> asdf-ecl.lisp?
>>> Do we want to just add its contents to asdf.lisp, a growth of a bit over
>>> 10% in size,
>>> for additional functionality on many platforms and much less headaches on
>>> ECL?
>>
>> ECL will pledge to whatever means of distribution you choose. Just keep me
>> informed.
>>
> After carefully considering the headache for users of Quicklisp and ECL,
> and the fact that asdf-bundle now supports load-fasl-op
> for all actively maintained implementations,
> except ABCL which has its own thing,
> I've decided that it's probably best to fold asdf-bundle into ASDF.
> (Note that I haven't tested the SCL, LispWorks or MKCL ports, and
> that the LispWorks port I just threw together probably needs some love).
>
> The only objection I can imagine is file size,
> but somehow, I fear we're past the point of being able to complain.
> I fully assume the creeping featuritis since ASDF 1.
> wc stats are as follows:
> 4534 19011 200127 asdf.lisp
> 597 2138 21861 asdf-bundle.lisp
> 5131 21149 221988 total
> So the increase is a bit under 11% increase in character file size.
>
> I'll give a few days for people to issue objections,
> and if none is raised, I'll go ahead with the merge some time next week,
> after hopefully testing on more implementations.
> Hopefully, I will add some tests to the ASDF test suite.
Hello Faré,
Here is a pair of tiny patches to update ASDF 2.26.5 for MKCL 1.1.2 (coming
out RSN).
The first one is against asdf itself. The second against asdf-bundle.
Cheers,
Jean-Claude
> Found a problem: https://github.com/quicklisp/quicklisp-client/issues/68
OK, so Quicklisp was failing on older ECLs, because
1- it saw that older ECLs had an old ASDF, so it loaded its own more
recent one (2.26)
2- when it loads a more recent ASDF, that invalidated the asdf-bundle
part of ECL's ASDF.
3- when it further tried to (require :sockets), that failed, because
require depends on asdf-bundle.
Therefore, it looks like asdf-bundle is required when upgrading ASDF
on ECL for Quicklisp.
I bundled (pun intended) asdf-bundle into a single Lisp file asdf-bundle.lisp,
so it's easier to deploy, either as part of ECL or of Quicklisp.
Along the way, I fixed it for SBCL (some recent changes must have broken it),
and tested it on SBCL and ECL:
(asdf:load-system :asdf-bundle)
(trace load)
(asdf:operate asdf:load-fasl-op :fare-utils)
Does what I expect from a fresh Lisp image where the fasls have been
compiled already.
Now, do we want to distribute asdf-bundle.lisp as a separate system
asdf-bundle.asd?
Do we want to distribute it as part of asdf.asd the way we used to do
asdf-ecl.lisp?
Do we want to just add its contents to asdf.lisp, a growth of a bit
over 10% in size,
for additional functionality on many platforms and much less headaches on ECL?
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
An anarchist is a man who is careful to always use pedestrian crossings,
because he utterly detests talking with policemen. — Georges Brassens
Attached please find a patch synchronizing the version of ASDF we intend
to ship with abcl-1.1.0 with the canonical version.
These changes deal with bugs when using systems contained in jar
archives via the ABCL implementation specific extension of CL:PATHNAME.
At Xach's suggestion, I wrote this article on my livejournal about
what has changed since Quicklisp's previous ASDF 2.014.6:
http://bit.ly/WXJ8Kx
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Ever wonder why the SAME PEOPLE make up ALL the conspiracy theories?
Hello,
I'm looking for input/suggestions about something I've been working on that is related to asdf-bundle.
I'm trying to come up with a good solution to do cross-compiling of ASDF packages using ECL. For example I want to be able to create a bundle for a system that looks like this:
(asdf:defsystem openglsample
:components
((:file "package")
#+cross
(:file "shader-vao" :depends-on ("package")))
:depends-on (#+iphone iphone
#+android android
#+android cl+j
#+(or android iphone) cl-opengl))
Using this system definition, I'd like to be able to create monolithic bundles libopenglsample_iphone.a and libopenglsample_android.a with the constraint that the android version will include the "android" and cl+j systems and the iPhone version will contain the "iphone" system.
I tried adding new operations to asdf "cross-compile-op" "cross-lib-op" see here: https://github.com/ageneau/ecl-android/tree/master/lisp-packages/asdf-cross. This mostly works but the handling of the different *features* for each target is a bit of a mess since the host and the target can have different system definitions.
Also because of side-effects, cross-compiling of a particular source file might depend on the host having loaded some dependencies first except the host will load this dependency with *features* that might be different than the target.
I'm wondering would this be better suited for xcvb? In particular can xcvb cross-compile a system without the host doing the cross-compilation having to load the system definition for the system it is compiling?
Regards,
Sylvain