Expand library before reading imports

This commit is contained in:
Justin Ethier 2020-09-02 18:10:41 -04:00
parent 26a7542d18
commit dc30dba735
3 changed files with 12 additions and 8 deletions

View file

@ -255,7 +255,7 @@
(trace:info meta)) (trace:info meta))
(set! input-program (cdr program:imports/code)) (set! input-program (cdr program:imports/code))
;(set! lib-deps (append lib-deps (lib:get-all-import-deps (car program:imports/code) append-dirs prepend-dirs))) ;(set! lib-deps (append lib-deps (lib:get-all-import-deps (car program:imports/code) append-dirs prepend-dirs)))
(let ((new-lib-deps (lib:get-all-import-deps (car program:imports/code) append-dirs prepend-dirs))) (let ((new-lib-deps (lib:get-all-import-deps (car program:imports/code) append-dirs prepend-dirs #f)))
(for-each (for-each
(lambda (dep) (lambda (dep)
(if (not (member dep lib-deps)) (if (not (member dep lib-deps))
@ -704,7 +704,7 @@
(lib-deps (lib-deps
(if (and program? (if (and program?
(not (null? (car program:imports/code)))) (not (null? (car program:imports/code))))
(lib:get-all-import-deps (car program:imports/code) append-dirs prepend-dirs) (lib:get-all-import-deps (car program:imports/code) append-dirs prepend-dirs expander)
'())) '()))
(c-linker-options (c-linker-options
(lib:get-all-c-linker-options lib-deps append-dirs prepend-dirs)) (lib:get-all-c-linker-options lib-deps append-dirs prepend-dirs))

View file

@ -15,7 +15,8 @@
;;;; ;;;;
(define-library (scheme cyclone libraries) (define-library (scheme cyclone libraries)
(import (scheme base) (import (scheme base)
;; Debug only (scheme write) ;; Debug only
(scheme write)
(scheme read) (scheme read)
(scheme process-context) (scheme process-context)
(scheme cyclone util) (scheme cyclone util)
@ -385,12 +386,15 @@
;; Given a single import from an import-set, open the corresponding ;; Given a single import from an import-set, open the corresponding
;; library file and retrieve the library's import-set. ;; library file and retrieve the library's import-set.
(define (lib:read-imports import append-dirs prepend-dirs) (define (lib:read-imports import append-dirs prepend-dirs expander)
(let* ((lib-name (lib:import->library-name import)) (let* ((lib-name (lib:import->library-name import))
(dir (lib:import->filename lib-name ".sld" append-dirs prepend-dirs)) (dir (lib:import->filename lib-name ".sld" append-dirs prepend-dirs))
(fp (open-input-file dir)) (fp (open-input-file dir))
(lib (read-all fp)) (lib (read-all fp))
(imports (lib:imports (car lib)))) (lib* (if expander
(list (lib:cond-expand (car lib) expander))
lib))
(imports (lib:imports (car lib*))))
(close-input-port fp) (close-input-port fp)
imports)) imports))
@ -619,7 +623,7 @@
;; Given an import set, get all dependant import names that are required ;; Given an import set, get all dependant import names that are required
;; The list of deps is intended to be returned in order, such that the ;; The list of deps is intended to be returned in order, such that the
;; libraries can be initialized properly in sequence. ;; libraries can be initialized properly in sequence.
(define (lib:get-all-import-deps imports append-dirs prepend-dirs) (define (lib:get-all-import-deps imports append-dirs prepend-dirs expander)
(letrec ((libraries/deps '()) (letrec ((libraries/deps '())
(find-deps! (find-deps!
(lambda (import-sets) (lambda (import-sets)
@ -631,7 +635,7 @@
;; Prevent cycles by only processing new libraries ;; Prevent cycles by only processing new libraries
((not (assoc lib-name libraries/deps)) ((not (assoc lib-name libraries/deps))
;; Find all dependencies of i (IE, libraries it imports) ;; Find all dependencies of i (IE, libraries it imports)
(let* ((deps (lib:read-imports import-set append-dirs prepend-dirs)) (let* ((deps (lib:read-imports import-set append-dirs prepend-dirs expander))
(dep-libs (map lib:import->library-name deps))) (dep-libs (map lib:import->library-name deps)))
(set! (set!
libraries/deps libraries/deps

View file

@ -755,7 +755,7 @@
(explicit-lib-names (explicit-lib-names
(map lib:import->library-name (lib:list->import-set import-sets))) (map lib:import->library-name (lib:list->import-set import-sets)))
;; All dependent libraries ;; All dependent libraries
(lib-names (lib:get-all-import-deps import-sets *append-dirs* *prepend-dirs*)) (lib-names (lib:get-all-import-deps import-sets *append-dirs* *prepend-dirs* #f))
(renamed-syms (filter pair? (renamed-syms (filter pair?
(map car (map car
(lib:imports->idb import-sets *append-dirs* *prepend-dirs*)))) (lib:imports->idb import-sets *append-dirs* *prepend-dirs*))))