From 946568e66a0dbb31752b774f73dc24de2d0e3805 Mon Sep 17 00:00:00 2001 From: felix Date: Tue, 17 Oct 2017 14:25:54 +0200 Subject: [PATCH] csc: when collecting object files before linking, ".link" files where consulted for all object files involved, but should not be done for .o files that resulted from the current compilation; previous builds may have generated ".link" files for the currently compiled file (e.g. when building an egg in default mode) and would thus be picked up, leading to link with static dependencies, even if the currently compiled file is not compiled in static mode, resulting in a linker error, complaining about non-PIC code being linked. --- csc.scm | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/csc.scm b/csc.scm index 3b4fbf6..296da5d 100644 --- a/csc.scm +++ b/csc.scm @@ -915,7 +915,8 @@ EOF ;;; Link object files and libraries: (define (run-linking) - (set! object-files (collect-linked-objects object-files)) + (set! object-files + (collect-linked-objects object-files generated-object-files)) (let* ((files (map quotewrap object-files)) (target (quotewrap target-filename)) (targetdir #f)) @@ -949,20 +950,22 @@ EOF (append generated-object-files transient-link-files))))) -(define (collect-linked-objects object-files) +(define (collect-linked-objects ofiles gen-ofiles) (define (locate lst) (map (lambda (ofile) (chicken.load#find-file ofile (repo-path))) 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)))))) + (let loop ((os ofiles) (os2 ofiles)) + (cond ((null? os) + (delete-duplicates (reverse os2) string=?)) + ((or static (not (member (car os) gen-ofiles))) + (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)))) + (else (loop (cdr os) (cons (car os) os2)))))) (define (copy-files from to) (command -- 1.7.9.5