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
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
@@ -95,6 +95,7 @@
            #:missing-component
            #:missing-dependency
            #:circular-dependency        ; errors
+           #:duplicate-names
 
            #:retry
            #:accept                     ; restarts
 
 (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
@@ -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 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)
@@ -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)
+
+    (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
@@ -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
-                      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
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
 
+# 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
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".)
-"0.9.4.17"
+"0.9.4.18"