~ chicken-core (chicken-5) cf501262811b108d3286cbd115b0c3352032bc6a
commit cf501262811b108d3286cbd115b0c3352032bc6a Author: felix <felix@call-with-current-continuation.org> AuthorDate: Fri Dec 16 15:25:43 2016 +0100 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Fri Dec 16 15:25:43 2016 +0100 egg-compile: make build-script aware of keeping generated files, bugfix in ordering of dependencies diff --git a/egg-compile.scm b/egg-compile.scm index a057258a..01eb5433 100644 --- a/egg-compile.scm +++ b/egg-compile.scm @@ -15,6 +15,8 @@ (define +unix-object-extension+ ".o") (define +windows-object-extension+ ".obj") +(define keep-generated-files #f) + ;;; some utilities @@ -139,9 +141,9 @@ (src #f) (cbuild #f) (deps '())) + (for-each compile-extension/program (cddr info)) (unless cbuild (error "generated source files need a custom build step" target)) - (for-each compile-extension/program (cddr info)) (set! genfiles (cons (list target dependencies: deps source: src custom: cbuild) genfiles)))) @@ -252,47 +254,42 @@ (order (reverse (topological-sort (map (lambda (dep) (cons (car dep) - (filter-deps (car dep) (get-keyword dependencies: - (cdr dep))))) + (filter-deps (car dep) + (get-keyword dependencies: (cdr dep))))) all) dep=?)))) ;; generate + return build/install commands (values ;; build commands - (append - (foldr - (lambda (data cmds) - (let ((link (get-keyword linkage: (cdr data)))) - (append - (if (memq 'dynamic link) - (list (apply compile-dynamic-extension data)) - '()) - ;; static must come last, as *.o file will be overwritten - ;; and removed by dynamic build (meh) - (if (memq 'static link) - (list (apply compile-static-extension data)) - '()) - (if (uses-compiled-import-library? mode) - (list (apply compile-import-library data)) - '()) - cmds))) - '() exts) - (foldr - (lambda (prg cmds) - (let ((link (get-keyword linkage: (cdr prg)))) - (append - (if (memq 'dynamic link) - (list (apply compile-dynamic-program prg)) - '()) - (if (memq 'static link) - (list (apply compile-static-program prg)) - '()) - cmds))) - '() prgs) - (foldr - (lambda (gen cmds) - (cons (apply compile-generated-file gen) cmds)) - '() genfiles)) + (append-map + (lambda (id) + (cond ((assq id exts) => + (lambda (data) + (let ((link (get-keyword linkage: (cdr data)))) + (append (if (memq 'dynamic link) + (list (apply compile-dynamic-extension data)) + '()) + ;; static must come last, as *.o file will be overwritten + ;; and removed by dynamic build (meh) + (if (memq 'static link) + (list (apply compile-static-extension data)) + '()) + (if (uses-compiled-import-library? mode) + (list (apply compile-import-library data)) + '()))))) + ((assq id prgs) => + (lambda (data) + (let ((link (get-keyword linkage: (cdr data)))) + (append (if (memq 'dynamic link) + (list (apply compile-dynamic-program data)) + '()) + (if (memq 'static link) + (list (apply compile-static-program data)) + '()))))) + (else + (let ((data (assq id genfiles))) + (list (apply compile-generated-file data)))))) + order) ;; installation commands (append (append-map @@ -335,6 +332,7 @@ (out (quotearg (target-file (conc sname (object-extension platform)) mode))) (src (quotearg (or ssname (conc sname ".scm"))))) (print "\n" (slashify default-builder platform) " " out " " cmd + (if keep-generated-files " -k" "") " -I " srcdir " -C -I" srcdir (arglist options) " " src " -o " out " : " src #;(arglist dependencies)))) @@ -349,6 +347,7 @@ (out (quotearg (target-file (conc sname ".so") mode))) (src (quotearg (or ssname (conc sname ".scm"))))) (print "\n" (slashify default-builder platform) " " out " " cmd + (if keep-generated-files " -k" "") " -I " srcdir " -C -I" srcdir (arglist options) (arglist link-options) " " src " -o " out " : " src #;(arglist dependencies)))) @@ -363,6 +362,7 @@ (out (quotearg (target-file (conc sname ".import.so") mode))) (src (quotearg (or source (conc sname ".import.scm"))))) (print "\n" (slashify default-builder platform) " " out " " cmd + (if keep-generated-files " -k" "") " -I " srcdir " -C -I" srcdir (arglist options) (arglist link-options) " " src " -o " out " : " src #;(arglist dependencies)))) @@ -379,6 +379,7 @@ mode))) (src (quotearg (or ssname (conc sname ".scm"))))) (print "\n" (slashify default-builder platform) " " out " " cmd + (if keep-generated-files " -k" "") " -I " srcdir " -C -I" srcdir (arglist options) (arglist link-options) " " src " -o " out " : " src #;(arglist dependencies)))) @@ -395,6 +396,7 @@ mode))) (src (quotearg (or ssname (conc sname ".scm"))))) (print "\n" (slashify default-builder platform) " " out " " cmd + (if keep-generated-files " -k" "") " -I " srcdir " -C -I" srcdir (arglist options) (arglist link-options) " " src " -o " out " : " src #;(arglist dependencies)))) @@ -515,14 +517,15 @@ ;;; Generate shell or batch commands from abstract build/install operations -(define (generate-shell-commands platform cmds dest srcdir prefix suffix) - (with-output-to-file dest - (lambda () - (prefix platform) - (for-each - (lambda (cmd) (cmd srcdir platform)) - cmds) - (suffix platform)))) +(define (generate-shell-commands platform cmds dest srcdir prefix suffix keep) + (fluid-let ((keep-generated-files keep)) + (with-output-to-file dest + (lambda () + (prefix platform) + (for-each + (lambda (cmd) (cmd srcdir platform)) + cmds) + (suffix platform))))) ;;; affixes for build- and install-scriptsTrap