Package: guile;
Reported by: Jan Schukat <shookie <at> email.de>
Date: Fri, 1 Mar 2013 16:23:02 UTC
Severity: normal
Done: Andy Wingo <wingo <at> pobox.com>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: Jan Schukat <shookie <at> email.de> To: Ludovic Courtès <ludo <at> gnu.org> Cc: 13848 <at> debbugs.gnu.org Subject: bug#13848: Statically linking guile-2.0. Date: Tue, 05 Mar 2013 01:54:12 +0100
[Message part 1 (text/plain, inline)]
Ok, I did some more work on the linux and mingw side. My little test project now compiles and works under linux, provided in gc.c I remove the static qualifiers from GC_set_finalize_on_demand, GC_get_heap_usage_safe, GC_get_free_space_divisor and GC_set_finalizer_notifier. That still gave a warning at linking time, but any combination of preprocessor guards caused either compile errors or link errors. Also, when building guile-2.9 with --disable-posix, there comes a lisp-compile error when the standard modules are made: GUILEC ice-9/popen.go Backtrace: In ice-9/eval.scm: 376: 19 [eval # #] In srfi/srfi-1.scm: 619: 18 [for-each #<procedure a389618 at ice-9/eval.scm:405:20 (a)> #] In ice-9/eval.scm: 376: 17 [eval # #] 470: 16 [lp (#<fluid 23>) ("")] In system/base/target.scm: 59: 15 [with-target "i686-pc-linux-gnu" ...] In system/base/compile.scm: 147: 14 [compile-file "ice-9/popen.scm" #:output-file ...] 43: 13 [call-once #<procedure a434b40 at system/base/compile.scm:56:5 ()>] In ice-9/boot-9.scm: 171: 12 [with-throw-handler #t ...] In system/base/compile.scm: 59: 11 [#<procedure a434b20 at system/base/compile.scm:58:9 ()>] 150: 10 [#<procedure a434b60 at system/base/compile.scm:148:8 (port)> #<input-output: ice-9/popen.go.HBtyxJ 6>] 199: 9 [read-and-compile #<input: ice-9/popen.scm 5> #:from ...] 211: 8 [lp (#<tree-il (let # # ...)>) #<directory (ice-9 popen) a4f2a68> ...] 177: 7 [lp (#<procedure compile-tree-il (x e opts)>) (eval-when # #) ...] In ice-9/boot-9.scm: 2131: 6 [save-module-excursion #<procedure a50b9f0 at language/scheme/compile-tree-il.scm:29:3 ()>] In language/scheme/compile-tree-il.scm: 31: 5 [#<procedure a50b9f0 at language/scheme/compile-tree-il.scm:29:3 ()>] In ice-9/psyntax.scm: 1091: 4 [expand-top-sequence ((eval-when # #)) () ((top)) ...] 976: 3 [scan ((eval-when # #)) () ((top)) ...] 270: 2 [scan ((load-extension # "scm_init_popen")) () ((top)) ...] In unknown file: ?: 1 [load-extension "libguile-2.0" "scm_init_popen"] In ice-9/boot-9.scm: 106: 0 [#<procedure a434b00 at ice-9/boot-9.scm:97:6 (thrown-k . args)> misc-error ...] ice-9/boot-9.scm:106:20: In procedure #<procedure a434b00 at ice-9/boot-9.scm:97:6 (thrown-k . args)>: ice-9/boot-9.scm:106:20: In procedure dynamic-pointer: Symbol not found: scm_init_popen make[3]: *** [ice-9/popen.go] Error 1 make[3]: Leaving directory `/home/shookie/guiletest/lib/guile-2.0/module' make[2]: *** [install-recursive] Error 1 make[2]: Leaving directory `/home/shookie/guiletest/lib/guile-2.0' make[1]: *** [install] Error 2 make[1]: Leaving directory `/home/shookie/guiletest/lib/guile-2.0' make: *** [lib/lib/libguile-2.0.a] Error 2 When I leave out that option it (the test project) builds and runs fine on linux now though. On mingw, I still have to define the struct timespec: diff --recursive guile-2.0/lib/stat-time.h guile-2.0.7/lib/stat-time.h 26,32d25 < #ifndef _TIMESPEC_DEFINED < struct timespec { < time_t tv_sec; < long tv_nsec; < }; < #endif < diff --recursive guile-2.0/libguile/random.c guile-2.0.7/libguile/random.c 668c668 < scm_from_ulong(getpid()), /* process ID */ --- > scm_getpid (), /* process ID */ diff --recursive guile-2.0/libguile/threads.c guile-2.0.7/libguile/threads.c 70,75d69 < #ifndef _TIMESPEC_DEFINED < struct timespec { < time_t tv_sec; < long tv_nsec; < }; < #endif With that it builds. When I run it with --program-suffix=.exe it also copies guild.exe (without it fails while trying), but then fails when it tries to run it without the suffix. So I run it again without the --program-suffix, and since the files are copied in the previous build it starts them, but then they fail like this: but then fails installing the lisp modules: GEN guile-procedures.texi Throw without catch before boot: Throw to key system-error with args ("canonicalize-path" "~A" ("No such file or directory") (2))Aborting. This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. make[4]: *** [guile-procedures.texi] Error 1 make[4]: Leaving directory `/c/Users/shookie/guiletest/lib/guile-2.0/libguile' make[3]: *** [install] Error 2 make[3]: Leaving directory `/c/Users/shookie/guiletest/lib/guile-2.0/libguile' make[2]: *** [install-recursive] Error 1 make[2]: Leaving directory `/c/Users/shookie/guiletest/lib/guile-2.0' make[1]: *** [install] Error 2 make[1]: Leaving directory `/c/Users/shookie/guiletest/lib/guile-2.0' make: *** [lib/lib/libguile-2.0.a] Error 2 I attached the new updated test-project tgz. In summary, I still think on mingw the configure script gets very confused about paths and file names. Regards Jan Schukat On 03/02/2013 04:28 PM, Ludovic Courtès wrote: > Hello, > > Thanks for the report. > > Jan Schukat<shookie <at> email.de> skribis: > >> But then on install (processing .texi files) guile.exe fails with this >> message: >> >> "Throw without catch before boot: >> Throw to key system-error with args ("canonicalize-path" "~A" ("No >> such file or directory") (2))Aborting. > [...] > >> Calling guile.exe directly gives this message: >> >> "Throw without catch before boot: >> Throw to key misc-error with args ("primitive-load-path" "Unable to >> find file ~S in load path" ("ice-9/boot-9") #f)Aborting. > Does it happen when running the installed Guile? That is, you > successfully run ‘make’ and ‘make install’ (and ideally ‘make check’), > and it’s the installed ‘guile’ binary that produces this message? > > As most Unix and GNU packages, Guile expects to be installed in the > place specified by --prefix. If you install it elsewhere, it will fail > to find its companion files, such as ice-9/boot-9.scm. So you really > must install it in --prefix, and leave it there. Is it what you did? > > (Note that this restriction can be worked around by techniques such as > found in > <http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/patches/guile-relocatable.patch>.) > > Thanks, > Ludo’.
[guiletest.tgz (application/x-compressed-tar, attachment)]
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.