~ chicken-core (chicken-5) addda2107c3bea7ec1fc73b2e247c4b3bd0753e9


commit addda2107c3bea7ec1fc73b2e247c4b3bd0753e9
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Sat Apr 8 23:11:48 2017 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Sat Apr 8 23:11:48 2017 +0200

    csc: drop "prefix", use correct libname when cross-compiling, lookup .o files in csc now

diff --git a/csc.scm b/csc.scm
index 622bd4d7..8edcadf7 100644
--- a/csc.scm
+++ b/csc.scm
@@ -72,16 +72,10 @@
   (fprintf (current-error-port) "~a: ~?~%" CSC_PROGRAM msg args)
   (exit 64) )
 
-(define chicken-prefix (get-environment-variable "CHICKEN_PREFIX"))
 (define arguments (command-line-arguments))
 (define host-mode (member "-host" arguments))
 (define cross-chicken (feature? #:cross-chicken))
 
-(define (prefix str dir default)
-  (if chicken-prefix
-      (make-pathname (list chicken-prefix dir) str)
-      default) )
-
 (define (back-slash->forward-slash path)
   (if windows-shell
       (string-translate path #\\ #\/)
@@ -94,12 +88,10 @@
   (qs (normalize-pathname str)))
 
 (define home
-  (prefix "" "share" (if host-mode host-sharedir default-sharedir)))
+  (if host-mode host-sharedir default-sharedir))
 
 (define translator
-  (quotewrap
-   (prefix "chicken" "bin"
-	   (make-pathname host-bindir CHICKEN_PROGRAM))))
+  (quotewrap (make-pathname host-bindir CHICKEN_PROGRAM)))
 
 (define compiler (quotewrap (if host-mode host-cc default-cc)))
 (define c++-compiler (quotewrap (if host-mode host-cxx default-cxx)))
@@ -116,14 +108,19 @@
 (define pic-options (if (or mingw cygwin) '("-DPIC") '("-fPIC" "-DPIC")))
 (define generate-manifest #f)
 
-(define libchicken (string-append "lib" INSTALL_LIB_NAME))
-(define dynamic-libchicken
+(define (libchicken)
+  (string-append "lib"
+                 (if (not host-mode)
+                     TARGET_LIB_NAME
+                     INSTALL_LIB_NAME)))
+
+(define (dynamic-libchicken)
   (if cygwin
-      (string-append "cyg" INSTALL_LIB_NAME "-0")
-      libchicken))
+      (string-append "cyg" INSTALL_LIB_NAME "-0")  ; XXX not target
+      (libchicken)))
 
-(define default-library
-  (string-append libchicken "." library-extension))
+(define (default-library)
+  (string-append (libchicken) "." library-extension))
 
 (define default-compilation-optimization-options (string-split (if host-mode host-cflags default-cflags)))
 (define best-compilation-optimization-options default-compilation-optimization-options)
@@ -210,25 +207,20 @@
 (define extra-shared-libraries 
   (if host-mode host-libs default-libs))
 
-(define default-library-files 
-  (list
-   (prefix default-library "lib"
-	   (string-append
-	    (if host-mode host-libdir default-libdir)
-	    (string-append "/" default-library)))) )
+(define (default-library-files)
+  (list (string-append (if host-mode host-libdir default-libdir)
+                       (string-append "/" (default-library)))))
 
-(define default-shared-library-files 
+(define (default-shared-library-files)
   (list (string-append "-l" (if host-mode INSTALL_LIB_NAME TARGET_LIB_NAME))))
 
-(define library-files default-library-files)
-(define shared-library-files default-shared-library-files)
+(define (library-files) (default-library-files))
+(define (shared-library-files) (default-shared-library-files))
 
 (define translate-options '())
 
 (define include-dir
-  (let ((id (prefix ""
-                    (make-pathname "include" "chicken")
-		    (if host-mode host-incdir default-incdir))))
+  (let ((id (if host-mode host-incdir default-incdir)))
     (and (not (member id '("/usr/include" "")))
 	 id) ) )
 
@@ -248,8 +240,7 @@
 (define linking-optimization-options default-linking-optimization-options)
 
 (define library-dir
-  (prefix "" "lib"
-         (if host-mode host-libdir default-libdir)))
+  (if host-mode host-libdir default-libdir))
 
 (define link-options '())
 
@@ -261,11 +252,9 @@
 	   (conc " -Wl,-R"
 		 (if deployed
 		     "\\$ORIGIN"
-		     (quotewrap
-		      (prefix "" "lib"
-			      (if host-mode
-				  host-libdir
-				  TARGET_RUN_LIB_HOME)))))))
+		     (quotewrap (if host-mode
+                                    host-libdir
+		   		    TARGET_RUN_LIB_HOME))))))
 	 (aix
 	  (list (conc "-Wl,-R\"" library-dir "\"")))
 	 (else
@@ -291,14 +280,13 @@
 ;;; Locate object files for linking:
 
 (define (find-object-files name)
-  (define (locate-object-file filename repo)
-    (and-let* ((f (##sys#resolve-include-filename filename '() repo #f)))
-      (list f)))
-  (let ((f (make-pathname #f name object-extension)))
-    (or (locate-object-file f #f)
-	(and (not ignore-repository)
-             (locate-object-file f #t))
-	(stop "could not find linked extension: ~a" name))))
+  (or (file-exists? (make-pathname #f name object-extension))
+      (and (not ignore-repository)
+           (file-exists? (make-pathname (destination-repository (if host-mode
+                                                                    'host
+                                                                    'target))
+                                        name object-extension)))
+      (stop "could not find linked extension: ~a" name)))
 
 
 ;;; Display usage information:
@@ -941,14 +929,15 @@ EOF
     (when (and osx (or (not cross-chicken) host-mode))
       (command
        (string-append
-	POSTINSTALL_PROGRAM " -change " libchicken ".dylib "
+	POSTINSTALL_PROGRAM " -change " (libchicken) ".dylib "
 	(quotewrap 
-	 (let ((lib (string-append libchicken ".dylib")))
+	 (let ((lib (string-append (libchicken) ".dylib")))
 	   (if deployed
 	       (make-pathname "@executable_path" lib)
-	       (make-pathname
-		(lib-path)
-		lib))))
+	       (make-pathname (if host-mode
+                                  host-libdir
+                                  TARGET_RUN_LIB_HOME)
+                       lib))))
 	" " 
 	target) )
       (when gui
@@ -959,29 +948,22 @@ EOF
                 transient-link-files)))))
 
 (define (collect-linked-objects object-files)
-  (let loop ((os object-files) (os2 object-files))
-    (if (null? os)
-        (delete-duplicates (reverse os2) string=?)
-        (let* ((o (car os))
-               (lfile (pathname-replace-extension o "link"))
-               (newos (if (file-exists? lfile)
-                          (with-input-from-file lfile read) 
-                          '())))
-          (loop (append newos (cdr os)) (append newos os2))))))
-
-(define (lib-path)
-  (prefix "" 
-	  "lib"
-	  (if host-mode host-libdir TARGET_RUN_LIB_HOME)))
-
-(define (target-lib-path)
-  (or (get-environment-variable "TARGET_LIB_PATH")
-      (let ((tdir default-libdir))
-	(if (and (not (string=? tdir ""))
-		 cross-chicken
-		 (not host-mode))
-	    tdir
-	    (lib-path)))))
+  (let ((hrepo (destination-repository 'host))
+        (trepo (destination-repository 'target)))
+    (define (locate lst)   ; add repo-path
+      (map (lambda (ofile)
+             (make-pathname (destination-repository (if host-mode 'host 'target))
+                            ofile))
+            lst))
+    (let loop ((os object-files) (os2 object-files))
+      (if (null? os)
+          (delete-duplicates (reverse os2) string=?)
+          (let* ((o (car os))
+                 (lfile (pathname-replace-extension o "link"))
+                 (newos (if (file-exists? lfile)
+                            (locate (with-input-from-file lfile read))
+                            '())))
+            (loop (append newos (cdr os)) (append newos os2)))))))
 
 (define (copy-files from to)
   (command
@@ -1000,8 +982,8 @@ EOF
   (string-intersperse
    (append
     (if static
-        library-files
-        shared-library-files)
+        (library-files)
+        (shared-library-files))
     (if static
         (list extra-libraries)
         (list extra-shared-libraries)))))
Trap