Subject: Re: bug#13848: Statically linking guile-2.0.

From: Jan Schukat <[email-masked]>
Date: Sat, 06 Apr 2013 01:14:46 +0200

Finally got to look into the load path issues on windows. Did so by 
adding some debug output into scm_init_load_path and 
scm_primitive_load_path.

When during the build/compile the load paths are are normal windows 
paths, with output like this:

   GEN      libguile/guile-procedures.txt

path:    (c:\Users\shookie\guiletest\lib\guile-2.0\module 
c:\Users\shookie\guiletest\lib\guile-2.0\guile-readline)
full_filename: 
c:\Users\shookie\guiletest\lib\guile-2.0\module\ice-9/boot-9.scm
compiled_filename: 
c:\Users\shookie\guiletest\lib\guile-2.0\module\ice-9/boot-9.go

full_filename: 
c:\Users\shookie\guiletest\lib\guile-2.0\module\ice-9/r4rs.scm
compiled_filename: 
c:\Users\shookie\guiletest\lib\guile-2.0\module\ice-9/r4rs.go

But when I start the installed guile.exe, the output is like this and it 
can't find the scheme modules:

path:   (/c/Users/shookie/guiletest/lib/share/guile/2.0 
/c/Users/shookie/guiletest/lib/share/guile/site/2.0 
/c/Users/shookie/guiletest/lib/share/guile/site 
/c/Users/shookie/guiletest/lib/sh are/guile)
full_filename:  #f
compiled_filename:      #f

So as I suspected a conflict between mingw-paths and windows paths. I 
suspect the mingw paths in the installed exe are the static #defines 
that configure sets up since those /c/User/... paths also show up when 
you extract the strings fromthe binary with strings guile.exe|grep "/lib".

Now when I export 
GUILE_LOAD_PATH="/c/Users/shookie/guiletest/lib/share/guile/2.0" and 
GUILE_LOAD_COMPILE_PATH=""/c/Users/shookie/guiletest/lib/lib/guile/2.0/ccache" 
before invoking the installed guile.exe it finds the modules, but it 
doesn't seem to like compile path and tries to recompile all the modules 
which eventually fails with a stall, usually at q.scm or thread.scm

Here is output from that case:

$ export 
GUILE_LOAD_PATH="/c/Users/shookie/guiletest/lib/share/guile/2.0/" 
GUILE_LOAD_COMPILED_PATH="/c/Users/shookie/guiletest/lib(lib/guile/2.0/ccache/";./lib/bin/guile 

path:   (c:/Users/shookie/guiletest/lib/share/guile/2.0/ 
/c/Users/shookie/guiletest/lib/share/guile/2.0 
/c/Users/shookie/guiletest/lib/share/guile/site/2.0 
/c/Users/shookie/guiletest/lib/share/guile/site 
/c/Users/shookie/guiletest/lib/sh
are/guile)
full_filename: 
c:/Users/shookie/guiletest/lib/share/guile/2.0/ice-9/boot-9.scm
compiled_filename:      #fb

full_filename: 
c:/Users/shookie/guiletest/lib/share/guile/2.0/ice-9/r4rs.scm
compiled_filename:      #f

full_filename: 
c:/Users/shookie/guiletest/lib/share/guile/2.0/ice-9/psyntax-pp.scm
compiled_filename:      #f

full_filename: 
c:/Users/shookie/guiletest/lib/share/guile/2.0/ice-9/posix.scm
compiled_filename:      #f

full_filename: 
c:/Users/shookie/guiletest/lib/share/guile/2.0/ice-9/networking.scm
compiled_filename:      #f

full_filename: 
c:/Users/shookie/guiletest/lib/share/guile/2.0/srfi\srfi-4.scm
compiled_filename:      #f

full_filename: 
c:/Users/shookie/guiletest/lib/share/guile/2.0/rnrs\bytevectors.scm
compiled_filename:      #f

full_filename: 
c:/Users/shookie/guiletest/lib/share/guile/2.0/ice-9\command-line.scm
compiled_filename: 
c:/Users/shookie/.cache/guile/ccache/2.0-LE-4-2.0\c/Users/shookie/guiletest/lib/share/guile/2.0/ice-9/command-line.scm.go

......snip.....

full_filename: 
c:/Users/shookie/guiletest/lib/share/guile/2.0/ice-9\futures.scm
compiled_filename: 
c:/Users/shookie/.cache/guile/ccache/2.0-LE-4-2.0\c/Users/shookie/guiletest/lib/share/guile/2.0/ice-9/futures.scm.go 

full_filename: 
c:/Users/shookie/guiletest/lib/share/guile/2.0/srfi\srfi-11.scm
compiled_filename:      #f
;;; compiling 
c:/Users/shookie/guiletest/lib/share/guile/2.0/srfi\srfi-11.scm
;;; it seems 
c:/Users/shookie/guiletest/lib/share/guile/2.0/srfi\srfi-11.scm
;;; is part of the compiler; skipping auto-compilation

full_filename: c:/Users/shookie/guiletest/lib/share/guile/2.0/ice-9\q.scm
compiled_filename: 
c:/Users/shookie/.cache/guile/ccache/2.0-LE-4-2.0\c/Users/shookie/guiletest/lib/share/guile/2.0/ice-9/q.scm.go

And at that point it stalls.

I will look more into it, but I hope this is already useful. But as 
usual each build takes quite a while, so progress is slow, since I 
always go away doing other things after I initiated a build and test-run.

Regards

Jan Schukat

On 03/30/2013 10:27 PM, Ludovic Courtès wrote:
> Jan Schukat <[email-masked]> skribis:
>
>> Starting the guile.exe or my own guiletest.exe still fails due to init
>> not finding the paths to the scheme modules,
> Did you try after running “make install”?  If you try before, it’s
> normal that it doesn’t find.
>
>> but that is something I need to look into anyway, and will do that
>> over Easter. It's possible that that is due to the different path
>> treatment in mingw and windows proper, or it could just be that guile
>> can't handle windows paths with drive letters, colons and backslashes.
> It can handle that now (until 2.0.7 included that didn’t work
> correctly.)
>
> Ludo’.