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.
This commit is contained in:
Ludovic Courtès 2017-03-20 22:13:27 +01:00
parent 6809d9377b
commit 9437fd7399
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
3 changed files with 16 additions and 8 deletions

View File

@ -221,7 +221,8 @@ GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go $(dist_noinst_DATA:%.scm=%.go)
nobase_dist_guilemodule_DATA = \ nobase_dist_guilemodule_DATA = \
$(MODULES) $(AUX_FILES) $(EXAMPLES) \ $(MODULES) $(AUX_FILES) $(EXAMPLES) \
$(MISC_DISTRO_FILES) $(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? # Do we need to provide our own non-broken (srfi srfi-37) module?
if INSTALL_SRFI_37 if INSTALL_SRFI_37
@ -455,14 +456,14 @@ SUFFIXES = .go
# files. See # files. See
# <http://lists.gnu.org/archive/html/guile-devel/2010-07/msg00125.html> # <http://lists.gnu.org/archive/html/guile-devel/2010-07/msg00125.html>
# for details. # 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 $(guix_install_go_files): install-nobase_dist_guilemoduleDATA
# The above trick doesn't work for 'config.go' because both 'config.scm' and # 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. # special treatment.
install-data-hook: set-bootstrap-executable-permissions install-data-hook: set-bootstrap-executable-permissions
touch "$(DESTDIR)$(guilemoduledir)/guix/config.go" touch "$(DESTDIR)$(guileobjectdir)/guix/config.go"
SUBDIRS = po/guix po/packages SUBDIRS = po/guix po/packages

View File

@ -85,9 +85,11 @@ if test "x$GUILE_EFFECTIVE_VERSION" = "x2.0"; then
PKG_CHECK_MODULES([GUILE], [guile-2.0 >= 2.0.9]) PKG_CHECK_MODULES([GUILE], [guile-2.0 >= 2.0.9])
fi fi
dnl Installation directory for .scm and .go files. dnl Installation directories for .scm and .go files.
guilemoduledir="${datarootdir}/guile/site/$GUILE_EFFECTIVE_VERSION" guilemoduledir="${datarootdir}/guile/site/$GUILE_EFFECTIVE_VERSION"
guileobjectdir="${libdir}/guile/$GUILE_EFFECTIVE_VERSION/site-ccache"
AC_SUBST([guilemoduledir]) AC_SUBST([guilemoduledir])
AC_SUBST([guileobjectdir])
dnl The GnuTLS bindings are necessary for substitutes over HTTPS and for 'guix dnl The GnuTLS bindings are necessary for substitutes over HTTPS and for 'guix
dnl pull', among other things. dnl pull', among other things.

View File

@ -30,10 +30,12 @@
(define config-lookup (define config-lookup
(let ((config '(("prefix" . "@prefix@") (let ((config '(("prefix" . "@prefix@")
("exec_prefix" . "@exec_prefix@")
("datarootdir" . "@datarootdir@") ("datarootdir" . "@datarootdir@")
("guilemoduledir" . "@guilemoduledir@") ("guilemoduledir" . "@guilemoduledir@")
("guileobjectdir" . "@guileobjectdir@")
("localedir" . "@localedir@"))) ("localedir" . "@localedir@")))
(var-ref-regexp (make-regexp "\\$\\{([a-z]+)\\}"))) (var-ref-regexp (make-regexp "\\$\\{([a-z_]+)\\}")))
(define (expand-var-ref match) (define (expand-var-ref match)
(lookup (match:substring match 1))) (lookup (match:substring match 1)))
(define (expand str) (define (expand str)
@ -45,14 +47,17 @@
(define (maybe-augment-load-paths!) (define (maybe-augment-load-paths!)
(unless (getenv "GUIX_UNINSTALLED") (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-path)
(push! module-dir %load-compiled-path)) (push! object-dir %load-compiled-path))
(let ((updates-dir (and=> (or (getenv "XDG_CONFIG_HOME") (let ((updates-dir (and=> (or (getenv "XDG_CONFIG_HOME")
(and=> (getenv "HOME") (and=> (getenv "HOME")
(cut string-append <> "/.config"))) (cut string-append <> "/.config")))
(cut string-append <> "/guix/latest")))) (cut string-append <> "/guix/latest"))))
(when (and updates-dir (file-exists? updates-dir)) (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-path)
(push! updates-dir %load-compiled-path))))) (push! updates-dir %load-compiled-path)))))