~ chicken-core (chicken-5) b45930ff0485e03b1eebea479b01f8fd5324a78a
commit b45930ff0485e03b1eebea479b01f8fd5324a78a
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Jun 1 11:30:45 2017 +0200
Commit: Mario Domenech Goulart <mario@parenteses.org>
CommitDate: Fri Jun 2 19:40:28 2017 +0200
chicken-install: add modules property to selectively build/install import libraries
Signed-off-by: Mario Domenech Goulart <mario@parenteses.org>
diff --git a/egg-compile.scm b/egg-compile.scm
index 7ba5f76e..1a2112e3 100644
--- a/egg-compile.scm
+++ b/egg-compile.scm
@@ -96,6 +96,19 @@
(error "cyclic dependencies" dag))))
+;;; collect import libraries for all modules
+
+(define (import-libraries mods dest rtarget mode)
+ (define (implib name)
+ (conc dest "/" name ".import."
+ (if (uses-compiled-import-library? mode)
+ "so"
+ "scm")))
+ (if mods
+ (map implib mods)
+ (list (implib rtarget))))
+
+
;;; compile an egg-information tree into abstract build/install operations
(define (compile-egg-info info platform mode)
@@ -116,6 +129,7 @@
(deps '())
(lopts '())
(opts '())
+ (mods #f)
(tfile #f)
(ifile #f)
(objext (object-extension platform))
@@ -141,6 +155,7 @@
(ifile #f)
(lopts '())
(oname #f)
+ (mods #f)
(opts '()))
(for-each compile-extension/program (cddr info))
(let ((dest (destination-repository mode #t))
@@ -160,15 +175,14 @@
(if ifile
(list (conc dest "/" ifile ".inline"))
'())
- (list (if (uses-compiled-import-library? mode)
- (conc dest "/" rtarget ".import.so")
- (conc dest "/" rtarget ".import.scm")))))
- (set! exts
- (cons (list target dependencies: deps source: src options: opts
- link-options: lopts linkage: link custom: cbuild
- mode: mode types-file: tfile inline-file: ifile
- output-file: (or oname target))
- exts))))
+ (import-libraries mods dest rtarget mode))
+ (set! exts
+ (cons (list target dependencies: deps source: src options: opts
+ link-options: lopts linkage: link custom: cbuild
+ mode: mode types-file: tfile inline-file: ifile
+ modules: (or mods (list rtarget))
+ output-file: rtarget)
+ exts)))))
((data)
(fluid-let ((target (check-target (cadr info) data))
(dest #f)
@@ -244,7 +258,7 @@
(set! prgs
(cons (list target dependencies: deps source: src options: opts
link-options: lopts linkage: link custom: cbuild
- mode: mode output-file: rtarget)
+ mode: mode output-file: oname)
prgs)))))))
(define (compile-extension/program info)
(case (car info)
@@ -268,6 +282,8 @@
(set! src (->string (arg info 1 name?))))
((install-name)
(set! oname (->string (arg info 1 name?))))
+ ((modules)
+ (set! mods (map ->string (cdr info))))
((dependencies)
(set! deps (append deps (map ->dep (cdr info)))))))
(define (compile-data/include info)
@@ -326,7 +342,8 @@
(lambda (id)
(cond ((assq id exts) =>
(lambda (data)
- (let ((link (get-keyword linkage: (cdr data))))
+ (let ((link (get-keyword linkage: (cdr data)))
+ (mods (get-keyword modules: (cdr data))))
(append (if (memq 'dynamic link)
(list (apply compile-dynamic-extension data))
'())
@@ -336,7 +353,10 @@
(list (apply compile-static-extension data))
'())
(if (uses-compiled-import-library? mode)
- (list (apply compile-import-library data))
+ (map (lambda (mod)
+ (apply compile-import-library
+ mod (cdr data))) ; override name
+ mods)
'())))))
((assq id prgs) =>
(lambda (data)
@@ -355,7 +375,8 @@
(append
(append-map
(lambda (ext)
- (let ((link (get-keyword linkage: (cdr ext))))
+ (let ((link (get-keyword linkage: (cdr ext)))
+ (mods (get-keyword modules: (cdr ext))))
(append
(if (memq 'static link)
(list (apply install-static-extension ext))
@@ -364,8 +385,14 @@
(list (apply install-dynamic-extension ext))
'())
(if (uses-compiled-import-library? (get-keyword mode: ext))
- (list (apply install-import-library ext))
- (list (apply install-import-library-source ext)))
+ (map (lambda (mod)
+ (apply install-import-library
+ mod (cdr ext))) ; override name
+ mods)
+ (map (lambda (mod)
+ (apply install-import-library-source
+ mod (cdr ext))) ; s.a.
+ mods))
(if (get-keyword types-file: (cdr ext))
(list (apply install-types-file ext))
'())
@@ -551,13 +578,13 @@
(print dcmd " " ddir destf))
(print cmd " " out " " ddir destf)))
-(define ((install-import-library name #!key mode output-file)
+(define ((install-import-library name #!key mode)
srcdir platform)
((install-dynamic-extension name mode: mode ext: ".import.so"
- output-file: output-file)
+ output-file: name)
srcdir platform))
-(define ((install-import-library-source name #!key mode output-file)
+(define ((install-import-library-source name #!key mode)
srcdir platform)
(let* ((cmd (install-file-command platform))
(mkdir (mkdir-command platform))
@@ -568,7 +595,7 @@
(ddir (shell-variable "DESTDIR" platform)))
(print "\n" mkdir " " ddir dfile)
(print cmd " " out " " ddir
- (quotearg (slashify (conc dest "/" output-file ".import.scm")
+ (quotearg (slashify (conc dest "/" name ".import.scm")
platform)))))
(define ((install-types-file name #!key mode types-file)
Trap