~ 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