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

From: Andy Wingo <[email-masked]>
Date: Sun, 10 Mar 2013 18:32:14 +0100

Hi :)

On Sun 10 Mar 2013 05:09, [email-masked] writes:

> The struct timespec is still an issue in a mingw build on windows, but
> I know how to handle it.

How do you handle it, for the record?

I assume you are using pthreads-w32?

> As I said, I build everything on windows.
>
> I have to build bdw-gc with --enable-threads=posix. If I don't, I get errors along this line:
>
> ./.libs/libguile-2.0.a(libguile_2.0_la-threads.o):threads.c:(.text+0xfb8): undefined reference to `GC_pthread_detach'
> ./.libs/libguile-2.0.a(libguile_2.0_la-threads.o):threads.c:(.text+0x10de): undefined reference to `GC_pthread_create'
> ./.libs/libguile-2.0.a(libguile_2.0_la-threads.o):threads.c:(.text+0x1221): undefined reference to `GC_pthread_detach'
> ./.libs/libguile-2.0.a(libguile_2.0_la-threads.o):threads.c:(.text+0x12d1): undefined reference to `GC_pthread_create'

You can build bdw-gc without threads, and then build Guile without
threads.  In my builds I was doing --enable-threads=posix.

> The problem is, when I do build bdw-gc with posix threads, the guile
> module compiling is all broken, it periodically drops messages like
> this:
>
>   GUILEC ice-9/eval.go
> Backtrace:
> In unknown file:
>    ?: 3 [apply-smob/1 #<boot-closure 192c100 (_ _ _)> #t ...]
>    ?: 2 [apply-smob/1 #<catch-closure 1ccee70>]
>    ?: 1 [primitive-eval ((@ # %) (begin # # #))]
>    ?: 0 [chmod #<closed: file 0> 438]

You passed the `GEN guile-procedures.texi' phase?  If so, things are
already going well.  That's the first time the newly built Guile is
used, and if it went through it means at least you have a functional
Guile.

This problem sounds similar to something Eli Zaretskii reported:
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=10474#14:

   The next problem is here:

          GUILEC ice-9/eval.go
        Backtrace:
        In unknown file:
   	?: 5 [boot-closure #t #<catch-closure 231fd40> ...]
   	?: 4 [catch-closure]
   	?: 3 [primitive-eval ((@ # %) (begin # # #))]
   	?: 2 [chmod #<input-output: ice-9/eval.go.9IiPxC 6> 438]
   	?: 1 [boot-closure system-error "chmod" ...]
   	?: 0 [delete-file "ice-9/eval.go.9IiPxC"]

        ERROR: In procedure delete-file:
        ERROR: In procedure delete-file: Permission denied

   This happens because Guile calls fchmod, which is #define'd to -1 on
   MinGW.

However the code is different now, than it was when Eli made his report;
now if you don't have fchmod (as mingw does not), chmod only accepts
strings -- and here it seems that we are trying to chmod a port.  I will
see what I can do here.

> BTW, have you tried to execute any of the guile cross-comiles you made
> on a windows machine?

No I have not.  I would like to do so, but am not really equipped for it
at the moment.  Your feedback here is really appreciated, thanks :)

Andy
-- 
http://wingolog.org/