Hi,
I've got #'asdf-jar:package to create a jar file containing lisp sources and fasls. With abcl-1.0.1, (asdf:operate 'asdf:load-op ...) uses the fasls from the jar, whereas with abcl-1.1.0 onwards those fasls are ignored and the jarred sources are compiled into ~/.cache/... again.
Is this a bug, or is it a feature (as easyE seems to think it is, in the last two sentences at: http://stackoverflow.com/questions/4763910/abcl-compilation-and-primitives )?
If it's a bug, here is how far I've got in my diagnosis.
(asdf-jar:add-to-asdf "wispym.jar")
shows this in abcl-1.0.1
((#P"jar:file:/Users/vibhu/t3/wispym-all.jar!/**/*.*" T) (#P"jar:file:/Users/vibhu/t3/wispym-all.jar!/**/*.*" #P"jar:file:/Users/vibhu/t3/wispym-all.jar!/**/*.*") (#P"/Users/vibhu/.cache/common-lisp/abcl-1.0.1-svn-13750-13751-fasl38-solaris-x86/**/*.*" T) (#P"/___jar___file___root___/**/*.*" #P"/Users/vibhu/.cache/common-lisp/abcl-1.0.1-svn-13750-13751-fasl38-solaris-x86/**/*.*") (#P"jar:file:/**/*.jar!/**/*.*" #<TRANSLATE-JAR-PATHNAME {2B63F8AD}>) (T #P"/Users/vibhu/.cache/common-lisp/abcl-1.0.1-svn-13750-13751-fasl38-solaris-x86/**/*.*"))
but this in abcl-1.3.2,
((#P"/**/*.*" T) (#P"/**/*.*" #P"/**/*.*") (#P"/Users/vibhu/.cache/common-lisp/abcl-1.3.2-fasl42-macosx-x64/**/*.*" T) (#P"/___jar___file___root___/**/*.*" #P"/Users/vibhu/.cache/common-lisp/abcl-1.3.2-fasl42-macosx-x64/**/*.*") (#P"jar:file:/**/*.jar!/**/*.*" #<TRANSLATE-JAR-PATHNAME {4F340027}>) (T #P"/Users/vibhu/.cache/common-lisp/abcl-1.3.2-fasl42-macosx-x64/**/*.*"))
I think these are asdf output-translations, each specifying a source directory and a corresponding destination directory.
The first two entries are significantly different between abcl-1.0.1 and abcl-1.3.2.
---- The reason I'd like to use the jarred fasls is that I'm distributing my program to customers. I don't want to spew fasls around their hard disks. I also don't want to get into having to explain to them to clear caches. (I do have to do this locally on occasion, e.g. when timestamps on files confuse the cache). But most importantly, I've got a large cl-yacc grammar that takes ages to macroexpand and compile. I don't want them to wait so long even though it's just on the first load.
---- Any tips for where I should look next will be much appreciated. ASDF, ABCL, ABCL contrib?
Thanks for reading.
Vibhu
On 2016/6/11 01:45, Vibhu Mohindra wrote:
Hi,
I've got #'asdf-jar:package to create a jar file containing lisp sources and fasls. With abcl-1.0.1, (asdf:operate 'asdf:load-op ...) uses the fasls from the jar, whereas with abcl-1.1.0 onwards those fasls are ignored and the jarred sources are compiled into ~/.cache/... again.
Is this a bug, or is it a feature (as easyE seems to think it is, in the last two sentences at: http://stackoverflow.com/questions/4763910/abcl-compilation-and-primitives )?
Whatever I once thought, I agree that your use case for shipping a fully pre-compiled artifact should be met by the ABCL implementation. There should be enough machinery within ASDF at this point to configure its search path for FASLs.
Ideally when we fix this, we should include a test.
Filed as [ticket][412] for keeping track of progress on resolution.
[412]: http://abcl.org/trac/ticket/412#ticket
Hi Mark,
Thanks for filing that in Trac. I've discovered a work-around. ASDF3 lets me do this:
(asdf:operate 'asdf:monolithic-compile-bundle-op "mysystem")
to produce mysystem--all-systems.abcl somewhere under ~/.cache/...
This file has no sources and can be loaded in with #'load .
https://www.common-lisp.net/project/asdf/asdf.html#Predefined-operations-of-...
Vibhu
armedbear-devel@common-lisp.net