From: Johannes W. <ha...@sa...> - 2007-11-30 11:03:42
|
Hi, right now, ASDF recompiles every Lisp source file when the corresponding .fasl file is not strictly newer (greater mtime value) then the .lisp. I noticed it when I built an SBCL package for CRUX Linux [1] because all mtimes get touched on package installation. When requiring the contrib/sb-* libraries ASDF then triggers a recompilation of them. This is bad. The following patch makes ASDF only force recompilation when the .fasl is actually older than the .lisp. Note: CC'd to cclan-list also, but I am not subscribed and have no idea if this is still the right list. Hannes [1] http://crux.nu/ --- asdf/asdf.lisp.~1.110.~ 2007-09-27 15:15:06.000000000 +0200 +++ asdf/asdf.lisp 2007-11-29 15:03:44.000000000 +0100 @@ -644,8 +644,8 @@ (t (and (every #'probe-file out-files) - (> (apply #'min (mapcar #'file-write-date out-files)) - (apply #'max (mapcar #'fwd-or-return-t in-files))))))))) + (>= (apply #'min (mapcar #'file-write-date out-files)) + (apply #'max (mapcar #'fwd-or-return-t in-files))))))))) ;;; So you look at this code and think "why isn't it a bunch of ;;; methods". And the answer is, because standard method combination |
From: Andreas F. <as...@bo...> - 2007-11-30 12:08:12
|
On Nov 30, 2007, at 11:57, Johannes Weiner wrote: > --- asdf/asdf.lisp.~1.110.~ 2007-09-27 15:15:06.000000000 +0200 > +++ asdf/asdf.lisp 2007-11-29 15:03:44.000000000 +0100 > @@ -644,8 +644,8 @@ > (t > (and > (every #'probe-file out-files) > - (> (apply #'min (mapcar #'file-write-date out-files)) > - (apply #'max (mapcar #'fwd-or-return-t in- > files))))))))) > + (>= (apply #'min (mapcar #'file-write-date out-files)) > + (apply #'max (mapcar #'fwd-or-return-t in- > files))))))))) I'm sure we can agree on CRUX linux being at fault here (touching files when installing them strikes me as a very odd thing to do), but I don't think this patch is the way to go. It's somewhat easy to (manually, even) save a lisp file in the same second its .fasl file is written, which will make ASDF think the file is up to date while it really isn't. So, I'd prefer to keep that check at a strict #'>, and fix CRUX Linux only. Cheers, -- Andreas Fuchs, (http://|im:asf@|mailto:asf@)boinkor.net, antifuchs |
From: Johannes W. <ha...@sa...> - 2007-11-30 12:54:51
|
Dear SBCL department, Andreas Fuchs <as...@bo...> writes: > I'm sure we can agree on CRUX linux being at fault here (touching > files when installing them strikes me as a very odd thing to do), but > I don't think this patch is the way to go. > > It's somewhat easy to (manually, even) save a lisp file in the same > second its .fasl file is written, which will make ASDF think the file > is up to date while it really isn't. So, I'd prefer to keep that check > at a strict #'>, and fix CRUX Linux only. Thank you for coming up with a counter example. As I already agreed upon with you on IRC, CRUX should be fixed here in any case and I am fine with keeping ASDF as it is. Hannes |
From: Daniel H. <dhe...@te...> - 2007-12-01 07:38:55
|
On Fri, 30 Nov 2007, Johannes Weiner wrote: > Andreas Fuchs <as...@bo...> writes: >> I'm sure we can agree on CRUX linux being at fault here (touching >> files when installing them strikes me as a very odd thing to do), but >> I don't think this patch is the way to go. >> >> It's somewhat easy to (manually, even) save a lisp file in the same >> second its .fasl file is written, which will make ASDF think the file >> is up to date while it really isn't. So, I'd prefer to keep that check >> at a strict #'>, and fix CRUX Linux only. > > Thank you for coming up with a counter example. As I already agreed > upon with you on IRC, CRUX should be fixed here in any case and I am > fine with keeping ASDF as it is. Timestamps are notoriously unreliable on NFS mounts and other places. Is there an option to have ASDF check MD5/SHA1 hashes of the source files instead of relying on timestamps? Hashes are a slower but more reliable. - Daniel |