- added "install-sub-package" function
This commit is contained in:
parent
9f7024b044
commit
01e77fb69f
|
@ -1,5 +1,5 @@
|
||||||
;;; Installation library for scsh modules.
|
;;; Installation library for scsh modules.
|
||||||
;;; $Id: install-lib-module.scm,v 1.6 2004/02/08 09:50:47 michel-schinz Exp $
|
;;; $Id: install-lib-module.scm,v 1.7 2004/02/19 07:29:16 michel-schinz Exp $
|
||||||
|
|
||||||
;;; Interfaces
|
;;; Interfaces
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@
|
||||||
install-directories
|
install-directories
|
||||||
install-directory-contents
|
install-directory-contents
|
||||||
install-string
|
install-string
|
||||||
|
install-sub-package
|
||||||
|
|
||||||
identity
|
identity
|
||||||
parse-boolean
|
parse-boolean
|
||||||
|
@ -38,6 +39,7 @@
|
||||||
|
|
||||||
(define-structure install install-interface
|
(define-structure install install-interface
|
||||||
(open scheme-with-scsh
|
(open scheme-with-scsh
|
||||||
|
cells
|
||||||
fluids
|
fluids
|
||||||
let-opt
|
let-opt
|
||||||
srfi-1
|
srfi-1
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
;;; Installation library for scsh modules.
|
;;; Installation library for scsh modules.
|
||||||
;;; $Id: install-lib.scm,v 1.9 2004/02/10 20:25:47 michel-schinz Exp $
|
;;; $Id: install-lib.scm,v 1.10 2004/02/19 07:29:16 michel-schinz Exp $
|
||||||
|
|
||||||
;; TODO
|
;; TODO
|
||||||
|
;; - add a "--debug" option
|
||||||
;; - add support for communication between configure and pkg-def.scm
|
;; - add support for communication between configure and pkg-def.scm
|
||||||
;; - add support for image creation,
|
;; - add support for image creation
|
||||||
;; - add support to maintain a documentation index,
|
;; - add support to maintain a documentation index
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; Support code templates
|
;; Support code templates
|
||||||
|
@ -330,11 +331,12 @@
|
||||||
(alist-get ext (package-extensions pkg) #f))
|
(alist-get ext (package-extensions pkg) #f))
|
||||||
|
|
||||||
;; List of all defined packages
|
;; List of all defined packages
|
||||||
(define packages '())
|
(define *packages* (make-fluid #f))
|
||||||
|
|
||||||
;; Add PKG to the above list of all defined packages.
|
;; Add PKG to the above list of all defined packages.
|
||||||
(define (add-package pkg)
|
(define (add-package pkg)
|
||||||
(set! packages (cons pkg packages)))
|
(cell-set! (fluid *packages*)
|
||||||
|
(cons pkg (cell-ref (fluid *packages*)))))
|
||||||
|
|
||||||
(define-syntax define-package
|
(define-syntax define-package
|
||||||
(syntax-rules ()
|
(syntax-rules ()
|
||||||
|
@ -344,6 +346,14 @@
|
||||||
(quasiquote extensions)
|
(quasiquote extensions)
|
||||||
(lambda () body ...))))))
|
(lambda () body ...))))))
|
||||||
|
|
||||||
|
;; Load (and evaluate the contents of) the FILE and return the list of
|
||||||
|
;; packages it defines.
|
||||||
|
(define (load-packages file)
|
||||||
|
(let-fluid *packages* (make-cell '())
|
||||||
|
(lambda ()
|
||||||
|
(load-quietly file)
|
||||||
|
(cell-ref (fluid *packages*)))))
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; Package options
|
;; Package options
|
||||||
;;
|
;;
|
||||||
|
@ -554,6 +564,48 @@
|
||||||
*install-layout* install-layout
|
*install-layout* install-layout
|
||||||
(package-install-thunk pkg)))
|
(package-install-thunk pkg)))
|
||||||
|
|
||||||
|
;; Install all PACKAGES with the given OPTIONS-VALUES.
|
||||||
|
(define (install-packages packages options-values)
|
||||||
|
(let* ((prefix (alist-get 'prefix options-values))
|
||||||
|
(dest-dir (alist-get 'dest-dir options-values))
|
||||||
|
(dest-prefix (and prefix (re-root-file-name prefix dest-dir)))
|
||||||
|
(layout-fn (alist-get 'layout options-values))
|
||||||
|
(layout-to (alist-get 'layout-to options-values))
|
||||||
|
(build (alist-get 'build options-values))
|
||||||
|
(non-shared-only? (alist-get 'non-shared-only options-values))
|
||||||
|
(activate? (not (alist-get 'inactive options-values))))
|
||||||
|
(let-fluids *options-values* options-values
|
||||||
|
(lambda ()
|
||||||
|
(for-each
|
||||||
|
(lambda (pkg)
|
||||||
|
(let* ((rel-layout (layout-fn build pkg))
|
||||||
|
(layout (absolute-layout rel-layout prefix))
|
||||||
|
(i-layout (absolute-layout rel-layout dest-prefix)))
|
||||||
|
(if layout-to
|
||||||
|
(call-with-output-file
|
||||||
|
(string-append layout-to "_" (package-full-name pkg))
|
||||||
|
(lambda (port)
|
||||||
|
(write rel-layout port) (newline port))))
|
||||||
|
(install-package layout i-layout pkg)
|
||||||
|
(if (and activate? (not non-shared-only?))
|
||||||
|
(activate-package i-layout pkg))))
|
||||||
|
packages)))))
|
||||||
|
|
||||||
|
(define (install-sub-package dir . rest)
|
||||||
|
(let-optionals rest ((options-diff '()))
|
||||||
|
(with-cwd dir
|
||||||
|
(install-packages
|
||||||
|
(load-packages package-definition-file)
|
||||||
|
(fold (lambda (diff options)
|
||||||
|
(cond ((pair? diff)
|
||||||
|
(cons diff (alist-delete (car diff) options)))
|
||||||
|
((symbol? diff)
|
||||||
|
(alist-delete diff options))
|
||||||
|
(else
|
||||||
|
(error "invalid option difference" diff))))
|
||||||
|
(fluid *options-values*)
|
||||||
|
options-diff)))))
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; Error handling
|
;; Error handling
|
||||||
;;
|
;;
|
||||||
|
@ -708,39 +760,17 @@ END
|
||||||
(if (not (file-exists? package-definition-file))
|
(if (not (file-exists? package-definition-file))
|
||||||
(display-error-and-exit "cannot find package definition file (~a)"
|
(display-error-and-exit "cannot find package definition file (~a)"
|
||||||
package-definition-file))
|
package-definition-file))
|
||||||
(load-quietly package-definition-file)
|
(let* ((packages (load-packages package-definition-file))
|
||||||
(let ((all-pkg-opts (all-package-options packages)))
|
(all-pkg-opts (all-package-options packages)))
|
||||||
(if (not (null? all-pkg-opts))
|
(if (not (null? all-pkg-opts))
|
||||||
(complete-usage! all-pkg-opts))
|
(complete-usage! all-pkg-opts))
|
||||||
(let* ((all-opts (append options (map pkg-opt->option all-pkg-opts)))
|
(let* ((all-opts (append options (map pkg-opt->option all-pkg-opts)))
|
||||||
(all-dfts (append options-defaults
|
(all-dfts (append options-defaults
|
||||||
(map pkg-opt-key&default all-pkg-opts)))
|
(map pkg-opt-key&default all-pkg-opts)))
|
||||||
(options-values (parse-options (cdr cmd-line) all-opts all-dfts))
|
(options-values (parse-options (cdr cmd-line) all-opts all-dfts))
|
||||||
(prefix (alist-get 'prefix options-values))
|
(prefix (alist-get 'prefix options-values)))
|
||||||
(dest-dir (alist-get 'dest-dir options-values))
|
|
||||||
(dest-prefix (and prefix (re-root-file-name prefix dest-dir)))
|
|
||||||
(layout-fn (alist-get 'layout options-values))
|
|
||||||
(layout-to (alist-get 'layout-to options-values))
|
|
||||||
(build (alist-get 'build options-values))
|
|
||||||
(non-shared-only? (alist-get 'non-shared-only options-values))
|
|
||||||
(activate? (not (alist-get 'inactive options-values))))
|
|
||||||
(if (not prefix)
|
(if (not prefix)
|
||||||
(display-error-and-exit "no prefix specified (use --prefix option)"))
|
(display-error-and-exit "no prefix specified (use --prefix option)"))
|
||||||
(if (not (file-name-absolute? prefix))
|
(if (not (file-name-absolute? prefix))
|
||||||
(display-error-and-exit "prefix must be an absolute path"))
|
(display-error-and-exit "prefix must be an absolute path"))
|
||||||
(let-fluids *options-values* options-values
|
(install-packages packages options-values))))
|
||||||
(lambda ()
|
|
||||||
(for-each
|
|
||||||
(lambda (pkg)
|
|
||||||
(let* ((rel-layout (layout-fn build pkg))
|
|
||||||
(layout (absolute-layout rel-layout prefix))
|
|
||||||
(i-layout (absolute-layout rel-layout dest-prefix)))
|
|
||||||
(if layout-to
|
|
||||||
(call-with-output-file
|
|
||||||
(string-append layout-to "_" (package-full-name pkg))
|
|
||||||
(lambda (port)
|
|
||||||
(write rel-layout port) (newline port))))
|
|
||||||
(install-package layout i-layout pkg)
|
|
||||||
(if (and activate? (not non-shared-only?))
|
|
||||||
(activate-package i-layout pkg))))
|
|
||||||
packages))))))
|
|
||||||
|
|
Loading…
Reference in New Issue