0.9.4.18:
authorChristophe Rhodes <csr21@cam.ac.uk>
Wed, 31 Aug 2005 14:43:43 +0000 (14:43 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Wed, 31 Aug 2005 14:43:43 +0000 (14:43 +0000)
MORE POLICY
... upgrade asdf to upstream HEAD
... make canonicalize-whitespace-1 not touch the file if it
doesn't need touching
... automatically run canonicalize-whitespace as part of make.sh
(this is potentially controversial, as it takes a
non-trivial amount of time, and also potentially
scribbles over files which the unwary developer has
open.  Better, automatic solutions are still being
sought)

contrib/asdf/README
contrib/asdf/asdf.lisp
make.sh
tools-for-build/canonicalize-whitespace-1
version.lisp-expr

index 1847095..e22e6f1 100644 (file)
@@ -1,4 +1,4 @@
-$Id$         -*- Text -*-
+README,v 1.38 2004/07/19 21:18:07 crhodes Exp         -*- Text -*-
 
 The canonical documentation for asdf is in the file asdf.texinfo.  
 The significant overlap between this file and that will one day be
 
 The canonical documentation for asdf is in the file asdf.texinfo.  
 The significant overlap between this file and that will one day be
index f328354..7cec55b 100644 (file)
@@ -1,4 +1,4 @@
-;;; This is asdf: Another System Definition Facility.  $Revision$
+;;; This is asdf: Another System Definition Facility.  1.87
 ;;;
 ;;; Feedback, bug reports, and patches are all welcome: please mail to
 ;;; <cclan-list@lists.sf.net>.  But note first that the canonical
 ;;;
 ;;; Feedback, bug reports, and patches are all welcome: please mail to
 ;;; <cclan-list@lists.sf.net>.  But note first that the canonical
@@ -95,6 +95,7 @@
            #:missing-component
            #:missing-dependency
            #:circular-dependency        ; errors
            #:missing-component
            #:missing-dependency
            #:circular-dependency        ; errors
+           #:duplicate-names
 
            #:retry
            #:accept                     ; restarts
 
            #:retry
            #:accept                     ; restarts
 
 (in-package #:asdf)
 
 
 (in-package #:asdf)
 
-(defvar *asdf-revision* (let* ((v "$Revision$")
+(defvar *asdf-revision* (let* ((v "1.87")
                                (colon (or (position #\: v) -1))
                                (dot (position #\. v)))
                           (and v colon dot
                                (colon (or (position #\: v) -1))
                                (dot (position #\. v)))
                           (and v colon dot
@@ -157,6 +158,9 @@ and NIL NAME and TYPE components"
 (define-condition circular-dependency (system-definition-error)
   ((components :initarg :components :reader circular-dependency-components)))
 
 (define-condition circular-dependency (system-definition-error)
   ((components :initarg :components :reader circular-dependency-components)))
 
+(define-condition duplicate-names (system-definition-error)
+  ((name :initarg :name :reader duplicate-names-name)))
+
 (define-condition missing-component (system-definition-error)
   ((requires :initform "(unnamed)" :reader missing-requires :initarg :requires)
    (version :initform nil :reader missing-version :initarg :version)
 (define-condition missing-component (system-definition-error)
   ((requires :initform "(unnamed)" :reader missing-requires :initarg :requires)
    (version :initform nil :reader missing-version :initarg :version)
@@ -930,6 +934,15 @@ Returns the new tree (which probably shares structure with the old one)"
               ;; list ends
               &allow-other-keys) options
     (check-component-input type name depends-on components in-order-to)
               ;; list ends
               &allow-other-keys) options
     (check-component-input type name depends-on components in-order-to)
+
+    (when (and parent
+             (find-component parent name)
+             ;; ignore the same object when rereading the defsystem
+             (not
+              (typep (find-component parent name)
+                     (class-for-type parent type))))
+      (error 'duplicate-names :name name))
+
     (let* ((other-args (remove-keys
                         '(components pathname default-component-class
                           perform explain output-files operation-done-p
     (let* ((other-args (remove-keys
                         '(components pathname default-component-class
                           perform explain output-files operation-done-p
@@ -958,7 +971,19 @@ Returns the new tree (which probably shares structure with the old one)"
                       for c = (parse-component-form ret c-form)
                       collect c
                       if serial
                       for c = (parse-component-form ret c-form)
                       collect c
                       if serial
-                      do (push (component-name c) *serial-depends-on*)))))
+                      do (push (component-name c) *serial-depends-on*))))
+
+        ;; check for duplicate names
+        (let ((name-hash (make-hash-table :test #'equalp)))
+          (loop for c in (module-components ret)
+                do
+                (if (gethash (component-name c)
+                             name-hash)
+                    (error 'duplicate-names
+                           :name (component-name c))
+                  (setf (gethash (component-name c)
+                                 name-hash)
+                        t)))))
 
       (setf (slot-value ret 'in-order-to)
             (union-of-dependencies
 
       (setf (slot-value ret 'in-order-to)
             (union-of-dependencies
diff --git a/make.sh b/make.sh
index 31cd52f..8826ede 100755 (executable)
--- a/make.sh
+++ b/make.sh
@@ -72,6 +72,9 @@ find_gnumake
 # and target machines.
 sh make-config.sh || exit 1
 
 # and target machines.
 sh make-config.sh || exit 1
 
+# Enforce the source policy for no bogus whitespace
+tools-for-build/canonicalize-whitespace || exit 1
+
 # The make-host-*.sh scripts are run on the cross-compilation host,
 # and the make-target-*.sh scripts are run on the target machine. In
 # ordinary compilation, we just do these phases consecutively on the
 # The make-host-*.sh scripts are run on the cross-compilation host,
 # and the make-target-*.sh scripts are run on the target machine. In
 # ordinary compilation, we just do these phases consecutively on the
index 1e33369..de19e97 100755 (executable)
Binary files a/tools-for-build/canonicalize-whitespace-1 and b/tools-for-build/canonicalize-whitespace-1 differ
index 07ccc54..e715610 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.9.4.17"
+"0.9.4.18"