Files
gnucash/common/cmake_modules/MakeDistCheck.cmake
Geert Janssens 83d14e1c1c Restructure the src directory
It is split into
- /libgnucash (for the non-gui bits)
- /gnucash (for the gui)
- /common (misc source files used by both)
- /bindings (currently only holds python bindings)

This is the first step in restructuring the code. It will need much
more fine tuning later on.
2017-08-10 18:45:00 +02:00

159 lines
5.2 KiB
CMake

include(MakeDistFiles)
FUNCTION(RUN_DIST_CHECK PACKAGE_PREFIX EXT)
SET(tarball ${PACKAGE_PREFIX}.tar${EXT})
IF (NOT EXISTS ${tarball})
MESSAGE(FATAL_ERROR "Can't find dist tarball '${tarball}'")
ENDIF()
# Remove the directory we're about to extract to
FILE(REMOVE_RECURSE ${PACKAGE_PREFIX})
# Untar the distribution we want to check
SET(TAR_OPTION "zxf")
IF (${EXT} STREQUAL ".bz2")
SET(TAR_OPTION "jxf")
ENDIF()
SET(MY_CMAKE_COMMAND "")
IF (${CMAKE_VERSION} VERSION_GREATER 3.1)
SET(MY_CMAKE_COMMAND ${CMAKE_COMMAND} -E env)
ENDIF()
FIND_PROGRAM(NINJA_COMMAND NAMES ninja ninja-build)
IF (${NINJA_COMMAND} STREQUAL "NINJA_COMMAND-NOTFOUND")
MESSAGE(FATAL_ERROR "Can't find the 'ninja' or 'ninja-build' program.")
ENDIF ()
EXECUTE_PROCESS_AND_CHECK_RESULT(
COMMAND ${CMAKE_COMMAND} -E tar ${TAR_OPTION} ${tarball}
WORKING_DIRECTORY .
ERROR_MSG "Command to untar ${tarball} failed."
)
# Officially, I should make the contents of the untarred dist directory read-only,
# but that will cause the build to fail (intltool is unhappy).
# Create a build directory and configure the Cmake build
SET(BUILD_DIR "_cmake_build")
SET(INSTALL_DIR "_cmake_install")
FILE(REMOVE_RECURSE ${BUILD_DIR} ${INSTALL_DIR})
FILE(MAKE_DIRECTORY ${BUILD_DIR} ${INSTALL_DIR})
EXECUTE_PROCESS_AND_CHECK_RESULT(
COMMAND ${CMAKE_COMMAND} -G Ninja
-D CMAKE_C_FLAGS=${CMAKE_C_FLAGS}
-D CMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
-D CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
-D CMAKE_INSTALL_PREFIX=../${INSTALL_DIR}
-D AUTOTOOLS_IN_DIST=${AUTOTOOLS_IN_DIST}
../${PACKAGE_PREFIX}
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "CMake configure command failed."
)
# Run ninja in the build directory
EXECUTE_PROCESS_AND_CHECK_RESULT(
COMMAND ${MY_CMAKE_COMMAND} ${NINJA_COMMAND}
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Ninja build failed."
)
# Run ninja install
EXECUTE_PROCESS_AND_CHECK_RESULT(
COMMAND ${MY_CMAKE_COMMAND} ${NINJA_COMMAND} install
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Ninja install failed."
)
# Run ninja check in the build directory
EXECUTE_PROCESS_AND_CHECK_RESULT(
COMMAND ${MY_CMAKE_COMMAND} ${NINJA_COMMAND} check
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Ninja check failed."
)
# Run ninja dist
EXECUTE_PROCESS_AND_CHECK_RESULT(
COMMAND ${MY_CMAKE_COMMAND} ${NINJA_COMMAND} dist
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Ninja dist failed."
)
MESSAGE("distcheck complete.")
ENDFUNCTION()
FUNCTION(RUN_AUTOTOOLS_DIST_CHECK PACKAGE_PREFIX)
# We assume that the RUN_DIST_CHECK() function has been run so that we can
# use the untarred distribution created by that step.
SET(BUILD_DIR ${PACKAGE_PREFIX})
SET(INSTALL_DIR "_cmake_install_autotools")
FILE(REMOVE_RECURSE ${INSTALL_DIR})
FILE(MAKE_DIRECTORY ${INSTALL_DIR})
SET(MY_CMAKE_COMMAND "")
IF (${CMAKE_VERSION} VERSION_GREATER 3.1)
SET(MY_CMAKE_COMMAND ${CMAKE_COMMAND} -E env)
ENDIF()
IF(CMAKE_PREFIX_PATH)
EXECUTE_PROCESS_AND_CHECK_RESULT(
COMMAND ${MY_CMAKE_COMMAND}
LDFLAGS=-L${CMAKE_PREFIX_PATH}/lib
CFLAGS=${CMAKE_C_FLAGS}
CXXFLAGS=${CMAKE_CXX_FLAGS}
CPPFLAGS=-I${CMAKE_PREFIX_PATH}/include
PATH=${CMAKE_PREFIX_PATH}/bin:$ENV{PATH}
./configure --prefix=${CMAKE_CURRENT_SOURCE_DIR}/${INSTALL_DIR} --enable-compile-warnings
--with-dbi-dbd-dir=${CMAKE_PREFIX_PATH}/lib/dbd
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Autotools 'configure' step failed."
)
ELSE()
EXECUTE_PROCESS_AND_CHECK_RESULT(
COMMAND ${MY_CMAKE_COMMAND}
./configure --prefix=${CMAKE_CURRENT_SOURCE_DIR}/${INSTALL_DIR} --enable-compile-warnings
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Autotools 'configure' step failed."
)
ENDIF()
EXECUTE_PROCESS_AND_CHECK_RESULT(
COMMAND ${MY_CMAKE_COMMAND} make -j 4
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Autotools 'make' step failed."
)
EXECUTE_PROCESS_AND_CHECK_RESULT(
COMMAND ${MY_CMAKE_COMMAND} make check
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Autotools 'make check' step failed."
)
EXECUTE_PROCESS_AND_CHECK_RESULT(
COMMAND ${MY_CMAKE_COMMAND} make install
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Autotools 'make install' step failed."
)
EXECUTE_PROCESS_AND_CHECK_RESULT(
COMMAND ${MY_CMAKE_COMMAND} make uninstall
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Autotools 'make uninstall' step failed."
)
MESSAGE("Autotools distcheck complete.")
ENDFUNCTION()
RUN_DIST_CHECK(${PACKAGE_PREFIX} .gz)
IF (AUTOTOOLS_IN_DIST)
RUN_AUTOTOOLS_DIST_CHECK(${PACKAGE_PREFIX})
ENDIF()