diff --git a/cyclone.scm b/cyclone.scm index 46c15bbc..12cfbb71 100644 --- a/cyclone.scm +++ b/cyclone.scm @@ -216,14 +216,11 @@ (let* ((in-file (car args)) (in-prog (read-file in-file)) (program? (not (library? (car in-prog)))) - ; TODO: trying to get this here, then can pass it to - ; compiler code (for entry points) and below for - ; gcc calls (need to wrap in .o string for that though) - ;(lib-deps - ; (if (and program? - ; (tagged-list? 'import (car in-prog))) - ; (lib:get-all-import-deps (cadr in-prog)) - ; '())) + (lib-deps + (if (and program? + (tagged-list? 'import (car in-prog))) + (delete-duplicates (lib:get-all-import-deps (cdar in-prog))) + '())) (exec-file (basename in-file)) (src-file (string-append exec-file ".c")) (create-c-file @@ -256,16 +253,14 @@ (cond (program? (let ((objs-str - (if (tagged-list? 'import (car in-prog)) - (apply - string-append - (delete-duplicates - (map - (lambda (str) - (string-append " " str " ")) - (lib:imports->objs (cdar in-prog))))) - ""))) + (apply + string-append + (map + (lambda (i) + (string-append " " (lib:import->filename i ".o") " ")) + lib-deps)))) ;(write `(DEBUG all imports ,lib-deps objs ,objs-str)) + ;(write `(DEBUG ,(lib:get-all-import-deps (cdar in-prog)))) (if (equal? 0 (system (string-append "gcc " src-file " -I" (cyc:get-include-dir) " -g -c -o " exec-file ".o"))) diff --git a/trans.scm b/trans.scm index fc96483e..44da5151 100644 --- a/trans.scm +++ b/trans.scm @@ -1628,28 +1628,27 @@ ;; libs requires. will probably need to prune duplicates from completed list. ;; Longer-term, do we want to look at file timestamps to see if files need to ;; be recompiled? -(define (lib:imports->objs imports) +;(define (lib:imports->objs imports) +; (apply +; append +; (map +; (lambda (i) +; (cons +; (lib:import->filename i ".o") +; (lib:imports->objs (lib:read-imports i)) +; )) +; imports))) + +;; Given import names, get all dependant import names that are required +;; Note: does not filter out duplicates +(define (lib:get-all-import-deps imports) (apply append (map (lambda (i) - (cons - (lib:import->filename i ".o") - (lib:imports->objs (lib:read-imports i)) - )) + (cons i (lib:get-all-import-deps (lib:read-imports i)))) imports))) -;; Given import names, get all dependant import names that are required -(define (lib:get-all-import-deps imports) - (delete-duplicates - (apply - append - (map - (lambda (i) - (write `(DEBUG i ,i)) - (cons i (lib:get-all-import-deps (lib:read-imports i)))) - imports)))) - ;; Given a single import from an import-set, open the corresponding ;; library file and retrieve the library's import-set. (define (lib:read-imports import)