unwanted recompilation with :CFFI-GROVEL-FILE

JTK jetmonk at gmail.com
Wed Apr 15 03:26:38 UTC 2020


Sorry for all these emails, but this trivial case reproduces the recompilation, so it isn’t osicat specific.

https://github.com/jetmonk/test-grovel <https://github.com/jetmonk/test-grovel>





> On Apr 14, 2020, at 4:31 PM, JTK <jetmonk at gmail.com> wrote:
> 
> 
> A followup:  this behavior stops when I comment out 
>  (:cffi-wrapper-file "wrappers" :soname "libosicat”) 
> in osicat’s asd file.
> 
> I understand that wrappers are to generate functions from C macros, necessitating a C compilation step to build a dynamic library that is then loaded.
> 
> For example in libosicat, the following line appears to turn a C macro into a function
> 
>  (defwrapper* "s_isreg" ("int" :boolean) ((mode ("mode_t" mode)))
>   "return S_ISREG(mode);”)
> 
> 
> Apparently wrappers.lisp becomes wrappers.processed-wrapper-file, which, despite not changing upon
> reload of osicat system, is recompiled anyway, resulting in a new wrappers.fasl.
> 
> The dynamic library resulting from this (libosicat.dylib on OSX) is not rebuilt, however.
> 
> In short, :CFFI-WRAPPER-FILE seems to trigger unnecessary recompilation of an intermediate lisp
> file processed from the original lisp source, but not creation of this intermediate file, nor the recompilation
> of the dynamic library.
> 
> Using the latest git version of CFFI doesn’t seem to help.
> 
> 
> 
> 
> 
>> On Apr 14, 2020, at 1:06 PM, JTK <jetmonk at gmail.com <mailto:jetmonk at gmail.com>> wrote:
>> 
>> 
>> Hello,
>> 
>> Sorry if this is the wrong place to ask ...
>> 
>> I’m using the ‘osicat’ package ( https://common-lisp.net/project/osicat/ <https://common-lisp.net/project/osicat/>   and  https://github.com/osicat/osicat <https://github.com/osicat/osicat> ) in SBCL on OSX.
>> 
>> whenever I do ‘(asdf:load-system “osicat”) it seems to recompile the cffi-grovel-files and their dependencies.
>> 
>> Is this normal, or is there some way to make it behave like asdf usually does, that it recompiles only when a file has changed?
>> 
>> I know that this issue has 3 components (asdf, cffi, and osicat), but I thought I’d first check whether this is an unavoidable feature of using grovel files.
>> If not,  I can try to fix osicat.   
>> 
>> Here are some of the compilation messages: https://pastebin.com/GKArFCWc <https://pastebin.com/GKArFCWc> 
>> 
>> JK
>> 
>> 
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cffi-devel/attachments/20200414/ea588ebc/attachment.htm>


More information about the cffi-devel mailing list