mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Sets paths for finding componenents depending on the state of ENABLE_BINRELOC, GNC_UNINSTALLED, GNC_BUILDDIR and whether any install paths have been set outside of CMAKE_INSTALL_PREFIX. GNUInstallDirs changes the name of CMAKE_INSTALL_LIBDIR depending on the operating system and distro. When CMAKE_INSTALL_PREFIX is /usr, /usr/local, or any subdirectory of /opt it also changes CMAKE_INSTALL_FULL_SYSCONFDIR to /etc. An earlier commit by Aaron Laws mirrors the name of CMAKE_INSTALL_LIBDIR to the build library directory. It's possible for builders to set any of the install directories anywhere they please. Setting any directory outside of CMAKE_INSTALL_PREFIX breaks Binreloc so the toplevel CMakeLists.txt now detects that and disables Binreloc. If Binreloc is enabled then all path queries use it to find paths. This works in the build directory because the gnucash executable and all of the test programs are in build_directory/bin and LIBDIR, DATADIR, and SYSCONFDIR can be found in the same root path. If Binreloc is disabled then in order to build or run programs from the build directory one must set GNC_UNINSTALLED and set GNC_BUILDDIR to the absolute path of the build directory. When those are set GNC_BUILDDIR replaces CMAKE_INSTALL_PREFIX in all paths that are subdirectories of CMAKE_INSTALL_PREFIX; paths that are not in CMAKE_INSTALL_PREFIX are appended whole to GNC_BUILDDIR. This process is constent between CMake and gnc_path_get_foo. GnuCash is unlikely to run from a DESTDIR without Binreloc.
219 lines
6.9 KiB
CMake
219 lines
6.9 KiB
CMake
# CMakeLists.txt for libgnucash/core-utils
|
|
|
|
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)
|
|
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
|
|
gnc-prefs.c
|
|
gnc-environment.c
|
|
gnc-filepath-utils.cpp
|
|
gnc-gkeyfile-utils.c
|
|
gnc-glib-utils.c
|
|
gnc-guile-utils.c
|
|
gnc-jalali.c
|
|
gnc-locale-utils.c
|
|
gnc-path.c
|
|
)
|
|
|
|
# Add dependency on config.h
|
|
SET_SOURCE_FILES_PROPERTIES (${core_utils_SOURCES} PROPERTIES OBJECT_DEPENDS ${CONFIG_H})
|
|
|
|
IF (BUILDING_FROM_VCS)
|
|
# Command to generate the swig-runtime.h header
|
|
ADD_CUSTOM_COMMAND (
|
|
OUTPUT ${SWIG_RUNTIME_H}
|
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
|
COMMAND ${SWIG_EXECUTABLE} -guile -external-runtime ${SWIG_RUNTIME_H}
|
|
)
|
|
ENDIF()
|
|
|
|
ADD_CUSTOM_TARGET(swig-runtime-h DEPENDS ${SWIG_RUNTIME_H})
|
|
|
|
# Add dependency on swig-runtime.h
|
|
SET_SOURCE_FILES_PROPERTIES (gnc-guile-utils.c PROPERTIES OBJECT_DEPENDS ${SWIG_RUNTIME_H})
|
|
|
|
SET(prefix ${CMAKE_INSTALL_PREFIX})
|
|
if(ENABLE_BINRELOC)
|
|
SET(datadir ${DATADIR})
|
|
SET(bindir ${BINDIR})
|
|
SET(libdir ${LIBDIR})
|
|
SET(sysconfdir ${SYSCONFDIR})
|
|
SET(localedir ${LOCALEDIR})
|
|
else()
|
|
SET(datadir ${CMAKE_INSTALL_FULL_DATADIR})
|
|
SET(bindir ${CMAKE_INSTALL_FULL_BINDIR})
|
|
SET(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
|
|
SET(sysconfdir ${CMAKE_INSTALL_FULL_SYSCONFDIR})
|
|
SET(localedir "${CMAKE_INSTALL_FULL_DATAROOTDIR}/locale")
|
|
endif()
|
|
GNC_CONFIGURE(gncla-dir.h.in gncla-dir.h)
|
|
|
|
### Create gnc-version.h ###
|
|
|
|
SET (GNC_VERSION_H_IN
|
|
"/* Autogenerated. Do not change. */
|
|
#ifndef GNC_VERSION_H
|
|
#define GNC_VERSION_H
|
|
|
|
#define GNC_VCS \"git\"
|
|
#include \"gnc-vcs-info.h\"
|
|
#endif
|
|
")
|
|
|
|
STRING(CONFIGURE ${GNC_VERSION_H_IN} GNC_VERSION_H_CONTENT)
|
|
FILE (WRITE ${CMAKE_CURRENT_BINARY_DIR}/gnc-version.h ${GNC_VERSION_H_CONTENT})
|
|
|
|
### Create gnc-vcs-info.h
|
|
# This can only be done when building from a vcs (git/svn/bzr/svk) working directory.
|
|
# This file is shipped in the distribution tarball, so no need to generate it in that case anyway.
|
|
# The meta-cmake gymnastics here come from https://cmake.org/pipermail/cmake/2010-July/038015.html
|
|
IF (BUILDING_FROM_VCS)
|
|
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gnc-vcs-info.h.in
|
|
"/* Autogenerated. Do not change. */
|
|
#define GNC_VCS_REV \"@GNC_VCS_REV@\"
|
|
#define GNC_VCS_REV_DATE \"@GNC_VCS_REV_DATE@\"
|
|
#define GNC_VCS_REV_YEAR \"@GNC_VCS_REV_YEAR@\"
|
|
#define GNC_VCS_REV_Y_M \"@GNC_VCS_REV_Y_M@\"
|
|
")
|
|
|
|
SET(SCM_REV_COMMAND "${CMAKE_SOURCE_DIR}/util/gnc-vcs-info -r")
|
|
SET(SCM_REV_DATE_COMMAND "${CMAKE_SOURCE_DIR}/util/gnc-vcs-info -d")
|
|
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/version.cmake
|
|
"EXECUTE_PROCESS(
|
|
COMMAND ${SHELL} ${SCM_REV_COMMAND} ${CMAKE_SOURCE_DIR}
|
|
OUTPUT_VARIABLE GNC_VCS_REV
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
EXECUTE_PROCESS(
|
|
COMMAND ${SHELL} ${SCM_REV_DATE_COMMAND} ${CMAKE_SOURCE_DIR}
|
|
OUTPUT_VARIABLE GNC_VCS_REV_DATE
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
STRING(SUBSTRING \${GNC_VCS_REV_DATE} 0 4 GNC_VCS_REV_YEAR)
|
|
STRING(SUBSTRING \${GNC_VCS_REV_DATE} 0 7 GNC_VCS_REV_Y_M)
|
|
CONFIGURE_FILE(\${SRC} \${DST} @ONLY)
|
|
")
|
|
|
|
IF (${CMAKE_VERSION} VERSION_GREATER "3.1")
|
|
ADD_CUSTOM_TARGET(gnc-vcs-info ALL
|
|
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/gnc-vcs-info.h
|
|
COMMAND ${CMAKE_COMMAND} -D SRC=${CMAKE_CURRENT_BINARY_DIR}/gnc-vcs-info.h.in
|
|
-D DST=${CMAKE_CURRENT_BINARY_DIR}/gnc-vcs-info.h
|
|
-P ${CMAKE_CURRENT_BINARY_DIR}/version.cmake
|
|
)
|
|
ELSE()
|
|
# BYPRODUCTS keyword not supported below 3.2
|
|
ADD_CUSTOM_TARGET(gnc-vcs-info ALL
|
|
COMMAND ${CMAKE_COMMAND} -D SRC=${CMAKE_CURRENT_BINARY_DIR}/gnc-vcs-info.h.in
|
|
-D DST=${CMAKE_CURRENT_BINARY_DIR}/gnc-vcs-info.h
|
|
-P ${CMAKE_CURRENT_BINARY_DIR}/version.cmake
|
|
)
|
|
ENDIF()
|
|
ELSE(BUILDING_FROM_VCS)
|
|
ADD_CUSTOM_TARGET(gnc-vcs-info DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gnc-vcs-info.h)
|
|
ENDIF(BUILDING_FROM_VCS)
|
|
### Compile library
|
|
|
|
SET(core_utils_noinst_HEADERS
|
|
binreloc.h
|
|
gnc-prefs.h
|
|
gnc-prefs-p.h
|
|
gnc-environment.h
|
|
gnc-filepath-utils.h
|
|
gnc-gkeyfile-utils.h
|
|
gnc-glib-utils.h
|
|
gnc-guile-utils.h
|
|
gnc-jalali.h
|
|
gnc-locale-utils.h
|
|
gnc-path.h
|
|
)
|
|
|
|
SET(core_utils_ALL_SOURCES ${core_utils_SOURCES} ${core_utils_noinst_HEADERS})
|
|
SET(core_utils_ALL_LIBRARIES ${Boost_LIBRARIES} ${GUILE_LDFLAGS} ${GLIB2_LDFLAGS} ${GOBJECT_LDFLAGS} ${GTK_MAC_LDFLAGS})
|
|
SET(core_utils_ALL_INCLUDES
|
|
${CMAKE_SOURCE_DIR}/common
|
|
${CMAKE_BINARY_DIR}/common
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${GLIB2_INCLUDE_DIRS}
|
|
${GUILE_INCLUDE_DIRS}
|
|
${GTK_MAC_INCLUDE_DIRS})
|
|
|
|
SET_LOCAL_DIST(core_utils_DIST_local ${core_utils_ALL_SOURCES} CMakeLists.txt Makefile.am core-utils.i core-utils.scm gncla-dir.h.in)
|
|
SET(core_utils_DIST ${core_utils_DIST_local} ${test_core_utils_DIST} PARENT_SCOPE)
|
|
|
|
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 ${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 ${core_utils_ALL_INCLUDES})
|
|
|
|
IF (MAC_INTEGRATION)
|
|
TARGET_COMPILE_OPTIONS(gnc-core-utils PRIVATE ${OSX_EXTRA_COMPILE_FLAGS})
|
|
ENDIF(MAC_INTEGRATION)
|
|
|
|
INSTALL(TARGETS gnc-core-utils
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
)
|
|
|
|
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 ${CMAKE_INSTALL_LIBDIR}
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
)
|
|
|
|
ENDIF()
|
|
|
|
# No headers to install
|
|
|
|
# Scheme
|
|
|
|
SET (core_utils_SCHEME core-utils.scm)
|
|
|
|
SET(GUILE_OUTPUT_DIR gnucash)
|
|
SET(GUILE_DEPENDS gnc-core-utils)
|
|
|
|
GNC_ADD_SCHEME_TARGETS(scm-core-utils
|
|
"${core_utils_SCHEME}"
|
|
${GUILE_OUTPUT_DIR}
|
|
"${GUILE_DEPENDS}"
|
|
FALSE
|
|
)
|
|
|