diff --git a/cli/cli.egg b/cli/cli.egg index 5cfc157..c4c1a09 100644 --- a/cli/cli.egg +++ b/cli/cli.egg @@ -5,9 +5,16 @@ (component-options (csc-options "-X" "r7rs" "-R" "r7rs" "-optimize-level" "3" "-C" "-D_GNU_SOURCE")) (components + (generated-source-file stock_overrides.h + ; Also generates stub man_rust.h, man_go.h, man_ninja.go + (custom-build "generate-files") + (source-dependencies "overrides.json")) (program zilch-cli-go + (component-dependencies stock_overrides.h) (source "zilch-go.scm")) (program zilch-cli-rust + (component-dependencies stock_overrides.h) (source "zilch-rust.scm")) (program zilch-cli-ninja + (component-dependencies stock_overrides.h) (source "zilch-ninja.scm")))) diff --git a/cli/generate-files b/cli/generate-files new file mode 100755 index 0000000..b8897b2 --- /dev/null +++ b/cli/generate-files @@ -0,0 +1,7 @@ +#!/bin/sh + +(cat ./overrides.json; printf '\0') | xxd -i -n stock_overrides > stock_overrides.h +(printf '(no info)\0') | xxd -i -n man_rust > man_rust.h +(printf '(no info)\0') | xxd -i -n man_go > man_go.h +(printf '(no info)\0') | xxd -i -n man_ninja > man_ninja.h + diff --git a/core/src/file.sld b/core/src/file.sld index 0a83c80..eb25636 100644 --- a/core/src/file.sld +++ b/core/src/file.sld @@ -5,6 +5,7 @@ (zilch magic) (zilch nix binproto) (zilch nix daemon) (zilch nix drv) (zilch zexpr) (chicken base) (chicken format) (srfi 128) (srfi 132) (srfi 146) (srfi 151)) + (export zfile zsymlink zdir z-file? z-directory? z-symlink? zfile->store) @@ -178,7 +179,7 @@ (write-padding total-len) (write-bytevector (make-ustar-header #o777 0 #\2))) - ;; Serialize the specified structure as a ustar-style (with pax extensions) tape archive to the standard output port. The filename is specified by `name`. + ;; Serialize the specified structure as a ustar-style (with pax extensions) tape archive to the current output port. The filename is specified by `name`. (define (serialize-as-tar f name) (cond ((z-file? f) (write-pax-file name (z-file-executable f) (z-file-contents f))) @@ -214,10 +215,8 @@ ((z-symlink? val) (z-symlink-set-cache val cached))) cached) - (zexp-add-unquote-handler (lambda (val) (if (or (z-file? val) (z-symlink? val) (z-directory? val)) (string-append (zexp-unquote (zfile->store val)) "/-") #f))))) - diff --git a/lang/go/utils/generate-files b/lang/go/utils/generate-files new file mode 100755 index 0000000..ff1fe9f --- /dev/null +++ b/lang/go/utils/generate-files @@ -0,0 +1,5 @@ +#!/bin/sh + +(cat utils/parser/main.go; printf '\0') | xxd -i -n parser_source > parser_source.h +(cat utils/dirhash/main.go; printf '\0') | xxd -i -n dirhash_source > dirhash_source.h +(cat utils/unzip-one/main.go; printf '\0') | xxd -i -n unzip_one_source > unzip_one_source.h diff --git a/lang/go/zilch-lang-go.egg b/lang/go/zilch-lang-go.egg index 123c2bf..9d18730 100644 --- a/lang/go/zilch-lang-go.egg +++ b/lang/go/zilch-lang-go.egg @@ -5,6 +5,10 @@ (component-options (csc-options "-X" "r7rs" "-X" "zilch.zexpr" "-R" "r7rs" "-optimize-level" "3")) (components + (generated-source-file parser_source.h + ; Also generates dirhash_source.h, unzip_one_source.h + (custom-build "utils/generate-files") + (source-dependencies "utils/parser/main.go" "utils/dirhash/main.go" "utils/unzip-one/main.go")) (extension zilch.lang.go (source "src/go.sld") (component-dependencies zilch.lang.go.core)) @@ -16,10 +20,10 @@ (component-dependencies zilch.lang.go.stdlib zilch.lang.go zilch.lang.go.vfs zilch.lang.go.sum zilch.lang.go.fetch zilch.lang.go.package zilch.lang.go.version)) (extension zilch.lang.go.package (source "src/package.sld") - (component-dependencies zilch.lang.go.stdlib zilch.lang.go zilch.lang.go.vfs)) + (component-dependencies parser_source.h zilch.lang.go.stdlib zilch.lang.go zilch.lang.go.vfs)) (extension zilch.lang.go.vfs (source "src/vfs.sld") - (component-dependencies zilch.lang.go.stdlib zilch.lang.go zilch.lang.go.sum zilch.lang.go.fetch)) + (component-dependencies parser_source.h zilch.lang.go.stdlib zilch.lang.go zilch.lang.go.sum zilch.lang.go.fetch)) (extension zilch.lang.go.sum (source "src/sum.sld")) (extension zilch.lang.go.fetch diff --git a/lang/rust/helpers/generate-files b/lang/rust/helpers/generate-files new file mode 100644 index 0000000..e06708e --- /dev/null +++ b/lang/rust/helpers/generate-files @@ -0,0 +1,6 @@ +#!/bin/sh + +(cat helpers/src/bin/buildscript-runner.rs; printf '\0') | xxd -i -n runner_source > runner_source.h +(cat helpers/src/bin/rustc-wrapper.rs; printf '\0') | xxd -i -n rustc_wrap_source > rustc_wrap_source.h +(cat helpers/src/bin/cfg-reader.rs; printf '\0') | xxd -i -n cfgfetch_source > cfgfetch_source.h +(cat helpers/src/bin/false.rs; printf '\0') | xxd -i -n false_source > false_source.h diff --git a/lang/rust/zilch-lang-rust.egg b/lang/rust/zilch-lang-rust.egg index 96cbe8f..1221ef8 100644 --- a/lang/rust/zilch-lang-rust.egg +++ b/lang/rust/zilch-lang-rust.egg @@ -5,18 +5,25 @@ (component-options (csc-options "-X" "r7rs" "-X" "zilch.zexpr" "-R" "r7rs" "-optimize-level" "3")) (components + (generated-source-file runner_source.h + ; Also generates rustc_wrap_source.h, cfgfetch_source.h, false_source.h + (custom-build "helpers/generate-files") + (source-dependencies + "helpers/src/bin/buildscript-runner.rs" "helpers/src/bin/rustc-wrapper.rs" + "helpers/src/bin/cfg-reader.rs" "helpers/src/bin/false.rs")) (extension zilch.lang.rust - (source "src/rust.sld")) + (source "src/rust.sld") + (component-dependencies runner_source.h)) (extension zilch.lang.rust.registry (source "src/registry.sld")) (extension zilch.lang.rust.cargo (source "src/cargo.sld") - (component-dependencies zilch.lang.rust zilch.lang.rust.registry zilch.lang.rust.cfg)) + (component-dependencies runner_source.h zilch.lang.rust zilch.lang.rust.registry zilch.lang.rust.cfg)) (extension zilch.lang.rust.cfg (source "src/cfg.sld")) (extension zilch.lang.rust.build-script (source "src/build-script.sld") - (component-dependencies zilch.lang.rust)) + (component-dependencies runner_source.h zilch.lang.rust)) (extension zilch.lang.rust.resolver (source "src/resolver.sld") - (component-dependencies zilch.lang.rust zilch.lang.rust.registry zilch.lang.rust.cargo zilch.lang.rust.build-script)))) + (component-dependencies runner_source.h zilch.lang.rust zilch.lang.rust.registry zilch.lang.rust.cargo zilch.lang.rust.build-script)))) diff --git a/lib/build-chicken-parallel/process.scm b/lib/build-chicken-parallel/process.scm index 439ff5c..aac720e 100644 --- a/lib/build-chicken-parallel/process.scm +++ b/lib/build-chicken-parallel/process.scm @@ -36,6 +36,12 @@ (set! counter (+ counter 1)) (string-append "1980-01-01 00:00:" (number->string counter))) +; Workaround to deal with the non-scheme component dependencies. +(define (is-source-file hdr) + (unless (string? hdr) (set! hdr (symbol->string hdr))) + (define len (string-length hdr)) + (string=? (string-copy hdr (- len 2)) ".h")) + (define (process-component component) (define name (symbol->string (cadr component))) (define source #f) @@ -49,6 +55,10 @@ ((csc-options) (set! csc-options (append csc-options (cdr v)))))) (cddr component)) + (define new-deps '()) + (for-each (lambda (d) (unless (is-source-file d) (set! new-deps (cons d new-deps)))) deps) + (set! deps new-deps) + (define flagobj (list (cons 'unit name))) (define flagstr "") (unless (eq? csc-options shared-flags) @@ -128,7 +138,7 @@ rule install (for-each (lambda (l) (write-string (string-append " " (make-escaped-string l)))) link-flags) (write-string "\n"))) (cdr val))) (when (eq? (car val) 'components) - (for-each process-component (cdr val)))) + (for-each (lambda (p) (when (eq? 'extension (car p)) (process-component p))) (cdr val)))) egg) (emit-build (list (string-append outdir "/" egg-name ".egg-info")) '() "install" (list (string-append egg-name ".egg-info")) '() '()) (set! installed-files (cons (string-append outdir "/" egg-name ".egg-info") installed-files))