CMake improvements for SWIG handling and Python bindings.

* Add ability to either create SWIG C files or use generated ones
  depending on BUILDING_FROM_VCS.

* Add complete support for compiling Python bindings using
  WITH_PYTHON=YES.

* Add CMakeLists.txt files to a couple more directories.
This commit is contained in:
Rob Gowin 2016-08-26 13:59:33 -05:00
parent ea3862499b
commit 78ef933e44
21 changed files with 395 additions and 78 deletions

View File

@ -56,6 +56,7 @@ OPTION (WITH_AQBANKING "Build this project with aqbanking (online banking) suppo
OPTION (WITH_GNUCASH "Build all of GnuCash, not just cutecash" ON)
OPTION (WITH_CUTECASH "Also build cutecash" OFF)
OPTION (WITH_OFX "compile with ofx support (needs LibOFX)" ON)
OPTION (WITH_PYTHON "enable python plugin and bindings" OFF)
OPTION (ENABLE_BINRELOC "compile with binary relocation support" ON)
OPTION (ENABLE_DEBUG "compile with debugging flags set" OFF)
OPTION (ENABLE_REGISTER2 "compile with register2 enabled" OFF)
@ -100,6 +101,19 @@ IF (SHELL_FROM_ENV) # Replacing this with IF ($ENV{SHELL}) doesn't work.
SET(SHELL ${SHELL_FROM_ENV})
ENDIF()
# Determine whether we are building from a VCS or from a tarball
EXECUTE_PROCESS(
COMMAND ${SHELL} ${CMAKE_SOURCE_DIR}/util/gnc-vcs-info -t ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE GNC_VCS_INFO_RESULT
OUTPUT_VARIABLE GNC_VCS_INFO_OUTPUT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
SET(BUILDING_FROM_VCS "NO")
IF (GNC_VCS_INFO_RESULT EQUAL 0)
SET(BUILDING_FROM_VCS "YES")
ENDIF()
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
@ -215,8 +229,10 @@ ENDIF (WIN32)
# ############################################################
# SWIG
FIND_PACKAGE (SWIG REQUIRED)
INCLUDE (${SWIG_USE_FILE})
IF(BUILDING_FROM_VCS)
FIND_PACKAGE (SWIG REQUIRED)
INCLUDE (${SWIG_USE_FILE})
ENDIF()
# Find Guile and determine which version we are using.
# First look for guile-2.0. If not found, try to locate guile-1.8
@ -325,6 +341,24 @@ ENDIF (WITH_SQL)
# ############################################################
IF (WITH_PYTHON)
FIND_PACKAGE(PythonInterp)
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()
FIND_PACKAGE(PythonLibs)
IF (NOT PYTHONLIBS_FOUND)
MESSAGE(SEND_ERROR "Python support enabled, but Python libraries not found.")
ENDIF()
ENDIF()
FIND_PACKAGE(Perl)
if (NOT PERL_FOUND)
@ -416,6 +450,7 @@ ENDIF()
ADD_SUBDIRECTORY (accounts)
ADD_SUBDIRECTORY (checks)
ADD_SUBDIRECTORY (doc)
ADD_SUBDIRECTORY (packaging)
ADD_SUBDIRECTORY (po)
ADD_SUBDIRECTORY (src)

2
packaging/CMakeLists.txt Normal file
View File

@ -0,0 +1,2 @@
GNC_CONFIGURE(gnucash.spec.in gnucash.spec)

View File

@ -171,13 +171,18 @@ IF (WITH_GNUCASH)
ADD_SUBDIRECTORY (bin)
ADD_SUBDIRECTORY (business/business-ledger)
ADD_SUBDIRECTORY (business/business-gnome)
ADD_SUBDIRECTORY (doc/design)
ADD_SUBDIRECTORY (gnome)
ADD_SUBDIRECTORY (gnome-utils)
ADD_SUBDIRECTORY (gnome-search)
ADD_SUBDIRECTORY (html)
ADD_SUBDIRECTORY (optional/python-bindings)
ADD_SUBDIRECTORY (plugins/bi_import)
ADD_SUBDIRECTORY (plugins/customer_import)
ADD_SUBDIRECTORY (pixmaps)
IF (WITH_PYTHON)
ADD_SUBDIRECTORY (python)
ENDIF()
ADD_SUBDIRECTORY (quotes)
ADD_SUBDIRECTORY (register/ledger-core)
ADD_SUBDIRECTORY (register/register-core)

View File

@ -36,9 +36,16 @@ SET (app_utils_HEADERS
)
# Command to generate the swig-app-utils.c wrapper file
SET (SWIG_APP_UTILS_C ${CMAKE_CURRENT_BINARY_DIR}/swig-app-utils.c)
GNC_ADD_SWIG_COMMAND (${SWIG_APP_UTILS_C} ${CMAKE_CURRENT_SOURCE_DIR}/app-utils.i)
IF (BUILDING_FROM_VCS)
# Command to generate the swig-app-utils.c wrapper file
SET (SWIG_APP_UTILS_GUILE_C ${CMAKE_CURRENT_BINARY_DIR}/swig-app-utils-guile.c)
GNC_ADD_SWIG_COMMAND (${SWIG_APP_UTILS_GUILE_C} ${CMAKE_CURRENT_SOURCE_DIR}/app-utils.i)
SET (SWIG_APP_UTILS_PYTHON_C ${CMAKE_CURRENT_BINARY_DIR}/swig-app-utils-python.c)
GNC_ADD_SWIG_PYTHON_COMMAND (swig-app-utils-python ${SWIG_APP_UTILS_PYTHON_C} ${CMAKE_CURRENT_SOURCE_DIR}/app-utils.i)
ELSE()
SET (SWIG_APP_UTILS_GUILE_C swig-app-utils-guile.c)
SET (SWIG_APP_UTILS_PYTHON_C swig-app-utils-python.c)
ENDIF()
SET (app_utils_SOURCES
calculation/expression_parser.c
@ -66,47 +73,57 @@ SET (app_utils_SOURCES
gncmod-app-utils.c
guile-util.c
option-util.c
${SWIG_APP_UTILS_C}
${SWIG_APP_UTILS_GUILE_C}
)
IF (WIN32)
SET (app_utils_SOURCES ${app_utils_SOURCES} gnc-help-utils.c)
ENDIF (WIN32)
SET_SOURCE_FILES_PROPERTIES (${app_utils_SOURCES} PROPERTIES OBJECT_DEPENDS ${CONFIG_H})
ADD_LIBRARY (gncmod-app-utils
${app_utils_SOURCES}
${app_utils_HEADERS}
${app_utils_noinst_HEADERS}
)
SET(app_utils_ALL_SOURCES ${app_utils_SOURCES} ${app_utils_HEADERS} ${app_utils_noinst_HEADERS})
SET(app_utils_ALL_LIBRARIES gncmod-engine gnc-module ${GTK2_LDFLAGS} ${LIBXML2_LDFLAGS} ${LIBXSLT_LDFLAGS})
SET(app_utils_ALL_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/calculation ${LIBXML2_INCLUDE_DIRS}
${LIBXSLT_INCLUDE_DIRS} ${GTK2_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(gncmod-app-utils gncmod-engine gnc-module
${GTK2_LDFLAGS} ${LIBXML2_LDFLAGS} ${LIBXSLT_LDFLAGS}
)
IF (WIN32)
LIST(APPEND app_utils_ALL_SOURCES gnc-help-utils.c)
LIST(APPEND app_utils_ALL_LIBRARIES ${HTMLHELP_LIBRARY})
LIST(APPEND app_utils_ALL_INCLUDES ${HTMLHELP_INCLUDE_PATH})
ENDIF()
IF (WIN32)
TARGET_LINK_LIBRARIES(gncmod-app-utils ${HTMLHELP_LIBRARY})
ENDIF(WIN32)
ADD_LIBRARY (gncmod-app-utils ${app_utils_ALL_SOURCES})
TARGET_LINK_LIBRARIES(gncmod-app-utils ${app_utils_ALL_LIBRARIES})
TARGET_INCLUDE_DIRECTORIES (gncmod-app-utils
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/calculation
${LIBXML2_INCLUDE_DIRS}
${LIBXSLT_INCLUDE_DIRS}
${HTMLHELP_INCLUDE_PATH}
${GTK2_INCLUDE_DIRS}
PRIVATE ${app_utils_ALL_INCLUDES}
)
TARGET_COMPILE_DEFINITIONS (gncmod-app-utils PRIVATE -DG_LOG_DOMAIN=\"gnc.app-utils\")
INSTALL(TARGETS gncmod-app-utils
LIBRARY DESTINATION lib/gnucash
ARCHIVE DESTINATION lib/gnucash
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib/gnucash
ARCHIVE DESTINATION lib/gnucash
RUNTIME DESTINATION bin
)
IF (WITH_PYTHON)
ADD_LIBRARY (gncmod-app-utils-python ${app_utils_ALL_SOURCES} ${SWIG_APP_UTILS_PYTHON_C})
TARGET_LINK_LIBRARIES(gncmod-app-utils-python ${app_utils_ALL_LIBRARIES} ${PYTHON_LIBRARIES})
TARGET_INCLUDE_DIRECTORIES (gncmod-app-utils-python
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${app_utils_ALL_INCLUDES} ${PYTHON_INCLUDE_DIRS}
)
TARGET_COMPILE_DEFINITIONS (gncmod-app-utils-python PRIVATE -DG_LOG_DOMAIN=\"gnc.app-utils\")
INSTALL(TARGETS gncmod-app-utils-python
LIBRARY DESTINATION lib/gnucash
ARCHIVE DESTINATION lib/gnucash
RUNTIME DESTINATION bin
)
ENDIF()
INSTALL(FILES ${app_utils_HEADERS} DESTINATION include/gnucash)
FILE(READ ${CMAKE_SOURCE_DIR}/src/import-export/ofx/migratable-prefs-ofx.xml MIGRATABLE_PREFS_OFX)

View File

@ -9,7 +9,21 @@ MACRO (GNC_ADD_SWIG_COMMAND _target _input)
ADD_CUSTOM_COMMAND (
OUTPUT ${_target}
DEPENDS ${_input} ${CMAKE_SOURCE_DIR}/src/base-typemaps.i ${ARGN}
COMMAND ${SWIG_EXECUTABLE} -guile ${SWIG_ARGS} -Linkage module -I${CMAKE_SOURCE_DIR}/src/libqof/qof -I${CMAKE_SOURCE_DIR}/src -o ${_target} ${_input}
COMMAND ${SWIG_EXECUTABLE} -guile ${SWIG_ARGS} -Linkage module -I${CMAKE_SOURCE_DIR}/src/libqof/qof -I${CMAKE_SOURCE_DIR}/src -o ${_target} ${_input}
)
ENDMACRO (GNC_ADD_SWIG_COMMAND)
MACRO (GNC_ADD_SWIG_PYTHON_COMMAND _target _output _input)
ADD_CUSTOM_COMMAND(OUTPUT ${_output}
COMMAND ${SWIG_EXECUTABLE} -python -Wall -Werror ${SWIG_ARGS}
-I${CMAKE_SOURCE_DIR}/src/libqof/qof -I${CMAKE_SOURCE_DIR}/src
-I${CMAKE_SOURCE_DIR}/src/engine -I${CMAKE_SOURCE_DIR}/src/app-utils
-o ${_output} ${_input}
DEPENDS ${_input} ${CMAKE_SOURCE_DIR}/src/base-typemaps.i ${ARGN}
)
ADD_CUSTOM_TARGET(${_target} ALL DEPENDS ${_output} ${CMAKE_SOURCE_DIR}/src/base-typemaps.i ${_input} ${ARGN})
ENDMACRO()

View File

@ -1,9 +1,16 @@
# CMakeLists.txt for src/core-utils
ADD_SUBDIRECTORY(test)
# Command to generate the swig-engine.c wrapper file
SET (SWIG_CORE_UTILS_C ${CMAKE_CURRENT_BINARY_DIR}/swig-core-utils.c)
GNC_ADD_SWIG_COMMAND (${SWIG_CORE_UTILS_C} ${CMAKE_CURRENT_SOURCE_DIR}/core-utils.i)
IF (BUILDING_FROM_VCS)
SET (SWIG_CORE_UTILS_GUILE_C ${CMAKE_CURRENT_BINARY_DIR}/swig-core-utils-guile.c)
GNC_ADD_SWIG_COMMAND (${SWIG_CORE_UTILS_GUILE_C} ${CMAKE_CURRENT_SOURCE_DIR}/core-utils.i)
SET (SWIG_CORE_UTILS_PYTHON_C ${CMAKE_CURRENT_BINARY_DIR}/swig-core-utils-python.c)
GNC_ADD_SWIG_PYTHON_COMMAND (swig-core-utils-python ${SWIG_CORE_UTILS_PYTHON_C} ${CMAKE_CURRENT_SOURCE_DIR}/core-utils.i)
ELSE()
SET(SWIG_CORE_UTILS_GUILE_C swig-core-utils-guile.c)
SET(SWIG_CORE_UTILS_PYTHON_C swig-core-utils-python.c)
ENDIF()
SET (core_utils_SOURCES
binreloc.c
@ -19,7 +26,6 @@ SET (core_utils_SOURCES
gnc-locale-utils.c
gnc-path.c
gnc-uri-utils.c
${SWIG_CORE_UTILS_C}
)
# Add dependency on config.h
@ -102,33 +108,59 @@ SET(core_utils_noinst_HEADERS
gnc-uri-utils.h
)
ADD_LIBRARY (gnc-core-utils
${core_utils_SOURCES}
${core_utils_noinst_HEADERS}
)
SET(core_utils_ALL_SOURCES ${core_utils_SOURCES} ${core_utils_noinst_HEADERS})
SET(core_utils_ALL_LIBRARIES gnc-qof ${GUILE_LDFLAGS} ${GLIB2_LDFLAGS} ${GOBJECT_LDFLAGS} ${GTK_MAC_LDFLAGS})
SET(core_utils_ALL_INCLUDES ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
${GUILE_INCLUDE_DIRS} ${GTK_MAC_INCLUDE_DIRS})
IF (MAC_INTEGRATION)
LIST(APPEND core_utils_ALL_LIBRARIES ${OSX_EXTRA_LIBRARIES})
ENDIF()
ADD_LIBRARY (gnc-core-utils ${core_utils_ALL_SOURCES} ${SWIG_CORE_UTILS_GUILE_C})
ADD_DEPENDENCIES(gnc-core-utils gnc-vcs-info)
TARGET_LINK_LIBRARIES(gnc-core-utils gnc-qof ${GUILE_LDFLAGS} ${GLIB2_LDFLAGS} ${GOBJECT_LDFLAGS} ${GTK_MAC_LDFLAGS})
TARGET_LINK_LIBRARIES(gnc-core-utils ${core_utils_ALL_LIBRARIES})
TARGET_COMPILE_DEFINITIONS(gnc-core-utils
PRIVATE -DG_LOG_DOMAIN=\"gnc.core-utils\" ${GTK_MAC_CFLAGS_OTHER})
TARGET_INCLUDE_DIRECTORIES(gnc-core-utils PUBLIC
${CMAKE_CURRENT_BINARY_DIR} # for headers generated in core-utils build directory
${CMAKE_CURRENT_SOURCE_DIR}
${GUILE_INCLUDE_DIRS}
${GTK_MAC_INCLUDE_DIRS}
)
TARGET_INCLUDE_DIRECTORIES(gnc-core-utils PUBLIC ${core_utils_ALL_INCLUDES})
IF (MAC_INTEGRATION)
TARGET_COMPILE_OPTIONS(gnc-core-utils PRIVATE ${OSX_EXTRA_COMPILE_FLAGS})
TARGET_LINK_LIBRARIES(gnc-core-utils ${OSX_EXTRA_LIBRARIES})
ENDIF(MAC_INTEGRATION)
INSTALL(TARGETS gnc-core-utils
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin)
RUNTIME DESTINATION bin
)
IF (WITH_PYTHON)
ADD_LIBRARY (gnc-core-utils-python ${core_utils_ALL_SOURCES} ${SWIG_CORE_UTILS_PYTHON_C})
ADD_DEPENDENCIES(gnc-core-utils-python gnc-vcs-info)
TARGET_LINK_LIBRARIES(gnc-core-utils-python ${core_utils_ALL_LIBRARIES} ${PYTHON_LIBRARIES})
TARGET_COMPILE_DEFINITIONS(gnc-core-utils-python
PRIVATE -DG_LOG_DOMAIN=\"gnc.core-utils\" ${GTK_MAC_CFLAGS_OTHER}
)
TARGET_INCLUDE_DIRECTORIES(gnc-core-utils-python PUBLIC ${core_utils_ALL_INCLUDES} ${PYTHON_INCLUDE_DIRS})
IF (MAC_INTEGRATION)
TARGET_COMPILE_OPTIONS(gnc-core-utils-python PRIVATE ${OSX_EXTRA_COMPILE_FLAGS})
ENDIF(MAC_INTEGRATION)
INSTALL(TARGETS gnc-core-utils-python
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
)
ENDIF()
# No headers to install
# Scheme

View File

@ -0,0 +1,38 @@
SET(gnucash_design_TEXINFOS
component-manager.texi
concept-index.texi
engine.texi
fdl.texi
function-index.texi
intro.texi
register.texi
reports.texi
top-level.texi
type-index.texi
user-preferences.texi
)
EXECUTE_PROCESS(COMMAND date +%e OUTPUT_VARIABLE CURRENT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
EXECUTE_PROCESS(COMMAND date +%B OUTPUT_VARIABLE CURRENT_MONTH OUTPUT_STRIP_TRAILING_WHITESPACE)
EXECUTE_PROCESS(COMMAND date +%Y OUTPUT_VARIABLE CURRENT_YEAR OUTPUT_STRIP_TRAILING_WHITESPACE)
SET(UPDATED "${CURRENT_DATE} ${CURRENT_MONTH} ${CURRENT_YEAR}")
SET(UPDATED_MONTH "${CURRENT_MONTH} ${CURRENT_YEAR}")
SET(VERSION_TEXI_IN
"@set UPDATED ${UPDATED}
@set UPDATED-MONTH ${UPDATED_MONTH}
@set EDITION ${VERSION}
@set VERSION ${VERSION}
")
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/version.texi ${VERSION_TEXI_IN})
FILE(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}" TEXI_BINARY_DIR)
FILE(TO_NATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/gnucash-design.texi" TEXI_SOURCE_FILE)
ADD_CUSTOM_TARGET(gnucash-design.texi ALL
COMMAND makeinfo -I ${TEXI_BINARY_DIR} ${TEXI_SOURCE_FILE}
DEPENDS ${gnucash_design_TEXINFOS}
)

View File

@ -73,9 +73,13 @@ SET (engine_HEADERS
gncVendorP.h
)
# Command to generate the swig-engine.c wrapper file
SET (SWIG_ENGINE_C ${CMAKE_CURRENT_BINARY_DIR}/swig-engine.c)
GNC_ADD_SWIG_COMMAND (${SWIG_ENGINE_C} ${CMAKE_CURRENT_SOURCE_DIR}/engine.i ${engine_HEADERS})
IF (BUILDING_FROM_VCS)
# Command to generate the swig-engine.c wrapper file
SET (SWIG_ENGINE_C ${CMAKE_CURRENT_BINARY_DIR}/swig-engine.c)
GNC_ADD_SWIG_COMMAND (${SWIG_ENGINE_C} ${CMAKE_CURRENT_SOURCE_DIR}/engine.i ${engine_HEADERS})
ELSE()
SET (SWIG_ENGINE_C swig-engine.c)
ENDIF()
# Command to generate the iso-4217-currencies.c file
SET (ISO_4217_C ${CMAKE_CURRENT_BINARY_DIR}/iso-4217-currencies.c)

View File

@ -1,9 +1,13 @@
# CMakeLists.txt for src/gnc-module
ADD_SUBDIRECTORY(test)
# Command to generate the swig-engine.c wrapper file
SET (SWIG_GNC_MODULE_C ${CMAKE_CURRENT_BINARY_DIR}/swig-gnc-module.c)
GNC_ADD_SWIG_COMMAND (${SWIG_GNC_MODULE_C} ${CMAKE_CURRENT_SOURCE_DIR}/gnc-module.i)
IF (BUILDING_FROM_VCS)
# Command to generate the swig-engine.c wrapper file
SET (SWIG_GNC_MODULE_C ${CMAKE_CURRENT_BINARY_DIR}/swig-gnc-module.c)
GNC_ADD_SWIG_COMMAND (${SWIG_GNC_MODULE_C} ${CMAKE_CURRENT_SOURCE_DIR}/gnc-module.i)
ELSE()
SET (SWIG_GNC_MODULE_C swig-gnc-module.c)
ENDIF()
SET (gnc_module_SOURCES
gnc-module.c

View File

@ -1,6 +1,10 @@
SET (SWIG_BAR_C ${CMAKE_CURRENT_BINARY_DIR}/swig-bar.c)
GNC_ADD_SWIG_COMMAND (${SWIG_BAR_C} ${CMAKE_CURRENT_SOURCE_DIR}/bar.i bar.h)
IF (BUILDING_FROM_VCS)
SET (SWIG_BAR_C ${CMAKE_CURRENT_BINARY_DIR}/swig-bar.c)
GNC_ADD_SWIG_COMMAND (${SWIG_BAR_C} ${CMAKE_CURRENT_SOURCE_DIR}/bar.i bar.h)
ELSE()
SET (SWIG_BAR_C swig-bar.c)
ENDIF()
ADD_LIBRARY(bar EXCLUDE_FROM_ALL bar.c bar.h)
ADD_LIBRARY(gncmodbar EXCLUDE_FROM_ALL gnc-mod-bar.c)

View File

@ -1,6 +1,10 @@
SET (SWIG_BAZ_C ${CMAKE_CURRENT_BINARY_DIR}/swig-baz.c)
GNC_ADD_SWIG_COMMAND (${SWIG_BAZ_C} ${CMAKE_CURRENT_SOURCE_DIR}/baz.i baz.h)
IF (BUILDING_FROM_VCS)
SET (SWIG_BAZ_C ${CMAKE_CURRENT_BINARY_DIR}/swig-baz.c)
GNC_ADD_SWIG_COMMAND (${SWIG_BAZ_C} ${CMAKE_CURRENT_SOURCE_DIR}/baz.i baz.h)
ELSE()
SET (SWIG_BAZ_C swig-baz.c)
ENDIF()
ADD_LIBRARY(baz EXCLUDE_FROM_ALL baz.c baz.h)
TARGET_INCLUDE_DIRECTORIES(baz PRIVATE

View File

@ -1,6 +1,10 @@
SET (SWIG_FOO_C ${CMAKE_CURRENT_BINARY_DIR}/swig-foo.c)
GNC_ADD_SWIG_COMMAND (${SWIG_FOO_C} ${CMAKE_CURRENT_SOURCE_DIR}/foo.i foo.h)
IF (BUILDING_FROM_VCS)
SET (SWIG_FOO_C ${CMAKE_CURRENT_BINARY_DIR}/swig-foo.c)
GNC_ADD_SWIG_COMMAND (${SWIG_FOO_C} ${CMAKE_CURRENT_SOURCE_DIR}/foo.i foo.h)
ELSE()
SET (SWIG_FOO_C swig-foo.c)
ENDIF()
ADD_LIBRARY(foo EXCLUDE_FROM_ALL foo.c foo.h)
ADD_LIBRARY(gncmodfoo EXCLUDE_FROM_ALL gnc-mod-foo.c)

View File

@ -5,8 +5,12 @@ ADD_SUBDIRECTORY(gtkbuilder)
ADD_SUBDIRECTORY(ui)
ADD_SUBDIRECTORY(test)
SET (SWIG_GNOME_UTILS_C ${CMAKE_CURRENT_BINARY_DIR}/swig-gnome-utils.c)
GNC_ADD_SWIG_COMMAND (${SWIG_GNOME_UTILS_C} ${CMAKE_CURRENT_SOURCE_DIR}/gnome-utils.i)
IF (BUILDING_FROM_VCS)
SET (SWIG_GNOME_UTILS_C ${CMAKE_CURRENT_BINARY_DIR}/swig-gnome-utils.c)
GNC_ADD_SWIG_COMMAND (${SWIG_GNOME_UTILS_C} ${CMAKE_CURRENT_SOURCE_DIR}/gnome-utils.i)
ELSE()
SET (SWIG_GNOME_UTILS_C swig-gnome-utils.c)
ENDIF()
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/gschemas/org.gnucash.warnings.gschema.xml.in.in
${CMAKE_CURRENT_BINARY_DIR}/gschemas/org.gnucash.warnings.gschema.xml.in)

View File

@ -39,8 +39,12 @@ SET (gnc_gnome_noinst_HEADERS
window-autoclear.h
)
SET (SWIG_GNOME_C ${CMAKE_CURRENT_BINARY_DIR}/swig-gnome.c)
GNC_ADD_SWIG_COMMAND (${SWIG_GNOME_C} ${CMAKE_CURRENT_SOURCE_DIR}/gnome.i ${gnc_gnome_HEADERS})
IF (BUILDING_FROM_VCS)
SET (SWIG_GNOME_C ${CMAKE_CURRENT_BINARY_DIR}/swig-gnome.c)
GNC_ADD_SWIG_COMMAND (${SWIG_GNOME_C} ${CMAKE_CURRENT_SOURCE_DIR}/gnome.i ${gnc_gnome_HEADERS})
ELSE()
SET (SWIG_GNOME_C swig-gnome.c)
ENDIF()
SET (gnc_gnome_SOURCES
${SWIG_GNOME_C}

View File

@ -9,8 +9,12 @@ SET (html_HEADERS
gnc-html-webkit-p.h
)
SET (SWIG_GNC_HTML_C ${CMAKE_CURRENT_BINARY_DIR}/swig-gnc-html.c)
GNC_ADD_SWIG_COMMAND (${SWIG_GNC_HTML_C} ${CMAKE_CURRENT_SOURCE_DIR}/gnc-html.i ${gncmod_html_HEADERS})
IF (BUILDING_FROM_VCS)
SET (SWIG_GNC_HTML_C ${CMAKE_CURRENT_BINARY_DIR}/swig-gnc-html.c)
GNC_ADD_SWIG_COMMAND (${SWIG_GNC_HTML_C} ${CMAKE_CURRENT_SOURCE_DIR}/gnc-html.i ${gncmod_html_HEADERS})
ELSE()
SET (SWIG_GNC_HTML_C swig-gnc-html.c)
ENDIF()
SET (html_SOURCES
gncmod-html.c

View File

@ -0,0 +1,103 @@
IF (BUILDING_FROM_VCS)
SET(SWIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/gnucash_core.i ${CMAKE_CURRENT_SOURCE_DIR}/timespec.i)
SET(GNUCASH_CORE_C_INCLUDES
${CMAKE_BINARY_DIR}/src/config.h
${CMAKE_SOURCE_DIR}/src/libqof/qof/qofsession.h
${CMAKE_SOURCE_DIR}/src/libqof/qof/qofbook.h
${CMAKE_SOURCE_DIR}/src/libqof/qof/qofbackend.h
${CMAKE_SOURCE_DIR}/src/libqof/qof/qoflog.h
${CMAKE_SOURCE_DIR}/src/libqof/qof/qofutil.h
${CMAKE_SOURCE_DIR}/src/libqof/qof/qofid.h
${CMAKE_SOURCE_DIR}/src/libqof/qof/guid.h
${CMAKE_SOURCE_DIR}/src/gnc-module/gnc-module.h
${CMAKE_SOURCE_DIR}/src/engine/gnc-engine.h
${CMAKE_SOURCE_DIR}/src/engine/Transaction.h
${CMAKE_SOURCE_DIR}/src/engine/Split.h
${CMAKE_SOURCE_DIR}/src/engine/Account.h
${CMAKE_SOURCE_DIR}/src/engine/gnc-commodity.h
${CMAKE_SOURCE_DIR}/src/engine/gnc-lot.h
${CMAKE_SOURCE_DIR}/src/libqof/qof/gnc-numeric.h
${CMAKE_SOURCE_DIR}/src/engine/gncCustomer.h
${CMAKE_SOURCE_DIR}/src/engine/gncEmployee.h
${CMAKE_SOURCE_DIR}/src/engine/gncVendor.h
${CMAKE_SOURCE_DIR}/src/engine/gncAddress.h
${CMAKE_SOURCE_DIR}/src/engine/gncBillTerm.h
${CMAKE_SOURCE_DIR}/src/engine/gncOwner.h
${CMAKE_SOURCE_DIR}/src/engine/gncInvoice.h
${CMAKE_SOURCE_DIR}/src/engine/gncJob.h
${CMAKE_SOURCE_DIR}/src/engine/gncEntry.h
${CMAKE_SOURCE_DIR}/src/engine/gncTaxTable.h
${CMAKE_SOURCE_DIR}/src/engine/gncIDSearch.h
${CMAKE_SOURCE_DIR}/src/engine/gnc-pricedb.h
${CMAKE_SOURCE_DIR}/src/app-utils/gnc-prefs-utils.h
)
SET (SWIG_GNUCASH_CORE_C ${CMAKE_CURRENT_BINARY_DIR}/gnucash_core.c)
GNC_ADD_SWIG_PYTHON_COMMAND (swig-gnucash-core ${SWIG_GNUCASH_CORE_C}
${SWIG_FILES}
${CMAKE_SOURCE_DIR}/src/base-typemaps.i
${CMAKE_SOURCE_DIR}/src/engine/engine-common.i
${GNUCASH_CORE_C_INCLUDES}
)
ELSE()
SET (SWIG_GNUCASH_CORE_C gnucash_core.c)
ENDIF()
IF(WITH_PYTHON)
SET(gnucash_core_c_INCLUDE_DIRS
${CMAKE_SOURCE_DIR}/src/libqof/qof
${CMAKE_SOURCE_DIR}/src
${CMAKE_SOURCE_DIR}/src/engine
${CMAKE_SOURCE_DIR}/src/gnome-utils
${CMAKE_SOURCE_DIR}/src/app-utils
${CMAKE_SOURCE_DIR}/src/gnc-module
${CMAKE_SOURCE_DIR}/src/gnome
${CMAKE_SOURCE_DIR}/src/core-utils
${CMAKE_SOURCE_DIR}/src/gnc-module
${GLIB_INCLUDE_DIRS}
${PYTHON_INCLUDE_DIRS}
)
ADD_LIBRARY(gnucash_core_c MODULE ${SWIG_GNUCASH_CORE_C})
TARGET_INCLUDE_DIRECTORIES(gnucash_core_c PRIVATE ${gnucash_core_c_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(gnucash_core_c gnc-qof gnc-module gncmod-engine gncmod-app-utils ${GLIB_LIBS} ${PYTHON_LIBRARIES})
SET_TARGET_PROPERTIES(gnucash_core_c PROPERTIES PREFIX "_")
TARGET_COMPILE_OPTIONS(gnucash_core_c PRIVATE -Wno-implicit -Wno-missing-prototypes -Wno-declaration-after-statement -Wno-missing-declarations)
ADD_EXECUTABLE(sqlite3test EXCLUDE_FROM_ALL sqlite3test.c ${SWIG_GNUCASH_CORE_C})
TARGET_LINK_LIBRARIES(sqlite3test gnc-qof gnc-module gncmod-engine gncmod-app-utils ${GLIB_LIBS} ${PYTHON_LIBRARIES})
TARGET_INCLUDE_DIRECTORIES(sqlite3test PRIVATE ${gnucash_core_c_INCLUDE_DIRS})
TARGET_COMPILE_OPTIONS(sqlite3test PRIVATE -Wno-implicit -Wno-missing-prototypes -Wno-declaration-after-statement -Wno-missing-declarations)
ADD_TEST(NAME sqlite3test COMMAND sqlite3test)
ADD_DEPENDENCIES(check sqlite3test)
# Determine where to install the python libraries.
EXECUTE_PROCESS(
COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print sysconfig.get_path('platlib', vars = { 'platbase' : '${CMAKE_INSTALL_PREFIX}' } )"
RESULT_VARIABLE PYTHON_SYSCONFIG_RESULT
OUTPUT_VARIABLE PYTHON_SYSCONFIG_OUTPUT
ERROR_VARIABLE PYTHON_SYSCONFIG_ERROR
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
)
IF (PYTHON_SYSCONFIG_RESULT)
MESSAGE(SEND_ERROR "Could not determine Python site-package directory:\n${PYTHON_SYSCONFIG_ERROR}")
ENDIF()
INSTALL(TARGETS gnucash_core_c
LIBRARY DESTINATION ${PYTHON_SYSCONFIG_OUTPUT}/gnucash
ARCHIVE DESTINATION ${PYTHON_SYSCONFIG_OUTPUT}/gnucash
)
INSTALL(FILES __init__.py function_class.py gnucash_business.py gnucash_core.py
${CMAKE_CURRENT_BINARY_DIR}/gnucash_core_c.py
DESTINATION ${PYTHON_SYSCONFIG_OUTPUT}/gnucash
)
ENDIF()

View File

@ -62,6 +62,7 @@
#include "Split.h"
#include "Account.h"
#include "gnc-commodity.h"
#include "gnc-environment.h"
#include "gnc-lot.h"
#include "gnc-numeric.h"
#include "gncCustomer.h"

17
src/python/CMakeLists.txt Normal file
View File

@ -0,0 +1,17 @@
# handle pycons directory
SET(gncmod_python_SOURCES gncmod-python.c)
ADD_LIBRARY(gncmod-python ${gncmod_python_SOURCES})
TARGET_LINK_LIBRARIES(gncmod-python gnc-module gnc-core-utils-python gncmod-app-utils-python
${PYTHON_LIBRARIES} ${GLIB_LIBS}) # ${PYTHON_EXTRA_LIBS}
TARGET_INCLUDE_DIRECTORIES(gncmod-python
PRIVATE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/core_utils ${CMAKE_SOURCE_DIR}/gnc-module ${PYTHON_INCLUDE_DIR})
TARGET_COMPILE_OPTIONS(gncmod-python PRIVATE -DG_LOG_DOMAIN=\"gnc.python\")
INSTALL(TARGETS gncmod-python
LIBRARY DESTINATION lib/gnucash
ARCHIVE DESTINATION lib/gnucash
RUNTIME DESTINATION bin
)
INSTALL(FILES init.py DESTINATION share/python)

View File

@ -8,8 +8,12 @@ SET (report_gnome_HEADERS
window-report.h
)
SET (SWIG_REPORT_GNOME_C ${CMAKE_CURRENT_BINARY_DIR}/swig-report-gnome.c)
GNC_ADD_SWIG_COMMAND (${SWIG_REPORT_GNOME_C} ${CMAKE_CURRENT_SOURCE_DIR}/report-gnome.i ${report_gnome_HEADERS})
IF (BUILDING_FROM_VCS)
SET (SWIG_REPORT_GNOME_C ${CMAKE_CURRENT_BINARY_DIR}/swig-report-gnome.c)
GNC_ADD_SWIG_COMMAND (${SWIG_REPORT_GNOME_C} ${CMAKE_CURRENT_SOURCE_DIR}/report-gnome.i ${report_gnome_HEADERS})
ELSE()
SET (SWIG_REPORT_GNOME_C swig-report-gnome.c)
ENDIF()
SET (report_gnome_SOURCES
${SWIG_REPORT_GNOME_C}

View File

@ -4,8 +4,13 @@ SET (report_system_HEADERS
gnc-report.h
)
SET (SWIG_REPORT_SYSTEM_C ${CMAKE_CURRENT_BINARY_DIR}/swig-report-system.c)
GNC_ADD_SWIG_COMMAND (${SWIG_REPORT_SYSTEM_C} ${CMAKE_CURRENT_SOURCE_DIR}/report-system.i ${report_system_HEADERS})
IF (BUILDING_FROM_VCS)
SET (SWIG_REPORT_SYSTEM_C ${CMAKE_CURRENT_BINARY_DIR}/swig-report-system.c)
GNC_ADD_SWIG_COMMAND (${SWIG_REPORT_SYSTEM_C} ${CMAKE_CURRENT_SOURCE_DIR}/report-system.i ${report_system_HEADERS})
ELSE()
SET (SWIG_REPORT_SYSTEM_C swig-report-system.c)
ENDIF()
SET (report_system_SOURCES
${SWIG_REPORT_SYSTEM_C}

View File

@ -25,16 +25,28 @@ IF (UNIX)
TARGET_COMPILE_OPTIONS(test-core PRIVATE -fPIC)
ENDIF()
SET (SWIG_UNITTEST_SUPPORT_GUILE_C ${CMAKE_CURRENT_BINARY_DIR}/swig-unittest-support-guile.c)
GNC_ADD_SWIG_COMMAND (${SWIG_UNITTEST_SUPPORT_GUILE_C}
${CMAKE_CURRENT_SOURCE_DIR}/unittest-support.i ${test_core_HEADERS})
IF (BUILDING_FROM_VCS)
SET (SWIG_UNITTEST_SUPPORT_GUILE_C ${CMAKE_CURRENT_BINARY_DIR}/swig-unittest-support-guile.c)
GNC_ADD_SWIG_COMMAND (${SWIG_UNITTEST_SUPPORT_GUILE_C}
${CMAKE_CURRENT_SOURCE_DIR}/unittest-support.i ${test_core_HEADERS})
SET (SWIG_UNITTEST_SUPPORT_PYTHON_C ${CMAKE_CURRENT_BINARY_DIR}/swig-unittest-support-python.c)
GNC_ADD_SWIG_PYTHON_COMMAND (swig-unittest-support-python ${SWIG_UNITTEST_SUPPORT_PYTHON_C} ${CMAKE_CURRENT_SOURCE_DIR}/unittest-support.i)
ELSE()
SET (SWIG_UNITTEST_SUPPORT_GUILE_C swig-unittest-support-guile.c)
SET (SWIG_UNITTEST_SUPPORT_PYTHON_C swig-unittest-support-python.c)
ENDIF()
SET(test_core_guile_SOURCES ${SWIG_UNITTEST_SUPPORT_GUILE_C})
ADD_LIBRARY(test-core-guile ${test_core_guile_SOURCES})
ADD_LIBRARY(test-core-guile ${SWIG_UNITTEST_SUPPORT_GUILE_C})
TARGET_LINK_LIBRARIES(test-core-guile test-core ${GUILE_LDFLAGS} ${GLIB2_LDFLAGS})
IF (WITH_PYTHON)
ADD_LIBRARY(unittest_support MODULE ${SWIG_UNITTEST_SUPPORT_PYTHON_C})
TARGET_LINK_LIBRARIES(unittest_support test-core ${PYTHON_LIBRARIES})
TARGET_INCLUDE_DIRECTORIES(unittest_support PRIVATE ${PYTHON_INCLUDE_DIRS})
SET_TARGET_PROPERTIES(unittest_support PROPERTIES PREFIX "_")
ENDIF()
SET(test_core_SCHEME unittest-support.scm)
SET(GUILE_OUTPUT_DIR gnucash)