From 9437fd7399425ed281e1bfc13240288ba9078caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Mon, 20 Mar 2017 22:13:27 +0100 Subject: [PATCH] build: Install .go files to $libdir/guile/X.Y. * configure.ac: Define and substitute 'guileobjectdir'. * Makefile.am (nobase_nodist_guilemodule_DATA): Remove $(GOBJECTS). (nobase_nodist_guileobject_DATA): New variable. (guix_install_go_files): Adjust accordingly. (install-data-hook): Likewise. * scripts/guix.in (config-lookup): Add 'exec_prefix' and 'guileobjectdir'. Add '_' in VAR-REF-REGEXP. (maybe-augment-load-paths!): Distinguish OBJECT-DIR from MODULE-DIR. --- Makefile.am | 9 +++++---- configure.ac | 4 +++- scripts/guix.in | 11 ++++++++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/Makefile.am b/Makefile.am index ff37a46355..cd2388ac65 100644 --- a/Makefile.am +++ b/Makefile.am @@ -221,7 +221,8 @@ GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go $(dist_noinst_DATA:%.scm=%.go) nobase_dist_guilemodule_DATA = \ $(MODULES) $(AUX_FILES) $(EXAMPLES) \ $(MISC_DISTRO_FILES) -nobase_nodist_guilemodule_DATA = $(GOBJECTS) guix/config.scm +nobase_nodist_guilemodule_DATA = guix/config.scm +nobase_nodist_guileobject_DATA = $(GOBJECTS) # Do we need to provide our own non-broken (srfi srfi-37) module? if INSTALL_SRFI_37 @@ -455,14 +456,14 @@ SUFFIXES = .go # files. See # # for details. -guix_install_go_files = install-nobase_nodist_guilemoduleDATA +guix_install_go_files = install-nobase_nodist_guileobjectDATA $(guix_install_go_files): install-nobase_dist_guilemoduleDATA # The above trick doesn't work for 'config.go' because both 'config.scm' and -# 'config.go' are listed in $(nobase_nodist_guilemodule_DATA). Thus, give it +# 'config.go' are listed in $(nobase_nodist_guileobject_DATA). Thus, give it # special treatment. install-data-hook: set-bootstrap-executable-permissions - touch "$(DESTDIR)$(guilemoduledir)/guix/config.go" + touch "$(DESTDIR)$(guileobjectdir)/guix/config.go" SUBDIRS = po/guix po/packages diff --git a/configure.ac b/configure.ac index 76f52e0ec3..2b4620c44b 100644 --- a/configure.ac +++ b/configure.ac @@ -85,9 +85,11 @@ if test "x$GUILE_EFFECTIVE_VERSION" = "x2.0"; then PKG_CHECK_MODULES([GUILE], [guile-2.0 >= 2.0.9]) fi -dnl Installation directory for .scm and .go files. +dnl Installation directories for .scm and .go files. guilemoduledir="${datarootdir}/guile/site/$GUILE_EFFECTIVE_VERSION" +guileobjectdir="${libdir}/guile/$GUILE_EFFECTIVE_VERSION/site-ccache" AC_SUBST([guilemoduledir]) +AC_SUBST([guileobjectdir]) dnl The GnuTLS bindings are necessary for substitutes over HTTPS and for 'guix dnl pull', among other things. diff --git a/scripts/guix.in b/scripts/guix.in index 5d6921dd09..e20c274242 100644 --- a/scripts/guix.in +++ b/scripts/guix.in @@ -30,10 +30,12 @@ (define config-lookup (let ((config '(("prefix" . "@prefix@") + ("exec_prefix" . "@exec_prefix@") ("datarootdir" . "@datarootdir@") ("guilemoduledir" . "@guilemoduledir@") + ("guileobjectdir" . "@guileobjectdir@") ("localedir" . "@localedir@"))) - (var-ref-regexp (make-regexp "\\$\\{([a-z]+)\\}"))) + (var-ref-regexp (make-regexp "\\$\\{([a-z_]+)\\}"))) (define (expand-var-ref match) (lookup (match:substring match 1))) (define (expand str) @@ -45,14 +47,17 @@ (define (maybe-augment-load-paths!) (unless (getenv "GUIX_UNINSTALLED") - (let ((module-dir (config-lookup "guilemoduledir"))) + (let ((module-dir (config-lookup "guilemoduledir")) + (object-dir (config-lookup "guileobjectdir"))) (push! module-dir %load-path) - (push! module-dir %load-compiled-path)) + (push! object-dir %load-compiled-path)) (let ((updates-dir (and=> (or (getenv "XDG_CONFIG_HOME") (and=> (getenv "HOME") (cut string-append <> "/.config"))) (cut string-append <> "/guix/latest")))) (when (and updates-dir (file-exists? updates-dir)) + ;; XXX: Currently 'guix pull' puts both .scm and .go files in + ;; UPDATES-DIR. (push! updates-dir %load-path) (push! updates-dir %load-compiled-path)))))