On Friday 27 December 2013 08:30:34 Gary Bilkus wrote:
> > > A bit further now.....
> > > 
> > > If I change the REL_REPOS_DIR to $GLOBAL_DIR\\gnucash.git
> > 
> 
> Hi Geert,
> I was indeed running install.sh - the version I found in
> packaging/win32 The reference to REL_REPOS_DIR is actuall in
> install-impl.sh which is called by install.sh.
> Specifically, in that file  in the function inst_gnucash() around line
> 1281.
> 
Ok, I remember why I didn't find it. I still have some uncommitted changes in 
my local 
repository from my struggle with -no-undefined.
One of the changes was to change REL_REPOS_DIR to REPOS_DIR (and 
_REL_REPOS_UDIR to 
_REPOS_UDIR) in install-impl.sh

I don't see why we would need to use a relative directory path here.

> Anyway, I've made some more progress. The -no-undefined problem is
> caused because more recent versions of gcc apparently don't understand
> that flag, and don't ignore it but just fail. So although you need to
> pass it to libtool, you mustn't pass it direct to gcc.any more.
> Unfortunately, that means that adding -no-undefined to LDFLAGS causes
> lots of the tests in configure to go wrong with compilation errors,
> and it just happens that the libxml one is the first which is
> mandatory.
> 
> I did a very kludgy workaround by removing -no-undefined from
> configure.ac, running configure, and then running a script to add
> -no-undefined back into every resulting Makefile. I imagine there's a
> cleaner fix somewhere to put the flag into libtool only, but I haven't
> yet found it.
> 
My attempt to get around this was to add "-no-undefined" to AM_LDFLAGS, which 
fixed 
configure, but I remember the build was still not compiling correctly. So I 
manually added -no-
undefined in the qof makefile to libgnc_qof_la_LDFLAGS
If I remember well that got me a bit further before failing again. At which 
point I refocussed on 
polishing the trunk branch for the upcoming 2.6 release and left the windows 
fixes for later.

> Anyway, when you do that, it starts to compile the app, and the next
> problem is that some of the code files fail to compile.
> Specifically:
> libqof/qof/guid.c  and backend/xml/sixtp-utils.c
> both fail with compiler warnings about %llu formats  in strings. There
> appears to be a bug in the version of gcc (4.8.1) as downloaded for
> mingw cd . which treats these formats as invalid
> even though they aren't. Then because -Werror is set, the compile
> fails. The solution for the moment was to edit the Makefile to remove
> the -Wall from those files. They then recompile happily.
> 
Nice you got it to compile !

With my local modifications I got stuck in engine/test with this error:
/bin/sh ../../../libtool --tag=CC   --mode=link gcc -I. 
-I/c/soft/gnucash.git/src/engine/test -I../../.. -
I/c/soft/gnucash.git/src/engine/ -DTESTPROG=test_engine -mms-bitfields -
Ic:/soft/gnome/include/glib-2.0 -Ic:/soft/gnome/lib/glib-2.0/include   -Werror 
-Wdeclaration-after-
statement -g  -mms-bitfields -g  -Wall -Wunused -Wmissing-prototypes 
-Wmissing-declarations  -
Wno-unused -no-undefined -L/c/soft/regex/lib -lregex -L/c/soft/gnome/lib 
-L/c/soft/guile/lib -
L/c/soft/libdbi/lib -L/c/soft/gwenhywfar/lib -L/c/GCDevel/GC-Maint/hh/lib 
-L/c/soft/sqlite3/lib -
L/c/soft/enchant/lib -L/c/soft/libxslt/lib -L/c/soft/mingw/lib -g -o 
test-engine.exe test_engine-test-
engine.o test_engine-utest-Account.o test_engine-utest-Budget.o 
test_engine-utest-Invoice.o 
libutest-Split.la libutest-Trans.la ../../../src/libqof/qof/libgnc-qof.la 
../../../src/gnc-module/libgnc-
module.la ../../../src/test-core/libtest-core.la ../libgncmod-engine.la 
../test-core/libgncmod-test-
engine.la ../../../src/core-utils/libgnc-core-utils.la -Lc:/soft/gnome/lib 
-lgio-2.0 -lgobject-2.0 -
lgthread-2.0 -lgmodule-2.0 -lglib-2.0 -lintl   -lm
libtool: link: gcc -I. -I/c/soft/gnucash.git/src/engine/test -I../../.. 
-I/c/soft/gnucash.git/src/engine/ -
DTESTPROG=test_engine -mms-bitfields -Ic:/soft/gnome/include/glib-2.0 -
Ic:/soft/gnome/lib/glib-2.0/include -Werror -Wdeclaration-after-statement -g 
-mms-bitfields -g -
Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wno-unused -g -o 
.libs/test-
engine.exe test_engine-test-engine.o test_engine-utest-Account.o 
test_engine-utest-Budget.o 
test_engine-utest-Invoice.o  -L/c/soft/regex/lib -L/c/soft/gnome/lib 
-L/c/soft/guile/lib -
L/c/soft/libdbi/lib -L/c/soft/gwenhywfar/lib -L/c/GCDevel/GC-Maint/hh/lib 
-L/c/soft/sqlite3/lib -
L/c/soft/enchant/lib -L/c/soft/libxslt/lib -L/c/soft/mingw/lib 
./.libs/libutest-Split.a -
Lc:/soft/gnome/lib -Lc:/soft/guile/lib -L/c/soft/readline/lib 
./.libs/libutest-Trans.a 
/c/soft/gnucash/build/src/test-core/.libs/libtest-core.a 
../../../src/libqof/qof/.libs/libgnc-qof.dll.a 
../../../src/gnc-module/.libs/libgnc-module.dll.a 
../../../src/test-core/.libs/libtest-core.a 
../.libs/libgncmod-engine.a ../test-core/.libs/libgncmod-test-engine.a 
/c/soft/gnucash/build/src/engine/.libs/libgncmod-engine.a 
/c/soft/gnucash/build/src/gnc-
module/.libs/libgnc-module.dll.a 
/c/soft/gnucash/build/src/core-utils/.libs/libgnc-core-utils.dll.a 
../../../src/core-utils/.libs/libgnc-core-utils.dll.a 
c:/soft/guile/lib/libguile.dll.a -lgmp -lws2_32 
/mingw/lib/libltdl.dll.a -lpthread 
/c/soft/gnucash/build/src/libqof/qof/.libs/libgnc-qof.dll.a -lregex -
lgio-2.0 -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0 -lglib-2.0 
/mingw/lib/libintl.dll.a 
/mingw/lib/libiconv.dll.a -pthread -Lc:/soft/gnucash/inst/lib 
-Lc:/soft/guile/lib -L/mingw/lib
../.libs/libgncmod-engine.a(Transaction.o):Transaction.c:(.data+0x10): multiple 
definition of 
`trans_is_closing_str'
./.libs/libutest-Trans.a(utest-Transaction.o):utest-Transaction.c:(.data+0x14): 
first defined here
collect2.exe: error: ld returned 1 exit status


> The only other source file issue is in
> gnome-gnc-split-reg.h
> where we get the error: expected identifier before numeric constant
> DELETE, A bit of trial and error got this to go away by adding
> #undef DELETE
> #undef DUPLICATE
> on line 116, but to be honest I'm not entirely sure what's going on
> here yet.
> 
> After all that, a make followed by make install seems to complete,
> although with lots of
> libtool: link: warning : 'c/soft/mongw/lib/lib.....la seems to be
> moved warnings coming up.
> 
As Derek already said: this is a normal warning which you can ignore.

> Unfortunately, after all that, I can't get it to run.
> If I try to start it from /c/soft/gnucash/inst/bin there are lots of
> missing dlls, which all appear to be dotted around in other places.
> If I copy everything into a single directory and try to run I get
> Error: Unspecified fatal error encountered, aborting.....
> 
The problem here is that most of the dependencies are not installed in one 
single location 
accessible from the Windows path.

This installation scheme has been chosen for the lack of a package management 
system in 
mingw/Windows. Having each dependency in a separate directory makes it very 
easy to renew 
a dependency: simply delete the existing directory and run the build again.

There is a way to run gnucash from the install directory though: you have to 
include all the bin 
directories of all the dependencies in either the Windows or the MSYS PATH 
variable. The easiest 
is write a simple batch script for this. We used to have one, which I deleted 
at some point (way 
too early unfortunately).

My intention is to restore the ability to run gnucash directly from the 
installation directory. I'm 
not sure how though. Instead of requiring a batch file to set up the 
environment, I'd rather 
figure out a way to better manage the dependencies together in one location. 
I'm not sure how 
yet. Either leverage the mingw package manager in some way or do improve the 
installation 
script to be a bit smarter (leverage make install and make uninstall, using the 
same prefix for all 
dependencies)... That part is still fuzzy.

My longer term goal is even more ambitious: I would like to eventually get to 
the point where 
you don't need to run install.sh for each minor change. But instead use make as 
it was intended. 
With that I mean: if you change one file in the engine subdirectory a simple 
make && make 
install in that directory should be all that's needed, not running install.sh 
on the whole project. 
You can achieve this now already by manually tweaking the build environment but 
I'd like that 
way of working to become the default. Install.sh should only be run to update 
dependencies.
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to