1
|
1
|
;;; -*- mode: Lisp; Base: 10 ; Syntax: ANSI-Common-Lisp ; buffer-read-only: t; -*-
|
2
|
|
-;;; This is ASDF 3.3.0: Another System Definition Facility.
|
|
2
|
+;;; This is ASDF 3.3.1: Another System Definition Facility.
|
3
|
3
|
;;;
|
4
|
4
|
;;; Feedback, bug reports, and patches are all welcome:
|
5
|
5
|
;;; please mail to <asdf-devel@common-lisp.net>.
|
... |
... |
@@ -1030,9 +1030,9 @@ Return a string made of the parts not omitted or emitted by FROB." |
1030
|
1030
|
#:string-prefix-p #:string-enclosed-p #:string-suffix-p
|
1031
|
1031
|
#:standard-case-symbol-name #:find-standard-case-symbol ;; symbols
|
1032
|
1032
|
#:coerce-class ;; CLOS
|
1033
|
|
- #:stamp< #:stamps< #:stamp*< #:stamp<= ;; stamps
|
1034
|
|
- #:earlier-stamp #:stamps-earliest #:earliest-stamp
|
1035
|
|
- #:later-stamp #:stamps-latest #:latest-stamp #:latest-stamp-f
|
|
1033
|
+ #:timestamp< #:timestamps< #:timestamp*< #:timestamp<= ;; timestamps
|
|
1034
|
+ #:earlier-timestamp #:timestamps-earliest #:earliest-timestamp
|
|
1035
|
+ #:later-timestamp #:timestamps-latest #:latest-timestamp #:latest-timestamp-f
|
1036
|
1036
|
#:list-to-hash-set #:ensure-gethash ;; hash-table
|
1037
|
1037
|
#:ensure-function #:access-at #:access-at-count ;; functions
|
1038
|
1038
|
#:call-function #:call-functions #:register-hook-function
|
... |
... |
@@ -1380,11 +1380,11 @@ If optional ERROR argument is NIL, return NIL instead of an error when the symbo |
1380
|
1380
|
(string (standard-case-symbol-name package-designator)))
|
1381
|
1381
|
error)))
|
1382
|
1382
|
|
1383
|
|
-;;; stamps: a REAL or a boolean where T=-infinity, NIL=+infinity
|
|
1383
|
+;;; timestamps: a REAL or a boolean where T=-infinity, NIL=+infinity
|
1384
|
1384
|
(eval-when (#-lispworks :compile-toplevel :load-toplevel :execute)
|
1385
|
|
- (deftype stamp () '(or real boolean)))
|
|
1385
|
+ (deftype timestamp () '(or real boolean)))
|
1386
|
1386
|
(with-upgradability ()
|
1387
|
|
- (defun stamp< (x y)
|
|
1387
|
+ (defun timestamp< (x y)
|
1388
|
1388
|
(etypecase x
|
1389
|
1389
|
((eql t) (not (eql y t)))
|
1390
|
1390
|
(real (etypecase y
|
... |
... |
@@ -1392,16 +1392,16 @@ If optional ERROR argument is NIL, return NIL instead of an error when the symbo |
1392
|
1392
|
(real (< x y))
|
1393
|
1393
|
(null t)))
|
1394
|
1394
|
(null nil)))
|
1395
|
|
- (defun stamps< (list) (loop :for y :in list :for x = nil :then y :always (stamp< x y)))
|
1396
|
|
- (defun stamp*< (&rest list) (stamps< list))
|
1397
|
|
- (defun stamp<= (x y) (not (stamp< y x)))
|
1398
|
|
- (defun earlier-stamp (x y) (if (stamp< x y) x y))
|
1399
|
|
- (defun stamps-earliest (list) (reduce 'earlier-stamp list :initial-value nil))
|
1400
|
|
- (defun earliest-stamp (&rest list) (stamps-earliest list))
|
1401
|
|
- (defun later-stamp (x y) (if (stamp< x y) y x))
|
1402
|
|
- (defun stamps-latest (list) (reduce 'later-stamp list :initial-value t))
|
1403
|
|
- (defun latest-stamp (&rest list) (stamps-latest list))
|
1404
|
|
- (define-modify-macro latest-stamp-f (&rest stamps) latest-stamp))
|
|
1395
|
+ (defun timestamps< (list) (loop :for y :in list :for x = nil :then y :always (timestamp< x y)))
|
|
1396
|
+ (defun timestamp*< (&rest list) (timestamps< list))
|
|
1397
|
+ (defun timestamp<= (x y) (not (timestamp< y x)))
|
|
1398
|
+ (defun earlier-timestamp (x y) (if (timestamp< x y) x y))
|
|
1399
|
+ (defun timestamps-earliest (list) (reduce 'earlier-timestamp list :initial-value nil))
|
|
1400
|
+ (defun earliest-timestamp (&rest list) (timestamps-earliest list))
|
|
1401
|
+ (defun later-timestamp (x y) (if (timestamp< x y) y x))
|
|
1402
|
+ (defun timestamps-latest (list) (reduce 'later-timestamp list :initial-value t))
|
|
1403
|
+ (defun latest-timestamp (&rest list) (timestamps-latest list))
|
|
1404
|
+ (define-modify-macro latest-timestamp-f (&rest timestamps) latest-timestamp))
|
1405
|
1405
|
|
1406
|
1406
|
|
1407
|
1407
|
;;; Function designators
|
... |
... |
@@ -1669,7 +1669,7 @@ message, that takes the functionality as its first argument (that can be skipped |
1669
|
1669
|
(in-package :uiop/version)
|
1670
|
1670
|
|
1671
|
1671
|
(with-upgradability ()
|
1672
|
|
- (defparameter *uiop-version* "3.3.0")
|
|
1672
|
+ (defparameter *uiop-version* "3.3.1")
|
1673
|
1673
|
|
1674
|
1674
|
(defun unparse-version (version-list)
|
1675
|
1675
|
"From a parsed version (a list of natural numbers), compute the version string"
|
... |
... |
@@ -6753,6 +6753,9 @@ or whether it's already taken care of by the implementation's underlying run-pro |
6753
|
6753
|
"A portable abstraction of a low-level call to libc's system()."
|
6754
|
6754
|
(declare (ignorable keys directory input if-input-does-not-exist output
|
6755
|
6755
|
if-output-exists error-output if-error-output-exists))
|
|
6756
|
+ (when (member :stream (list input output error-output))
|
|
6757
|
+ (parameter-error "~S: ~S is not allowed as synchronous I/O redirection argument"
|
|
6758
|
+ 'run-program :stream))
|
6756
|
6759
|
#+(or abcl allegro clozure cmucl ecl (and lispworks os-unix) mkcl sbcl scl)
|
6757
|
6760
|
(let (#+(or abcl ecl mkcl)
|
6758
|
6761
|
(version (parse-version
|
... |
... |
@@ -7503,7 +7506,7 @@ previously-loaded version of ASDF." |
7503
|
7506
|
;; "3.4.5.67" would be a development version in the official branch, on top of 3.4.5.
|
7504
|
7507
|
;; "3.4.5.0.8" would be your eighth local modification of official release 3.4.5
|
7505
|
7508
|
;; "3.4.5.67.8" would be your eighth local modification of development version 3.4.5.67
|
7506
|
|
- (asdf-version "3.3.0")
|
|
7509
|
+ (asdf-version "3.3.1")
|
7507
|
7510
|
(existing-version (asdf-version)))
|
7508
|
7511
|
(setf *asdf-version* asdf-version)
|
7509
|
7512
|
(when (and existing-version (not (equal asdf-version existing-version)))
|
... |
... |
@@ -9801,7 +9804,7 @@ unless identically to toplevel" |
9801
|
9804
|
(defmethod record-dependency ((plan sequential-plan) (o operation) (c component))
|
9802
|
9805
|
(values)))
|
9803
|
9806
|
|
9804
|
|
-(when-upgrading (:version "3.2.1")
|
|
9807
|
+(when-upgrading (:version "3.3.0")
|
9805
|
9808
|
(defmethod initialize-instance :after ((plan plan-traversal) &key &allow-other-keys)))
|
9806
|
9809
|
|
9807
|
9810
|
|
... |
... |
@@ -9889,7 +9892,7 @@ or NIL if no the status is considered outside of a specific plan.")) |
9889
|
9892
|
"Return the earliest status later than both status1 and status2"
|
9890
|
9893
|
(make-action-status
|
9891
|
9894
|
:bits (logand (status-bits status1) (status-bits status2))
|
9892
|
|
- :stamp (latest-stamp (status-stamp status1) (status-stamp status2))
|
|
9895
|
+ :stamp (latest-timestamp (status-stamp status1) (status-stamp status2))
|
9893
|
9896
|
:level (min (status-level status1) (status-level status2))
|
9894
|
9897
|
:index (or (status-index status1) (status-index status2))))
|
9895
|
9898
|
|
... |
... |
@@ -10042,22 +10045,22 @@ initialized with SEED." |
10042
|
10045
|
(in-files (input-files o c))
|
10043
|
10046
|
(in-stamps (mapcar #'get-file-stamp in-files))
|
10044
|
10047
|
(missing-in (loop :for f :in in-files :for s :in in-stamps :unless s :collect f))
|
10045
|
|
- (latest-in (stamps-latest (cons dep-stamp in-stamps))))
|
|
10048
|
+ (latest-in (timestamps-latest (cons dep-stamp in-stamps))))
|
10046
|
10049
|
(when (and missing-in (not just-done)) (return (values nil nil))))
|
10047
|
10050
|
(let* (;; collect timestamps from outputs, and exit early if any is missing
|
10048
|
10051
|
(out-files (remove-if 'null (output-files o c)))
|
10049
|
10052
|
(out-stamps (mapcar (if just-done 'register-file-stamp 'get-file-stamp) out-files))
|
10050
|
10053
|
(missing-out (loop :for f :in out-files :for s :in out-stamps :unless s :collect f))
|
10051
|
|
- (earliest-out (stamps-earliest out-stamps)))
|
|
10054
|
+ (earliest-out (timestamps-earliest out-stamps)))
|
10052
|
10055
|
(when (and missing-out (not just-done)) (return (values nil nil))))
|
10053
|
10056
|
(let (;; Time stamps from the files at hand, and whether any is missing
|
10054
|
10057
|
(all-present (not (or missing-in missing-out)))
|
10055
|
10058
|
;; Has any input changed since we last generated the files?
|
10056
|
|
- ;; Note that we use stamp<= instead of stamp< to play nice with generated files.
|
|
10059
|
+ ;; Note that we use timestamp<= instead of timestamp< to play nice with generated files.
|
10057
|
10060
|
;; Any race condition is intrinsic to the limited timestamp resolution.
|
10058
|
|
- (up-to-date-p (stamp<= latest-in earliest-out))
|
|
10061
|
+ (up-to-date-p (timestamp<= latest-in earliest-out))
|
10059
|
10062
|
;; If everything is up to date, the latest of inputs and outputs is our stamp
|
10060
|
|
- (done-stamp (stamps-latest (cons latest-in out-stamps))))
|
|
10063
|
+ (done-stamp (timestamps-latest (cons latest-in out-stamps))))
|
10061
|
10064
|
;; Warn if some files are missing:
|
10062
|
10065
|
;; either our model is wrong or some other process is messing with our files.
|
10063
|
10066
|
(when (and just-done (not all-present))
|
... |
... |
@@ -10686,14 +10689,16 @@ the implementation's REQUIRE rather than by internal ASDF mechanisms.")) |
10686
|
10689
|
(assert (equal (coerce-name s) (primary-system-name s)))
|
10687
|
10690
|
(nest
|
10688
|
10691
|
(if-let ((pathname (first (input-files o s)))))
|
|
10692
|
+ (let ((readtable *readtable*) ;; save outer syntax tables. TODO: proper syntax-control
|
|
10693
|
+ (print-pprint-dispatch *print-pprint-dispatch*)))
|
10689
|
10694
|
(with-standard-io-syntax)
|
10690
|
10695
|
(let ((*print-readably* nil)
|
10691
|
10696
|
;; Note that our backward-compatible *readtable* is
|
10692
|
10697
|
;; a global readtable that gets globally side-effected. Ouch.
|
10693
|
10698
|
;; Same for the *print-pprint-dispatch* table.
|
10694
|
10699
|
;; We should do something about that for ASDF3 if possible, or else ASDF4.
|
10695
|
|
- (*readtable* *readtable*)
|
10696
|
|
- (*print-pprint-dispatch* *print-pprint-dispatch*)
|
|
10700
|
+ (*readtable* readtable) ;; restore inside syntax table
|
|
10701
|
+ (*print-pprint-dispatch* print-pprint-dispatch)
|
10697
|
10702
|
(*package* (find-package :asdf-user))
|
10698
|
10703
|
(*default-pathname-defaults*
|
10699
|
10704
|
;; resolve logical-pathnames so they won't wreak havoc in parsing namestrings.
|
... |
... |
@@ -10837,7 +10842,7 @@ PREVIOUS-TIME when not null is the time at which the PREVIOUS system was loaded. |
10837
|
10842
|
(let ((o (make-operation 'define-op)))
|
10838
|
10843
|
(multiple-value-bind (stamp done-p)
|
10839
|
10844
|
(compute-action-stamp plan o system)
|
10840
|
|
- (return (and (stamp<= stamp (component-operation-time o system))
|
|
10845
|
+ (return (and (timestamp<= stamp (component-operation-time o system))
|
10841
|
10846
|
done-p)))))
|
10842
|
10847
|
(system-out-of-date () nil)))
|
10843
|
10848
|
|
... |
... |
@@ -10864,7 +10869,7 @@ PREVIOUS-TIME when not null is the time at which the PREVIOUS system was loaded. |
10864
|
10869
|
(pathname-equal
|
10865
|
10870
|
(physicalize-pathname pathname)
|
10866
|
10871
|
(physicalize-pathname previous-pathname))))
|
10867
|
|
- (stamp<= stamp previous-time)
|
|
10872
|
+ (timestamp<= stamp previous-time)
|
10868
|
10873
|
;; TODO: check that all dependencies are up-to-date.
|
10869
|
10874
|
;; This necessitates traversing them without triggering
|
10870
|
10875
|
;; the adding of nodes to the plan.
|