>From 4cf4f5f5cb0b547a4d29fa309ea2f0296cd8c084 Mon Sep 17 00:00:00 2001 From: Evan Hanson Date: Sat, 2 Apr 2016 17:17:44 +1300 Subject: [PATCH 2/2] Respect the "-ignore-repository" option when linking with extensions This requires accumulating a list of linked extensions and resolving their objects after all command line arguments have been processed. Also, clean up some repeated options in the runtests.sh script's compiler invocations. --- csc.scm | 20 +++++++++++++------- tests/runtests.bat | 19 ++++++++++--------- tests/runtests.sh | 22 +++++++++++----------- 3 files changed, 34 insertions(+), 27 deletions(-) diff --git a/csc.scm b/csc.scm index 6e9cd9e..0c1af21 100644 --- a/csc.scm +++ b/csc.scm @@ -203,6 +203,7 @@ (define generated-rc-files '()) (define object-files '()) (define generated-object-files '()) +(define linked-extensions '()) (define cpp-mode #f) (define objc-mode #f) (define embedded #f) @@ -215,6 +216,7 @@ (define deploy #f) (define deployed #f) (define rpath #f) +(define ignore-repository #f) (define extra-libraries (if host-mode @@ -322,8 +324,9 @@ (let ((f (make-pathname #f name object-extension))) (or (locate-object-file f #f) - (static-extension-information name) - (locate-object-file f #t) + (and (not ignore-repository) + (or (static-extension-information name) + (locate-object-file f #t))) (stop "couldn't find linked extension: ~a" name)))) @@ -561,9 +564,6 @@ EOF (else "-shared")) link-options)) (set! shared #t) ) - (define (collect-linked-files names) - (append-map find-object-files (string-split names ", "))) - (define (use-private-repository) (set! compile-options (cons "-DC_PRIVATE_REPOSITORY" compile-options))) @@ -579,6 +579,9 @@ EOF (when show-libs (print* (linker-libraries) #\space)) (newline) (exit) ) + (when (pair? linked-extensions) + (set! object-files ; add objects from linked extensions + (append object-files (append-map find-object-files linked-extensions)))) (cond [(null? scheme-files) (when (and (null? c-files) (null? object-files)) @@ -679,8 +682,8 @@ EOF [(-link) (check s rest) (t-options "-uses" (car rest)) - (set! object-files - (append object-files (collect-linked-files (car rest)))) + (set! linked-extensions + (append linked-extensions (string-split (car rest) ", "))) (set! rest (cdr rest))] [(-require-extension -R) (check s rest) @@ -688,6 +691,9 @@ EOF (set! rest (cdr rest)) ] ((-private-repository) (use-private-repository)) + ((-ignore-repository) + (set! ignore-repository #t) + (t-options arg)) ((-no-elevation) (set! generate-manifest #t)) [(-gui) diff --git a/tests/runtests.bat b/tests/runtests.bat index 6e507da..3cd6dc8 100644 --- a/tests/runtests.bat +++ b/tests/runtests.bat @@ -24,6 +24,7 @@ set interpret=..\csi -n -include-path %TEST_DIR%/.. del /f /q /s *.exe *.so *.o *.import.* ..\foo.import.* test-repository mkdir test-repository +copy %TYPESDB% test-repository echo ======================================== version tests ... %interpret% -s version-tests.scm @@ -534,26 +535,26 @@ a.out if errorlevel 1 exit /b 1 echo ======================================== linking tests ... -%compile% -unit reverser reverser\tags\1.0\reverser.scm -J -c -o reverser.o -%compile% -link reverser linking-tests.scm +%compile2% -unit reverser reverser\tags\1.0\reverser.scm -J -c -o reverser.o +%compile2% -link reverser linking-tests.scm if errorlevel 1 exit /b 1 -a.out +linking-tests if errorlevel 1 exit /b 1 -%compile% -link reverser linking-tests.scm -static +%compile2% -link reverser linking-tests.scm -static if errorlevel 1 exit /b 1 -a.out +linking-tests if errorlevel 1 exit /b 1 set CHICKEN_REPOSITORY=test-repository mkdir %CHICKEN_REPOSITORY% move reverser.o %CHICKEN_REPOSITORY% move reverser.import.scm %CHICKEN_REPOSITORY% -%compile% -link reverser linking-tests.scm +%compile2% -link reverser linking-tests.scm if errorlevel 1 exit /b 1 -a.out +linking-tests if errorlevel 1 exit /b 1 -%compile% -link reverser linking-tests.scm -static +%compile2% -link reverser linking-tests.scm -static if errorlevel 1 exit /b 1 -a.out +linking-tests if errorlevel 1 exit /b 1 echo ======================================== private repository test ... diff --git a/tests/runtests.sh b/tests/runtests.sh index 2bc9aca..a823b53 100755 --- a/tests/runtests.sh +++ b/tests/runtests.sh @@ -85,8 +85,8 @@ TYPESDB=../types.db cp $TYPESDB test-repository/types.db compile="../csc -types ${TYPESDB} -ignore-repository ${COMPILE_OPTIONS} -o a.out" -compile2="../csc -compiler $CHICKEN -v -I${TEST_DIR}/.. -L${TEST_DIR}.. -include-path ${TEST_DIR}/.." -compile_s="../csc -s -types ${TYPESDB} -ignore-repository ${COMPILE_OPTIONS} -v -I${TEST_DIR}/.. -L${TEST_DIR}/.. -include-path ${TEST_DIR}/.." +compile2="../csc -compiler ${CHICKEN} -v -I${TEST_DIR}/.. -L${TEST_DIR}/.. -include-path ${TEST_DIR}/.." +compile_s="../csc -s -types ${TYPESDB} -ignore-repository ${COMPILE_OPTIONS}" interpret="../csi -n -include-path ${TEST_DIR}/.." rm -f *.exe *.so *.o *.import.* a.out ../foo.import.* @@ -442,16 +442,16 @@ $compile -e embedded3.c embedded4.scm ./a.out echo "======================================== linking tests ..." -$compile -unit reverser reverser/tags/1.0/reverser.scm -J -c -o reverser.o -$compile -link reverser linking-tests.scm -./a.out -$compile -link reverser linking-tests.scm -static -./a.out +$compile2 -unit reverser reverser/tags/1.0/reverser.scm -J -c -o reverser.o +$compile2 -link reverser linking-tests.scm +./linking-tests +$compile2 -link reverser linking-tests.scm -static +./linking-tests mv reverser.o reverser.import.scm "$CHICKEN_REPOSITORY" -CHICKEN_REPOSITORY=$CHICKEN_REPOSITORY $compile -link reverser linking-tests.scm -./a.out -CHICKEN_REPOSITORY=$CHICKEN_REPOSITORY $compile -link reverser linking-tests.scm -static -./a.out +CHICKEN_REPOSITORY=$CHICKEN_REPOSITORY $compile2 -link reverser linking-tests.scm +./linking-tests +CHICKEN_REPOSITORY=$CHICKEN_REPOSITORY $compile2 -link reverser linking-tests.scm -static +./linking-tests echo "======================================== private repository test ..." mkdir -p tmp -- 2.7.0