123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- (define-macro (compile-time-define-if-not-defined name expr)
- (with-exception-catcher
- (lambda (e)
- (eval `(define ,name ,expr)))
- (lambda ()
- (eval name)
- '(begin))))
- (compile-time-define-if-not-defined objects-loaded (make-table))
- (define (object-load-if-changed name i)
- (define (load+set)
- (load name)
- (table-set! objects-loaded name i))
- (if (eq? compile-mode 's)
- (error "BUG"))
- (cond ((table-ref objects-loaded name #f)
- => (lambda (oldi)
- (if (> i oldi)
- (load+set)
- #f)))
- (else
- (load+set))))
- (define (i/load name)
- (let ((sourcefile (string-append name ".scm")))
- (load sourcefile)))
- (define (set-compiler:perhaps-add lis key val)
- (if val
- (cons key (cons val lis))
- lis))
- (define mod:compiled? (make-parameter #f))
- (define (c/load name #!key ld-options cc-options)
-
- (let* ((compile-options (set-compiler:perhaps-add
- (set-compiler:perhaps-add
- compile-options
- ld-options: ld-options)
- cc-options: cc-options))
- (sourcefile (string-append name ".scm")))
- (case compile-mode
- ((s)
- (load sourcefile))
- (else
- (let* ((sourceinf (file-info sourcefile))
- (evtl-compile+load
- (lambda (i)
- (case compile-mode
- ((l)
- (error "not yet implemented"))
- ((c)
- (println (list "compiling: " name))
- (parameterize
- ((mod:compiled? #t))
- (apply compile-file sourcefile compile-options))
-
-
- (object-load-if-changed name i))
- (else
- (error "invalid compile-mode value:" compile-mode))))))
- (cond ((let lp ((i 1)
- (obinf #f))
- (let ((obp (string-append name ".o"
- (number->string i))))
- (if (file-exists? obp)
- (lp (+ i 1)
- (file-info obp))
- (and obinf
- (cons obinf (- i 1))))))
- =>
- (lambda (obinf+i)
- (if (> (time->seconds (file-info-last-modification-time sourceinf))
- (time->seconds (file-info-last-modification-time (car obinf+i))))
- (evtl-compile+load (cdr obinf+i))
-
- (object-load-if-changed name (cdr obinf+i)))))
- (else
-
- (evtl-compile+load 1))))))))
|