Building
General Instructions
For the very latest source code, get the sources from Subversion; alternatively, use the latest release source file of type gnucash-<version>.tar.gz. Examine the README.dependencies file for the list of build dependencies for your distribution, the README.svn file for notes on compiling gnucash, and the HACKING file for notes on hacking the code.
Here are the basic steps one might end up taking:
1. Change to gnucash directory
cd gnucash
2. If this code was retrieved from SVN, generate the configure script (otherwise skip this step)
./autogen.sh
3. Look at available configure options
./configure --help
- (Note: There are issues with the guile configuration of slib which will cause configure to fail on many distributions. See: #slib Issues)
4. Run configure with the appropriate options; some example options might look as follows
./configure --prefix=/opt/gnucash \ --enable-debug --enable-doxygen \ --enable-error-on-warning --enable-compile-warnings \ [--enable-ofx [...]]
5. Compile and install
make make install
6. Run
/opt/gnucash/bin/gnucash
Distro-specific Information
See the README.dependencies file for library dependency notes. Also check out the dependencies page.
Debian
If you are lucky running
apt-get build-dep gnucash
will install everything you need to build gnucash.
On Debian, the packages you'll probably need are (among many others):
guile-1.6-dev swig libgnome2-dev libgnomeui-dev goffice-0-dev libgsf-1-dev libgtkhtml3.2-dev (3.6, 3.8, or 3.14 will also do) libofx-dev (to enable ofx support) libaqbanking16-dev (to enable aqbanking support. Don't use the newer libaqbanking20-dev - see AqBanking#Compatibility) postgresql-dev (to enable sql support)
If you are building from svn, you will also need the following installed before running autogen.sh:
automake intltool libtool guile-1.6-dev
For the 2.0-branch of GnuCash you need additionally:
libgwrapguile-dev OR guile-g-wrap
If you see the error "<unnamed port>: no code for module (g-wrap gw standard)" at runtime, see this particular FAQ.
Ubuntu
If you are on an older version of ubuntu (or debian for that matter) such as dapper with long-term support and need certain packages that are not available from the dapper-backports do not fret. You can easily compile them yourself (essentially backporting them). Make sure you have a line of the form
deb-src http://archive.ubuntu.com/ubuntu edgy main restricted universe
in your /etc/apt/sources.list. You want the version (edgy in above example) to be at least one release higher than what you have installed. Then you can use the following lines to compile and install any software version that you need but is missing from the official repositories for the release you run.
cd /usr/src sudo apt-get build-dep $packageyouwant apt-get --compile source $packageyouwant dpkg -i $packageyouwant.deb
Easy as 1-2-3!
Ubuntu 5.10 (Breezy Badger)
Please see the BreezyBadgerInstallation page for more information on installing a beta snapshot of GnuCash on Breezy Badger.
Dapper Flight 7
get necessary packages
On a fresh install of Ubuntu/Dapper, do the following to be able to compile trunk gnucash:
sudo apt-get install libguile-dev libgwrapguile-dev guile-www
There are possibly other dependencies (that I already had installed), but this should get you started.
The below was ok for Flight 5
sudo apt-get install libgnomeui-dev libofx-dev libgsf-1-dev \ libgtkhtml3.8-dev guile-g-wrap libltdl3-dev g-wrap doxygen \ libgsf-gnome-1-dev automake1.9 texinfo build-essential intltool \ libtool subversion libfinance-quote-perl
For straight Dapper, I needed:
sudo apt-get install libglib2.0-dev intltool automake1.9 autoconf libtool libgconf2-dev swig slib libxml2
Create development tree
mkdir -p $HOME/development/gnucash mkdir -p $HOME/unstable/gnucash
Check out gnucash trunk
cd $HOME/development/gnucash svn checkout http://svn.gnucash.org/repo/gnucash/trunk gnucash
Compile gnucash
cd gnucash ./autogen.sh
./configure --prefix=$HOME/unstable/gnucash \ --enable-debug --enable-doxygen \ --enable-error-on-warning --enable-compile-warnings
make all install
Start newly compiled gnucash
cd $HOME/unstable/gnucash/bin ./gnucash
Ubuntu 7.04 (Feisty Fawn)
Get Dependencies
sudo apt-get install build-essential checkinstall guile-1.6-dev guile-1.6-slib libgoffice-0-dev libgtkhtml3.14-dev texinfo gettext intltool libtool swig libofx-dev
Get GnuCash 2.2 Source
wget http://www.gnucash.org/pub/gnucash/sources/stable/gnucash-2.2.9.tar.gz tar zxvf gnucash-2.2.9.tar.gz cd gnucash-2.2.9
Create make files (only if checking out from SVN)
./autogen.sh
Configure
./configure
If this command complains about not finding libraries (it shouldn't), then you can probably find them in Synaptic.
Build .deb for GnuCash 2.2
checkinstall --default --install=no
This will take maybe 10 minutes, and it will build an installer file called "gnucash_2.2.9-1_i386.deb". (If it's got a different name, substitute that into the next step.)
Install the .deb that you built
sudo dpkg -i gnucash_2.2.9-1_i386.deb
If you get errors about dpkg not being able to overwrite files (I did), you can override them with this version:
sudo dpkg -i --force-overwrite gnucash_2.2.9-1_i386.deb
Run GnuCash
gnucash
Build and install Documentation
If you want the GnuCash documentation, you have to build and install that separately. I couldn't get "checkinstall" to build a deb for the documentation, so I had to use make and make install as follows:
Comment: I got it to work by firering "make" first (after configure) and "checkinstall --default --install=no" afterwords.
wget http://www.gnucash.org/pub/gnucash/sources/stable/gnucash-docs-2.2.0.tar.gz tar zxvf gnucash-docs-2.2.0.tar.gz cd gnucash-docs-2.2.0 ./configure make sudo make install
Warning (place this comment in a better place): In package guile-1.6-dev, the script /usr/bin/guile-config is missing. This script is used by Gnucash's ./configure in the building steps to determine the specific structure of ubuntu guile installation. Its absence causes ./configure to break with a "Check your guile config" even if all is perfectly installed. To solve this problem, I have downloaded the debian counterpart package of guile-dev 1.6.8, then extracted from it the seeked guile-config file and finally placed it in /usr/bin/. Gnucash 2.2.1 building was then perfect. You can extract easily a file from a .deb using alien -t debfile.deb (you have to apt-get alien) to obtain a .tgz file. Hope this helps others.
Ubuntu 7.10 (Gutsy Gibbon)
See BuildGutsy
Ubuntu 8.04 LTS (Hardy Heron)
The build instructions provided for Ubuntu 7.04 (Feisty Fawn) are reported to work with GnuCash 2.2.9.
Gentoo
Gentoo instructions can be found on Gnucash-svn installation on Gentoo.
Mac OS X
Mac OS X instructions can be found on gnucash installation from source on Mac OS X.
Fedora Core 5
At least the following packages are required to build GnuCash from source on FC5:
libtool-ltdl-devel guile-devel g-wrap-devel libgnomeprint22-devel libgnomeprintui22-devel gtkhtml3-devel
Suggested way to satify all requirements:
# yum install libtool-ltdl-devel guile-devel g-wrap-devel libgnomeprint22-devel \ libgnomeprintui22-devel gtkhtml3-devel
Please note that while the configure script only checks for GtkHTML up to 3.8, recent versions of GtkHTML ship with "libgtkhtml-3.8.pc" so yes, you CAN use gtkhtml3-3.10 on FC5.
slib Issues
Ubuntu Hardy and Intrepid, and if the mailing lists are to be believed, many other distributions as well, produce the following error when running the configure script:
- configure:27495: checking for SLIB support
- configure:27509: error:
- Cannot find SLIB. Are you sure you have it installed?
- See http://bugzilla.gnome.org/show_bug.cgi?id=347922
- ...
This is not a problem with gnucash! The issue seems to be that the slib installation does not properly configure guile. Two items need to be fixed: a guile initialization file has an incorrect path, and the initialization of the slib catalog is not done. On Ubuntu, the initialization file is /usr/share/guile/ice-9/slib.scm. There is no guarantee that this will be the same on another distribution. This file references the guile.init file supplied by slib to hook slib into guile. Look in the file to find:
- (load-from-path "slib/guile.init")
This line must be changed to reflect the correct location of the guile.init file:
- (load-from-path "/usr/share/slib/init/guile.init")
This path is correct for Ubuntu. It will probably not be the same on other distributions. Once this is fixed, slib must be invoked from guile to initialize the catalog:
- sudo guile -c "(use-modules (ice-9 slib)) (require 'printf)"
Then, if there were no errors, the returned status will be "0". We can check this by echoing the status variable from the environment:
- echo $?
Which should return 0. If it does, then the configure script should now get past the section which checks for slib. Note that since standard users probably do not have write permissions to the slib and guile directories, the catalog initialization will fail unless you sudo!
Finally, there are several additional suggestions that can be gleaned from others who have had this problem. I've listed these below in case they are needed on some distributions. As far as I can tell, on Ubuntu at least, all of these additional actions are superfluous.
- Environment Strings:
- export SCM_INIT_PATH=/usr/share/slib/init/guile.init
- export SCHEME_LIBRARY_PATH=/usr/share/slib
- export GUILE_LOAD_PATH=/usr/share/guile/site /usr/share/guile/1.8 /usr/share/guile
- Symbolic Links:
- ln -s /usr/share/guile/1.8/ /usr/share/guile/site
- ln -s /usr/share/slib/ /usr/share/guile/1.8/slib
Obviously, the paths here refer to the Ubuntu install. Yours may differ.
Tutorial on Plugins
This section describes how to build a plugin from scratch.
A plugin is a runtime loadable module which provides optional functions for GnuCash.
in-tree approach
- checkout trunk from svn into folder $trunk
e.g. svn co http://svn.gnucash.org/repo/gnucash/trunk gnucash-trunk
- download plugin-template.tgz to folder $downloads
e.g. wget http://tellico.dyndns.org/gnucash/plugin-template.tgz
cd $trunk/src mkdir plugins cd plugins
- extract all files/folders from plugin-template.tgz
tar xzf $downloads/plugin-template.tgz
- include the new folder into the build process
cd $trunk/src echo SUBDIRS+=plugins >> Makefile.am cd $trunk
- edit configure.in insert the following line just before AC_OUTPUT
- AC_CONFIG_FILES(src/plugins/Makefile src/plugins/TEST1/Makefile src/plugins/TEST1/ui/Makefile src/plugins/TEST1/glade/Makefile)
- execute
./autogen.sh ./configure make make install
- to force GnuCash to load the plugin upon start
echo '(gnc:module-load "gnucash/plugins/TEST1" 0)' >> ~/.gnucash/config.user
Now, a new command in menu Tools appears (which does nothing in this template).