r21768 - gnucash/branches/2.4/packaging/win32 - More changes to compile gtk-2.24.
John Ralls
jralls at ceridwen.us
Sat Dec 31 18:29:37 EST 2011
On Dec 31, 2011, at 1:39 PM, Derek Atkins wrote:
>
> On Sat, December 31, 2011 2:45 pm, John Ralls wrote:
>>
>> On Dec 31, 2011, at 10:47 AM, Derek Atkins wrote:
>>
>>> guile -c "(use-modules (ice-9 slib)) (require 'new-catalog)"
>>>
>>> Maybe we just need to do this in our install.sh script?
That's not necessary with slib3. It's smart enough to recognize that it needs a catalog and create one as part of it's "require" function. We actually have that line in gnucash.iss.in, but it was a no-op because it was never called. For the real problem, read on.
>>>
>>
>> Oh, it's there. But it's calling guile.cmd, and there isn't one.
>> I see that it works for me when I test because guile.exe can find the
>> guile installation directory which was compiled in, even when the
>> installer puts it in c:\Program Files\gnucash. The guile built on the
>> buildbot must have a different path (even though I'm building in c:\soft),
>> so it can't even find ice-9/boot-9.
>
> 2.4 on buildbot is in c:\soft-2.4
>
> It is POSSIBLE that there is a guile in the buildbot path that is NOT the
> guile that's part of the 2.4 build. Would that cause this problem?
No.
The problem is that like most unix programs, guile hardcodes its installation prefix into the binary and generally expects to find everything it needs relative to that prefix for ever after. For loading modules, that can be overridden with GUILE_LOAD_PATH, which we do in the environment file that gets loaded at gnucash startup.
Slib has another quirk, though: It sets an internal variable named "implementation-vicinity to prefix and tries to write slibcat there. If that directory doesn't exist (c:/soft-2.4 in this case), it barfs -- and because the error handling in that part of guile.init is wrong, it returns a message about the scheme file that creates the catalog, mklibcat, not being found.
The good news is that there's another environment variable, GUILE_IMPLEMENTATION_PATH, which overrides the compiled-in prefix, and setting that in gnucash's environment file seems to fix the problem. I'll commit the appropriate change to gnucash.iss.in as soon as I verify that I have the inno syntax right, and we'll see if tomorrow's build works.
The thing that puzzles me a bit is that that's not what trunk does, and I don't see how it gets around the problem. It doesn't put the slibcat in {GNC_HOME}/share/guile/1.8 -- or anywhere else that I can find. I guess we'll have to wait for Geert to get back to find out that little puzzle.
Regards,
John Ralls
More information about the gnucash-devel
mailing list