#| -*-Scheme-*-
-$Id: option.scm,v 14.25 1993/11/02 20:13:09 adams Exp $
+$Id: option.scm,v 14.26 1993/11/13 02:21:31 gjr Exp $
Copyright (c) 1988-1993 Massachusetts Institute of Technology
;;; package: (runtime options)
(declare (usual-integrations))
-
+\f
(define (load-option name)
(let ((entry (assq name options)))
(if (not entry)
(error "Unknown option name" name))
(if (not (memq name loaded-options))
- (let ((directory (library-directory-pathname "options")))
+ (let ((directory (delay (library-directory-pathname "options"))))
(for-each
(lambda (descriptor)
(let ((environment
(package/environment (find-package (car descriptor)))))
- (for-each (lambda (filename)
- (let ((path (merge-pathnames filename directory)))
- (with-working-directory-pathname
- (directory-pathname path)
- (lambda ()
- (load path
- environment
- syntax-table/system-internal
- true)))))
- (cddr descriptor))
+ (for-each
+ (lambda (filename)
+ (cond (((ucode-primitive initialize-c-compiled-block 1)
+ (string-append "runtime_" filename))
+ => (lambda (obj)
+ (purify obj)
+ (scode-eval obj environment)))
+ (else
+ (let ((path
+ (merge-pathnames filename (force directory))))
+ (with-working-directory-pathname
+ (directory-pathname path)
+ (lambda ()
+ (load path
+ environment
+ syntax-table/system-internal
+ true)))))))
+ (cddr descriptor))
(eval (cadr descriptor) environment)))
(cdr entry))
(set! loaded-options (cons name loaded-options))))
(SUBPROCESS ((RUNTIME SUBPROCESS) (INITIALIZE-PACKAGE!) "process"))))
(define loaded-options
- '())
\ No newline at end of file
+ '())
+
+(define (declare-shared-library shared-library thunk)
+ (let ((thunk-valid?
+ (lambda (thunk)
+ (not (condition? (ignore-errors thunk))))))
+ (add-event-receiver!
+ event:after-restore
+ (lambda ()
+ (if (not (thunk-valid? thunk))
+ (fluid-let ((load/suppress-loading-message? true))
+ (load (merge-pathnames
+ (library-directory-pathname "shared")
+ shared-library))))))))
\ No newline at end of file