From 7fba05cf8b247e6ddb0492bfacae911ee5c1d4dd Mon Sep 17 00:00:00 2001 From: felix Date: Sun, 29 Apr 2018 12:22:46 +0200 Subject: [PATCH] chicken-install: make extensions and programs dependent on the .egg file This was suggested by klm: during development, changing compiler options in the .egg file need to force recompilation. --- chicken-install.scm | 10 ++++++++-- egg-compile.scm | 23 ++++++++++++----------- egg-information.scm | 11 ++++++++--- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/chicken-install.scm b/chicken-install.scm index 5197e08a..e5753cbd 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -800,7 +800,10 @@ (when (or host-extension (and (not target-extension) (not host-extension))) - (let-values (((build install info) (compile-egg-info info platform 'host))) + (let-values (((build install info) (compile-egg-info eggfile + info + platform + 'host))) (check-installed-files name info) (let ((bscript (make-pathname dir name (build-script-extension 'host platform))) @@ -826,7 +829,10 @@ (not (test-egg egg platform))) (exit 2))))))) (when target-extension - (let-values (((build install info) (compile-egg-info info platform 'target))) + (let-values (((build install info) (compile-egg-info eggfile + info + platform + 'target))) (let ((bscript (make-pathname dir name (build-script-extension 'target platform))) (iscript (make-pathname dir name diff --git a/egg-compile.scm b/egg-compile.scm index 53e8213d..b42b1f1b 100644 --- a/egg-compile.scm +++ b/egg-compile.scm @@ -120,7 +120,7 @@ ;;; compile an egg-information tree into abstract build/install operations -(define (compile-egg-info info platform mode) +(define (compile-egg-info eggfile info platform mode) (let ((exts '()) (prgs '()) (data '()) @@ -142,6 +142,7 @@ (tfile #f) (ptfile #f) (ifile #f) + (eggfile (locate-egg-file eggfile)) (objext (object-extension platform)) (exeext (executable-extension platform))) (define (check-target t lst) @@ -189,7 +190,7 @@ (cons (list target dependencies: deps source: src options: opts link-options: lopts linkage: link custom: cbuild mode: mode types-file: tfile inline-file: ifile - predefined-types: ptfile + predefined-types: ptfile eggfile: eggfile modules: (or mods (list rtarget)) output-file: rtarget) exts))))) @@ -268,7 +269,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: rtarget eggfile: eggfile) prgs))))) (else (compile-common info compile-component)))) (define (compile-extension/program info) @@ -442,7 +443,7 @@ (define ((compile-static-extension name #!key mode dependencies source (options '()) - predefined-types + predefined-types eggfile custom types-file inline-file) srcdir platform) (let* ((cmd (or (and custom (prefix srcdir custom)) @@ -478,11 +479,11 @@ " -D compiling-static-extension" " -C -I" srcdir (arglist opts) " " src " -o " out " : " - src #;(arglist dependencies)))) + src " " (quotearg eggfile) #;(arglist dependencies)))) (define ((compile-dynamic-extension name #!key mode dependencies mode source (options '()) (link-options '()) - predefined-types + predefined-types eggfile custom types-file inline-file) srcdir platform) (let* ((cmd (or (and custom (prefix srcdir custom)) @@ -511,7 +512,7 @@ " -D compiling-extension -J -s" " -setup-mode -I " srcdir " -C -I" srcdir (arglist opts) (arglist link-options) " " src " -o " out " : " - src #;(arglist dependencies)))) + src " " (quotearg eggfile) #;(arglist dependencies)))) (define ((compile-import-library name #!key dependencies mode (options '()) (link-options '()) @@ -537,7 +538,7 @@ (define ((compile-dynamic-program name #!key dependencies source mode (options '()) (link-options '()) - custom) + custom eggfile) srcdir platform) (let* ((cmd (or (and custom (prefix srcdir custom)) default-csc)) @@ -558,11 +559,11 @@ (if (eq? mode 'host) " -host" "") " -I " srcdir " -C -I" srcdir (arglist opts) (arglist link-options) " " src " -o " out " : " - src #;(arglist dependencies)))) + src " " (quotearg eggfile) #;(arglist dependencies)))) (define ((compile-static-program name #!key dependencies source (options '()) (link-options '()) - custom mode) + custom mode eggfile) srcdir platform) (let* ((cmd (or (and custom (prefix srcdir custom)) default-csc)) @@ -583,7 +584,7 @@ " -static -setup-mode -I " srcdir " -C -I" srcdir (arglist opts) (arglist link-options) " " src " -o " out " : " - src #;(arglist dependencies)))) + src " " (quotearg eggfile) #;(arglist dependencies)))) (define ((compile-generated-file name #!key dependencies source custom) srcdir platform) diff --git a/egg-information.scm b/egg-information.scm index b575ec85..d4f00c18 100644 --- a/egg-information.scm +++ b/egg-information.scm @@ -26,11 +26,16 @@ ;;; load egg-info from file and perform validation -(define (load-egg-info fname) +(define (locate-egg-file fname) (let ((fname* (make-pathname (make-pathname (pathname-directory fname) "chicken") - (pathname-file fname) (pathname-extension fname)))) - (with-input-from-file (if (file-exists? fname*) fname* fname) read))) + (pathname-file fname) + (pathname-extension fname)))) + (if (file-exists? fname*) fname* fname))) + +(define (load-egg-info fname) + (let ((fname (locate-egg-file fname))) + (with-input-from-file fname read))) ;;; lookup specific toplevel properties of egg-information -- 2.11.0