Difference between revisions of "Building"

From GnuCash
Jump to: navigation, search
m (Introduction)
m (>= -> ≥)
 
(30 intermediate revisions by 7 users not shown)
Line 1: Line 1:
 +
{| class="wikitable" style="margin: auto;"
 +
! scope="row"|Languages
 +
| [[de/{{PAGENAME:Gnucash}}|Deutsch]]
 +
| [[He/{{PAGENAME:בניה}}|עִברִית]]
 +
|}
 +
This page deals with building GnuCash '''from the source code'''. It includes building the current ''stable release'' from source code (downloaded as tarballs) as well as the ''developers version'' of GnuCash from the ''[[Git]] repository''. If you are searching for instructions for the version available '''from your distribution''''s software repositories, you should read [[Installation]].
 +
 +
This page doesn't provide specific instructions for optional third-party modules—like ''AqBanking'' or Perl ''Finance::Quote''—but does list the dependencies required and links to the configuration switches used with CMake to include them during compilation.
  
=Building GnuCash from Source code=
 
 
== Introduction ==
 
== Introduction ==
'''Please Note: This section of the wiki is being reconstructed at present. We will maintain existing links in this page below the new sections and they will be deleted when the links to the replacement pages are operational'''
+
GnuCash can be built from sources on Linux distributions, Microsoft Windows and macOS. There are three major steps in building the GnuCash program. These are listed along with the tools which may used for each step:
 
 
Gnucash can be built from sources on Linux distributions, Microsoft Windows and Mac OS/X. Building GnuCash utilizes a set of build tools which is available for all three of the major operating systems. There are three major steps in building the GnuCash program once you have installed these build tools:
 
 
 
# Configuration;
 
# Compilation;
 
# Installation.
 
 
 
These are described in detail for each operating system, along with the installation of the build tools.
 
=== Build Tools ===
 
The GnuCash build system has gone through some changes in the course of the 2.6 and 3 series. The [[#Autotools]] set originally used to build GnuCash has been replaced in part with more recent developments which provide the ability to configure for alternative build systems and popular IDEs. [[#CMake]] has replaced the Autotools autogen and configure scripts for configuring the build. Compilation can either be performed and controlled using the Autotools make script or alternatively using a faster build system Ninja. Either Autotools make or Ninja can also control the installation of GnuCash. Depending on the version of GnuCash you want to build you have the following options:
 
;For the application:
 
:;GnuCash 2.7.4 and more recent: These versions can only be configured using [[#CMake]]. Autotools support was removed.
 
:;GnuCash 2.6.13 until GnuCash 2.7.3:[[#CMake]] support was introduced in version 2.6.13. Until version 2.7.3 GnuCash can be built with either [[#CMake]] or [[#Autotools]].
 
:;Earlier versions:Can only be built with [[#Autotools]].
 
:;API Source Documentation requires Doxygen and is built with the Autotools command ```make doc```.
 
; The GnuCash Help and Tutorial and Concept Guide are configured and built with Autotools only.
 
 
 
==== Compiler ====
 
GnuCash 3.x requires a C++ compiler that supports ISO-standards C11 and C++11. Gcc version >=4.8 and Clang version >= 3.3 are known to work.
 
For GnuCash 4.x (i.e. current master branch) we expect to require C++14 and may require C++17 compatibility.
 
==== CMake ====
 
[https://cmake.org CMake] is a popular configuration and build system. One of its major advantages is the ability to generate project files for a variety of tools including make, ninja, and IDEs CodeBlocks, [[Eclipse]], and Xcode. Cmake requires a build directory separate from the source file directories in which it generates the directories and files used to control the compilation and linking of the compiled object files that produce the main program and the runtime libraries which support it.
 
==== Make ====
 
Make is the Autotools tool which controls the compilation of the source programs and linking of the source files to produce the program and its associated libraries. On completion of compilation and linking it may aslo be used to install the programs anfd libraries to locations from which the user may execute them
 
==== Ninja ====
 
[https://ninja-build.org Ninja] is particularly interesting because it is an extremely efficient and highly parallel tool which may be used instead of make to control the compilation and linking of GnuCash. It also manages the installation of the program and libraries to locations from which the program may be executed.
 
 
 
 
 
For GnuCash 4.x (i.e. current master branch) we expect to require C++14 and may require C++17 compatibility.
 
=== Disclaimer ===
 
This page deals with building the GnuCash from the source code. It includes building the current stable release from source code (downloaded tarballs as well as well as the '''developers version''' of GnuCash from the ''[[Git]] repository''. If you are searching for instructions for the ''stable version''available from your distributions software repositories, you should read [[GnuCash#Installation]].
 
 
 
This page doesn't provide specific instructions for optional third-party modules like ''AqBanking'' or Perl ''Finance::Quote'' but does list the dependencies required and links to the configuration switches used with CMake to include them during compilation.
 
 
 
== Building on Linux Distributions ==
 
Detailed nstructions for building Gnucash on Linux distributions can be found [[Building_On_Linux | Building On Linux]].
 
 
 
== Building on Mac OS X ==
 
 
 
Mac OS X instructions can be found on [[MacOSX/Quartz]] (This is the procedure used for building the binary packages)
 
or [[MacOSXInstallation| gnucash installation from source on Mac OS X]].
 
 
 
== Building on Microsoft Windows ==
 
 
 
Compiling GnuCash in Windows is possible, but much more difficult than in linux.
 
For details, see [[Windows|GnuCash on Microsoft Windows]].
 
 
 
'''Note  Sections below this point will be relocated to new pages in the reconstructed Building Gnucash section. They will be retained here until that is complete and
 
they are operational in their new locations in the ne structure.'''
 
 
 
=== Get the [[GnuCash Sources]] ===
 
 
 
=== Configuring the Build Sytem ===
 
 
 
The GnuCash build system has gone through some changes in the course of the 2.6 and 2.7 series. Depending on the version of GnuCash you want to build you have the following options:
 
 
 
;For the application:
 
:;GnuCash 2.7.4 and more recent: These versions can only be built using [[#CMake]]. Autotools support was removed.
 
:;GnuCash 2.6.13 until GnuCash 2.7.3:[[#CMake]] support was introduced in version 2.6.13. Until version 2.7.3 GnuCash can be built with either [[#CMake]] or [[#Autotools]].
 
:;Earlier versions:Can only be built with [[#Autotools]].
 
:; Source Documentation requires Doxygen and is built with the command ```make doc```.
 
; The GnuCash Help and Tutorial and Concept Guide are configured and built with Autotools only.
 
 
 
==== Compiler ====
 
GnuCash 3.x requires a C++ compiler that supports ISO-standards C11 and C++11. Gcc version >=4.8 and Clang version >= 3.3 are known to work.
 
 
 
For GnuCash 4.x (i.e. current master branch) we expect to require C++14 and may require C++17 compatibility.
 
 
 
==== CMake ====
 
[https://cmake.org CMake] is a popular configuration and build system. One of its major advantages is the ability to generate project files for a variety of tools including make, ninja, CodeBlocks, [[Eclipse]], and Xcode.
 
[https://ninja-build.org Ninja] is particularly interesting because it is extremely efficient and highly parallel.
 
 
 
'''Notes:'''
 
 
 
* The following examples use <tt>gnucash.git</tt> as the name of the top source directory as would be the case if you used
 
  git clone https://github.com/gnucash/gnucash gnucash.git
 
:to obtain the sources. The last part of that command is the name of the directory into which the gnucash sources are written. If you're building from a source tarball the directory will be named something like <tt>gnucash-3.0</tt>, with "3.0" being the version of the tarball. We'll use <tt>path/to/gnucash.git</tt> to represent the path to the source directory. Make the obvious substitution.
 
* There is a subdirectory named <tt>gnucash</tt> inside the source directory. Make sure that you don't pass that directory as source directory to <tt>cmake</tt>.
 
 
 
'''Procedure:'''
 
 
 
# To configure GnuCash with cmake you'll first need to ensure that cmake and your chosen build toolchain are installed via the package manager; the [[MacOSX/Quartz]] and [[Windows]] build scripts take care of this for you.
 
# Next create a build directory. This is an arbitrary directory in which you will execute all commands related to the build. It should not be the source directory itself, but it can be a subdirectory (most people who do this creatively name it some variant of <tt>build</tt>) or it can be anywhere else that you have read and write permission, in which case you'll probably want to name it something like <tt>gnucash-build</tt>.
 
# You'll also need to select an installation prefix. Unless you're packaging GnuCash for a distribution, avoid anything under <tt>/usr</tt> or <tt>/opt</tt>. Those are special directories generally owned by root and the first is reserved for the distribution packages. CMake knows this and will munge some of the paths, leading to unexpected results. In the examples below we've used $HOME/.local, a common hidden directory on linux systems that's often in the default path, but any subdirectory under $HOME will allow easy installation without requiring privilege escalation.
 
# Next run cmake with some variable definitions from within the build directory:
 
  cmake -D CMAKE_INSTALL_PREFIX=$HOME/.local path/to/gnucash.git
 
::Will make a default configuration in the current directory from the sources in ../gnucash.git to be built with make. To build with ninja instead you'd use
 
  cmake -G Ninja -D CMAKE_INSTALL_PREFIX=$HOME/.local path/to/gnucash.git
 
::and to make a [https://cmake.org/cmake/help/v3.0/variable/CMAKE_BUILD_TYPE.html debug build]
 
  cmake -DCMAKE_BUILD_TYPE=Debug -D CMAKE_INSTALL_PREFIX=$HOME/local path/to/gnucash.git
 
 
 
'''Configuration Options:'''
 
 
 
GnuCash's cmake configuration is written to build most of the optional features by default. The only exception is the python bindings. See further down how you can alter this selection.
 
 
 
Some other important variables that you may need to define:
 
* <code>CMAKE_PREFIX_PATH</code> declares a : separated (or ; separated on Windows) set of search paths for roots of include and library files, needed if some dependencies are not installed in the default locations, i.e. /usr and /usr/local on most Unix systems. For example if you've built some dependencies from source and installed them in $HOME/.local you'd need to use
 
  cmake -D CMAKE_INSTALL_PREFIX=$HOME/.local -D CMAKE_PREFIX_PATH=$HOME/.local path/to/gnucash.git
 
* <code>GTEST_ROOT</code> and <code>GMOCK_ROOT</code> may be needed if cmake can't find Googletest in the normal locations for your distro.
 
* <code>GNC_DBD_DIR</code> The location of the DBD driver modules (e.g. libdbd-mysql.so) if not in the standard system library path (classically /usr/lib/dbd, but might be something like /usr/lib64/dbd or /usr/lib/x86_64-linux-gnu/dbd depending you your distro).
 
* <code>TEST_MYSQL_URL</code>The complete URL including password for a MySQL test database for running the SQL backend tests with MySQL.
 
* <code>TEST_PGSQL_URL</code>The complete URL including password for a PostgreSQL test database for running the SQL backend tests with PostgreSQL.
 
 
 
Configuration options are also set using -D; for example, include <code>-D DISABLE_DEPRECATED_GLIB=ON</code> to configure the build to raise errors when attempting to compile functions marked as deprecated in the version of GLib you're using. The GnuCash options and default values at the time of writing were:
 
* <code>WITH_SQL</code>, ON, enable the SQL backends. Requires LibDBI.
 
* <code>WITH_AQBANKING</code>, ON, enable the Online Banking features. Requires AQBanking, Gwenhywfar, and Ktoblzcheck.
 
* <code>WITH_GNUCASH</code>, ON, builds the Gnome GUI. Requires Gtk+ and its dependencies.
 
* <code>WITH_CUTECASH</code>, OFF, builds the experimental and incomplete [https://www.qt.io Qt] GUI.
 
* <code>WITH_OFX</code>, ON, builds the OFX importer code. Requires LibOFX and its dependencies.
 
* <code>WITH_PYTHON</code>, OFF, builds the Python bindings and console. Requires Python 2.7 headers and library.
 
* <code>ENABLE_BINRELOC</code>, ON, enables the built GnuCash to be moved to a different path from CMAKE_INSTALL_PREFIX after it's been built.
 
* <code>ENABLE_DEBUG</code>, OFF, the same as CMAKE_BUILD_TYPE=Debug.
 
* <code>ENABLE_REGISTER2</code>, OFF, builds the not-quite-finished GtkTreeView register replacement.
 
* <code>DISABLE_NLS</code>, OFF, turns off generating translation calls for strings.
 
* <code>DISABLE_DEPRECATED_GLIB</code>, OFF, raises an error when deprecated GLib functions are encountered.
 
* <code>DISABLE_DEPRECATED_GTK</code>, OFF, raises an error when deprecated Gtk, Gdk, or GdkPixbuf functions are encountered.
 
* <code>DISABLE_DEPRECATED_GNOME</code>, OFF, raises an error when deprecated functions in other Gnome libraries are encountered.
 
* <code>GNC_BUILD_AS_INSTALL</code>, ON, Mirrors the installation layout instead of the source layout for final build products.
 
 
 
Consult the root <code>CMakeLists.txt</code> in the GnuCash source directory for a current list of settings and options.
 
 
 
'''Further Reading:'''
 
 
 
* http://www.cmake.org/Wiki/CMake_FAQ FAQ
 
* http://www.cmake.org/HTML/Download.html - Download
 
* http://www.cmake.org/HTML/Documentation.html - The same page which you also get by "man cmake".
 
* http://websvn.kde.org/trunk/KDE/kdelibs/cmake/modules/ - Potentially helpful additional macros
 
* [https://samthursfield.wordpress.com/2015/11/21/cmake-dependencies-between-targets-and-files-and-custom-commands/ A blog post] about handling dependencies and targets for custom build commands.
 
* [http://llvm.org/docs/CMakePrimer.html LLVM's CMake Primer], a more programmer-oriented tutorial than the one in the CMake documentation.
 
 
 
==== Autotools ====
 
 
 
The ''documentation'' gnucash-docs uses the Autotools build system.
 
 
 
'''Note:''' Autotools support has been removed from the ''program'' GnuCash as of version 2.7.4. Use [[#CMake|CMake]] instead.
 
 
 
1. Discouraged intree build:
 
 
 
1.1. Change to gnucash-docs directory
 
  cd gnucash-docs
 
1.2. If this code was retrieved from [[Git]], generate the configure script (otherwise skip this step)
 
  ./autogen.sh
 
1.3. Look at available configure options
 
  ./configure --help
 
 
 
2. The build should happen in a separate directory either outside the source directory or a hidden directory in your source directory. This is to avoid known problems with intltool. For example:
 
<Syntaxhighlight lang="sh">
 
cd gnucash-docs
 
./autogen.sh        # These steps were identical to the description above. Now the part which is different:
 
mkdir .build        # Create the separate hidden build directory
 
cd .build          # and enter it
 
</Syntaxhighlight>
 
From within the build directory, you now have to call configure by its relative path. In this example, this is
 
<Syntaxhighlight lang="sh">
 
../configure --prefix...    # and all your other options
 
</Syntaxhighlight>
 
Some example options for configure might look as follows
 
  ../configure --prefix=/opt/gnucash-docs [...]
 
;--prefix: Where should the package be installed? If you install for test purposes, you might consider installing it below your home directory to avoid ''sudo''ing. You should never use the same path as your distribution!
 
 
 
;Further reading/viewing:
 
:[https://autotools.io/index.html Autotools Mythbuster]
 
:[https://www.dwheeler.com/autotools/ Introduction to the Autotools] 36' video tutorial
 
 
 
=== Building ===
 
 
 
1. To compile the sources
 
:* In case the build was configured with autotools or cmake/makefiles:
 
  make
 
:* In case the build was configured with cmake/Ninja:
 
  ninja
 
:: or
 
  ninja-build
 
:: Which one depends on the platform or distribution. Some package the tool as ninja, others package it as ninja-build. If one doesn't work, try the other.
 
:: In all the commands the follow, only the make invocation will be shown. Replace make with ninja(-build) if your build was configured for Ninja.
 
2. Optionally run the unit test suite. You should do this if you changed something in the sources:
 
  make check
 
3. To install gnucash
 
:* If your prefix was a descendant of $HOME or any other location where your normal user has write access:
 
  make install
 
:* Otherwise
 
  sudo make install
 
:Depending on the settings of your system <code>sudo</code> will ask you for your or the administrators password and will only work if you have administrative privileges.
 
 
 
4. Run
 
  /opt/gnucash-devel/bin/gnucash [options]
 
:Again use the option ''--help'' to see a list.
 
 
 
==== Reverse commands ====
 
In case you dislike your '''installation''', run from your build directory
 
[sudo] make uninstall
 
to remove it, ''before'' you change relevant options like the prefix.
 
 
 
'''Note''' ninja does not have an <code>uninstall</code> target. To uninstall a ninja build run
 
  [sudo] xargs rm < install_manifest.txt
 
from the root build directory.
 
 
 
To clean up your '''build''' directory, run
 
make clean
 
If you use a separate build directory, you can remove its content instead.
 
 
 
In some cases, that might not be sufficient, then clean your '''git''' gnucash directory with
 
git clean -f
 
 
 
To remove everything not part of the repo, including directories and ignored files, run
 
git clean -fdx -e /.project  -e /.cproject -e /.autotools -e /.settings/
 
'''Note:''' The exceptions are only necessary for Eclipse users. Else all their project information would be lost.
 
 
 
In this case you will have to start with ./autogen-sh again if you are using the autotools configuration.
 
 
 
'''Notes'''
 
* cmake builds by default install ''compilation'' targets including test programs in a <code>bin</code> subdirectory of the root build directory, and all the libraries are built into a <code>lib[64]</code> subdirectory with linkage temporarily set up such that the binaries can find their libraries. So to re-run a single test file you can simply run e.g.
 
  bin/test-engine
 
and to debug
 
  gdb bin/test-engine
 
Scheme tests reside in directories that mirror their source directories and require some environment fiddling to get them to run outside of <code>make check</code> or <code>ninja check</code>.
 
 
 
== Tutorial on Plugins ==
 
This section describes how to build a plugin from scratch.
 
 
 
;Note:This information is using the [[#Autotools]] based build system although current versions of gnucash (as of 2.7.4) can only be built with [[#CMake]]. So this may require some reinterpretation.
 
 
 
A plugin is a runtime loadable module which provides optional functions for GnuCash. There are a couple of plugins plus a skeleton example in src/plugins. To add your own plugin:
 
 
 
* Copy the example to a new plugin subdirectory:
 
  cd src/plugins
 
  cp -R example your-plugin-name
 
* edit Makefile.am to add your-plugin-name to the subdirs list
 
* edit configure.ac, inserting the following line near the end just before AC_OUTPUT:
 
  AC_CONFIG_FILES(src/plugins/your-plugin-name/Makefile src/plugins/your-plugin-name/ui/Makefile src/plugins/your-plugin-name/glade/Makefile)
 
* edit the source files in your-plugin-name to actually do what you want, rename them to make sense, and adjust the filenames in the three Makefile.am to match.
 
* Rebuild GnuCash:
 
  cd ../..
 
  ./autogen.sh
 
  ./configure --whatever options you usually use
 
  make
 
  make install
 
* to force GnuCash to load the plugin upon start
 
  echo '(gnc:module-load "gnucash/plugins/your-plugin-name" 0)' >> ~/.gnucash/config.user
 
 
 
The result will be your new plugin being available in the Tools menu, or wherever you added it in the UI file.
 
 
 
== OS/Distro specific Information ==
 
See the [https://github.com/Gnucash/gnucash/blob/master/README.dependencies README.dependencies] file for library dependency notes.
 
Also check out [[Dependencies|the dependencies page]].
 
 
 
=== Debian ===
 
 
 
If you are lucky, running
 
  aptitude 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.8-dev
 
swig
 
goffice-0-dev
 
libgsf-1-dev
 
libwebkitgtk-dev
 
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 git, you will also need the following installed before running autogen.sh:
 
 
 
automake
 
intltool
 
libtool
 
 
 
=== Fedora ===
 
 
 
'''Note''' these instructions as still for gnucash 2.6.x and older. Gnucash 3.x has a number of new build dependencies. On a current Fedora release dnf builddep gnucash will install those automatically for you. On Fedora 27 or older these new build dependencies have to be installed by hand. In addition autotools has been replaced with cmake.
 
 
 
First, we need install all dependencies of building GnuCash.
 
 
 
sudo dnf builddep gnucash -y
 
sudo dnf install texinfo git intltool libdbi-devel guile-devel doxygen webkitgtk-devel -y
 
 
 
And then we create the directories for source code, and check out source code from git master
 
 
 
mkdir -p ~/development
 
cd ~/development
 
git clone https://github.com/Gnucash/gnucash/ gnucash
 
cd gnucash
 
 
 
Then, we build it by following commands:
 
 
 
./autogen.sh
 
./configure --prefix=$HOME/unstable/gnucash --enable-debug --enable-doxygen --enable-error-on-warning --enable-compile-warnings
 
make all install
 
 
 
If there are no errors, we can run it:
 
 
 
~/unstable/gnucash/bin/gnucash
 
 
 
=== Gentoo ===
 
 
 
Gentoo instructions can be found on [[Gentoo|Gnucash-svn installation on Gentoo]].
 
 
 
 
 
 
 
=== Slackware ===
 
 
 
Slackware installation is covered on [[Slackware|this page]].
 
 
 
=== Ubuntu ===
 
 
 
Ubuntu releases are supported for various lengths of time; Wikipedia has a [http://en.wikipedia.org/wiki/List_of_Ubuntu_releases#Table_of_versions handy chart showing which versions are still supported].
 
 
 
'''Note:''' Dear Ubunteros, please do not copy and paste whole paragraphs. Instead adjust single sections in the form
 
:Version x and newer:
 
::do this
 
:Version x-1 and before:
 
::do that.
 
:Can someone of you clean up this chapter and later remove this note?
 
 
 
==== Compiling Newer Ubuntu Packages on an Older Release ("self-backporting") ====
 
 
 
If you are on an older version of Ubuntu (or Debian for that matter) such as Trusty 14.04 LTS, you may be able to compile a newer Ubuntu or Debian version yourself (essentially backporting it yourself). 
 
 
 
If the newer package is available in Utopic 14.10, add a line in your /etc/apt/sources.list (or for newer versions of Ubuntu, include a new file in the /etc/apt/sources.list.d/ directory) with the correct format. For Utopic, the line would be:
 
 
 
deb-src <nowiki>http://archive.ubuntu.com/ubuntu</nowiki> utopic main restricted universe
 
 
 
You want the version (Utopic in above example) to be newer than the system release you have installed.  Then you can use the following lines to compile and install whatever software version is in the newer Ubuntu release, "backporting" the newer software to your older release of Ubuntu.
 
 
 
cd ~/src/
 
sudo aptitude update
 
sudo apt-get install build-essential fakeroot
 
sudo apt-get build-dep gnucash
 
apt-get --compile source gnucash
 
sudo dpkg -i *.deb
 
  
Easy as 1-2-3!*
+
# Configuration (cmake - autotools in earlier GnuCash versions)
 +
# Compilation ( make or ninja)
 +
# Installation (make or ninja)
  
* If <code>apt-get build-dep</code> fails on the gnucash packages with a message like "E: Build-Depends dependency for gnucash cannot be satisfied because the package XXXXX cannot be found" then that means you need additional updated libraries on your system in order to backport the software. Unless you know there are only one or two new libraries needed, it's most likely MUCH easier just to build GnuCash from source. (See directions below.)
+
Building GnuCash utilizes a set of tools which is available for all three of the major operating systems.
 +
These steps are described in detail for each operating system in the linked pages below, along with the installation of the build tools.
  
* If dpkg -i *.deb fails because it lists a bunch of dependencies (this happens if you've never installed gnucash before) the easiest way to get apt to bring them in is using -f (fix broken) install:
+
== Build Tools ==
sudo apt-get -f install
+
A general description of the tools used to configure and build GnuCash is given in [[Build_Tools |Build tools]].
  
==== Ubuntu 16.04 LTS (Xenial Xerus) ====
+
A listing of dependencies is available at [[Dependencies]].
[[BuildUbuntu16.04 | Build Instructions for Ubuntu 16.04 also Ubuntu 18.04 & Linux Mint 18.3. ]]
 
  
==== Ubuntu 14.04 LTS (Trusty Tahr) ====
+
The GnuCash build system has gone through some changes in the course of the 2.6 and 3 series. CMake has replaced the Autotools autogen and configure scripts for configuring the build. This has provided the ability to configure for alternative build systems and popular IDEs. Under the hood compilation and installation can now either be controlled using GNU [[Build_Tools#Make|Make]] or alternatively using the faster [[Build_Tools#Ninja|Ninja]]. Depending on the version of GnuCash you want to build you have the following options:
 +
;For the application generally:
 +
:;GnuCash 3 and more recent: These versions are configured using [[Build_Tools#CMake|CMake]]. Autotools support has been removed. Either make or ninja may be used for the build.
 +
:;GnuCash 2.6 and earlier: These versions are configured with [[Build_Tools#Autotools|Autotools]] and built with the GNU make utility. GnuCash from v2.6.13 allowed experimental use of cmake to configure and ninja to build.
  
To build from the source tarball download the source code tarball from http://www.gnucash.org/download.phtml and extract to an appropriate directory.
+
;For the Source API Documentation: This is built directly from the program sources. Depending on how the build system is configured you can use <code>make doc</code> or <code>ninja doc</code>. Note this requires [[Doxygen]] to be installed.
  
Next install the build dependencies
+
;For the documentation:
sudo apt-get build-dep gnucash
+
:;Since GnuCash 4.8: Only [[Build_Tools#CMake|CMake]] with either [[Build_Tools#Make|Make]] or [[Build_Tools#Ninja|Ninja]] is supported
 +
:;Upto GnuCash 4.7: The GnuCash Help and Tutorial and Concept Guide are configured with [[Build_Tools#Autotools|Autotools]] and built with [[Build_Tools#Make|Make]].
 +
::[[Build_Tools#CMake|CMake]] was introduced in 3.7.
  
(On a fresh install I also needed to purge guile-2.0 and install these packages as well follow the guide below for issues with slib)
+
== Compiler ==
sudo apt-get purge guile-2.0
+
'''GnuCash &ge; 4.0''' requires ISO-standard '''C++17''' compatibility.
sudo apt-get install slib libgnomeui-common libgnomeui-dev guile-1.8 guile-1.8-dev checkinstall
 
  
if want to use the alternative database backends then:
+
'''GnuCash 3.x''' required a C++ compiler that supports ''C11'' and ''C++11''. '''Gcc version &ge; 4.8''' and '''Clang version &ge; 3.3''' are known to work.
sudo apt-get install libdbd-{sqlite3,pgsql,mysql}
 
  
In a terminal cd to the gnucash directory and run
+
== Source Platform ==
./configure --prefix=/path/to/install/gnucash/to --enable-compile-warnings --with-html-engine=webkit
+
=== Building on Linux Distributions ===
make
+
Detailed instructions for building GnuCash on Linux distributions can be found on [[Building_On_Linux | Building On Linux]].
sudo checkinstall
 
  
The prefix might be, for example,
+
=== Building on macOS ===
--prefix=/usr/bin/gnucash2.4
+
macOS instructions can be found on [[MacOS/Quartz]] (This is the procedure used for building the binary packages)
 +
or [[MacOS Installation| GnuCash installation from source on macOS]].
  
Running checkinstall will ask you some options on how the package is named, etc. This will produce a .DEB which you can then simply install (adjust the path/filename accordingly)
+
=== Building on Microsoft Windows ===
sudo dpkg -i /path/to/deb/gnucash_2.4.15-1_amd64.deb
+
Compiling GnuCash on Windows is possible, but much more difficult than on Linux.  
 +
For details, see [[Building on Windows|building GnuCash on Microsoft Windows]].

Latest revision as of 15:37, 26 March 2024

Languages Deutsch עִברִית

This page deals with building GnuCash from the source code. It includes building the current stable release from source code (downloaded as tarballs) as well as the developers version of GnuCash from the Git repository. If you are searching for instructions for the version available from your distribution's software repositories, you should read Installation.

This page doesn't provide specific instructions for optional third-party modules—like AqBanking or Perl Finance::Quote—but does list the dependencies required and links to the configuration switches used with CMake to include them during compilation.

Introduction

GnuCash can be built from sources on Linux distributions, Microsoft Windows and macOS. There are three major steps in building the GnuCash program. These are listed along with the tools which may used for each step:

  1. Configuration (cmake - autotools in earlier GnuCash versions)
  2. Compilation ( make or ninja)
  3. Installation (make or ninja)

Building GnuCash utilizes a set of tools which is available for all three of the major operating systems. These steps are described in detail for each operating system in the linked pages below, along with the installation of the build tools.

Build Tools

A general description of the tools used to configure and build GnuCash is given in Build tools.

A listing of dependencies is available at Dependencies.

The GnuCash build system has gone through some changes in the course of the 2.6 and 3 series. CMake has replaced the Autotools autogen and configure scripts for configuring the build. This has provided the ability to configure for alternative build systems and popular IDEs. Under the hood compilation and installation can now either be controlled using GNU Make or alternatively using the faster Ninja. Depending on the version of GnuCash you want to build you have the following options:

For the application generally
GnuCash 3 and more recent
These versions are configured using CMake. Autotools support has been removed. Either make or ninja may be used for the build.
GnuCash 2.6 and earlier
These versions are configured with Autotools and built with the GNU make utility. GnuCash from v2.6.13 allowed experimental use of cmake to configure and ninja to build.
For the Source API Documentation
This is built directly from the program sources. Depending on how the build system is configured you can use make doc or ninja doc. Note this requires Doxygen to be installed.
For the documentation
Since GnuCash 4.8
Only CMake with either Make or Ninja is supported
Upto GnuCash 4.7
The GnuCash Help and Tutorial and Concept Guide are configured with Autotools and built with Make.
CMake was introduced in 3.7.

Compiler

GnuCash ≥ 4.0 requires ISO-standard C++17 compatibility.

GnuCash 3.x required a C++ compiler that supports C11 and C++11. Gcc version ≥ 4.8 and Clang version ≥ 3.3 are known to work.

Source Platform

Building on Linux Distributions

Detailed instructions for building GnuCash on Linux distributions can be found on Building On Linux.

Building on macOS

macOS instructions can be found on MacOS/Quartz (This is the procedure used for building the binary packages) or GnuCash installation from source on macOS.

Building on Microsoft Windows

Compiling GnuCash on Windows is possible, but much more difficult than on Linux. For details, see building GnuCash on Microsoft Windows.