View Issue Details

IDProjectCategoryView StatusLast Update
0006660GNUnetotherpublic2020-12-06 12:25
Reportermd Assigned To 
PrioritylowSeveritymajorReproducibilityalways
Status newResolutionopen 
PlatformGNU/LinuxOSGuix SystemOS Versionv???
Product VersionGit master 
Summary0006660: gnunet-guile does not install go-files in correct location
Descriptiongnunet-guile installs .scm and .go files in the same directory.
However, guile only searches for .go files in $GUILE_LOAD_COMPILED_PATH and not $GUILE_LOAD_PATH
(and in two additional locations based upon the configuration of guile). So when importing a gnunet-guile module,
the .scm is recompiled.

As the .scm of (gnu gnunet config) is not installed and guile won't find the .go of (gnu gnunet config), imports fail.
Steps To Reproduceguix environment guile-gnunet --ad-goc guile-gnunet

[env] $ guile -c '(@ (gnu gnunet identity) ego?)

Yes, the guix package of guile-gnunet is a bit old (2015),
but the installation directories haven't changed and neither
has the special status of (gnu gnunet config)
Additional Informationguile --version: guile (GNU Guile) 2.0.14
guix --version: guix (GNU Guix) 0ed6c7444e9a5509df11d4802bb257f3bc883733

Solution: do one or both of below:
* install the .scm of (gnu gnunet config)
* install .go files where guile can find them.

   For Guix System a ./configure --godir=??? parameter would be practical

p.s. could a gnunet-guile project be made in Mantis for gnunet-guile specific issues?
TagsNo tags attached.
Attached Files
log (2,687 bytes)   
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling /gnu/store/8m2r3r56y2yslg0f1f19g1kgvzr4zjh0-profile/share/guile/site/2.0/gnu/gnunet/identity.scm
;;; compiling /gnu/store/8m2r3r56y2yslg0f1f19g1kgvzr4zjh0-profile/share/guile/site/2.0/gnu/gnunet/common.scm
;;; WARNING: compilation of /gnu/store/8m2r3r56y2yslg0f1f19g1kgvzr4zjh0-profile/share/guile/site/2.0/gnu/gnunet/common.scm failed:
;;; ERROR: no code for module (gnu gnunet config)
;;; WARNING: compilation of /gnu/store/8m2r3r56y2yslg0f1f19g1kgvzr4zjh0-profile/share/guile/site/2.0/gnu/gnunet/identity.scm failed:
;;; ERROR: no code for module (gnu gnunet config)
Backtrace:
In ice-9/psyntax.scm:
 302: 19 [get-global-definition-hook ego? (public gnu gnunet identity)]
In ice-9/boot-9.scm:
2825: 18 [#<procedure 7fee2a98aea0 at ice-9/boot-9.scm:2813:4 (name #:optional autoload version #:key ensure)> # ...]
3101: 17 [try-module-autoload (gnu gnunet identity) #f]
2412: 16 [save-module-excursion #<procedure 7fee2a8f8cc0 at ice-9/boot-9.scm:3102:17 ()>]
3121: 15 [#<procedure 7fee2a8f8cc0 at ice-9/boot-9.scm:3102:17 ()>]
In unknown file:
   ?: 14 [primitive-load-path "gnu/gnunet/identity" ...]
In ice-9/eval.scm:
 505: 13 [#<procedure 7fee2aaf5620 at ice-9/eval.scm:499:4 (exp)> #]
In ice-9/psyntax.scm:
1107: 12 [expand-top-sequence ((define-module # # # ...)) () ((top)) ...]
 990: 11 [scan ((define-module (gnu gnunet identity) #:use-module ...)) () ...]
 279: 10 [scan ((#(syntax-object let # ...) (#) (# #) ...)) () ...]
In ice-9/eval.scm:
 411: 9 [eval # ()]
In ice-9/boot-9.scm:
2987: 8 [define-module* (gnu gnunet identity) #:filename ...]
2962: 7 [resolve-imports ((#) (#) (#) (#) ...)]
2900: 6 [resolve-interface (gnu gnunet configuration) #:select ...]
2825: 5 [#<procedure 7fee2a98aea0 at ice-9/boot-9.scm:2813:4 (name #:optional autoload version #:key ensure)> # ...]
3101: 4 [try-module-autoload (gnu gnunet configuration) #f]
2412: 3 [save-module-excursion #<procedure 7fee2a43d300 at ice-9/boot-9.scm:3102:17 ()>]
3121: 2 [#<procedure 7fee2a43d300 at ice-9/boot-9.scm:3102:17 ()>]
In unknown file:
   ?: 1 [primitive-load-path "gnu/gnunet/configuration" ...]
In /gnu/store/8m2r3r56y2yslg0f1f19g1kgvzr4zjh0-profile/share/guile/site/2.0/gnu/gnunet/configuration.scm:
  36: 0 [#<procedure 7fee2a4242c0 ()>]

/gnu/store/8m2r3r56y2yslg0f1f19g1kgvzr4zjh0-profile/share/guile/site/2.0/gnu/gnunet/configuration.scm:36:0: In procedure #<procedure 7fee2a4242c0 ()>:
/gnu/store/8m2r3r56y2yslg0f1f19g1kgvzr4zjh0-profile/share/guile/site/2.0/gnu/gnunet/configuration.scm:36:0: In procedure module-lookup: Unbound variable: define-gnunet
log (2,687 bytes)   

Activities

md

2020-12-06 11:42

reporter   ~0017162

The attached patch fixes the issue

How to test when running Guix:
1. apply the patch
2. guix environment --pure --ad-hoc guile@2.0 guile-gnunet --with-git-url=guile-gnunet=$PWD --with-commit=guile-gnunet=1049583ecc26a32b5afdedd7c49cd252a1aab74a
   with 1049583ecc26a32b5afdedd7c49cd252a1aab74a the commit hash after applying the patch
  and $PWD the location of the git repo
3. $guile
scheme@(guile-user)> (use-modules (gnu gnunet identity)
4. Success!
0027-build-Install-.go-and-.scm-in-separate-directories.patch (2,358 bytes)   
From 1049583ecc26a32b5afdedd7c49cd252a1aab74a Mon Sep 17 00:00:00 2001
From: Maxime Devos <maxime.devos@student.kuleuven.be>
Date: Sun, 6 Dec 2020 11:29:25 +0100
Subject: [PATCH 27/27] build: Install *.go and *.scm in separate directories

* Makefile.am (moduledir): new variable
* Makefile.am (objectdir): new variable
* Makefile.am: install *.scm and *.go separately
* configure.ac: determine the installation directory for
  module source code and compiled code
---
 Makefile.am  |  5 ++++-
 configure.ac | 17 ++++++++++++-----
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 93c7029..ba7253d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,6 @@
 # Guile-GNUnet --- Guile bindings for GNUnet.
 # Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2020 Maxime Devos <maxime.devos@student.kuleuven.be>
 #
 # This file is part of Guile-GNUnet.
 #
@@ -31,8 +32,10 @@ MODULES =					\
 
 GOBJECTS = $(MODULES:%.scm=%.go) gnu/gnunet/config.go
 
+moduledir = @guilemoduledir@
+objectdir  = @guileobjectdir@
 nobase_dist_guilemodule_DATA = $(MODULES)
-nobase_nodist_guilemodule_DATA = $(GOBJECTS)
+nobase_nodist_object_DATA = $(GOBJECTS)
 
 # TODO: Handle tests.
 
diff --git a/configure.ac b/configure.ac
index b4405c1..a309220 100644
--- a/configure.ac
+++ b/configure.ac
@@ -21,16 +21,23 @@ dnl We require pkg.m4 (from pkg-config) and guile.m4 (from Guile.)
 dnl Make sure they are available.
 m4_pattern_forbid([PKG_CHECK_MODULES])
 m4_pattern_forbid([GUILE_MODULE_AVAILABLE])
+m4_pattern_forbid([GUILE_PKG])
+m4_pattern_forbid([GUILE_PROGS])
+m4_pattern_allow([GUILE_PKG_ERRORS])
+GUILE_PKG([2.0])
+GUILE_PROGS
 
-PKG_CHECK_MODULES([GUILE], [guile-2.0 >= 2.0.7])
-AC_PATH_PROG([GUILE], [guile])
-AC_PATH_PROG([GUILD], [guild])
 if test "x$GUILD" = "x"; then
    AC_MSG_ERROR(['guild' binary not found; please check your Guile 2.x installation.])
 fi
-
-guilemoduledir="${datarootdir}/guile/site/2.0"
+if test "x$GUILE_EFFECTIVE_VERSION" = "x2.0"; then
+  PKG_CHECK_MODULES([GUILE], [guile-2.0 >= 2.0.7])
+fi
+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])
 
 AC_CACHE_SAVE
 
-- 
2.29.2

md

2020-12-06 12:25

reporter   ~0017163

oops, these patches are against the old tree from 2015, not the new tree. The new tree is fine actually.

Issue History

Date Modified Username Field Change
2020-12-06 01:01 md New Issue
2020-12-06 01:01 md File Added: log
2020-12-06 11:42 md Note Added: 0017162
2020-12-06 11:42 md File Added: 0027-build-Install-.go-and-.scm-in-separate-directories.patch
2020-12-06 12:25 md Note Added: 0017163