Difference between revisions of "Windows"

From GnuCash
Jump to: navigation, search
(Prerequisites: libgnomeprint still missing)
(TODO)
Line 75: Line 75:
 
* <tt>ln -s</tt> - The windows file systems don't have symlinks. GnuCash uses symlinks extensively all over the build system. First of all, we need to replace the literal <tt>ln -s</tt> by the macro <tt>LN_S</tt>. This still won't work in all cases because gnucash relies upon content that is created later in the symlinked directory, i.e. simply making a copy is IIRC not sufficient.
 
* <tt>ln -s</tt> - The windows file systems don't have symlinks. GnuCash uses symlinks extensively all over the build system. First of all, we need to replace the literal <tt>ln -s</tt> by the macro <tt>LN_S</tt>. This still won't work in all cases because gnucash relies upon content that is created later in the symlinked directory, i.e. simply making a copy is IIRC not sufficient.
 
* Stack size of guile -- When guile gives the error <tt>ERROR: Stack overflow</tt>, you need to modify the scm-file in question and change the line <tt>(debug-set! stack    200000)</tt> to this value.
 
* Stack size of guile -- When guile gives the error <tt>ERROR: Stack overflow</tt>, you need to modify the scm-file in question and change the line <tt>(debug-set! stack    200000)</tt> to this value.
* lib/libc/setenv.h: Unterminated #ifdef.
 
 
* src/app-utils/Makefile.am and others: Replace GNOME_CFLAGS by GTK_CFLAGS in CFLAGS variable if we don't need gnome.
 
* src/app-utils/Makefile.am and others: Replace GNOME_CFLAGS by GTK_CFLAGS in CFLAGS variable if we don't need gnome.

Revision as of 12:50, 8 March 2006

GnuCash on Microsoft Windows

This page collects various notes about potentially compiling GnuCash on Microsoft Windows.

FAQ: Is it possible to compile GnuCash on Windows? A: Currently, no. However, with the 1.9.x/2.0.0 series now being released, gnucash is fully based on gtk2. This means it will probably be rather easy to finish a full windows port. "The other big application" Gnumeric already showed how to do it. Their UI code relies solely on gtk-2.0 (or 2.2 or whatever), i.e. they replaced every dependency on libgnomeui by its gtk equivalent. And gtk-2.2 is fully available on windows. Obviously they managed to do this somehow, so I suspect it shouldn't be too difficult to do the same with gnucash. Also, one of our smaller competitors, Grisbi http://sourceforge.net/projects/grisbi , is offering a windows port by this very same strategy.

Relevant recent gnucash-devel discussion:

Status: It is possible to compile all prerequisites successfully. It remains an open question how to approach the full gnucash package. --Cstim 07:55, 3 March 2006 (EST)

Prerequisites

Mingw32

See http://www.mingw.org . All available as pre-compiled binaries.

Many other pre-compiled binaries are also available from http://gnuwin32.sf.net/ . (All gtk-related packages like pkgconfig and libxml2, however, are already included in the large glade package, see below.)

SVN

There is an SVN client for windows. You can find one at: http://tortoisesvn.tigris.org

guile

In guile-1.6.7 several tweaks were necessary to get it to compile.

  • File libguile.c line 479: replace "#elif defined(FIONREAD)" by "#elif 0"
  • File libguile-ltdl/raw-ltdl.c lines 220, 222, 224: remove the LT_GLOBAL_DATA macro on each line
  • Files srfi/Makefile, libguile-ltdl/Makefile, libguile/Makefile: Add "-no-undefined" argument to libxyz_LDFLAGS variables, see also [1]
  • And finally set the env variable GUILE_LOAD_PATH to the actual load path, which is different from the one that was stored during compile due to mingw's path translation. Make e.g. export GUILE_LOAD_PATH=c:/msys/1.0/local/share/guile/1.6/

One possible set of configure arguments looked like this:

./configure --disable-elisp --disable-networking --disable-dependency-tracking --disable-libtool-lock --disable-linuxthreads -C --prefix=/usr/local LDFLAGS="-L/lib -L/mingw/lib -L/C/WINNT/system32 -lwsock32 -lregex"

For testing, first try to make sure "guile -v" will run and give you the version number. Then try a simple expression, like "guile -c '%load-path'". However, so far I was unable to actually start the interactive interpreter (by simple "guile") because the readline library is unavailable. So running "guile" will give "ERROR: In procedure quasiquote: ERROR: Unbound variable: SIGBUS", but at least the code generation in g-wrap will work nevertheless.

g-wrap

See http://savannah.nongnu.org/bugs/index.php?func=detailitem&item_id=15972

Status: Compile is possible.

Frequent error: If you get the following linker error:

C:/msys/1.0/mingw/bin/../lib/gcc/mingw32/3.4.4/libgcc.a(w32-shared-ptr.o):: 
undefined reference to `_imp__GetAtomNameA@12'
undefined reference to `_imp__FindAtomA@4'
undefined reference to `_imp__AddAtomA@4'
undefined reference to `_imp__FindAtomA@4'

then it means that your windows DLL directory showed up first before your mingw DLL directory, i. e. the gcc linker command has -Lc:\WINNT\system32 before -L/mingw/lib. This wrong order might be caused from other, linked-in libraries, like from the libguile.la file in guile's library installation. To fix this: Edit the libguile.la file, remove -Lc:\WINNT\system32 so that you can correctly enfore that /mingw/lib comes first in the library search path.

glade

http://gladewin32.sourceforge.net This project offers a large (10MB) Installer which also includes all the rest of the gtk/glib platform, including pkgconfig, libxml2 and various other tools.

glib

http://www.gtk.org/download/ has binary windows packages, but the binary is already included in the glade installer above, so no separate download is necessary.

gnome

A lot of windows binaries for gnome packages missing in the glade package can be found at ftp://ftp.gnome.org, e.g. ftp://ftp.gnome.org/pub/gnome/platform/2.12/2.12.2/win32/. Including: GConf, Orbit2, gail, gnome-{common, mime-data, vfs}, intltool, libIDL, libart_lgpl, libbonobo{,ui}, libgnome{,canvas,ui}, pango.

These are all packages that were created for Evolution and its dependencies gtkhtml, libgnomeprint and libgnomeprintui. Not tested yet.

One particular missing library is libgnomeprint and libgnomeprintui!

Gnucash

Instructions on how to tweak ./configure so that it doesn't complain about the missing gnome packages: https://lists.gnucash.org/pipermail/gnucash-devel/2006-March/016691.html

qof

See https://lists.gnucash.org/pipermail/gnucash-devel/2006-February/016647.html

This was just an initial trial, but eventually gnucash should compile its internal libqof instead of only the external one. Status: Compile is not yet fully possible, but issues could probably be solved quickly.

TODO

We collect various TODO-items that need to be solved in order to compile gnucash on Windows.

  • ln -s - The windows file systems don't have symlinks. GnuCash uses symlinks extensively all over the build system. First of all, we need to replace the literal ln -s by the macro LN_S. This still won't work in all cases because gnucash relies upon content that is created later in the symlinked directory, i.e. simply making a copy is IIRC not sufficient.
  • Stack size of guile -- When guile gives the error ERROR: Stack overflow, you need to modify the scm-file in question and change the line (debug-set! stack 200000) to this value.
  • src/app-utils/Makefile.am and others: Replace GNOME_CFLAGS by GTK_CFLAGS in CFLAGS variable if we don't need gnome.