~ chicken-core (chicken-5) 26b6d9d61175510200e957c7b744c3316d03e10c
commit 26b6d9d61175510200e957c7b744c3316d03e10c
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Sat Apr 16 22:39:46 2016 +0200
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Sun Nov 13 11:32:19 2016 +0100
Add STATICBUILD to chicken-config.h
diff --git a/Makefile.ios b/Makefile.ios
index 9f460646..cc192dd9 100644
--- a/Makefile.ios
+++ b/Makefile.ios
@@ -66,6 +66,7 @@ include $(SRCDIR)/defaults.make
chicken-config.h: chicken-defaults.h
echo "/* GENERATED */" >$@
+ echo "#define STATICBUILD 1" >>$@
echo "#define HAVE_DIRENT_H 1" >>$@
echo "#define HAVE_INTTYPES_H 1" >>$@
echo "#define HAVE_LIMITS_H 1" >>$@
diff --git a/defaults.make b/defaults.make
index 9a09c895..68e0e578 100644
--- a/defaults.make
+++ b/defaults.make
@@ -331,6 +331,9 @@ ifdef OPTIMIZE_FOR_SPEED
endif
ifdef DEBUGBUILD
$(call echo, >>, $@,#define DEBUGBUILD 1)
+endif
+ifdef STATICBUILD
+ $(call echo, >>, $@,#define STATICBUILD 1)
endif
$(call echo, >>, $@,#define C_CHICKEN_PROGRAM "$(CHICKEN_PROGRAM)$(EXE)")
$(call echo, >>, $@,#ifndef C_INSTALL_CC)
diff --git a/egg-info.scm b/egg-compile.scm
similarity index 74%
rename from egg-info.scm
rename to egg-compile.scm
index bd1e4340..7e625661 100644
--- a/egg-info.scm
+++ b/egg-compile.scm
@@ -10,7 +10,8 @@
(define valid-items
'(synopsis authors category license version dependencies files
source-file csc-options test-dependencies destination linkage
- build-dependencies components foreign-dependencies link-options))
+ build-dependencies components foreign-dependencies link-options
+ custom-bulild))
(define nested-items
'(components))
@@ -30,6 +31,9 @@
(define windows-executable-extension ".exe")
(define unix-object-extension ".o")
(define windows-object-extension ".obj")
+
+;XXX (define staticbuild (foreign-value "STATICBUILD" bool))
+(define staticbuild #f)
(define (validate-egg-info info)
@@ -58,6 +62,7 @@
(src #f)
(files '())
(ifiles '())
+ (cbuild #f)
(link '())
(dest #f)
(deps '())
@@ -78,6 +83,7 @@
(fluid-let ((target (check-target (cadr info) exts))
(deps '())
(src #f)
+ (cbuild #f)
(link default-extension-linkage)
(lopts '())
(opts '()))
@@ -85,8 +91,10 @@
(addfiles
(if (memq 'static link) (conc target objext) '())
(if (memq 'dynamic link) (conc target ".so") '())
- (conc target ".import.so")) ; assumes import-lib is always compiled?
- (set! exts (cons (list target deps src opts lopts link) exts))))
+ (if staticbuild
+ (conc target ".import.scm")
+ (conc target ".import.so")))
+ (set! exts (cons (list target deps src opts lopts link cbuild) exts))))
((data)
(fluid-let ((target (check-target (cadr info) data))
(dest #f)
@@ -114,17 +122,20 @@
((program)
(fluid-let ((target (check-target (cadr info) prgs))
(deps '())
+ (cbuild #f)
(src #f)
(link default-program-linkage)
(lopts '())
(opts '()))
(for-each compile-extension/program (cddr info))
(addfiles (conc target exeext))
- (set! prgs (cons (list target deps src opts lopts link) prgs))))))
+ (set! prgs (cons (list target deps src opts lopts link cbuild) prgs))))))
(define (compile-extension/program info)
(case (car info)
((linkage)
(set! link (cdr info)))
+ ((custom-build)
+ (set! cbuild (arg info 1 string?)))
((csc-options)
(set! opts (append opts (cdr info))))
((link-options)
@@ -201,7 +212,19 @@
`((compile-import-library ,@data))
cmds)))
'() order)
- (map (lambda (prg) `(compile-program ,prg)) prgs))
+ (foldr
+ (lambda (prg cmds)
+ (let ((link (list-ref prg 5)))
+ (append
+ (if (memq 'static link)
+ `((compile-static-program ,@prg))
+ '())
+ (if (memq 'dynamic link)
+ `((compile-dynamic-program ,@prg))
+ '())
+ cmds)))
+ '()
+ prgs))
;; installation commands
(append
(map (lambda (ext) `(install-extension ,@ext)) exts)
@@ -213,75 +236,50 @@
(cons `(installed-files ,@ifiles) info)))))
-;;; UNIX shell code generation
-
-(define (gen-compile-unix-extension name deps src opts lopts link)
- ...)
-
-(define (gen-compile-unix-program name deps src opts lopts link)
- ...)
-
-(define (gen-install-unix-extension name deps src opts lopts link)
- ...)
-
-(define (gen-install-unix-program name deps src opts lopts link)
- ...)
+;;; shell code generation
-(define (gen-install-unix-data name deps files dest)
+(define (gen-compile-static-extension platform name deps src opts lopts link cbuild)
...)
-(define (gen-install-unix-c-include name deps files dest)
+(define (gen-compile-dynamic-extension platform name deps src opts lopts link cbuild)
...)
-(define (gen-install-unix-scheme-include name deps files dest)
+(define (gen-compile-import-library platform name deps src opts lopts link cbuild)
...)
-
-;;; Windows batch code generation
-
-(define (gen-compile-windows-extension name deps src opts lopts link)
+(define (gen-compile-dynamic-program platform name deps src opts lopts link cbuild)
...)
-(define (gen-compile-windows-program name deps src opts lopts link)
+(define (gen-compile-static-program platform name deps src opts lopts link cbuild)
...)
-(define (gen-install-windows-extension name deps src opts lopts link)
+(define (gen-install-extension platform name deps src opts lopts link cbuild)
...)
-(define (gen-install-windows-program name deps src opts lopts link)
+(define (gen-install-program platform name deps src opts lopts link cbuild)
...)
-(define (gen-install-windows-data name deps files dest)
+(define (gen-install-data platform name deps files dest)
...)
-(define (gen-install-windows-c-include name deps files dest)
+(define (gen-install-c-include platform name deps files dest)
...)
-(define (gen-install-windows-scheme-include name deps files dest)
+(define (gen-install-scheme-include platform name deps files dest)
...)
+(define command-table
+ `((compile-static-extension ,gen-compile-static-extension)
+ (compile-dynamic-extension ,gen-compile-dynamic-extension)
+ (compile-dynamic-program ,gen-compile-dynamic-program)
+ (compile-static-program ,gen-compile-static-program)
+ (install-extension ,gen-install-extension)
+ (install-data ,gen-install-data)
+ (compile-import-library ,gen-compile-import-library)
+ (install-data ,gen-install-data)
+ (install-c-include ,gen-install-c-include)
+ (install-scheme-include ,gen-install-scheme-include)
-;;; platform-independent part of code generation
-
-(define generators
- `((compile-static-extension (unix ,gen-compile-unix-static-extension)
- (windows ,gen-compile-windows-static-extension))
- (compile-dynamic-extension (unix ,gen-compile-unix-dynamic-extension)
- (windows ,gen-compile-windows-dynamic-extension))
- (compile-import-library (unix ,gen-compile-unix-import-library)
- (windows ,gen-compile-windows-import-library))
- (compile-program (unix ,gen-compile-unix-program)
- (windows ,gen-compile-windows-program))
- (install-extension (unix ,gen-install-unix-extension)
- (windows ,gen-install-windows-extension))
- (install-program (unix ,gen-install-unix-program)
- (windows ,gen-install-windows-program))
- (install-data (unix ,gen-install-unix-data)
- (windows ,gen-install-windows-data))
- (install-c-include (unix ,gen-install-unix-c-include)
- (windows ,gen-install-windows-c-include))
- (install-scheme-include (unix ,gen-install-unix-scheme-include)
- (windows ,gen-install-windows-scheme-include))))
(define (generate-shell-commands platform cmds dest prefix suffix)
(with-output-to-file dest
@@ -289,17 +287,36 @@
(prefix)
(for-each
(lambda (cmd)
- (cond ((assq cmd generators) =>
- (lambda (gen)
- (cond ((assq platform (cdr gen)) =>
- (lambda (a) (apply (cdr a) (cdr cmd))))
- (else (error "invalid platform" platform)))))
+ (cond ((assq (car cmd) command-table)
+ => (lambda (op) (apply (cadr op) platform (cdr cmd))))
(else (error "invalid command" cmd))))
cmds)
(suffix))))
+;;; some utilities for mangling + quoting
+
+(define (quotearg str)
+ (let ((lst (string->list str)))
+ (if (foldl char-whitespace? #f lst)
+ (string-append "\"" str "\"")
+ str)))
+
+(define (slashify str platform)
+ (if (eq? platform 'windows)
+ (list->string
+ (map (lambda (c) (if (char=? #\/ c) #\\ c)) (string->list str)))
+ str))
+
+(define (quote-all str platform)
+ (if (and (eq? platform 'windows)
+ (positive? (string-length str))
+ (char=? #\" (string-ref str 0)))
+ (string-append "\"" str "\"")
+ str))
+
+
;;
(set! hyde (with-input-from-file "hyde.egg" read))
-(pp (receive (compile-egg-info hyde)))
+(pp (receive (compile-egg-info hyde 'unix)))
diff --git a/egg-environment.scm b/egg-environment.scm
new file mode 100644
index 00000000..ed92873b
--- /dev/null
+++ b/egg-environment.scm
@@ -0,0 +1,44 @@
+;;; environment settings for egg compilation
+
+
+(foreign-declare #<<EOF
+#ifndef STATICBUILD
+# define STATIC_CHICKEN 0
+#else
+# define STATIC_CHICKEN 1
+#endif
+EOF
+)
+
+(define staticbuild (foreign-value "STATIC_CHICKEN" bool))
+(define cross-chicken (feature? #:cross-chicken))
+(define binary-version (foreign-value "C_BINARY_VERSION" int))
+
+(define default-cc (foreign-value "C_TARGET_CC" c-string))
+(define default-cxx (foreign-value "C_TARGET_CXX" c-string))
+(define default-cflags (foreign-value "C_TARGET_CFLAGS" c-string))
+(define default-ldflags (foreign-value "C_TARGET_LDFLAGS" c-string))
+(define default-libs (foreign-value "C_TARGET_MORE_LIBS" c-string))
+(define default-slibs (foreign-value "C_TARGET_MORE_STATIC_LIBS" c-string))
+(define default-libdir (foreign-value "C_TARGET_LIB_HOME" c-string))
+(define default-slibdir (foreign-value "C_TARGET_STATIC_LIB_HOME" c-string))
+(define default-incdir (foreign-value "C_TARGET_INCLUDE_HOME" c-string))
+
+(define default-platform
+ (if (eq? (software-type) 'windows)
+ (foreign-value "C_WINDOWS_SHELL" bool)
+ 'unix))
+
+(define default-prefix (foreign-value "C_INSTALL_PREFIX" c-string))
+(define default-bindir (foreign-value "C_INSTALL_BIN_HOME" c-string))
+(define default-csc (foreign-value "C_CSC_PROGRAM" c-string))
+
+(define default-sudo (or (get-environment-variable "SUDO") "sudo"))
+
+(define host-repo (foreign-value "C_INSTALL_EGG_HOME" c-string))
+
+(define target-repo
+ (string-append default-libdir "/chicken/" (number->string binary-version)))
+
+(define host-mode #t)
+(define target-mode #t)
Trap