From 36cb167b682bfee82027ffd3f2ef7463a113e137 Mon Sep 17 00:00:00 2001 From: Geert Janssens Date: Mon, 29 Jan 2018 18:04:08 +0100 Subject: [PATCH] Rewrite gnc_add_swig_python_command to work in dist tarball as well When building from git it will add targets to generate the swig files. When building from tarball it will just point at the generated source files from the tarball. --- bindings/python/CMakeLists.txt | 21 ++---- common/cmake_modules/GncAddSwigCommand.cmake | 79 ++++++++++++-------- common/test-core/CMakeLists.txt | 13 ++-- libgnucash/app-utils/CMakeLists.txt | 13 ++-- libgnucash/core-utils/CMakeLists.txt | 13 ++-- 5 files changed, 73 insertions(+), 66 deletions(-) diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt index 1625bd1724..8bdde034bc 100644 --- a/bindings/python/CMakeLists.txt +++ b/bindings/python/CMakeLists.txt @@ -3,9 +3,8 @@ ADD_SUBDIRECTORY(tests) SET(PYEXEC_FILES __init__.py function_class.py gnucash_business.py gnucash_core.py) -IF (BUILDING_FROM_VCS) - SET(SWIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/gnucash_core.i ${CMAKE_CURRENT_SOURCE_DIR}/time64.i) - SET(GNUCASH_CORE_C_INCLUDES +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 @@ -35,22 +34,16 @@ IF (BUILDING_FROM_VCS) ${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 - ) - - SET (SWIG_GNUCASH_CORE_C ${CMAKE_CURRENT_BINARY_DIR}/gnucash_core.c) - SET (SWIG_GNUCASH_CORE_PY ${CMAKE_CURRENT_BINARY_DIR}/gnucash_core_c.py) +) - GNC_ADD_SWIG_PYTHON_COMMAND (swig-gnucash-core ${SWIG_GNUCASH_CORE_C} - ${SWIG_GNUCASH_CORE_PY} +gnc_add_swig_python_command (swig-gnucash-core + SWIG_GNUCASH_CORE_C SWIG_GNUCASH_CORE_PY + gnucash_core.c gnucash_core_c.py ${SWIG_FILES} ${CMAKE_SOURCE_DIR}/common/base-typemaps.i ${CMAKE_SOURCE_DIR}/libgnucash/engine/engine-common.i ${GNUCASH_CORE_C_INCLUDES} - ) -ELSE() - SET (SWIG_GNUCASH_CORE_C gnucash_core.c) - SET (SWIG_GNUCASH_CORE_PY ${CMAKE_CURRENT_SOURCE_DIR}/gnucash_core_c.py) -ENDIF() +) IF(WITH_PYTHON) diff --git a/common/cmake_modules/GncAddSwigCommand.cmake b/common/cmake_modules/GncAddSwigCommand.cmake index de32e0f082..44ba69b1f9 100644 --- a/common/cmake_modules/GncAddSwigCommand.cmake +++ b/common/cmake_modules/GncAddSwigCommand.cmake @@ -1,5 +1,5 @@ # Copyright (c) 2010, Christian Stimming - +# Copyright (c) 2018, Geert Janssens # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. @@ -26,41 +26,60 @@ macro (GNC_ADD_SWIG_COMMAND _target _output _input) endmacro (GNC_ADD_SWIG_COMMAND) -macro (GNC_ADD_SWIG_PYTHON_COMMAND _target _output _py_output _input) +# gnc_add_swig_python_command is used to generate python swig wrappers +# it will only really generate the wrappers when building from git +# when building from tarball it will set up everything so the version of the wrapper +# from the tarball will be used instead +# - _target is the name of a global target that will be set for this wrapper file, +# this can be used elsewhere to create a depencency on this wrapper +# - _out_var will be set to the full path to the generated wrapper file +# when building from git, it points to the actually generated file +# however when building from a tarball, it will point to the version from the tarball instead +# - _py_out_var is the same but for the python module that's generated together with the wrapper +# - _output is the name of the wrapper file to generate (or to look up in the tarball) +# - _py_output is the name of the python module associated with this wrapper +# - input it the swig interface file (*.i) to generate this wrapper from +# Any additional parameters will be used as dependencies for this wrapper target +macro (gnc_add_swig_python_command _target _out_var _py_out_var _output _py_output _input) - set (DEFAULT_SWIG_PYTHON_FLAGS - -python - -Wall -Werror - ${SWIG_ARGS} - ) - set (DEFAULT_SWIG_PYTHON_C_INCLUDES - ${GLIB2_INCLUDE_DIRS} - ${CMAKE_SOURCE_DIR}/common - ${CMAKE_SOURCE_DIR}/libgnucash/engine - ${CMAKE_SOURCE_DIR}/libgnucash/app-utils - ) + if (BUILDING_FROM_VCS) + set(SW_CURR_BUILD_SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}) + set(SW_BUILD_SOURCE_DIR ${CMAKE_BINARY_DIR}) + else() + set(SW_CURR_BUILD_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + set(SW_BUILD_SOURCE_DIR ${CMAKE_SOURCE_DIR}) + endif() - set (PYTHON_SWIG_FLAGS ${DEFAULT_SWIG_PYTHON_FLAGS}) - foreach (dir ${DEFAULT_SWIG_PYTHON_C_INCLUDES}) - list (APPEND PYTHON_SWIG_FLAGS "-I${dir}") - endforeach (dir) - add_custom_command(OUTPUT ${_output} ${_py_output} - COMMAND ${SWIG_EXECUTABLE} ${PYTHON_SWIG_FLAGS} -o ${_output} ${_input} - DEPENDS ${_input} ${CMAKE_SOURCE_DIR}/common/base-typemaps.i ${ARGN} - ) - add_custom_target(${_target} ALL DEPENDS ${_output} ${_py_output} ${CMAKE_SOURCE_DIR}/common/base-typemaps.i ${_input} ${ARGN}) + set(outfile ${SW_CURR_BUILD_SOURCE_DIR}/${_output}) + set(${_out_var} ${outfile}) # This variable is set for convenience to use in the calling CMakeLists.txt + set(py_outfile ${SW_CURR_BUILD_SOURCE_DIR}/${_py_output}) + set(${_py_out_var} ${py_outfile}) # This variable is set for convenience to use in the calling CMakeLists.txt if (BUILDING_FROM_VCS) - set(BUILD_SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}) - else() - set(BUILD_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + set (DEFAULT_SWIG_PYTHON_FLAGS + -python + -Wall -Werror + ${SWIG_ARGS} + ) + set (DEFAULT_SWIG_PYTHON_C_INCLUDES + ${GLIB2_INCLUDE_DIRS} + ${CMAKE_SOURCE_DIR}/common + ${CMAKE_SOURCE_DIR}/libgnucash/engine + ${CMAKE_SOURCE_DIR}/libgnucash/app-utils + ) + + set (PYTHON_SWIG_FLAGS ${DEFAULT_SWIG_PYTHON_FLAGS}) + foreach (dir ${DEFAULT_SWIG_PYTHON_C_INCLUDES}) + list (APPEND PYTHON_SWIG_FLAGS "-I${dir}") + endforeach (dir) + add_custom_command(OUTPUT ${outfile} ${py_outfile} + COMMAND ${SWIG_EXECUTABLE} ${PYTHON_SWIG_FLAGS} -o ${outfile} ${_input} + DEPENDS ${_input} ${CMAKE_SOURCE_DIR}/common/base-typemaps.i ${ARGN} + ) + add_custom_target(${_target} ALL DEPENDS ${outfile} ${py_outfile} ${CMAKE_SOURCE_DIR}/common/base-typemaps.i ${_input} ${ARGN}) endif() # Add the output files _output and _py_output to the dist tarball - file(RELATIVE_PATH generated ${BUILD_SOURCE_DIR} ${_output}) - dist_add_generated(${generated}) - - file(RELATIVE_PATH py_generated ${BUILD_SOURCE_DIR} ${_py_output}) - dist_add_generated(${py_generated}) + dist_add_generated(${_output} ${_py_output}) endmacro() diff --git a/common/test-core/CMakeLists.txt b/common/test-core/CMakeLists.txt index e2e4a44d9a..095e152a18 100644 --- a/common/test-core/CMakeLists.txt +++ b/common/test-core/CMakeLists.txt @@ -31,18 +31,15 @@ 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 ${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) - SET (SWIG_UNITTEST_SUPPORT_PYTHON_PY ${CMAKE_CURRENT_BINARY_DIR}/unittest_support.py) - GNC_ADD_SWIG_PYTHON_COMMAND (swig-unittest-support-python - ${SWIG_UNITTEST_SUPPORT_PYTHON_C} - ${SWIG_UNITTEST_SUPPORT_PYTHON_PY} - ${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) - FILE(COPY unittest_support.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) ENDIF() +gnc_add_swig_python_command (swig-unittest-support-python + SWIG_UNITTEST_SUPPORT_PYTHON_C SWIG_UNITTEST_SUPPORT_PYTHON_PY + swig-unittest-support-python.c unittest_support.py + ${CMAKE_CURRENT_SOURCE_DIR}/unittest-support.i +) ADD_LIBRARY(test-core-guile ${SWIG_UNITTEST_SUPPORT_GUILE_C}) TARGET_LINK_LIBRARIES(test-core-guile test-core ${GUILE_LDFLAGS} ${GLIB2_LDFLAGS}) diff --git a/libgnucash/app-utils/CMakeLists.txt b/libgnucash/app-utils/CMakeLists.txt index a3ab7b1ebd..a52bf45bf5 100644 --- a/libgnucash/app-utils/CMakeLists.txt +++ b/libgnucash/app-utils/CMakeLists.txt @@ -41,17 +41,16 @@ 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-apputils-guile-c ${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) - SET (SWIG_APP_UTILS_PYTHON_PY ${CMAKE_CURRENT_BINARY_DIR}/sw_app_utils.py) - GNC_ADD_SWIG_PYTHON_COMMAND (swig-app-utils-python - ${SWIG_APP_UTILS_PYTHON_C} - ${SWIG_APP_UTILS_PYTHON_PY} - ${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() +gnc_add_swig_python_command (swig-app-utils-python + SWIG_APP_UTILS_PYTHON_C SWIG_APP_UTILS_PYTHON_PY + swig-app-utils-python.c sw_app_utils.py + ${CMAKE_CURRENT_SOURCE_DIR}/app-utils.i +) + SET (app_utils_SOURCES calculation/expression_parser.c calculation/fin.c diff --git a/libgnucash/core-utils/CMakeLists.txt b/libgnucash/core-utils/CMakeLists.txt index fa2b48f09e..407c1c6989 100644 --- a/libgnucash/core-utils/CMakeLists.txt +++ b/libgnucash/core-utils/CMakeLists.txt @@ -5,17 +5,16 @@ ADD_SUBDIRECTORY(test) 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 ${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) - SET (SWIG_CORE_UTILS_PYTHON_PY ${CMAKE_CURRENT_BINARY_DIR}/sw_core_utils.py) - GNC_ADD_SWIG_PYTHON_COMMAND (swig-core-utils-python - ${SWIG_CORE_UTILS_PYTHON_C} - ${SWIG_CORE_UTILS_PYTHON_PY} - ${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() +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_CURRENT_SOURCE_DIR}/core-utils.i +) + SET (core_utils_SOURCES binreloc.c gnc-prefs.c