<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Sorry for all these emails, but this trivial case reproduces the recompilation, so it isn’t osicat specific.<div class=""><br class=""></div><div class=""><a href="https://github.com/jetmonk/test-grovel" class="">https://github.com/jetmonk/test-grovel</a></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Apr 14, 2020, at 4:31 PM, JTK <<a href="mailto:jetmonk@gmail.com" class="">jetmonk@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><br class=""></div>A followup:  this behavior stops when I comment out <div class=""> (:cffi-wrapper-file "wrappers" :soname "libosicat”) <div class="">in osicat’s asd file.</div><div class=""><br class=""></div><div class=""><div class="">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.</div><div class=""><br class=""></div><div class="">For example in libosicat, the following line appears to turn a C macro into a function</div><div class=""><br class=""></div><div class=""> <span style="font-family: Menlo; font-size: 11px; background-color: rgb(255, 255, 255);" class="">(defwrapper* "s_isreg" ("int" :boolean) ((mode ("mode_t" mode)))</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class=""><span style="font-variant-ligatures: no-common-ligatures" class="">  "return S_ISREG(mode);”)</span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""><br class=""></span></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal; background-color: rgb(255, 255, 255);" class="">Apparently wrappers.lisp becomes wrappers.processed-wrapper-file, which, despite not changing upon</div><div style="margin: 0px; font-stretch: normal; line-height: normal; background-color: rgb(255, 255, 255);" class="">reload of osicat system, is recompiled anyway, resulting in a new wrappers.fasl.</div><div style="margin: 0px; font-stretch: normal; line-height: normal; background-color: rgb(255, 255, 255);" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal; background-color: rgb(255, 255, 255);" class="">The dynamic library resulting from this (libosicat.dylib on OSX) is not rebuilt, however.</div><div style="margin: 0px; font-stretch: normal; line-height: normal; background-color: rgb(255, 255, 255);" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal; background-color: rgb(255, 255, 255);" class="">In short, :CFFI-WRAPPER-FILE seems to trigger unnecessary recompilation of an intermediate lisp</div><div style="margin: 0px; font-stretch: normal; line-height: normal; background-color: rgb(255, 255, 255);" class="">file processed from the original lisp source, but not creation of this intermediate file, nor the recompilation</div><div style="margin: 0px; font-stretch: normal; line-height: normal; background-color: rgb(255, 255, 255);" class="">of the dynamic library.</div><div style="margin: 0px; font-stretch: normal; line-height: normal; background-color: rgb(255, 255, 255);" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal; background-color: rgb(255, 255, 255);" class="">Using the latest git version of CFFI doesn’t seem to help.</div><div style="margin: 0px; font-stretch: normal; line-height: normal; background-color: rgb(255, 255, 255);" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; line-height: normal; background-color: rgb(255, 255, 255);" class=""><br class=""></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo; background-color: rgb(255, 255, 255);" class=""><span style="font-variant-ligatures: no-common-ligatures" class=""><span style="font-family: Helvetica; font-size: 12px;" class=""><br class=""></span></span></div><div class=""><br class=""></div><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Apr 14, 2020, at 1:06 PM, JTK <<a href="mailto:jetmonk@gmail.com" class="">jetmonk@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><br class=""></div><div class="">Hello,</div><div class=""><br class=""></div><div class="">Sorry if this is the wrong place to ask ...</div><div class=""><br class=""></div><div class="">I’m using the ‘osicat’ package ( <a href="https://common-lisp.net/project/osicat/" class="">https://common-lisp.net/project/osicat/</a>   and  <a href="https://github.com/osicat/osicat" class="">https://github.com/osicat/osicat</a> ) in SBCL on OSX.</div><div class=""><br class=""></div><div class="">whenever I do ‘(asdf:load-system “osicat”) it seems to recompile the cffi-grovel-files and their dependencies.</div><div class=""><br class=""></div><div class="">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?</div><div class=""><br class=""></div><div class="">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.</div><div class="">If not,  I can try to fix osicat.   </div><div class=""><br class=""></div><div class="">Here are some of the compilation messages: <a href="https://pastebin.com/GKArFCWc" class="">https://pastebin.com/GKArFCWc</a> </div><div class=""><br class=""></div><div class="">JK</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div></div></div></blockquote></div><br class=""></div></div></div></div></blockquote></div><br class=""></div></body></html>