[asdf-devel] ASDF:OOS LOAD-OP :FORCE T and SBCL contribs

Nikodemus Siivola nikodemus at random-state.net
Tue May 12 07:16:45 UTC 2009


2009/5/12 Robert Goldman <rpgoldman at sift.info>:

>> I agree. There are probably two items here:
>>
>> 1. Allowing a system definer to say "don't descend into this sub-system"
>> even when :force is t.

Instead of (or in addition to) #1 I think there is call for a way to
user (or sysadmin, etc) say "don't recompile these systems".

Consider a shared installation of lisp libraries under /usr/local/asdf/:

(defvar *ro-systems* (directory "/usr/local/lib/asdf/*.asd"))

(defmethod traverse :before ((o compile-op) (s system))
  (when (and (operation-forced o)
             (member (system-definition-pathname s) *ro-systems* :test #'equal))
    (warn "Ignoring :FORCE T for COMPILE-OP of system installed in ~
          /usr/local/asdf/: ~:@(~A~)."
          (component-name c))
    (setf (operation-forced o) nil)))

>> For #1, I'd suggest adding a slot to system that controls how force
>> behaves. Ideas include
>>
>>     * read-only (to mean that the system cannot be edited or recompiled.)
>>     * ignore-force (to mean, well, ignore force).

I think both of these are fairly limited in scope: libraries installed
along with lisp implementations and libraries which break horribly
upon recompilation seem like the only ones which should use these, and
in in case of implementations installing 3rd-party libraries they
should not really be editing the system -- so a protocol extensions
seems necessary even in the presence of these options / slots.

>> For #2, I'd suggest using
>>
>> * recompile everything
>>
>>     * :force t
>>     * :force :descend
>>
>> * recompile only the current system
>>
>>     * :force :system-only

Should there be a way for user to say "reload everything despite the
timestamps, but don't recompile anything"?

Cheers,

 -- Nikodemus




More information about the asdf-devel mailing list