Files
gnucash/bindings/python/CMakeLists.txt
Geert Janssens d52aa0a0dd app-utils - remove gnc-module boilerplate
app-utils now is an ordinery shared library

A few bits worth mentioning:
1. it's not guile-free just yet, so instead of a gnc_module_load
   your code may have to call scm_c_use_module("gnucash app-utils");
   to expose the scm side of the app-utils api. This call has been
   added to gnucash-bin.c for example
2. while lots of noise in this commit is to rename from gncmodule-app-utils
   to gnc-app-utils, I'll point out the library has also been moved from
   <libdir>/gnucash to <libdir>. This required changes in app-util's
   CMakeLists.txt file for the install side and in the top level
   CMakeLists.txt file for the build directory structure.
3. The C side link module test has been removed as linking an ordinary
   shared library should be considered well tested by the compiler devs.
   The scheme side module load test has been slightly tweaked to no longer
   try to use gnc:module-load, but instead now checks whether the app-utils
   api is properly exposed to scheme after loading it via use-modules.
4. Dropped a completely obsolete README file.
2019-12-06 20:38:21 +01:00

162 lines
6.4 KiB
CMake

add_subdirectory(example_scripts)
add_subdirectory(tests)
set(PYEXEC_FILES __init__.py function_class.py gnucash_business.py gnucash_core.py)
set(SWIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/gnucash_core.i ${CMAKE_CURRENT_SOURCE_DIR}/time64.i)
set(GNUCASH_CORE_C_INCLUDES
${CONFIG_H}
${CMAKE_SOURCE_DIR}/libgnucash/engine/qofsession.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/qofbook.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/qofbackend.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/qoflog.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/qofutil.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/qofid.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/guid.h
${CMAKE_SOURCE_DIR}/libgnucash/gnc-module/gnc-module.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gnc-engine.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/Transaction.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/Split.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/Account.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gnc-commodity.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gnc-lot.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gnc-numeric.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gncCustomer.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gncEmployee.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gncVendor.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gncAddress.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gncBillTerm.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gncOwner.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gncInvoice.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gncJob.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gncEntry.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gncTaxTable.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gncIDSearch.h
${CMAKE_SOURCE_DIR}/libgnucash/engine/gnc-pricedb.h
${CMAKE_SOURCE_DIR}/libgnucash/app-utils/gnc-prefs-utils.h
)
gnc_add_swig_python_command (swig-gnucash-core
SWIG_GNUCASH_CORE_C SWIG_GNUCASH_CORE_PY
gnucash_core.c gnucash_core_c.py
${CMAKE_CURRENT_SOURCE_DIR}/gnucash_core.i
${CMAKE_SOURCE_DIR}/bindings
${CMAKE_CURRENT_SOURCE_DIR}/time64.i
${CMAKE_SOURCE_DIR}/common/base-typemaps.i
${CMAKE_SOURCE_DIR}/bindings/engine-common.i
${GNUCASH_CORE_C_INCLUDES}
)
# Command to generate the swig-core-utils-python.c wrapper file
gnc_swig_extract_header_files (gnc-core-utils CORE_UTILS_HEADERS)
gnc_add_swig_python_command (swig-core-utils-python
SWIG_CORE_UTILS_PYTHON_C SWIG_CORE_UTILS_PYTHON_PY
swig-core-utils-python.c sw_core_utils.py
${CMAKE_SOURCE_DIR}/bindings/core-utils.i ${CMAKE_SOURCE_DIR}/libgnucash/core-utils
${CORE_UTILS_HEADERS}
)
if(WITH_PYTHON)
### gnucash_core_c
set(gnucash_core_c_INCLUDE_DIRS
${CMAKE_SOURCE_DIR}/libgnucash
${CMAKE_SOURCE_DIR}/libgnucash/engine
${CMAKE_SOURCE_DIR}/gnucash/gnome-utils
${CMAKE_SOURCE_DIR}/libgnucash/app-utils
${CMAKE_SOURCE_DIR}/libgnucash/gnc-module
${CMAKE_SOURCE_DIR}/gnucash/gnome
${CMAKE_SOURCE_DIR}/libgnucash/core-utils
${CMAKE_SOURCE_DIR}/libgnucash/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-app-utils gnc-engine gnc-module ${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)
if (HAVE_STRINGOP_TRUNCATION)
target_compile_options(gnucash_core_c PRIVATE -Wno-error=stringop-truncation)
endif()
add_executable(sqlite3test EXCLUDE_FROM_ALL sqlite3test.c ${SWIG_GNUCASH_CORE_C})
target_link_libraries(sqlite3test gnc-app-utils gnc-engine gnc-module ${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)
if (HAVE_STRINGOP_TRUNCATION)
target_compile_options(sqlite3test PRIVATE -Wno-error=stringop-truncation)
endif()
add_test(NAME sqlite3test COMMAND sqlite3test)
add_dependencies(check sqlite3test)
install(TARGETS gnucash_core_c
LIBRARY DESTINATION ${PYTHON_SYSCONFIG_OUTPUT}/gnucash
ARCHIVE DESTINATION ${PYTHON_SYSCONFIG_OUTPUT}/gnucash
)
install(FILES ${PYEXEC_FILES} ${SWIG_GNUCASH_CORE_PY}
DESTINATION ${PYTHON_SYSCONFIG_OUTPUT}/gnucash
)
file(COPY ${PYEXEC_FILES} DESTINATION ${PYTHON_SYSCONFIG_BUILD}/gnucash)
add_custom_target(gnucash-core-c-py ALL
COMMAND ${CMAKE_COMMAND} -E copy ${SWIG_GNUCASH_CORE_PY} ${PYTHON_SYSCONFIG_BUILD}/gnucash
DEPENDS ${SWIG_GNUCASH_CORE_C})
add_custom_target(gnucash-core-c-build ALL
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR_BUILD}/gnucash/_gnucash_core_c${CMAKE_SHARED_MODULE_SUFFIX} ${PYTHON_SYSCONFIG_BUILD}/gnucash
DEPENDS gnucash_core_c)
### sw_core_utils
add_library (sw_core_utils MODULE ${SWIG_CORE_UTILS_PYTHON_C})
target_link_libraries(sw_core_utils gnc-core-utils ${PYTHON_LIBRARIES})
set_target_properties(sw_core_utils PROPERTIES PREFIX "_")
if (HAVE_STRINGOP_TRUNCATION)
target_compile_options(sw_core_utils PRIVATE -Wno-error=stringop-truncation)
endif()
target_include_directories (sw_core_utils
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${PYTHON_INCLUDE_DIRS}
)
target_compile_definitions (sw_core_utils PRIVATE -DG_LOG_DOMAIN=\"gnc.core-utils\")
if (APPLE)
set_target_properties (sw_core_utils PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/gnucash")
endif()
install(TARGETS sw_core_utils
LIBRARY DESTINATION ${PYTHON_SYSCONFIG_OUTPUT}/gnucash
ARCHIVE DESTINATION ${PYTHON_SYSCONFIG_OUTPUT}/gnucash
)
add_custom_target(sw-core-utils-py ALL
COMMAND ${CMAKE_COMMAND} -E copy ${SWIG_CORE_UTILS_PYTHON_PY} ${PYTHON_SYSCONFIG_BUILD}/gnucash
DEPENDS ${SWIG_CORE_UTILS_PYTHON_C})
add_custom_target(sw-core-utils-build ALL
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR_BUILD}/gnucash/_sw_core_utils${CMAKE_SHARED_MODULE_SUFFIX} ${PYTHON_SYSCONFIG_BUILD}/gnucash
DEPENDS sw_core_utils)
endif()
set(python_bindings_DATA ${PYEXEC_FILES}
gnucash_core.i
sqlite3test.c
time64.i)
set_local_dist(python_bindings_DIST_local CMakeLists.txt
${python_bindings_DATA})
set(python_bindings_DIST ${python_bindings_DIST_local}
${test_python_bindings_DIST} ${example_scripts_DIST} PARENT_SCOPE)