~ chicken-core (chicken-5) db2ebfeef35b4471e23b7cacaf364e1a29f00e0a
commit db2ebfeef35b4471e23b7cacaf364e1a29f00e0a Author: Evan Hanson <evhan@foldling.org> AuthorDate: Wed Aug 26 21:56:39 2020 +1200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Wed Sep 9 15:36:59 2020 +0200 Add support for `destination' specification in egg files diff --git a/chicken-install.scm b/chicken-install.scm index 6d976048..a3429610 100644 --- a/chicken-install.scm +++ b/chicken-install.scm @@ -183,6 +183,7 @@ (custom-build #f #f #f) (linkage #f #f #f) (objects #f #f #f) + (destination #f #f #f ,list?) (install-name #f #f #f ,nameprop?) (target #f #t #f) (host #f #t #f) diff --git a/egg-compile.scm b/egg-compile.scm index f6de778c..8612c747 100644 --- a/egg-compile.scm +++ b/egg-compile.scm @@ -128,6 +128,19 @@ (list (implib rtarget)))) +;;; normalize target path for "random files" (data, c-include, scheme-include) + +(define (normalize-destination dest mode) + (let ((dest* (normalize-pathname dest))) + (if (irregex-search '(: bos ".." ("\\/")) dest*) + (error "destination must be relative to CHICKEN install prefix" dest) + (normalize-pathname + (make-pathname (if (eq? mode 'target) + default-prefix ; XXX wrong! + (override-prefix "/" host-prefix)) + dest*))))) + + ;;; check condition in conditional clause (define (check-condition tst mode link) @@ -264,7 +277,7 @@ (dest #f) (files '())) (for-each compile-data/include (cddr info)) - (let* ((dest (or dest + (let* ((dest (or (and dest (normalize-destination dest mode)) (if (eq? mode 'target) default-sharedir ; XXX wrong! (override-prefix "/share" host-sharedir)))) @@ -293,8 +306,8 @@ (dest #f) (files '())) (for-each compile-data/include (cddr info)) - (let* ((dest (or dest - (if (eq? mode 'target) + (let* ((dest (or (and dest (normalize-destination dest mode)) + (if (eq? mode 'target) default-incdir ; XXX wrong! (override-prefix "/include" host-incdir)))) (dest (normalize-pathname (conc dest "/")))) @@ -308,8 +321,8 @@ (dest #f) (files '())) (for-each compile-data/include (cddr info)) - (let* ((dest (or dest - (if (eq? mode 'target) + (let* ((dest (or (and dest (normalize-destination dest mode)) + (if (eq? mode 'target) default-sharedir ; XXX wrong! (override-prefix "/share" host-sharedir)))) (dest (normalize-pathname (conc dest "/")))) @@ -1022,7 +1035,7 @@ (root (string-append srcdir "/")) (mkdir (mkdir-command platform)) (sfiles (map (cut prefix srcdir <>) files)) - (dfile (qs* dest platform #t)) + (dfile (qs* (normalize-destination dest mode) platform #t)) (ddir (shell-variable "DESTDIR" platform))) (print "\n" mkdir " " ddir dfile) (let-values (((ds fs) (partition directory? sfiles))) diff --git a/egg-environment.scm b/egg-environment.scm index 50ea972a..470d6894 100644 --- a/egg-environment.scm +++ b/egg-environment.scm @@ -79,6 +79,7 @@ EOF (define target-librarian (foreign-value "C_TARGET_LIBRARIAN" c-string)) (define target-librarian-options (foreign-value "C_TARGET_LIBRARIAN_FLAGS" c-string)) +(define host-prefix (foreign-value "C_INSTALL_PREFIX" c-string)) (define host-repo (foreign-value "C_INSTALL_EGG_HOME" c-string)) (define host-libdir (foreign-value "C_INSTALL_LIB_HOME" c-string)) (define host-bindir (foreign-value "C_INSTALL_BIN_HOME" c-string)) diff --git a/manual/Egg specification format b/manual/Egg specification format index 9eabfd2c..73da8566 100644 --- a/manual/Egg specification format +++ b/manual/Egg specification format @@ -375,12 +375,13 @@ to this component and that the object components are dependencies. [egg property] (destination NAME) -Specifies an alternative installation destination for the -built component and only applies -to components of type {{data}}, {{c-include}} and {{scheme-include}}. -This property should only be used in extreme -cases, as it is recommended to use the default installation -locations, which are: +Specifies an alternative installation destination for the built +component and only applies to components of type {{data}}, {{c-include}} +and {{scheme-include}}. {{NAME}} must be a relative path and is +considered relative to CHICKEN's installation prefix. + +This property should only be used in extreme cases, as it is recommended +to use the default installation locations, which are: * for C include files: {{<PREFIX>/include/chicken/}}Trap