GnuCash Compiler Dependency
---------------------------

The GnuCash developers use gcc (https://gcc.gnu.org) for developing and
testing GnuCash.  For convenience, we have relied on certain features
of gcc that are not part of any official standard and may not be
available with other standard-compliant compilers.  Anyone desiring to
compile GnuCash with some other compiler may have to remove these
"gcc-isms", some of which are documented here.

  Pointer-typed NULL sentinel values
  ----------------------------------

  Gcc provides an implementation of `stddef.h' that defines NULL to
always expand to a pointer-typed null constant.  This is precisely
what is needed in order to make sentinel value arguments to variadic
functions correct for both 32 and 64 bit platforms.  However, another
implementation may define NULL to expand to `0'.  In that case, all
sentinel value arguments must have an explicit `(void *)' cast.

  C++ style comments
  ------------------

  C++ style comments (`// comment to end of line') are discouraged but
not actively eradicated.

  Variadic Macros
  ---------------

  GnuCash uses variadic macros for debugging and logging support (via
qof).



Important notice
----------------
You can find the most recent version of the following part at
https://wiki.gnucash.org/wiki/Dependencies.

GnuCash Library Dependency Policy
---------------------------------

GnuCash desires to only depend on library versions and packages that are
practically available.  Specifically, we choose to depend only on versions
that have been in the major distributions for 6 months. (This is motivated in
part by the 1.6 release, which required a large set of relatively-recent
dependencies.  Specifically, as most user's (distributions) did not have the
required versions packaged, it was exceedingly painful for end users to
upgrade to the anticipated release, leading to a reputation that gnucash
still has.)

Libraries/Deps
--------------
  required              Version
  --------              _______
  gcc or clang          8.0 (gcc)/6.0(clang)    C++17 C/C++ compiler
  cmake                 3.10                    Build system manager
  glib2                 2.56.1
  gtk+3                 3.22.30
  guile                 3.0, 2.2 or 2.0.9       Must be built with regex
                                                support enabled
  libxml2               2.9.4
  gettext               0.20                    Required to build gnucash.pot,
                                                0.19.6 or later permitted but
                                                won't generate gnucash.pot.
  libxslt, including xsltproc
  ICU                                           International Components for
                                                Unicode
  boost                 1.67.0                  All headers plus date_time,
                                                filesystem, locale,
                                                program_options, and
                                                regex libraries.
                                                locale and regex libs must be
                                                built with ICU support.
                                                Note that 1.67.0 is the first
                                                *release* that supports C++17,
                                                but that some distributions
                                                have patched earlier versions
                                                to work.
  swig                  3.0.12                  Makes Guile and Python Bindings.
  webkit                2.4.11 (Windows,
                        2.14.1 (Everything Else)
  googletest            1.8.0                   Some distros call it gtest.
                                                Some distros also separate out
                                                googlemock or gmock; both are
                                                required.

  libdbi                0.8.3                    SQL backend; also requires at
                                                 least one of libdbd-sqlite3,
                                                 libdbd-mysql, or libdbd-pgsql

  zlib

  optional
  --------
  aqbanking             6.4.0                    online banking and SWIFT
  gwenhywfar            5.8.0                    file imports.

  python                3.8.0                    python bindings; headers
                                                 required, not just binaries.
  libofx                0.9.12                   OFX/QFX import

  libsecret             0.18
  gtk-mac-integration                            MacOS only, for menus to go
                                                 to the main menu bar instead
                                                 of one on the window.

  makeinfo                                       Not really needed, it
                                                 just builds the
                                                 mostly obsolete
                                                 design documentation
                                                 (superceded for the
                                                 most part in Doxygen
                                                 docs).
  doxygen                                        For building the Doxygen API
                                                 documentation.

  at runtime, required
  ---------------------
  a gsettings backend to store the gnucash global preferences in
  This backend is platform dependent.
  - linux:        dconf
  - windows:      registry
  - osx/quarz:    plists

  Note that the osx and windows backends are built-in in gio for their
  respective platforms. On linux and similar systems, the dconf package
  should be installed.

  at runtime, suggested
  ---------------------
  isocodes: translation of currency names
