2017-02-01 21:48:46 -06:00
# CMakeLists.txt for GnuCash
2010-03-04 11:48:36 -06:00
2017-09-07 00:24:19 -05:00
IF ( WIN32 OR APPLE )
2015-12-07 11:17:08 -06:00
CMAKE_MINIMUM_REQUIRED ( VERSION 3.3.2 )
ELSE ( )
2016-01-13 10:45:29 -06:00
CMAKE_MINIMUM_REQUIRED ( VERSION 3.0 )
2015-12-07 11:17:08 -06:00
ENDIF ( )
2018-02-01 07:22:32 -06:00
PROJECT ( gnucash )
2015-12-07 11:17:08 -06:00
2016-01-26 09:00:54 -06:00
ENABLE_TESTING ( )
2016-01-18 10:33:34 -06:00
2015-12-07 11:17:08 -06:00
# Version number of gnucash
2018-04-01 15:22:49 -05:00
SET ( GNUCASH_MAJOR_VERSION 3 )
SET ( GNUCASH_MINOR_VERSION 0 )
2018-04-04 16:11:13 -05:00
SET ( VERSION "${GNUCASH_MAJOR_VERSION}.${GNUCASH_MINOR_VERSION}" )
2018-04-01 15:22:49 -05:00
SET ( GNUCASH_LATEST_STABLE_SERIES 3.0 )
2015-12-07 11:17:08 -06:00
SET ( PACKAGE gnucash )
SET ( PACKAGE_NAME GnuCash )
2018-04-01 15:22:49 -05:00
SET ( PACKAGE_VERSION 3.0 )
2015-12-07 11:17:08 -06:00
SET ( PACKAGE_BUGREPORT gnucash-devel@gnucash.org )
SET ( PACKAGE_TARNAME ${ PACKAGE } )
SET ( PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}" )
SET ( PACKAGE_URL "" )
2010-05-06 06:40:55 -05:00
2011-01-30 04:25:07 -06:00
# Change this in development versions when changing anything that
# affects stored data structures. Reset to zero when bumping version.
2015-12-07 11:17:08 -06:00
2011-02-02 14:31:10 -06:00
SET ( GNUCASH_RESAVE_VERSION "19920" )
2011-01-30 04:25:07 -06:00
2015-12-07 11:17:08 -06:00
SET ( GETTEXT_PACKAGE "gnucash" )
2018-01-28 10:45:49 -06:00
# Clear cache variables that will be filled later during the cmake run
unset ( dist_generated CACHE )
unset ( dist_generated_depends CACHE )
2010-03-04 11:48:36 -06:00
# Extra cmake macros
2017-08-10 06:56:00 -05:00
SET ( CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/common/cmake_modules;${CMAKE_MODULE_PATH}" )
2017-06-15 17:39:04 -05:00
# CMake does a non-recursive build that puts the final build product directories in the build root. Some code needs to know this.
2010-03-04 11:48:36 -06:00
INCLUDE ( MacroAppendForeach )
INCLUDE ( MacroAddSourceFileCompileFlags )
INCLUDE ( GncAddSwigCommand )
2010-05-06 06:40:55 -05:00
INCLUDE ( CheckIncludeFiles )
2015-12-07 11:17:08 -06:00
INCLUDE ( GncAddSchemeTargets )
INCLUDE ( GncAddGSchemaTargets )
2016-01-26 09:00:54 -06:00
INCLUDE ( GncAddTest )
2017-02-01 21:48:46 -06:00
INCLUDE ( MakeDistFiles )
2017-11-28 16:25:35 -06:00
INCLUDE ( GNUInstallDirs )
2010-03-04 11:48:36 -06:00
2015-12-07 11:17:08 -06:00
# ############################################################
# These options are settable from the CMake command line. For example, to disable
# SQL, put -D WITH_SQL=OFF on the command line.
OPTION ( WITH_SQL "Build this project with SQL (libdbi) support" ON )
2017-07-14 16:21:07 -05:00
OPTION ( WITH_AQBANKING "Build this project with aqbanking (online banking) support" ON )
2017-08-09 09:09:32 -05:00
OPTION ( WITH_GNUCASH "Build all of GnuCash, not just the library" ON )
2015-12-07 11:17:08 -06:00
OPTION ( WITH_OFX "compile with ofx support (needs LibOFX)" ON )
2016-08-26 13:59:33 -05:00
OPTION ( WITH_PYTHON "enable python plugin and bindings" OFF )
2015-12-07 11:17:08 -06:00
OPTION ( ENABLE_BINRELOC "compile with binary relocation support" ON )
OPTION ( ENABLE_REGISTER2 "compile with register2 enabled" OFF )
OPTION ( DISABLE_NLS "do not use Native Language Support" OFF )
2017-01-16 16:03:50 -06:00
OPTION ( DISABLE_DEPRECATED_GLIB "don't use deprecated glib functions" OFF )
2017-02-02 10:20:39 -06:00
OPTION ( DISABLE_DEPRECATED_GTK "don't use deprecated gtk, gdk or gdk-pixbuf functions" OFF )
2015-12-07 11:17:08 -06:00
OPTION ( DISABLE_DEPRECATED_GNOME "don't use deprecated gnome functions" OFF )
2018-02-27 15:21:00 -06:00
OPTION ( ALLOW_OLD_GETTEXT "allow to configure build with a gettext version older than 0.19.6. Some files will not be translated!" OFF )
2010-03-04 11:48:36 -06:00
# ############################################################
2015-12-07 11:17:08 -06:00
# These are also settable from the command line in a similar way.
2010-03-27 15:27:10 -05:00
2018-03-17 19:25:39 -05:00
# Use gsettings-desktop-schemas for a better integration with GNOME
SET ( COMPILE_GSCHEMAS ON CACHE BOOL "Compile the GSettings schema" )
2017-10-26 06:30:29 -05:00
SET ( GNUCASH_BUILD_ID "" CACHE STRING "Overrides the GnuCash build identification (Build ID) which defaults to a description of the vcs commit from which gnucash is built. Distributions may want to insert a package management based version number instead" )
2018-01-31 09:16:59 -06:00
# GENERATE_SWIG_WRAPPERS - Controls whether to generate the swig wrappers for guile and python. If not set the wrappers will only be generated when building from a git worktree, commented out here, but will be evaluated later on in this file
2017-12-05 16:48:45 -06:00
# Check that all of the absolute install paths are inside
# ${CMAKE_INSTALL_PREFIX}. If they're not, disable binreloc as it
# won't be able to find paths that aren't relative to the location of
# the executable.
foreach ( install_dir ${ CMAKE_INSTALL_FULL_BINDIR }
$ { C M A K E _ I N S T A L L _ F U L L _ S Y S C O N F D I R } $ { C M A K E _ I N S T A L L _ F U L L _ D A T A R O O T D I R }
$ { C M A K E _ I N S T A L L _ F U L L _ D A T A D I R } $ { C M A K E _ I N S T A L L _ F U L L _ L I B D I R } )
string ( FIND ${ install_dir } ${ CMAKE_INSTALL_PREFIX } in_prefix )
if ( in_prefix EQUAL -1 )
set ( ENABLE_BINRELOC OFF )
message ( WARNING "${install_dir} is set outside of the intallation prefix ${CMAKE_INSTALL_PREFIX}. That will break relocation so ENABLE_BINRELOC is set to off. With relocation disabled GnuCash will run only in its configured install location. You must set GNC_UNINSTALLED=1 and GNC_BUILDDIR=/path/to/builddir to run from the build directory. GnuCash will not run from a DESTDIR." )
break ( )
endif ( )
endforeach ( )
# GnuCash installs two files in ${CMAKE_INSTALL_SYSCONFDIR}
2017-11-28 16:25:35 -06:00
SET ( BINDIR ${ CMAKE_INSTALL_BINDIR } CACHE STRING "user executables" )
SET ( SYSCONFDIR ${ CMAKE_INSTALL_SYSCONFDIR } CACHE STRING "read-only single-machine data" )
SET ( DATAROOTDIR ${ CMAKE_INSTALL_DATAROOTDIR } CACHE STRING "read-only arch.-independent data root" )
SET ( DATADIR ${ CMAKE_INSTALL_DATADIR } CACHE STRING "read-only architecture-independent data" )
SET ( LIBDIR ${ CMAKE_INSTALL_LIBDIR } CACHE STRING "object code libraries" )
2015-12-07 11:17:08 -06:00
SET ( LOCALEDIR ${ DATAROOTDIR } /locale CACHE STRING "locale-dependent data" )
SET ( GNC_HELPDIR ${ DATADIR } CACHE STRING "where to store help files" )
SET ( DATADIRNAME share )
SET ( GNC_SYSTEM_XDG_DATA_DIRS /usr/local/share /usr/share )
2017-12-05 16:48:45 -06:00
SET ( GNC_DBD_DIR ${ CMAKE_PREFIX_LIBDIR } /dbd CACHE PATH "specify location of libdbi drivers" )
2017-11-28 16:25:35 -06:00
SET ( PKGLIBDIR ${ CMAKE_INSTALL_LIBDIR } /gnucash )
2016-01-26 09:00:54 -06:00
SET ( TEST_MYSQL_URL "" CACHE STRING "MySQL database URL for testing" )
SET ( TEST_PGSQL_URL "" CACHE STRING "PgSQL database URL for testing" )
2015-12-07 11:17:08 -06:00
2017-02-01 21:48:46 -06:00
SET ( DATADIR_BUILD ${ CMAKE_BINARY_DIR } / ${ DATADIRNAME } )
2017-12-01 12:53:17 -06:00
STRING ( REPLACE ${ CMAKE_INSTALL_PREFIX } "" LIBDIR_BUILD ${ LIBDIR } )
SET ( LIBDIR_BUILD ${ CMAKE_BINARY_DIR } / ${ LIBDIR_BUILD } )
2017-02-01 21:48:46 -06:00
SET ( SYSCONFDIR_BUILD ${ CMAKE_BINARY_DIR } /etc )
2017-12-01 12:53:17 -06:00
SET ( LIBEXECDIR_BUILD ${ CMAKE_BINARY_DIR } /libexec )
2017-02-01 21:48:46 -06:00
SET ( BINDIR_BUILD ${ CMAKE_BINARY_DIR } /bin )
2010-03-27 15:27:10 -05:00
2016-01-26 09:00:54 -06:00
SET ( SHELL_FROM_ENV $ENV{ SHELL } )
2016-01-27 14:50:51 -06:00
SET ( SHELL /bin/bash )
2017-07-22 15:28:01 -05:00
#We need to distinguish between MinGW.org and MinGW-w64:
IF ( MINGW )
STRING ( FIND ${ CMAKE_C_COMPILER } "msys2" IS_MSYS2 )
IF ( ${ IS_MSYS2 } GREATER_EQUAL 0 )
SET ( MINGW64 ON )
ENDIF ( )
ENDIF ( MINGW )
IF ( MINGW AND NOT MINGW64 ) # /bin/bash will work fine on MinGW
2016-01-27 14:50:51 -06:00
SET ( SHELL ${ CMAKE_PREFIX_PATH } /mingw/msys/1.0/bin/bash.exe )
ENDIF ( )
2016-01-26 09:00:54 -06:00
IF ( SHELL_FROM_ENV ) # Replacing this with IF ($ENV{SHELL}) doesn't work.
SET ( SHELL ${ SHELL_FROM_ENV } )
ENDIF ( )
2015-12-07 11:17:08 -06:00
2016-08-26 13:59:33 -05:00
# Determine whether we are building from a VCS or from a tarball
EXECUTE_PROCESS (
C O M M A N D $ { S H E L L } $ { C M A K E _ S O U R C E _ D I R } / u t i l / g n c - v c s - i n f o - t $ { C M A K E _ S O U R C E _ D I R }
R E S U L T _ V A R I A B L E G N C _ V C S _ I N F O _ R E S U L T
O U T P U T _ V A R I A B L E G N C _ V C S _ I N F O _ O U T P U T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
)
2018-01-30 14:24:22 -06:00
SET ( BUILDING_FROM_VCS "NO" )
IF ( GNC_VCS_INFO_RESULT EQUAL 0 )
SET ( BUILDING_FROM_VCS "YES" )
# IF building from VCS, we need git
find_package ( Git )
IF ( NOT GIT_FOUND )
MESSAGE ( SEND_ERROR "Looks like we're building from version control, but can't find git executable. Please set GIT_EXECUTABLE." )
ENDIF ( )
ENDIF ( )
2018-01-31 09:16:59 -06:00
# Determine whether to generate the swig wrappers.
# By default they will only be generated when building from a git worktree
set ( GENERATE_SWIG_WRAPPERS ${ BUILDING_FROM_VCS } CACHE BOOL "Controls whether to generate the swig wrappers for guile and python. If not set the wrappers will only be generated when building from a git worktree" )
2017-02-01 21:48:46 -06:00
2015-12-07 11:17:08 -06:00
IF ( WIN32 )
# Help Windows find the various dependencies. We assume here that the standard advice for building
# GnuCash has been followed and that these dependencies live underneath something like C:/GCDEV, which
# should be provided as CMAKE_PREFIX_PATH on the CMake command line:
# cmake -D CMAKE_PREFIX_PATH=c/gcdev -G "MSYS Makefiles" path/to/gnucash/sources
#
2017-10-26 14:38:50 -05:00
SET ( CMAKE_C_IMPLICIT_LINK_LIBRARIES "" )
2015-12-07 11:17:08 -06:00
SET ( CMAKE_FRAMEWORK_PATH_TMP ${ CMAKE_PREFIX_PATH } )
2017-01-14 07:36:56 -06:00
SET ( DEV_SUBDIRS aqbanking gnome guile gwenhywfar libgsf libofx libsoup libxslt webkit )
2015-12-07 11:17:08 -06:00
FOREACH ( subdir ${ DEV_SUBDIRS } )
LIST ( APPEND CMAKE_FRAMEWORK_PATH_TMP ${ CMAKE_PREFIX_PATH } / ${ subdir } )
ENDFOREACH ( )
# Setting CMAKE_FRAMEWORK_PATH, which is intended for OS X, is a terrible hack here. But I don't
# want to mess with CMAKE_PREFIX_PATH.
SET ( CMAKE_FRAMEWORK_PATH "${CMAKE_FRAMEWORK_PATH_TMP}" )
2017-05-26 15:51:51 -05:00
#SET(PKG_CONFIG_EXECUTABLE ${CMAKE_PREFIX_PATH}/gnome/bin/pkg-config.exe)
SET ( SWIG_EXECUTABLE swig )
#SET(SWIG_EXECUTABLE ${CMAKE_PREFIX_PATH}/swig/swig.exe)
2017-06-05 16:56:18 -05:00
FIND_PATH ( REGEX_INCLUDE_PATH regex.h )
FIND_PATH ( REGEX_LIB_PATH libregex.dll.a )
SET ( REGEX_LDFLAGS "-L${REGEX_LIB_PATH} -lregex" )
2017-05-26 15:51:51 -05:00
#SET(LIBXSLT_INCLUDE_DIR ${CMAKE_PREFIX_PATH}/libxslt/include)
#SET(LIBXSLT_XSLTPROC_EXECUTABLE ${CMAKE_PREFIX_PATH}/libxslt/bin/xsltproc)
2016-08-20 15:14:34 -05:00
#Prevent creating a console window on startup.
SET ( CMAKE_EXE_LINKER_FLAGS -mwindows )
2015-12-07 11:17:08 -06:00
ENDIF ( WIN32 )
FIND_PACKAGE ( PkgConfig REQUIRED )
# The default FindPkgConfig.make code has a bug in how the setting of PKG_CONFIG_PATH is handled.
2017-08-10 06:56:00 -05:00
# The common/cmake_modules/GncFindPkgConfig.cmake file overrides a couple of macros in FindPkgConfig to fix.
2015-12-07 11:17:08 -06:00
INCLUDE ( GncFindPkgConfig )
2010-03-04 11:48:36 -06:00
IF ( NOT PKG_CONFIG_FOUND )
MESSAGE ( SEND_ERROR "pkg-config not found, but is required" )
ENDIF ( NOT PKG_CONFIG_FOUND )
# glib et al.
2017-03-16 16:21:26 -05:00
GNC_PKG_CHECK_MODULES ( GLIB2 REQUIRED glib-2.0>=2.40 )
2017-08-08 06:46:53 -05:00
GNC_PKG_CHECK_MODULES ( GIO REQUIRED gio-2.0 )
2015-12-07 11:17:08 -06:00
GNC_PKG_CHECK_MODULES ( GOBJECT REQUIRED gobject-2.0>=2.20 )
GNC_PKG_CHECK_MODULES ( GMODULE REQUIRED gmodule-2.0>=2.20 )
GNC_PKG_CHECK_MODULES ( GTHREAD REQUIRED gthread-2.0>=2.20 )
GNC_PKG_CHECK_MODULES ( LIBXML2 REQUIRED libxml-2.0>=2.7.0 )
GNC_PKG_CHECK_MODULES ( LIBXSLT REQUIRED libxslt )
2017-10-14 16:26:04 -05:00
IF ( WIN32 OR APPLE )
2018-01-27 18:42:37 -06:00
GNC_PKG_CHECK_MODULES ( WEBKIT1 REQUIRED webkitgtk-3.0 )
SET ( WEBKIT1 1 )
SET ( WEBKIT_CFLAGS ${ WEBKIT2_CFLAGS } )
SET ( WEBKIT_INCLUDE_DIRS ${ WEBKIT1_INCLUDE_DIRS } )
SET ( WEBKIT_LDFLAGS ${ WEBKIT1_LDFLAGS } )
SET ( WEBKIT_LIBRARIES ${ WEBKIT1_LIBRARIES } )
2017-10-14 16:26:04 -05:00
ELSE ( WIN32 OR APPLE )
2018-01-23 18:04:28 -06:00
GNC_PKG_CHECK_MODULES ( WEBKIT2_4 webkit2gtk-4.0 )
IF ( NOT WEBKIT2_4_FOUND )
GNC_PKG_CHECK_MODULES ( WEBKIT2_3 REQUIRED webkit2gtk-3.0 )
2017-07-08 17:08:07 -05:00
SET ( WEBKIT2_3 1 )
2018-01-23 18:04:28 -06:00
SET ( WEBKIT_CFLAGS ${ WEBKIT2_3_CFLAGS } )
SET ( WEBKIT_INCLUDE_DIRS ${ WEBKIT2_3_INCLUDE_DIRS } )
SET ( WEBKIT_LDFLAGS ${ WEBKIT2_3_LDFLAGS } )
SET ( WEBKIT_LIBRARIES ${ WEBKIT2_3_LIBRARIES } )
ELSE ( NOT WEBKIT2_4_FOUND )
2017-07-08 17:08:07 -05:00
SET ( WEBKIT2_4 1 )
2018-01-23 18:04:28 -06:00
SET ( WEBKIT_CFLAGS ${ WEBKIT2_4_CFLAGS } )
SET ( WEBKIT_INCLUDE_DIRS ${ WEBKIT2_4_INCLUDE_DIRS } )
SET ( WEBKIT_LDFLAGS ${ WEBKIT2_4_LDFLAGS } )
SET ( WEBKIT_LIBRARIES ${ WEBKIT2_4_LIBRARIES } )
ENDIF ( NOT WEBKIT2_4_FOUND )
2017-10-14 16:26:04 -05:00
ENDIF ( WIN32 OR APPLE )
2017-07-08 17:08:07 -05:00
2015-12-07 11:17:08 -06:00
IF ( WITH_GNUCASH )
2017-08-31 08:41:32 -05:00
GNC_PKG_CHECK_MODULES ( GTK3 REQUIRED gtk+-3.0>=3.10.0 )
2015-12-07 11:17:08 -06:00
ENDIF ( WITH_GNUCASH )
GNC_PKG_CHECK_MODULES ( ZLIB REQUIRED zlib )
2010-03-04 11:48:36 -06:00
IF ( MSVC )
MESSAGE ( STATUS "Hint: To create the import libraries for the gnome DLLs (e.g. gconf-2.lib), use the dlltool as follows: pexports bin/libgconf-2-4.dll > lib/libgconf-2.def ; dlltool -d lib/libgconf-2.def -D bin/libgconf-2-4.dll -l lib/gconf-2.lib" )
2010-03-11 15:59:45 -06:00
# Disable the obnoxious min/max macros in MSVC - we want to use the
# function versions of them.
ADD_DEFINITIONS ( -DNOMINMAX )
2010-03-04 11:48:36 -06:00
ENDIF ( MSVC )
FIND_PATH ( LIBINTL_INCLUDE_PATH NAMES libintl.h
P A T H S / u s r / i n c l u d e / o p t / g n o m e / i n c l u d e )
FIND_LIBRARY ( LIBINTL_LIBRARY NAMES intl )
2015-12-07 11:17:08 -06:00
FIND_PATH ( LTDL_INCLUDE_PATH NAMES ltdl.h PATHS /usr/include )
IF ( NOT LTDL_INCLUDE_PATH-NOTFOUND )
SET ( HAVE_LTDL_H 1 )
ENDIF ( )
FIND_PROGRAM ( GLIB_COMPILE_SCHEMAS glib-compile-schemas HINTS ${ CMAKE_PREFIX_PATH } /gnome/bin )
IF ( NOT GLIB_COMPILE_SCHEMAS )
MESSAGE ( SEND_ERROR "Can't find glib-compile-schemas program. Please set GLIB_COMPILE_SCHEMAS." )
ENDIF ( NOT GLIB_COMPILE_SCHEMAS )
2018-02-27 15:21:00 -06:00
if ( ALLOW_OLD_GETTEXT )
find_package ( Gettext REQUIRED )
else ( ALLOW_OLD_GETTEXT )
find_package ( Gettext 0.19.6 )
if ( NOT GETTEXT_FOUND )
2018-02-28 09:48:49 -06:00
message ( FATAL_ERROR " Note the build can be configured with an older version of gettext by setting ALLOW_OLD_GETTEXT=ON but then some files will not be translated:
2018-02-27 15:21:00 -06:00
- g n u c a s h . desktop ( requires at least gettext 0.19 )
- g n u c a s h . a p p d a t a . xml ( requires at least gettext 0.19.6 ) " )
endif ( NOT GETTEXT_FOUND )
endif ( ALLOW_OLD_GETTEXT )
if ( ${ GETTEXT_VERSION_STRING } VERSION_LESS 0.19 )
message ( WARNING "Got gettext version ${GETTEXT_VERSION_STRING}, however you need at least gettext version 0.19 in order to handle translation of the gnucash.desktop file. The build will be configured with an untranslated gnucash.desktop file." )
endif ( )
if ( ${ GETTEXT_VERSION_STRING } VERSION_LESS 0.19.6 )
message ( WARNING "Got gettext version ${GETTEXT_VERSION_STRING}, however you need at least gettext version 0.19.6 in order to handle translation of the gnucash.appdata file. The build will be configured with an untranslated gnucash.appdata file." )
endif ( )
2015-12-07 11:17:08 -06:00
2010-03-04 11:48:36 -06:00
FIND_PATH ( REGEX_INCLUDE_PATH NAMES regex.h
P A T H S / u s r / i n c l u d e / o p t / g n o m e / i n c l u d e )
FIND_LIBRARY ( REGEX_LIBRARY NAMES regex )
2010-03-14 16:01:32 -05:00
IF ( WIN32 )
2017-08-27 19:27:58 -05:00
message ( STATUS "Looking for htmlhelp.h and htmlhelp.a" )
FIND_PATH ( HTMLHELP_INCLUDE_PATH NAMES htmlhelp.h )
FIND_LIBRARY ( HTMLHELP_LIBRARY htmlhelp )
2010-03-14 16:01:32 -05:00
ENDIF ( WIN32 )
2010-03-04 11:48:36 -06:00
# ############################################################
# SWIG
2018-01-31 09:16:59 -06:00
IF ( GENERATE_SWIG_WRAPPERS )
2016-08-26 13:59:33 -05:00
FIND_PACKAGE ( SWIG REQUIRED )
INCLUDE ( ${ SWIG_USE_FILE } )
ENDIF ( )
2010-03-04 11:48:36 -06:00
2015-12-07 11:17:08 -06:00
# Find Guile and determine which version we are using.
2017-12-19 16:13:01 -06:00
# Look for guile versions in this order: 2.2 > 2.0
2015-12-07 11:17:08 -06:00
2010-03-06 05:00:54 -06:00
# guile library and include dir
2017-12-19 09:53:40 -06:00
GNC_PKG_CHECK_MODULES ( GUILE22 guile-2.2 QUIET )
IF ( GUILE22_FOUND ) # found guile-2.2
ADD_DEFINITIONS ( -DHAVE_GUILE22 )
2015-12-07 11:17:08 -06:00
SET ( HAVE_GUILE2 TRUE )
2017-12-19 09:53:40 -06:00
SET ( GUILE_EFFECTIVE_VERSION 2.2 )
SET ( GUILE_INCLUDE_DIRS ${ GUILE22_INCLUDE_DIRS } )
SET ( GUILE_LDFLAGS ${ GUILE22_LDFLAGS } )
2015-12-07 11:17:08 -06:00
2017-12-19 09:53:40 -06:00
FIND_PROGRAM ( GUILD_EXECUTABLE NAMES guild2.2 guild )
2015-12-07 11:17:08 -06:00
IF ( NOT GUILD_EXECUTABLE )
MESSAGE ( SEND_ERROR "The guild executable was not found, but is required. Please set GUILD_EXECUTABLE." )
ENDIF ( NOT GUILD_EXECUTABLE )
2017-12-19 09:53:40 -06:00
MESSAGE ( STATUS "Using guile-2.2.x" )
FIND_PROGRAM ( GUILE_EXECUTABLE NAMES guile2.2 guile )
ELSE ( GUILE22_FOUND )
GNC_PKG_CHECK_MODULES ( GUILE2 guile-2.0>=2.0.9 QUIET )
IF ( GUILE2_FOUND ) # found guile-2.0
ADD_DEFINITIONS ( -DHAVE_GUILE20 )
SET ( HAVE_GUILE2 TRUE )
SET ( GUILE_EFFECTIVE_VERSION 2.0 )
SET ( GUILE_INCLUDE_DIRS ${ GUILE2_INCLUDE_DIRS } )
SET ( GUILE_LDFLAGS ${ GUILE2_LDFLAGS } )
FIND_PROGRAM ( GUILD_EXECUTABLE NAMES guild2.0 guild )
IF ( NOT GUILD_EXECUTABLE )
MESSAGE ( SEND_ERROR "The guild executable was not found, but is required. Please set GUILD_EXECUTABLE." )
ENDIF ( NOT GUILD_EXECUTABLE )
MESSAGE ( STATUS "Using guile-2.0.x" )
FIND_PROGRAM ( GUILE_EXECUTABLE NAMES guile2.0 guile )
ELSE ( GUILE2_FOUND )
2017-12-19 16:13:01 -06:00
MESSAGE ( FATAL_ERROR "Neither guile 2.2 nor guile 2.0 were found GnuCash can't run without one of them. Ensure that one is installed and can be found with pgk-config." )
2017-12-19 09:53:40 -06:00
ENDIF ( GUILE2_FOUND )
ENDIF ( GUILE22_FOUND )
2010-03-04 11:48:36 -06:00
2016-01-27 14:50:51 -06:00
IF ( NOT GUILE_EXECUTABLE )
MESSAGE ( SEND_ERROR "The guile executable was not found, but is required. Please set GUILE_EXECUTABLE." )
ENDIF ( NOT GUILE_EXECUTABLE )
2018-02-20 20:06:06 -06:00
# Test that guile has SRFI-64. This is required for some unit tests.
execute_process ( COMMAND ${ GUILE_EXECUTABLE } -c "(use-modules (srfi srfi-64))"
R E S U L T _ V A R I A B L E G N C _ S R F I 6 4 _ R E S U L T
E R R O R _ Q U I E T
)
if ( GNC_SRFI64_RESULT EQUAL 0 )
message ( STATUS "Using guile SRFI-64" )
set ( HAVE_SRFI64 TRUE )
endif ( )
2015-12-07 11:17:08 -06:00
# ############################################################
IF ( WITH_AQBANKING )
GNC_PKG_CHECK_MODULES ( GWENHYWFAR REQUIRED gwenhywfar )
GNC_PKG_CHECK_MODULES ( AQBANKING REQUIRED aqbanking )
IF ( WITH_GNUCASH )
GNC_PKG_CHECK_MODULES ( KTOBLZCHECK ktoblzcheck )
IF ( KTOBLZCHECK_FOUND )
SET ( HAVE_KTOBLZCHECK_H 1 )
ENDIF ( KTOBLZCHECK_FOUND )
2017-12-22 12:26:31 -06:00
GNC_PKG_CHECK_MODULES ( GWEN_GTK3 gwengui-gtk3 )
2018-04-01 12:25:57 -05:00
IF ( GWEN_GTK3_FOUND AND GWEN_GTK3_VERSION VERSION_GREATER "4.20.0" )
2017-12-22 12:26:31 -06:00
SET ( HAVE_GWEN_GTK3 1 CACHE BOOL "True if gwen-gtk3.pc exists" )
2018-04-01 12:25:57 -05:00
ENDIF ( )
2015-12-07 11:17:08 -06:00
ENDIF ( WITH_GNUCASH )
ENDIF ( WITH_AQBANKING )
2014-06-16 13:03:45 -05:00
2015-12-07 11:17:08 -06:00
IF ( WITH_OFX )
GNC_PKG_CHECK_MODULES ( LIBOFX REQUIRED libofx )
2016-09-11 16:48:24 -05:00
INCLUDE ( CheckCXXSourceRuns )
2016-10-20 12:40:18 -05:00
IF ( WIN32 )
SET ( CMAKE_REQUIRED_LIBRARIES "-L ${CMAKE_PREFIX_PATH}/libofx/lib -lofx" )
ELSE ( WIN32 )
SET ( CMAKE_REQUIRED_LIBRARIES "-lofx" )
ENDIF ( WIN32 )
CHECK_CXX_SOURCE_RUNS ( "
2016-09-11 16:48:24 -05:00
#include <time.h>
#include <stdlib.h>
#include <string>
e x t e r n t i m e _ t ofxdate_to_time_t ( const std::string ofxdate ) ;
i n t main ( int argc, char** argv )
{
c o n s t s t d : : s t r i n g t i m e s t r = \ " 2 0 1 6 0 3 1 9 0 0 0 0 0 0 \ " ;
s t r u c t t m t s ;
t s . t m _ y e a r = 1 1 6 ;
t s . t m _ m o n = 2 ;
t s . t m _ m d a y = 1 9 ;
2016-10-20 12:40:18 -05:00
#ifdef _WIN32
putenv ( \"TZ=PST-8PDT-7,M 4.1.0/0,M 10.6.0/0\ " ) ;
#else
setenv ( \"TZ\", \"PST 08P DT 07 M 4.1.0, M 10.6.0\ " , 1 ) ;
#endif
2016-09-11 16:48:24 -05:00
t i m e _ t t = ofxdate_to_time_t ( timestr ) ;
if ( t == mktime(&ts ) )
exit ( 1 ) ;
exit ( 0 ) ;
}
" H A V E _ O F X _ B U G _ 3 9 )
SET ( HAVE_OFX_BUG_39 ${ HAVE_OFX_BUG_39 } )
SET ( CMAKE_REQUIRED_LIBRARIES )
2015-12-07 11:17:08 -06:00
ENDIF ( WITH_OFX )
# ############################################################
IF ( APPLE )
EXECUTE_PROCESS (
2017-07-31 01:29:42 -05:00
C O M M A N D $ { P K G _ C O N F I G _ E X E C U T A B L E } - - v a r i a b l e = t a r g e t s g d k - 3 . 0
2015-12-07 11:17:08 -06:00
O U T P U T _ V A R I A B L E T A R G E T _ R E S U L T
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
)
IF ( TARGET_RESULT STREQUAL "quartz" )
SET ( GNC_PLATFORM_COCOA 1 )
SET ( GDK_QUARTZ 1 )
2017-07-23 17:49:47 -05:00
GNC_PKG_CHECK_MODULES ( GTK_MAC gtk-mac-integration-gtk3 )
2015-12-07 11:17:08 -06:00
IF ( GTK_MAC_FOUND )
SET ( MAC_INTEGRATION 1 )
FIND_LIBRARY ( COCOA_LIBRARY Cocoa )
FIND_LIBRARY ( SECURITY_LIBRARY Security )
FIND_LIBRARY ( CARBON_LIBRARY Carbon )
2017-09-07 00:24:19 -05:00
SET ( OSX_EXTRA_COMPILE_FLAGS $< $<COMPILE_LANGUAGE:C > :-xobjective-c> $< $<COMPILE_LANGUAGE:CXX > :-xobjective-c++> )
2015-12-07 11:17:08 -06:00
SET ( OSX_EXTRA_LIBRARIES objc ${ COCOA_LIBRARY } ${ SECURITY_LIBRARY } ${ CARBON_LIBRARY } )
ENDIF ( GTK_MAC_FOUND )
ENDIF ( )
ENDIF ( APPLE )
2014-08-29 14:55:12 -05:00
2017-03-13 13:55:09 -05:00
# FIND_PACKAGE(LibXslt) eats PKG_CONFIG_EXECUTABLE, so preserve it.
SET ( GNC_PKG_CONFIG_EXE ${ PKG_CONFIG_EXECUTABLE } )
2010-03-04 11:48:36 -06:00
# ############################################################
2015-04-22 15:33:58 -05:00
# xsltproc
2015-12-07 11:17:08 -06:00
FIND_PACKAGE ( LibXslt )
2015-04-22 15:33:58 -05:00
2015-12-07 11:17:08 -06:00
IF ( NOT LIBXSLT_FOUND )
2018-01-23 18:04:28 -06:00
MESSAGE ( FATAL_ERROR "libxslt library not found." )
2015-12-07 11:17:08 -06:00
ENDIF ( NOT LIBXSLT_FOUND )
2018-01-23 18:04:28 -06:00
if ( ${ LIBXSLT_XSLTPROC_EXECUTABLE } STREQUAL "LIBXSLT_XSLTPROC_EXECUTABLE-NOTFOUND" )
message ( FATAL_ERROR "xsltproc executable not found" )
endif ( )
2015-04-22 15:33:58 -05:00
# ############################################################
2017-03-13 13:55:09 -05:00
SET ( PKG_CONFIG_EXECUTABLE ${ GNC_PKG_CONFIG_EXE } )
2015-04-22 15:33:58 -05:00
2010-03-27 15:27:10 -05:00
# libdbi
2017-12-10 14:51:24 -06:00
FIND_PATH ( LIBDBI_INCLUDE_PATH dbi/dbi.h )
FIND_LIBRARY ( LIBDBI_LIBRARY dbi )
FIND_LIBRARY ( LIBDBI_DRIVERS_DIR
N A M E S d b d m y s q l d b d p g s q l d b d s q l i t e 3 N A M E S _ P E R _ D I R
P A T H _ S U F F I X E S d b d l i b d b i - d r i v e r s / d b d
H I N T S L I B D B I _ L I B R A R Y
P A T H S G N C _ D B D _ D I R
D O C " L i b d b i D r i v e r s D i r e c t o r y " )
2010-03-27 15:27:10 -05:00
IF ( WITH_SQL )
IF ( NOT LIBDBI_INCLUDE_PATH )
MESSAGE ( SEND_ERROR "Include file <dbi/dbi.h> was not found - did you install libdbi0-dev or libdbi-dev?" )
ENDIF ( NOT LIBDBI_INCLUDE_PATH )
IF ( NOT LIBDBI_LIBRARY )
MESSAGE ( SEND_ERROR "Library libdbi was not found" )
ENDIF ( NOT LIBDBI_LIBRARY )
2015-12-07 11:17:08 -06:00
SET ( HAVE_DBI_DBI_H 1 )
2017-12-10 14:51:24 -06:00
IF ( NOT LIBDBI_DRIVERS_DIR )
MESSAGE ( SEND_ERROR "No libdbi drivers found, SQL tests will fail." )
ELSE ( )
get_filename_component ( drivers_dir ${ LIBDBI_DRIVERS_DIR } DIRECTORY )
set ( LIBDBI_DRIVERS_DIR ${ drivers_dir } CACHE FILEPATH "Directory containing the libdbi driver modules." FORCE )
ENDIF ( )
2010-03-27 15:27:10 -05:00
ENDIF ( WITH_SQL )
# ############################################################
2016-08-26 13:59:33 -05:00
IF ( WITH_PYTHON )
2018-03-15 03:35:31 -05:00
FIND_PACKAGE ( PythonInterp 3 )
2016-08-26 13:59:33 -05:00
IF ( NOT PYTHONINTERP_FOUND )
MESSAGE ( SEND_ERROR "Python support enabled, but Python interpreter not found." )
ENDIF ( )
IF ( PYTHON_VERSION_STRING VERSION_LESS "2.4.0" )
MESSAGE ( SEND_ERROR "Found python version ${PYTHON_VERSION_STRING}, but it's too old. Need python >= 2.4.0" )
ENDIF ( )
2018-03-15 03:35:31 -05:00
FIND_PACKAGE ( PythonLibs 3 )
2016-08-26 13:59:33 -05:00
IF ( NOT PYTHONLIBS_FOUND )
MESSAGE ( SEND_ERROR "Python support enabled, but Python libraries not found." )
ENDIF ( )
2017-09-11 15:44:41 -05:00
# Determine where to install the python libraries.
EXECUTE_PROCESS (
2018-03-15 03:35:31 -05:00
C O M M A N D $ { P Y T H O N _ E X E C U T A B L E } - c " f r o m d i s t u t i l s i m p o r t s y s c o n f i g ; print ( sysconfig.get_python_lib(prefix=' ${ CMAKE_INSTALL_PREFIX } ', plat_specific=True ) ) "
2017-09-11 15:44:41 -05:00
R E S U L T _ V A R I A B L E P Y T H O N _ S Y S C O N F I G _ R E S U L T
O U T P U T _ V A R I A B L E P Y T H O N _ S Y S C O N F I G _ O U T P U T
E R R O R _ V A R I A B L E P Y T H O N _ S Y S C O N F I G _ E R R O R
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
E R R O R _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
)
IF ( PYTHON_SYSCONFIG_RESULT )
MESSAGE ( SEND_ERROR "Could not determine Python site-package directory:\n${PYTHON_SYSCONFIG_ERROR}" )
ENDIF ( )
STRING ( REPLACE ${ CMAKE_INSTALL_PREFIX } ${ CMAKE_BINARY_DIR } PYTHON_SYSCONFIG_BUILD ${ PYTHON_SYSCONFIG_OUTPUT } )
2016-08-26 13:59:33 -05:00
ENDIF ( )
2015-12-07 11:17:08 -06:00
FIND_PACKAGE ( Perl )
2010-03-04 11:48:36 -06:00
2015-12-07 11:17:08 -06:00
if ( NOT PERL_FOUND )
MESSAGE ( SEND_ERROR "Perl executable not found. Please set PERL_EXECUTABLE." )
ENDIF ( NOT PERL_FOUND )
2016-07-16 14:12:58 -05:00
GET_FILENAME_COMPONENT ( PERL_DIR ${ PERL_EXECUTABLE } DIRECTORY )
FIND_PROGRAM ( POD2MAN_EXECUTABLE pod2man HINTS ${ PERL_DIR } )
2015-12-07 11:17:08 -06:00
2017-03-13 13:55:09 -05:00
#ICU
GNC_PKG_CHECK_MODULES ( ICU4C REQUIRED icu-uc )
GNC_PKG_CHECK_MODULES ( ICU4C_I18N REQUIRED icu-i18n )
2015-12-07 11:17:08 -06:00
#BOOST
SET ( Boost_USE_MULTITHREADED ON )
SET ( Boost_FIND_QUIETLY ON )
2017-02-02 11:48:15 -06:00
IF ( NOT DEFINED ${ BOOST_ROOT } )
SET ( BOOST_ROOT $ENV{ BOOST_ROOT } )
ENDIF ( )
2018-03-09 18:24:16 -06:00
FIND_PACKAGE ( Boost 1.54.0 REQUIRED COMPONENTS date_time regex locale filesystem system )
2015-12-07 11:17:08 -06:00
IF ( Boost_FOUND )
include_directories ( ${ Boost_INCLUDE_DIRS } )
SET ( HAVE_BOOST 1 )
ELSE ( Boost_FOUND )
MESSAGE ( SEND_ERROR "Boost 1.54.0 or later is not installed, and is required. Please install it and ensure that the following libraries are built: chrono, date_time, filesystem, log, program_options, regex, signals, system, and test." )
ENDIF ( Boost_FOUND )
2011-05-03 15:08:34 -05:00
2010-03-04 11:48:36 -06:00
# Compiler flags
2015-12-07 11:17:08 -06:00
2018-02-03 09:54:37 -06:00
if ( APPLE )
include ( CheckCCompilerFlag )
include ( CheckCxxCompilerFlag )
Check_CXX_Compiler_Flag ( -Wno-unused-local-typedef, have_wno_ult )
if ( have_wno_ult )
2018-02-13 16:11:44 -06:00
SET ( CMAKE_CXX_FLAGS "-Wno-unused-local-typedef -Wmissing-prototypes ${CMAKE_CXX_FLAGS}" )
2018-02-03 09:54:37 -06:00
else ( )
2018-02-13 16:11:44 -06:00
SET ( CMAKE_CXX_FLAGS "-Wmissing-prototypes ${CMAKE_CXX_FLAGS}" )
2018-02-03 09:54:37 -06:00
endif ( )
Check_C_Compiler_Flag ( -Wno-unknown-attributes have_no_unkatt )
if ( have_no_unkatt )
2018-02-13 18:47:20 -06:00
set ( CMAKE_C_FLAGS "-Wno-unknown-attributes -Wno-typedef-redefinition ${CMAKE_C_FLAGS}" )
set ( CMAKE_CXX_FLAGS "-Wno-unknown-attributes -Wno-typedef-redefinition ${CMAKE_CXX_FLAGS}" )
2018-02-03 09:54:37 -06:00
else ( )
2018-02-13 18:47:20 -06:00
set ( CMAKE_C_FLAGS "-Wno-typedef-redefinition ${CMAKE_C_FLAGS}" )
set ( CMAKE_CXX_FLAGS "-Wno-typedef-redefinition ${CMAKE_CXX_FLAGS}" )
2018-02-03 09:54:37 -06:00
endif ( )
2015-12-07 11:17:08 -06:00
# SET (CMAKE_OSX_ARCHITECTURES "i386")
2018-02-03 09:54:37 -06:00
endif ( APPLE )
2015-12-07 11:17:08 -06:00
# Also, set the C++ version to c++11
2018-02-13 16:11:44 -06:00
SET ( CMAKE_CXX_FLAGS "-std=gnu++11 ${CMAKE_CXX_FLAGS}" ) # FIXME: should be -std=c++11
2015-12-07 11:17:08 -06:00
2010-03-04 11:48:36 -06:00
IF ( UNIX )
2018-02-13 16:11:44 -06:00
SET ( CMAKE_C_FLAGS "-Werror -Wdeclaration-after-statement -Wno-pointer-sign -Wall -Wmissing-prototypes -Wmissing-declarations -Wno-unused ${CMAKE_C_FLAGS}" )
SET ( CMAKE_CXX_FLAGS "-Werror -Wall -Wmissing-declarations -Wno-unused ${CMAKE_CXX_FLAGS}" )
SET ( CMAKE_C_FLAGS "-Wno-deprecated-declarations -std=gnu11 ${CMAKE_C_FLAGS}" )
SET ( CMAKE_C_FLAGS_RELEASE "-O3 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 ${CMAKE_C_FLAGS}" )
2010-03-04 11:48:36 -06:00
ENDIF ( UNIX )
IF ( MINGW )
2018-02-13 16:11:44 -06:00
SET ( CMAKE_C_FLAGS "-Werror -Wdeclaration-after-statement -Wno-pointer-sign -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wno-unused -Wno-error=deprecated-declarations -std=gnu11 ${CMAKE_C_FLAGS}" )
SET ( CMAKE_CXX_FLAGS "-DWINVER=0x0500 -D_EMULATE_GLIBC=0 ${CMAKE_CXX_FLAGS}" ) # Workaround for bug in gtest on mingw, see https://github.com/google/googletest/issues/893 and https://github.com/google/googletest/issues/920
2010-03-04 11:48:36 -06:00
ENDIF ( MINGW )
2018-02-03 09:54:37 -06:00
2015-12-07 11:17:08 -06:00
IF ( APPLE AND WITH_GNUCASH )
SET ( CMAKE_MACOSX_RPATH ON )
2017-11-28 16:25:35 -06:00
SET ( CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_FULL_LIBDIR}" )
2015-12-07 11:17:08 -06:00
ENDIF ( APPLE AND WITH_GNUCASH )
2017-10-15 15:22:29 -05:00
IF ( UNIX )
2017-12-08 08:45:02 -06:00
SET ( CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}:${CMAKE_INSTALL_FULL_LIBDIR}/gnucash" )
2016-01-26 11:30:00 -06:00
ENDIF ( )
2015-12-07 11:17:08 -06:00
SET ( BUILD_SHARED_LIBS ON )
2017-02-01 21:48:46 -06:00
# Most libraries are installed to lib/gnucash, so set that as the default.
# For the handful that are installed to lib, we override the properies below
# (after the targets have been read in).
2015-12-07 11:17:08 -06:00
2017-12-01 12:53:17 -06:00
SET ( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ LIBDIR_BUILD } /gnucash )
2017-02-01 21:48:46 -06:00
IF ( XCODE_VERSION )
# FIXME: These settings break the ability to manipulate different configurations (Debug,
# FIXME: Release, etc.) in Xcode. We'll need to change the module loading C code if
# we want to support multi config.
2017-12-01 12:53:17 -06:00
SET ( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${ LIBDIR_BUILD } /gnucash )
SET ( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${ LIBDIR_BUILD } /gnucash )
2015-12-07 11:17:08 -06:00
ENDIF ( )
2010-03-04 11:48:36 -06:00
2017-02-01 21:48:46 -06:00
# For binarines
SET ( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ CMAKE_BINARY_DIR } /bin )
2016-01-26 09:00:54 -06:00
IF ( XCODE_VERSION )
2017-02-01 21:48:46 -06:00
SET ( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${ CMAKE_BINARY_DIR } /bin )
SET ( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${ CMAKE_BINARY_DIR } /bin )
2016-01-26 09:00:54 -06:00
ENDIF ( )
2017-02-01 21:48:46 -06:00
# ############################################################
2016-01-18 10:33:34 -06:00
2017-07-04 20:36:35 -05:00
GNC_GTEST_CONFIGURE ( )
2016-01-18 10:33:34 -06:00
# There are targets that need to build before tests will run
2016-01-26 09:00:54 -06:00
ADD_CUSTOM_TARGET ( check
C O M M A N D $ { C M A K E _ C T E S T _ C O M M A N D }
)
2015-12-07 11:17:08 -06:00
SET ( gnucash_DOCS
A U T H O R S
2015-12-26 10:55:15 -06:00
C h a n g e L o g . 1 9 9 9
C h a n g e L o g . 2 0 0 0
C h a n g e L o g . 2 0 0 1
C h a n g e L o g . 2 0 0 2
2015-12-07 11:17:08 -06:00
C h a n g e L o g . 2 0 0 3
C h a n g e L o g . 2 0 0 4
C h a n g e L o g . 2 0 0 5
C h a n g e L o g . 2 0 0 6
C h a n g e L o g . 2 0 0 7
C h a n g e L o g . 2 0 0 8
C h a n g e L o g . 2 0 0 9
C h a n g e L o g . 2 0 1 0
C h a n g e L o g . 2 0 1 1
C h a n g e L o g . 2 0 1 2
C h a n g e L o g . 2 0 1 3
C h a n g e L o g . 2 0 1 4
2017-09-06 13:43:43 -05:00
C h a n g e L o g . 2 0 1 5
C h a n g e L o g . 2 0 1 6
2017-12-31 10:51:21 -06:00
C h a n g e L o g . 2 0 1 7
2015-12-07 11:17:08 -06:00
D O C U M E N T E R S
H A C K I N G
L I C E N S E
N E W S
R E A D M E . d e p e n d e n c i e s
)
2017-02-01 21:48:46 -06:00
2017-11-28 16:25:35 -06:00
INSTALL ( FILES ${ gnucash_DOCS } DESTINATION ${ CMAKE_INSTALL_DOCDIR } )
2015-12-07 11:17:08 -06:00
2017-08-09 10:30:59 -05:00
# ############################################################
# Create config.h
SET ( GETTEXT_PACKAGE "gnucash" )
IF ( WIN32 )
2017-08-10 06:56:00 -05:00
IF ( MINGW )
SET ( HAVE_SCANF_LLD 1 )
ELSE ( )
SET ( HAVE_SCANF_I64D 1 )
ENDIF ( )
SET ( HAVE_HTMLHELPW 1 )
2017-08-09 10:30:59 -05:00
ENDIF ( WIN32 )
CHECK_INCLUDE_FILES ( dirent.h HAVE_DIRENT_H )
CHECK_INCLUDE_FILES ( dlfcn.h HAVE_DLFCN_H )
CHECK_INCLUDE_FILES ( glob.h HAVE_GLOB_H )
CHECK_INCLUDE_FILES ( inttypes.h HAVE_INTTYPES_H )
CHECK_INCLUDE_FILES ( limits.h HAVE_LIMITS_H )
CHECK_INCLUDE_FILES ( locale.h HAVE_LOCALE_H )
CHECK_INCLUDE_FILES ( memory.h HAVE_MEMORY_H )
CHECK_INCLUDE_FILES ( stdint.h HAVE_STDINT_H )
CHECK_INCLUDE_FILES ( stdlib.h HAVE_STDLIB_H )
CHECK_INCLUDE_FILES ( string.h HAVE_STRING_H )
CHECK_INCLUDE_FILES ( strings.h HAVE_STRINGS_H )
CHECK_INCLUDE_FILES ( sys/stat.h HAVE_SYS_STAT_H )
CHECK_INCLUDE_FILES ( sys/time.h HAVE_SYS_TIME_H )
CHECK_INCLUDE_FILES ( sys/times.h HAVE_SYS_TIMES_H )
CHECK_INCLUDE_FILES ( sys/types.h HAVE_SYS_TYPES_H )
CHECK_INCLUDE_FILES ( sys/wait.h HAVE_SYS_WAIT_H )
CHECK_INCLUDE_FILES ( unistd.h HAVE_UNISTD_H )
CHECK_INCLUDE_FILES ( utmp.h HAVE_UTMP_H )
CHECK_INCLUDE_FILES ( wctype.h HAVE_WCTYPE_H )
IF ( NOT DISABLE_NLS )
2017-08-10 06:56:00 -05:00
SET ( ENABLE_NLS 1 )
2017-08-09 10:30:59 -05:00
ENDIF ( NOT DISABLE_NLS )
IF ( ENABLE_BINRELOC )
2017-08-10 06:56:00 -05:00
IF ( UNIX OR MINGW )
SET ( BR_PTHREAD 1 )
ENDIF ( UNIX OR MINGW )
2017-08-09 10:30:59 -05:00
ENDIF ( ENABLE_BINRELOC )
IF ( UNIX OR MINGW )
2017-08-10 06:56:00 -05:00
SET ( HAVE_BIND_TEXTDOMAIN_CODESET 1 )
SET ( HAVE_DCGETTEXT 1 )
SET ( HAVE_GETTEXT 1 )
SET ( HAVE_GETTIMEOFDAY 1 )
SET ( HAVE_GUILE 1 )
SET ( HAVE_LIBM 1 )
SET ( HAVE_MEMCPY 1 )
SET ( STDC_HEADERS 1 )
SET ( _ALL_SOURCE 1 )
SET ( _GNU_SOURCE 1 )
SET ( _POSIX_PTHREAD_SEMANTICS 1 )
SET ( _TANDEM_SOURCE 1 )
SET ( __EXTENSIONS__ 1 )
2017-08-09 10:30:59 -05:00
ENDIF ( UNIX OR MINGW )
IF ( UNIX )
2017-08-10 06:56:00 -05:00
SET ( HAVE_CHOWN 1 )
SET ( HAVE_DLERROR 1 )
SET ( HAVE_DLSYM 1 )
SET ( HAVE_GETHOSTID 1 )
SET ( HAVE_GETHOSTNAME 1 )
SET ( HAVE_GETPPID 1 )
SET ( HAVE_GETUID 1 )
SET ( HAVE_GMTIME_R 1 )
SET ( HAVE_LANGINFO_D_FMT 1 )
SET ( HAVE_LC_MESSAGES 1 )
SET ( HAVE_LIBPTHREAD 1 )
SET ( HAVE_LINK 1 )
SET ( HAVE_LOCALTIME_R 1 )
SET ( HAVE_PTHREAD_MUTEX_INIT 1 )
SET ( HAVE_PTHREAD_PRIO_INHERIT 1 )
SET ( HAVE_SCANF_LLD 1 )
SET ( HAVE_SETENV 1 )
SET ( HAVE_STPCPY 1 )
SET ( HAVE_STRFMON 1 )
SET ( HAVE_STRPTIME 1 )
SET ( HAVE_STRUCT_TM_GMTOFF 1 )
SET ( HAVE_TIMEGM 1 )
SET ( HAVE_TOWUPPER 1 )
SET ( GNC_PLATFORM_POSIX 1 )
2017-08-09 10:30:59 -05:00
ENDIF ( UNIX )
IF ( WIN32 )
2017-08-10 06:56:00 -05:00
SET ( GNC_PLATFORM_WINDOWS 1 )
2017-08-09 10:30:59 -05:00
ENDIF ( WIN32 )
IF ( APPLE )
# FIXME: HANDLE gtk-mac-integration-gtk2
2017-08-10 06:56:00 -05:00
SET ( GNC_PLATFORM_DARWIN 1 )
SET ( GNC_PLATFORM_OSX 1 )
SET ( PLATFORM_OSX 1 )
SET ( HAVE_OSX_KEYCHAIN 1 )
2017-08-09 10:30:59 -05:00
ENDIF ( APPLE )
IF ( GLIB2_VERSION VERSION_GREATER 2.46.0 OR GLIB2_VERSION VERSION_EQUAL 2.46.0 )
2017-08-10 06:56:00 -05:00
SET ( HAVE_GLIB_2_46 1 )
2017-08-09 10:30:59 -05:00
ENDIF ( )
IF ( DISABLE_DEPRECATED_GNOME )
2017-08-10 06:56:00 -05:00
SET ( GNOME_DISABLE_DEPRECATED 1 )
2017-08-09 10:30:59 -05:00
ENDIF ( DISABLE_DEPRECATED_GNOME )
IF ( DISABLE_DEPRECATED_GTK )
2017-08-10 06:56:00 -05:00
SET ( GTK_DISABLE_DEPRECATED 1 )
SET ( GDK_DISABLE_DEPRECATED 1 )
SET ( GDK_PIXMAP_DISABLE_DEPRECATED 1 )
2017-08-09 10:30:59 -05:00
ENDIF ( DISABLE_DEPRECATED_GTK )
IF ( DISABLE_DEPRECATED_GLIB )
2017-08-10 06:56:00 -05:00
SET ( G_DISABLE_DEPRECATED 1 )
2017-08-09 10:30:59 -05:00
ENDIF ( DISABLE_DEPRECATED_GLIB )
ADD_DEFINITIONS ( -DHAVE_CONFIG_H )
2017-08-10 06:56:00 -05:00
SET ( CONFIG_H ${ CMAKE_CURRENT_BINARY_DIR } /common/config.h )
CONFIGURE_FILE ( ${ CMAKE_CURRENT_SOURCE_DIR } /common/config.h.cmake.in ${ CONFIG_H } )
2017-08-09 10:30:59 -05:00
2017-11-28 16:25:35 -06:00
SET ( SCHEME_INSTALLED_SOURCE_DIR ${ CMAKE_INSTALL_DATADIR } /gnucash/scm )
SET ( SCHEME_INSTALLED_CACHE_DIR ${ PKGLIBDIR } /scm/ccache/ ${ GUILE_EFFECTIVE_VERSION } )
2017-08-09 10:30:59 -05:00
2017-02-01 21:48:46 -06:00
# The subdirectories
2017-08-17 08:25:41 -05:00
ADD_SUBDIRECTORY ( borrowed )
2017-08-11 15:14:31 -05:00
ADD_SUBDIRECTORY ( data )
2017-02-01 21:48:46 -06:00
ADD_SUBDIRECTORY ( doc )
ADD_SUBDIRECTORY ( po )
2017-08-10 06:56:00 -05:00
ADD_SUBDIRECTORY ( common )
ADD_SUBDIRECTORY ( libgnucash )
IF ( WITH_GNUCASH )
ADD_SUBDIRECTORY ( gnucash )
ENDIF ( WITH_GNUCASH )
ADD_SUBDIRECTORY ( bindings )
2017-02-01 21:48:46 -06:00
ADD_SUBDIRECTORY ( test-templates )
ADD_SUBDIRECTORY ( util )
# This cmake subdir must be the last add_subdirectory() call because
# it contains post-install actions to execute.
ADD_SUBDIRECTORY ( cmake )
2018-01-28 10:45:49 -06:00
# Generate the ChangeLog
2017-02-01 21:48:46 -06:00
2018-01-28 10:45:49 -06:00
if ( BUILDING_FROM_VCS )
add_custom_target ( ChangeLog ALL
C O M M A N D $ { G I T _ E X E C U T A B L E } l o g - - f o r m a t = \ " % a d % a N % n % n % x 0 9 * % s % d % n \ " - - d a t e = s h o r t - - s i n c e = 2 0 1 8 - 0 1 - 0 1 > $ { C M A K E _ B I N A R Y _ D I R } / C h a n g e L o g
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ S O U R C E _ D I R }
)
install ( FILES ${ CMAKE_BINARY_DIR } /ChangeLog DESTINATION ${ CMAKE_INSTALL_DOCDIR } )
else ( )
install ( FILES ${ CMAKE_SOURCE_DIR } /ChangeLog DESTINATION ${ CMAKE_INSTALL_DOCDIR } )
endif ( )
2018-01-31 09:16:59 -06:00
dist_add_generated ( ${ BUILDING_FROM_VCS } ChangeLog )
2017-02-01 21:48:46 -06:00
2018-01-28 10:45:49 -06:00
############################ BEGIN MAKE DIST #################
2017-02-01 21:48:46 -06:00
SET ( PACKAGE_PREFIX "${PACKAGE}-${PACKAGE_VERSION}" )
SET ( DIST_FILE "${PACKAGE_PREFIX}.tar" )
2018-01-26 09:06:29 -06:00
SET ( toplvl_DIST_local ${ gnucash_DOCS }
2018-01-27 10:04:41 -06:00
C M a k e L i s t s . t x t R E A D M E )
2017-02-01 21:48:46 -06:00
2017-08-10 06:56:00 -05:00
SET_LOCAL_DIST ( toplvl_DIST ${ toplvl_DIST_local } )
2017-02-01 21:48:46 -06:00
# Each subdirectory is responsible for reporting its list of distribution files to its parent, up to here.
#
# Leaf directories use the SET_DIST_LIST() function to report their distribution files. See
2017-08-10 06:56:00 -05:00
# the bottom of libgnucash/app-utils/test/CMakeLists.txt for an example.
2017-02-01 21:48:46 -06:00
#
# A non leaf directories uses the SET_LOCAL_DIST() function to specify its distribution files local that dir,
# then uses a (SET ${foo_DIST} ${locals....} PARENT_SCOPE) command to report up. See the bottom of
2017-08-10 06:56:00 -05:00
# libgnucash/app-utils/CMakeLists.txt for an example of this.
2017-02-01 21:48:46 -06:00
2017-08-17 08:25:41 -05:00
SET ( ALL_DIST ${ bindings_DIST } ${ borrowed_DIST } ${ cmake_DIST } ${ common_DIST } ${ data_DIST }
2017-12-02 19:50:14 -06:00
$ { d o c _ D I S T } $ { g n u c a s h _ D I S T } $ { l i b g n u c a s h _ D I S T } $ { p a c k a g i n g _ D I S T }
2017-08-10 06:56:00 -05:00
$ { p o _ D I S T } $ { t e s t _ t e m p l a t e s _ D I S T } $ { t o p l v l _ D I S T } $ { u t i l _ D I S T } )
2017-02-01 21:48:46 -06:00
IF ( BUILDING_FROM_VCS )
SET ( BUILD_SOURCE_DIR ${ CMAKE_BINARY_DIR } )
ELSE ( )
SET ( BUILD_SOURCE_DIR ${ CMAKE_SOURCE_DIR } )
ENDIF ( )
# Write a dist manifest
STRING ( REPLACE ";" "\n" ALL_DIST_LINES "${ALL_DIST}" )
FILE ( WRITE ${ CMAKE_BINARY_DIR } /dist_manifest.txt ${ ALL_DIST_LINES } )
ADD_CUSTOM_COMMAND ( OUTPUT ${ DIST_FILE } .gz ${ DIST_FILE } .bz2
C O M M A N D $ { C M A K E _ C O M M A N D }
2017-08-10 06:56:00 -05:00
- D C M A K E _ M O D U L E _ P A T H = $ { C M A K E _ S O U R C E _ D I R } / c o m m o n / c m a k e _ m o d u l e s
2017-02-01 21:48:46 -06:00
- D P A C K A G E _ P R E F I X = $ { P A C K A G E _ P R E F I X }
- D G N U C A S H _ S O U R C E _ D I R = $ { C M A K E _ S O U R C E _ D I R }
- D B U I L D _ S O U R C E _ D I R = $ { B U I L D _ S O U R C E _ D I R }
- D B U I L D I N G _ F R O M _ V C S = $ { B U I L D I N G _ F R O M _ V C S }
- D S H E L L = $ { S H E L L }
2017-12-02 17:59:40 -06:00
- D W I T H _ G N U C A S H = $ { W I T H _ G N U C A S H }
2018-01-28 10:45:49 -06:00
" - D d i s t _ g e n e r a t e d = \ " $ { d i s t _ g e n e r a t e d } \ " "
2017-08-10 06:56:00 -05:00
- P $ { C M A K E _ S O U R C E _ D I R } / c o m m o n / c m a k e _ m o d u l e s / M a k e D i s t . c m a k e
2017-02-01 21:48:46 -06:00
D E P E N D S
2018-01-28 10:45:49 -06:00
$ { A L L _ D I S T } $ { d i s t _ g e n e r a t e d _ d e p e n d s }
2017-02-01 21:48:46 -06:00
)
ADD_CUSTOM_TARGET ( dist DEPENDS ${ DIST_FILE } .gz ${ DIST_FILE } .bz2 )
ADD_CUSTOM_TARGET ( distcheck DEPENDS dist
C O M M A N D $ { C M A K E _ C O M M A N D }
2017-08-10 06:56:00 -05:00
- D C M A K E _ M O D U L E _ P A T H = $ { C M A K E _ S O U R C E _ D I R } / c o m m o n / c m a k e _ m o d u l e s
2017-02-01 21:48:46 -06:00
- D C M A K E _ P R E F I X _ P A T H = $ { C M A K E _ P R E F I X _ P A T H }
- D P A C K A G E _ P R E F I X = $ { P A C K A G E _ P R E F I X }
- D C M A K E _ C _ F L A G S = $ { C M A K E _ C _ F L A G S }
- D C M A K E _ C X X _ F L A G S = $ { C M A K E _ C X X _ F L A G S }
2018-03-11 12:38:05 -05:00
- D G T E S T _ R O O T = $ { G T E S T _ R O O T }
- D G M O C K _ R O O T = $ { G M O C K _ R O O T }
2017-08-10 06:56:00 -05:00
- P $ { C M A K E _ S O U R C E _ D I R } / c o m m o n / c m a k e _ m o d u l e s / M a k e D i s t C h e c k . c m a k e
2017-02-01 21:48:46 -06:00
)
############################# END MAKE DIST #################
# uninstall target
configure_file (
" $ { C M A K E _ S O U R C E _ D I R } / c m a k e / c m a k e _ u n i n s t a l l . c m a k e . i n "
" $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e "
@ O N L Y )
add_custom_target ( uninstall
C O M M A N D $ { C M A K E _ C O M M A N D } - P $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c m a k e _ u n i n s t a l l . c m a k e )
2017-12-17 15:00:00 -06:00
SET ( _MODULES gnc-core-utils gnc-module gnc-backend-xml-utils )
2017-12-02 17:59:40 -06:00
IF ( WITH_SQL )
LIST ( APPEND _MODULES gnc-backend-sql )
ENDIF ( WITH_SQL )
IF ( WITH_GNUCASH )
2017-12-17 15:00:00 -06:00
LIST ( APPEND _MODULES gnc-gnome )
2017-12-02 17:59:40 -06:00
ENDIF ( WITH_GNUCASH )
SET_TARGET_PROPERTIES ( ${ _MODULES } PROPERTIES
2017-12-01 12:53:17 -06:00
L I B R A R Y _ O U T P U T _ D I R E C T O R Y $ { L I B D I R _ B U I L D }
2017-02-01 21:48:46 -06:00
IF ( XCODE_VERSION )
2017-12-01 12:53:17 -06:00
L I B R A R Y _ O U T P U T _ D I R E C T O R Y _ D E B U G $ { L I B D I R _ B U I L D }
L I B R A R Y _ O U T P U T _ D I R E C T O R Y _ R E L E A S E $ { L I B D I R _ B U I L D }
2017-02-01 21:48:46 -06:00
ENDIF ( )
R U N T I M E _ O U T P U T _ D I R E C T O R Y $ { C M A K E _ B I N A R Y _ D I R } / b i n
IF ( XCODE_VERSION )
R U N T I M E _ O U T P U T _ D I R E C T O R Y _ D E B U G $ { C M A K E _ B I N A R Y _ D I R } / b i n
R U N T I M E _ O U T P U T _ D I R E C T O R Y _ R E L E A S E $ { C M A K E _ B I N A R Y _ D I R } / b i n
ENDIF ( )
)
IF ( WIN32 )
2017-08-27 19:32:21 -05:00
SET_TARGET_PROPERTIES ( gncmod-backend-xml gncmod-stylesheets PROPERTIES
2017-02-01 21:48:46 -06:00
L I B R A R Y _ O U T P U T _ D I R E C T O R Y $ { C M A K E _ B I N A R Y _ D I R } / b i n
)
ENDIF ( )
2016-01-15 12:38:23 -06:00
#Link LICENSE to COPYING so that people expecting to find it,
#will. COPYING is normally linked by autogen.sh to the latest
#automake-provided version.
2016-01-15 09:03:40 -06:00
SET ( _CMD create_symlink )
IF ( WIN32 )
SET ( _CMD copy )
ENDIF ( )
INSTALL ( CODE
" EXECUTE_PROCESS (
C O M M A N D $ { C M A K E _ C O M M A N D } - E $ { _ C M D } L I C E N S E C O P Y I N G
2017-11-28 16:25:35 -06:00
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ I N S T A L L _ D O C D I R }
2016-01-15 09:03:40 -06:00
) "
)
2015-12-07 11:17:08 -06:00
#For windows, copy in some DLLs from Mingw
2010-04-12 14:21:14 -05:00
2015-12-07 11:17:08 -06:00
IF ( WIN32 )
2017-06-05 16:56:18 -05:00
FIND_LIBRARY ( LIBSTDC++ libstdc++-6.dll )
FIND_LIBRARY ( LIBDW2 libgcc_s_dw2-1.dll )
SET ( MINGW_DLLS ${ LIBSTDC++ } ${ LIBDW2 } )
2017-11-28 16:25:35 -06:00
INSTALL ( PROGRAMS ${ MINGW_DLLS } DESTINATION ${ CMAKE_INSTALL_BINDIR } )
2017-02-01 21:48:46 -06:00
FILE ( COPY ${ MINGW_DLLS } DESTINATION ${ BINDIR_BUILD }
# Do permissions matter for windows?
F I L E _ P E R M I S S I O N S O W N E R _ R E A D O W N E R _ W R I T E O W N E R _ E X E C U T E G R O U P _ R E A D G R O U P _ E X E C U T E W O R L D _ R E A D W O R L D _ E X E C U T E
)
2015-12-07 11:17:08 -06:00
ENDIF ( )
2010-04-12 14:21:14 -05:00
# ############################################################
# Package creation rules
2018-03-05 09:38:41 -06:00
SET ( CPACK_PACKAGE_VERSION_MAJOR "${GNUCASH_MAJOR_VERSION}" )
SET ( CPACK_PACKAGE_VERSION_MINOR "${GNUCASH_MINOR_VERSION}" )
SET ( CPACK_PACKAGE_VERSION "${VERSION}" )
2010-04-12 14:21:14 -05:00
IF ( UNIX )
SET ( CPACK_GENERATOR "TGZ" )
ENDIF ( UNIX )
INCLUDE ( CPack )