- added "install-sub-package" function
This commit is contained in:
parent
9f7024b044
commit
01e77fb69f
|
@ -1,5 +1,5 @@
|
|||
;;; 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
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
|||
install-directories
|
||||
install-directory-contents
|
||||
install-string
|
||||
install-sub-package
|
||||
|
||||
identity
|
||||
parse-boolean
|
||||
|
@ -38,6 +39,7 @@
|
|||
|
||||
(define-structure install install-interface
|
||||
(open scheme-with-scsh
|
||||
cells
|
||||
fluids
|
||||
let-opt
|
||||
srfi-1
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
;;; 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
|
||||
;; - add a "--debug" option
|
||||
;; - add support for communication between configure and pkg-def.scm
|
||||
;; - add support for image creation,
|
||||
;; - add support to maintain a documentation index,
|
||||
;; - add support for image creation
|
||||
;; - add support to maintain a documentation index
|
||||
|
||||
;;
|
||||
;; Support code templates
|
||||
|
@ -330,11 +331,12 @@
|
|||
(alist-get ext (package-extensions pkg) #f))
|
||||
|
||||
;; List of all defined packages
|
||||
(define packages '())
|
||||
(define *packages* (make-fluid #f))
|
||||
|
||||
;; Add PKG to the above list of all defined packages.
|
||||
(define (add-package pkg)
|
||||
(set! packages (cons pkg packages)))
|
||||
(cell-set! (fluid *packages*)
|
||||
(cons pkg (cell-ref (fluid *packages*)))))
|
||||
|
||||
(define-syntax define-package
|
||||
(syntax-rules ()
|
||||
|
@ -344,6 +346,14 @@
|
|||
(quasiquote extensions)
|
||||
(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
|
||||
;;
|
||||
|
@ -554,6 +564,48 @@
|
|||
*install-layout* install-layout
|
||||
(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
|
||||
;;
|
||||
|
@ -708,39 +760,17 @@ END
|
|||
(if (not (file-exists? package-definition-file))
|
||||
(display-error-and-exit "cannot find package definition file (~a)"
|
||||
package-definition-file))
|
||||
(load-quietly package-definition-file)
|
||||
(let ((all-pkg-opts (all-package-options packages)))
|
||||
(let* ((packages (load-packages package-definition-file))
|
||||
(all-pkg-opts (all-package-options packages)))
|
||||
(if (not (null? all-pkg-opts))
|
||||
(complete-usage! all-pkg-opts))
|
||||
(let* ((all-opts (append options (map pkg-opt->option all-pkg-opts)))
|
||||
(all-dfts (append options-defaults
|
||||
(map pkg-opt-key&default all-pkg-opts)))
|
||||
(options-values (parse-options (cdr cmd-line) all-opts all-dfts))
|
||||
(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))))
|
||||
(prefix (alist-get 'prefix options-values)))
|
||||
(if (not prefix)
|
||||
(display-error-and-exit "no prefix specified (use --prefix option)"))
|
||||
(if (not (file-name-absolute? prefix))
|
||||
(display-error-and-exit "prefix must be an absolute path"))
|
||||
(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))))))
|
||||
(install-packages packages options-values))))
|
||||
|
|
Loading…
Reference in New Issue