Following your advice, I’m now trying to build a 32-bit version under MinGW,
This fails a little earlier in the process:

make[2]: Entering directory 
'/home/mkeeter/guile/src/build-i686-w64-mingw32/libguile'
make  all-am
make[3]: Entering directory 
'/home/mkeeter/guile/src/build-i686-w64-mingw32/libguile'
  CCLD     libguile-2.2.la
../lib/.libs/libgnu.a(timegm.o):timegm.c:(.text+0x22): undefined reference to 
`mktime_internal'
collect2.exe: error: ld returned 1 exit status
make[3]: *** [Makefile:2373: libguile-2.2.la] Error 1

This appears to be the same bug as #24681
(http://lists.gnu.org/archive/html/bug-guile/2017-03/msg00095.html 
<http://lists.gnu.org/archive/html/bug-guile/2017-03/msg00095.html>),
but I don’t see anyone successfully resolving it
(and I can’t find any references to it in the Git history).

Any ideas?

Thanks,
Matt

> On Jan 17, 2018, at 10:54 AM, Eli Zaretskii <e...@gnu.org> wrote:
> 
>> From: Matthew Keeter <matt.j.kee...@gmail.com>
>> Date: Tue, 16 Jan 2018 17:50:58 -0500
>> 
>> So far, I’ve adapted or created a handful of patches, and have successfully
>> built guile.exe.  The build is failing after this point, when it tries to 
>> build the
>> documentation (?):
>> 
>> make[3]: Entering directory 
>> '/home/mkeeter/guile/src/build-x86_64-w64-mingw32/libguile'
>>  GEN      guile-procedures.texi
>> Backtrace:
>>           0 (primitive-load-path "C:/msys64/home/mkeeter/guile/src/▒")
> 
> What is the system locale of your Windows machine?  That funny
> character might mean you have problems with non-ASCII characters, due
> to bugs in libunistring.  And even if you locale is English_USA, you
> should still know that libunistring will give you trouble: the version
> of it distributed by MSYS2 have a couple of grave bugs that make
> character encoding conversions fail on MS-Windows, and since Guile
> works in UTF-8 internally, you will have problems in with any
> primitives that need to work with non-ASCII characters.  For that
> reason, I recommend building the latest version of libunistring first,
> as the bugs I discovered back when I was porting Guile 2.0 to MinGW
> are now fixed in up-stream libunistring (but MSYS2 still offers the
> old version, and the patches it uses don't include those needed to fix
> those problems).
> 
>> ERROR: In procedure primitive-load-path:
>> ERROR: In procedure primitive-load-path: Unable to find file
>> "C:/msys64/home/mkeeter/guile/src/build-x86_64-w64-mingw32/libguile/C:/msys64/home/mkeeter/guile/src/build-x86_64-w64-mingw32/meta/guild"
>> in load path
>> 
>> Does anyone have tips for why primitive-load-path would be failing like this?
> 
> This looks like some code which doesn't consider C:/foo/bar an
> absolute file name, so it prepends the current directory to it.  These
> problems are supposed to be fixed by patches I submitted for v2.0, but
> maybe there's some new code in 2.2 that needs similar treatment.
> 
>> Enter `,help' for help.
>> scheme@(guile-user)> (+ 1 2)
>> While compiling expression:
>> ERROR: In procedure bytevector-u64-set!: Value out of range: -149659645
> 
> Sounds like overflow?  You should be aware that 64-bit Windows uses
> the LLP64 model, whereas Unix and Linux use LP64.  In practice, this
> means that every variable whose type is 'long' or 'unsigned long' is a
> 64-bit type on 64-bit Unix systems, but a 32-bit type on Windows, so
> all such variables should be carefully audited to makesure they don't
> have to be converted to the corresponding 64-bit types.  For that
> reason, my suggestion would be to build a 32-bit port of Guile first
> (AFAIK, Mingw64 and MSYS2 support that), and only switch to 64 bits
> once you have the 32-bit port up and running, and it passes the test
> suite.

Reply via email to