From 50f3aee33de22b426c2ddc0e44e81b40aa4797cd Mon Sep 17 00:00:00 2001 From: felix
Date: Mon, 6 Nov 2017 17:29:20 +0100 Subject: [PATCH] Improve using custom build scripts Refactored common "recursive" egg properties; custom build commands are made executable and are prefixed with the source directory. Also set PATH to bindir + "." --- chicken-install.scm | 1 + egg-compile.scm | 74 +++++++++++++++++++++++++++++++-------------------- manual/Extensions | 8 ++++++ 3 files changed, 54 insertions(+), 29 deletions(-) diff --git a/chicken-install.scm b/chicken-install.scm index 9c2ba06..4c07c13 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -200,6 +200,7 @@ (data #f #t #t) (modules #f #f #f) (c-include #f #f #t) + (only #f #t #t) (scheme-include #f #f #t))) (define (validate-egg-info info) diff --git a/egg-compile.scm b/egg-compile.scm index 55b19b2..48f5e10 100644 --- a/egg-compile.scm +++ b/egg-compile.scm @@ -151,8 +151,6 @@ files) (define (compile-component info) (case (car info) - ((target) (when (eq? mode 'target) (for-each compile-component (cdr info)))) - ((host) (when (eq? mode 'host) (for-each compile-component (cdr info)))) ((extension) (fluid-let ((target (check-target (cadr info) exts)) (deps '()) @@ -269,13 +267,10 @@ (cons (list target dependencies: deps source: src options: opts link-options: lopts linkage: link custom: cbuild mode: mode output-file: rtarget) - prgs))))))) + prgs))))) + (else (compile-common info compile-component)))) (define (compile-extension/program info) (case (car info) - ((target) - (when (eq? mode 'target) (for-each compile-extension/program (cdr info)))) - ((host) - (when (eq? mode 'host) (for-each compile-extension/program (cdr info)))) ((linkage) (set! link (cdr info))) ((types-file) @@ -303,22 +298,29 @@ ((modules) (set! mods (map ->string (cdr info)))) ((dependencies) - (set! deps (append deps (map ->dep (cdr info))))))) + (set! deps (append deps (map ->dep (cdr info))))) + (else (compile-common info compile-extension/program)))) + (define (compile-common info walk) + (case (car info) + ((target) + (when (eq? mode 'target) + (for-each walk (cdr info)))) + ((host) + (when (eq? mode 'host) + (for-each walk (cdr info)))))) (define (compile-data/include info) (case (car info) - ((target) (when (eq? mode 'target) (for-each compile-data/include (cdr info)))) - ((host) (when (eq? mode 'host) (for-each compile-data/include (cdr info)))) ((destination) (set! dest (->string (arg info 1 name?)))) ((files) - (set! files (append files (map ->string (cdr info))))))) + (set! files (append files (map ->string (cdr info))))) + (else (compile-common info compile-data/include)))) (define (->dep x) (if (name? x) x (error "invalid dependency" x))) (define (compile info) (case (car info) - ((target) (when (eq? mode 'target) (for-each compile (cdr info)))) - ((host) (when (eq? mode 'host) (for-each compile (cdr info)))) - ((components) (for-each compile-component (cdr info))))) + ((components) (for-each compile-component (cdr info))) + (else (compile-common info compile)))) (define (arg info n #!optional (pred (constantly #t))) (when (< (length info) n) (error "missing argument" info n)) @@ -440,7 +442,7 @@ predefined-types custom types-file inline-file) srcdir platform) - (let* ((cmd (or (and custom (prefix-custom-command custom)) + (let* ((cmd (or (and custom (prefix-custom-command srcdir custom)) default-csc)) (sname (prefix srcdir name)) (ssname (and source (prefix srcdir source))) @@ -461,6 +463,8 @@ (object-extension platform)) mode))) (src (quotearg (or ssname (conc sname ".scm"))))) + (when custom + (prepare-custom-command cmd platform)) (print "\n" (slashify default-builder platform) " " out " " cmd (if keep-generated-files " -k" "") " -setup-mode -static -I " srcdir @@ -478,7 +482,7 @@ predefined-types custom types-file inline-file) srcdir platform) - (let* ((cmd (or (and custom (prefix-custom-command custom)) + (let* ((cmd (or (and custom (prefix-custom-command srcdir custom)) default-csc)) (sname (prefix srcdir name)) (opts (append (if (null? options) @@ -496,6 +500,8 @@ (ssname (and source (prefix srcdir source))) (out (quotearg (target-file (conc sname ".so") mode))) (src (quotearg (or ssname (conc sname ".scm"))))) + (when custom + (prepare-custom-command cmd platform)) (print "\n" (slashify default-builder platform) " " out " " cmd (if keep-generated-files " -k" "") (if (eq? mode 'host) " -host" "") @@ -508,7 +514,7 @@ (options '()) (link-options '()) custom) srcdir platform) - (let* ((cmd (or (and custom (prefix-custom-command custom)) + (let* ((cmd (or (and custom (prefix-custom-command srcdir custom)) default-csc)) (sname (prefix srcdir name)) (opts (if (null? options) @@ -516,6 +522,8 @@ options)) (out (quotearg (target-file (conc sname ".import.so") mode))) (src (quotearg (conc sname ".import.scm")))) + (when custom + (prepare-custom-command cmd platform)) (print "\n" (slashify default-builder platform) " " out " " cmd (if keep-generated-files " -k" "") " -setup-mode -s" @@ -528,7 +536,7 @@ (options '()) (link-options '()) custom) srcdir platform) - (let* ((cmd (or (and custom (prefix-custom-command custom)) + (let* ((cmd (or (and custom (prefix-custom-command srcdir custom)) default-csc)) (sname (prefix srcdir name)) (ssname (and source (prefix srcdir source))) @@ -539,6 +547,8 @@ (executable-extension platform)) mode))) (src (quotearg (or ssname (conc sname ".scm"))))) + (when custom + (prepare-custom-command cmd platform)) (print "\n" (slashify default-builder platform) " " out " " cmd (if keep-generated-files " -k" "") " -setup-mode" @@ -551,7 +561,7 @@ (options '()) (link-options '()) custom mode) srcdir platform) - (let* ((cmd (or (and custom (prefix-custom-command custom)) + (let* ((cmd (or (and custom (prefix-custom-command srcdir custom)) default-csc)) (sname (prefix srcdir name)) (ssname (and source (prefix srcdir source))) @@ -562,6 +572,8 @@ (executable-extension platform)) mode))) (src (quotearg (or ssname (conc sname ".scm"))))) + (when custom + (prepare-custom-command cmd platform)) (print "\n" (slashify default-builder platform) " " out " " cmd (if keep-generated-files " -k" "") (if (eq? mode 'host) " -host" "") @@ -572,10 +584,12 @@ (define ((compile-generated-file name #!key dependencies source custom) srcdir platform) - (let* ((cmd (prefix-custom-command custom)) + (let* ((cmd (prefix-custom-command srcdir custom)) (sname (prefix srcdir name)) (ssname (and source (prefix srcdir source))) (out (quotearg (or ssname sname)))) + (when custom + (prepare-custom-command cmd platform)) (print "\n" (slashify default-builder platform) " " out " " cmd " : " #;(arglist dependencies)))) @@ -739,14 +753,16 @@ (printf #<