building windows build ([Bug 641832] Crash opening MySQL database after installing 2.4.2 over 2.4.0)

John Ralls jralls at ceridwen.us
Sun Feb 13 16:17:31 EST 2011


On Feb 13, 2011, at 12:49 PM, Christian Stimming wrote:

> Am Sonntag, 13. Februar 2011 schrieb John Ralls:
>> BTW, the windows build is absolutely hideous for developing in. `make &&
>> make install` doesn't, which is why I thought yesterday that I hadn't
>> correctly diagnosed the problem when I had. Instead, one has to run
>> make_install.sh, which grinds through a complete autoconf.sh && configure
>> cycle, and because that touches config.h, *everything* has to rebuild,
>> which takes about 45 minutes
> 
> I know, I know. However, the gnucash build requires the PATH to contain some 
> of the bin/ directories which have been created before by install.sh. If your 
> install.sh runs until the end, it displays a nice long message about all the 
> "export ..." variables that you should add to your msys' /etc/profile. I did 
> that on my windows build computer so that PATH contains autotools/bin, 
> gnome/bin, and so on, and because of that "make; make install" indeed does 
> work there. If it doesn't at your computer, it's because your msys' PATH 
> doesn't contain some entries, but once you add them there, all is fine.
> 
>> Can't we move whatever
>> special sauce is in the shell scripts into Makefile.am so that it will
>> work?
> 
> All special sauce is there, except for the PATH, which you must modify 
> yourself.
> 
>> Also, make check fails in the second check because of a problem with
>> future_modules. Obviously, more special sauce is needed in the test code,
>> because Gnucash itself has no problem loading modules.
> 
> Hm... I never tried "make check" on windows, because it would require to set a 
> new PATH in each test sub-directory because different from linux, the (test) 
> executables don't know the locations of the newly compiled libraries (through 
> the ELF rpath), so we would have to fix PATH each time per hand. I quickly 
> gave up on that one at the time, and haven't ever touched that again.
> 

Well, that brings up another question: Why *do* we install into all of those separate directories?

And no, it wasn't a $PATH problem; I've been at this long enough not to get tripped up by that. Make and make install *appear* to run successfully, and the timestamps on the files in inst change like they should... but when I ran under the debugger and got the crash with dbi_conn_queryf in the stack trace it was apparent that it doesn't work. Gdb also warned me that the source file was newer than the executable.

The special sauce seems to be (from make_install() in install_impl.sh):
1436     qpushd $_INSTALL_UDIR/lib 
1437         # Move modules that are compiled without -module to lib/gnucash and 
1438         # correct the 'dlname' in the libtool archives. We do not use these 
1439         # files to dlopen the modules, so actually this is unneeded. 
1440         # Also, in all installed .la files, remove the dependency_libs line 
1441         mv bin/*.dll gnucash/*.dll $_INSTALL_UDIR/bin 2>/dev/null || true 
1442         for A in gnucash/*.la; do 
1443             sed '/dependency_libs/d;s#../bin/##' $A > tmp ; mv tmp $A 
1444         done 
1445         for A in *.la; do 
1446             sed '/dependency_libs/d' $A > tmp ; mv tmp $A 
1447         done 
1448     qpopd

And it isn't the rpath (which is anyway set to the wrong place until after installation), it's libtool that's supposed to find the libraries in the build directories. Thats what libfoo.la is all about.

Oh well. I have enough to do already. I'll leave the M$Win stuff to you.

Regards,
John Ralls



More information about the gnucash-devel mailing list