mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-25 04:55:04 +02:00
WIP: allowing append/prepend library paths
This commit is contained in:
parent
130274588c
commit
379cac7ac3
2 changed files with 12 additions and 12 deletions
|
@ -27,7 +27,7 @@
|
||||||
;; Code emission.
|
;; Code emission.
|
||||||
|
|
||||||
; c-compile-and-emit : (string -> A) exp -> void
|
; c-compile-and-emit : (string -> A) exp -> void
|
||||||
(define (c-compile-and-emit input-program lib-deps src-file)
|
(define (c-compile-and-emit input-program lib-deps src-file append-dirs prepend-dirs)
|
||||||
(call/cc
|
(call/cc
|
||||||
(lambda (return)
|
(lambda (return)
|
||||||
(define globals '())
|
(define globals '())
|
||||||
|
@ -105,10 +105,10 @@
|
||||||
;; As of now, that will have to be dealt with later.
|
;; As of now, that will have to be dealt with later.
|
||||||
(trace:info "imports:")
|
(trace:info "imports:")
|
||||||
(trace:info imports)
|
(trace:info imports)
|
||||||
(set! imported-vars (lib:imports->idb imports))
|
(set! imported-vars (lib:imports->idb imports append-dirs prepend-dirs))
|
||||||
(trace:info "resolved imports:")
|
(trace:info "resolved imports:")
|
||||||
(trace:info imported-vars)
|
(trace:info imported-vars)
|
||||||
(let ((meta (lib:resolve-meta imports)))
|
(let ((meta (lib:resolve-meta imports append-dirs prepend-dirs)))
|
||||||
(set! *defined-macros* (append meta *defined-macros*))
|
(set! *defined-macros* (append meta *defined-macros*))
|
||||||
(trace:info "resolved macros:")
|
(trace:info "resolved macros:")
|
||||||
(trace:info meta))
|
(trace:info meta))
|
||||||
|
@ -314,7 +314,7 @@
|
||||||
(with-output-to-file
|
(with-output-to-file
|
||||||
src-file
|
src-file
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(c-compile-and-emit program lib-deps in-file)))))
|
(c-compile-and-emit program lib-deps in-file append-dirs prepend-dirs)))))
|
||||||
(result (create-c-file in-prog)))
|
(result (create-c-file in-prog)))
|
||||||
|
|
||||||
;; Compile the generated C file
|
;; Compile the generated C file
|
||||||
|
|
|
@ -275,9 +275,9 @@
|
||||||
imports))
|
imports))
|
||||||
|
|
||||||
;; Read export list for a given import
|
;; Read export list for a given import
|
||||||
(define (lib:import->export-list import)
|
(define (lib:import->export-list import append-dirs prepend-dirs)
|
||||||
(let* ((lib-name (lib:import->library-name import))
|
(let* ((lib-name (lib:import->library-name import))
|
||||||
(dir (string-append (lib:import->filename lib-name)))
|
(dir (string-append (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))
|
||||||
(exports (lib:exports (car lib))))
|
(exports (lib:exports (car lib))))
|
||||||
|
@ -386,7 +386,7 @@
|
||||||
;;
|
;;
|
||||||
;; TODO: convert this to use a hashtable. Initially a-lists
|
;; TODO: convert this to use a hashtable. Initially a-lists
|
||||||
;; will be used to prove out the concept, but this is inefficient
|
;; will be used to prove out the concept, but this is inefficient
|
||||||
(define (lib:imports->idb imports)
|
(define (lib:imports->idb imports append-dirs prepend-dirs)
|
||||||
(apply
|
(apply
|
||||||
append
|
append
|
||||||
(map
|
(map
|
||||||
|
@ -398,7 +398,7 @@
|
||||||
(cons id lib-name)
|
(cons id lib-name)
|
||||||
ids))
|
ids))
|
||||||
'()
|
'()
|
||||||
(lib:import->export-list import-set))))
|
(lib:import->export-list import-set append-dirs prepend-dirs))))
|
||||||
(map lib:list->import-set imports))))
|
(map lib:list->import-set imports))))
|
||||||
|
|
||||||
;; Convert from the import DB to a list of identifiers that are imported.
|
;; Convert from the import DB to a list of identifiers that are imported.
|
||||||
|
@ -448,9 +448,9 @@
|
||||||
(car entry)))
|
(car entry)))
|
||||||
#f))
|
#f))
|
||||||
|
|
||||||
(define (lib:import->metalist import)
|
(define (lib:import->metalist import append-dirs prepend-dirs)
|
||||||
(let* ((lib-name (lib:import->library-name import))
|
(let* ((lib-name (lib:import->library-name import))
|
||||||
(file (lib:import->filename lib-name ".meta"))
|
(file (lib:import->filename lib-name ".meta" append-dirs prepend-dirs))
|
||||||
(fp #f)
|
(fp #f)
|
||||||
(result '()))
|
(result '()))
|
||||||
(cond
|
(cond
|
||||||
|
@ -460,12 +460,12 @@
|
||||||
(close-input-port fp)))
|
(close-input-port fp)))
|
||||||
result))
|
result))
|
||||||
|
|
||||||
(define (lib:resolve-meta imports)
|
(define (lib:resolve-meta imports append-dirs prepend-dirs)
|
||||||
(apply
|
(apply
|
||||||
append
|
append
|
||||||
(map
|
(map
|
||||||
(lambda (import)
|
(lambda (import)
|
||||||
(lib:import->metalist import))
|
(lib:import->metalist import append-dirs prepend-dirs))
|
||||||
imports)))
|
imports)))
|
||||||
|
|
||||||
;; Given an import set, get all dependant import names that are required
|
;; Given an import set, get all dependant import names that are required
|
||||||
|
|
Loading…
Add table
Reference in a new issue