~ chicken-core (chicken-5) 5e1f084106649b14b092b943b08e3c4869cd84ba


commit 5e1f084106649b14b092b943b08e3c4869cd84ba
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Mon May 21 11:18:27 2018 +0200
Commit:     Kooda <kooda@upyum.com>
CommitDate: Sun May 27 00:01:38 2018 +0200

    Correct handling of dependencies and introduce distinct names of egg properties
    
    - Fixes a misplaced paren in the "scheme-include" case in egg-compile.scm
    - properly check in egg-file validation that toplevel properties are not used in
       non-toplevel contexts
    - rename the component-specific "dependencies" property to
       "component-dependencies", added "source-dependencies"
    
    Signed-off-by: Kooda <kooda@upyum.com>

diff --git a/chicken-install.scm b/chicken-install.scm
index e5753cbd..f2b07827 100644
--- a/chicken-install.scm
+++ b/chicken-install.scm
@@ -167,6 +167,8 @@
     (license #t #f #f)
     (version #t #f #f ,egg-version?)
     (dependencies #t #f #f ,list?)
+    (source-dependencies #f #f #f ,list?)
+    (component-dependencies #f #f #f ,list?)
     (test-dependencies #t #f #f ,list?)
     (build-dependencies #t #f #f ,list?)
     (components #t #t #f)
@@ -204,16 +206,18 @@
               ((assq (car item) egg-info-items) =>
                (lambda (a)
                  (apply (lambda (_ toplevel nested named #!optional validator)
-                          (when (and top? (not toplevel))
-                            (error "egg information item not allowed at toplevel" 
-                                   item))
-                          (when (and named
-                                     (or (null? (cdr item))
-                                         (not (symbol? (cadr item)))))
-                            (error "unnamed egg information item" item))
-                          (when (and validator
-                                     (not (validator (cdr item))))
-                            (error "egg information item has invalid structure" item))
+                          (cond ((and top? (not toplevel))
+                                 (error "egg information item not allowed at toplevel" 
+                                        item))
+                                ((and toplevel (not top?))
+                                 (error "egg information item only allowed at toplevel" item))
+                                ((and named
+                                      (or (null? (cdr item))
+                                          (not (symbol? (cadr item)))))
+                                 (error "unnamed egg information item" item))
+                                ((and validator
+                                      (not (validator (cdr item))))
+                                 (error "egg information item has invalid structure" item)))
                           (when nested
                             (validate (if named (cddr item) (cdr item)) #f)))
                         a)))
diff --git a/egg-compile.scm b/egg-compile.scm
index 950c4ae5..d3410da4 100644
--- a/egg-compile.scm
+++ b/egg-compile.scm
@@ -135,7 +135,8 @@
         (oname #f)
         (link '())
         (dest #f)
-        (deps '())
+        (sdeps '())
+        (cdeps '())
         (lopts '())
         (opts '())
         (mods #f)
@@ -156,7 +157,8 @@
       (case (car info)
         ((extension)
           (fluid-let ((target (check-target (cadr info) exts))
-                      (deps '())
+                      (cdeps '())
+                      (sdeps '())
                       (src #f)
                       (cbuild #f)
                       (link default-extension-linkage)
@@ -187,11 +189,12 @@
                     '())
                 (import-libraries mods dest rtarget mode))
               (set! exts
-                (cons (list target dependencies: deps source: src options: opts
+                (cons (list target dependencies: cdeps source: src options: opts
                             link-options: lopts linkage: link custom: cbuild
                             mode: mode types-file: tfile inline-file: ifile
                             predefined-types: ptfile eggfile: eggfile
                             modules: (or mods (list rtarget))
+                            source-dependencies: sdeps
                             output-file: rtarget)
                     exts)))))
         ((data)
@@ -213,12 +216,12 @@
           (fluid-let ((target (check-target (cadr info) data))
                       (src #f)
                       (cbuild #f)
-                      (deps '()))
+                      (cdeps '()))
             (for-each compile-extension/program (cddr info))
             (unless cbuild
               (error "generated source files need a custom build step" target))
             (set! genfiles
-              (cons (list target dependencies: deps source: src custom: cbuild)
+              (cons (list target dependencies: cdeps source: src custom: cbuild)
                     genfiles))))
         ((c-include)
           (fluid-let ((target (check-target (cadr info) cinc))
@@ -237,7 +240,7 @@
                     cinc))))            
         ((scheme-include)
           (fluid-let ((target (check-target (cadr info) scminc))
-                      (dest #f))
+                      (dest #f)
                       (files '()))
             (for-each compile-data/include (cddr info))
             (let* ((dest (or dest
@@ -249,10 +252,11 @@
             (set! scminc 
               (cons (list target dependencies: '() files: files 
                           destination: dest mode: mode) 
-                    scminc)))          
+                    scminc))))     
         ((program)
           (fluid-let ((target (check-target (cadr info) prgs))
-                      (deps '())
+                      (cdeps '())
+                      (sdeps '())
                       (cbuild #f)
                       (src #f)
                       (link default-program-linkage)
@@ -267,9 +271,13 @@
                   (rtarget (or oname target)))
               (addfiles (list (conc dest "/" rtarget exeext)))
 	      (set! prgs
-		(cons (list target dependencies: deps source: src options: opts
-			    link-options: lopts linkage: link custom: cbuild
-			    mode: mode output-file: rtarget eggfile: eggfile)
+		(cons (list target dependencies: cdeps 
+                            source: src options: opts
+			    link-options: lopts linkage: link 
+                            custom: cbuild
+			    mode: mode output-file: rtarget 
+                            source-dependencies: sdeps
+                            eggfile: eggfile)
 		      prgs)))))
         (else (compile-common info compile-component))))
     (define (compile-extension/program info)
@@ -300,8 +308,10 @@
          (set! oname (->string (arg info 1 name?))))
         ((modules)
          (set! mods (map ->string (cdr info))))
-        ((dependencies)
-         (set! deps (append deps (map ->dep (cdr info)))))
+        ((component-dependencies)
+         (set! cdeps (append cdeps (map ->dep (cdr info)))))
+        ((source-dependencies)
+         (set! sdeps (append sdeps (map ->dep (cdr info)))))
         (else (compile-common info compile-extension/program))))
     (define (compile-common info walk)
       (case (car info)
@@ -441,7 +451,8 @@
 
 ;;; shell code generation - build operations
 
-(define ((compile-static-extension name #!key mode dependencies
+(define ((compile-static-extension name #!key mode 
+                                   source-dependencies
                                    source (options '())
                                    predefined-types eggfile
                                    custom types-file inline-file)
@@ -481,11 +492,12 @@
            " " src " -o " out " : "
            src " " (quotearg eggfile) " "
            (if custom (quotearg cmd) "") " "
-           (filelist srcdir dependencies))))
+           (filelist srcdir source-dependencies))))
 
-(define ((compile-dynamic-extension name #!key mode dependencies mode
+(define ((compile-dynamic-extension name #!key mode mode
                                     source (options '()) (link-options '()) 
                                     predefined-types eggfile
+                                    source-dependencies
                                     custom types-file inline-file)
          srcdir platform)
   (let* ((cmd (or (and custom (prefix srcdir custom))
@@ -516,9 +528,10 @@
            (arglist link-options) " " src " -o " out " : "
            src " " (quotearg eggfile) " "
            (if custom (quotearg cmd) "") " "
-           (filelist srcdir dependencies))))
+           (filelist srcdir source-dependencies))))
 
-(define ((compile-import-library name #!key dependencies mode
+(define ((compile-import-library name #!key mode
+                                 source-dependencies
                                  (options '()) (link-options '())
                                  custom)
          srcdir platform)
@@ -538,11 +551,12 @@
            (if (eq? mode 'host) " -host" "")
            " -I " srcdir " -C -I" srcdir (arglist opts)
            (arglist link-options) " " src " -o " out " : "
-           src (filelist srcdir dependencies))))
+           src (filelist srcdir source-dependencies))))
 
-(define ((compile-dynamic-program name #!key dependencies source mode
-                                     (options '()) (link-options '())
-                                     custom eggfile)
+(define ((compile-dynamic-program name #!key source mode
+                                  (options '()) (link-options '())
+                                  source-dependencies
+                                  custom eggfile)
          srcdir platform)
   (let* ((cmd (or (and custom (prefix srcdir custom))
                   default-csc))
@@ -565,11 +579,12 @@
            (arglist link-options) " " src " -o " out " : "
            src " " (quotearg eggfile) " "
            (if custom (quotearg cmd) "") " "
-           (filelist srcdir dependencies))))
+           (filelist srcdir source-dependencies))))
 
-(define ((compile-static-program name #!key dependencies source
-                                    (options '()) (link-options '())
-                                    custom mode eggfile)
+(define ((compile-static-program name #!key source
+                                 (options '()) (link-options '())
+                                 source-dependencies
+                                 custom mode eggfile)
          srcdir platform)
   (let* ((cmd (or (and custom (prefix srcdir custom))
                   default-csc))
@@ -592,9 +607,10 @@
            (arglist link-options) " " src " -o " out " : "
            src " " (quotearg eggfile) " "
            (if custom (quotearg cmd) "") " "
-           (filelist srcdir dependencies))))
+           (filelist srcdir source-dependencies))))
 
-(define ((compile-generated-file name #!key dependencies source custom) 
+(define ((compile-generated-file name #!key source 
+                                 custom source-dependencies) 
          srcdir platform)
   (let* ((cmd (prefix srcdir custom))
          (sname (prefix srcdir name))
@@ -604,7 +620,7 @@
       (prepare-custom-command cmd platform))
     (print "\n" (slashify default-builder platform)
            " " out " " cmd " : " cmd " "
-           (filelist srcdir dependencies))))
+           (filelist srcdir source-dependencies))))
 
 
 ;; installation operations
Trap