mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
169 lines
6.3 KiB
CMake
169 lines
6.3 KiB
CMake
|
|
|
|
function(get_guile_env)
|
|
set(_GNC_MODULE_PATH ${LIBDIR_BUILD}:${LIBDIR_BUILD}/gnucash)
|
|
if (WIN32)
|
|
set(_GNC_MODULE_PATH ${CMAKE_BINARY_DIR}/bin)
|
|
endif()
|
|
set(env "")
|
|
list(APPEND env "GNC_UNINSTALLED=yes")
|
|
list(APPEND env "GNC_BUILDDIR=${CMAKE_BINARY_DIR}")
|
|
if (APPLE)
|
|
list(APPEND env "DYLD_LIBRARY_PATH=${_GNC_MODULE_PATH}")
|
|
endif()
|
|
if (UNIX)
|
|
list(APPEND env LD_LIBRARY_PATH=${_GNC_MODULE_PATH})
|
|
endif()
|
|
if (MINGW64)
|
|
set(fpath "")
|
|
set(path $ENV{PATH})
|
|
list(INSERT path 0 ${CMAKE_BINARY_DIR}/bin)
|
|
foreach(dir ${path})
|
|
string(REGEX REPLACE "^([A-Za-z]):" "/\\1" dir ${dir})
|
|
string(REGEX REPLACE "\\\\" "/" dir ${dir})
|
|
set(fpath "${fpath}${dir}:")
|
|
endforeach(dir)
|
|
list(APPEND env "PATH=${fpath}")
|
|
set(compiled_path "${LIBDIR_BUILD}/gnucash/scm/ccache/${GUILE_EFFECTIVE_VERSION}")
|
|
string(REGEX REPLACE "^([A-Za-z]):" "/\\1" compiled_path ${compiled_path})
|
|
list(APPEND env GUILE_LOAD_COMPILED_PATH=${compiled_path})
|
|
endif(MINGW64)
|
|
list(APPEND env "GNC_MODULE_PATH=${_GNC_MODULE_PATH}")
|
|
list(APPEND env "GUILE=${GUILE_EXECUTABLE}")
|
|
|
|
if (NOT WIN32)
|
|
list(APPEND env "GUILE_LOAD_COMPILED_PATH=${LIBDIR_BUILD}/gnucash/scm/ccache/${GUILE_EFFECTIVE_VERSION}:${LIBDIR_BUILD}/gnucash/scm/ccache/${GUILE_EFFECTIVE_VERSION}/tests")
|
|
endif()
|
|
set(guile_load_paths "")
|
|
list(APPEND guile_load_paths ${CMAKE_CURRENT_SOURCE_DIR}/mod-foo)
|
|
list(APPEND guile_load_paths ${CMAKE_CURRENT_SOURCE_DIR}/mod-bar)
|
|
list(APPEND guile_load_paths ${CMAKE_CURRENT_SOURCE_DIR}/mod-baz)
|
|
if (WIN32)
|
|
list(APPEND guile_load_paths ${CMAKE_BINARY_DIR}/share/gnucash/scm)
|
|
endif()
|
|
set(guile_load_path "${guile_load_paths}")
|
|
if (MINGW64)
|
|
set(new_path "")
|
|
foreach(load_item ${guile_load_path})
|
|
string(REGEX REPLACE "^([A-Za-z]):" "/\\1" load_item ${load_item})
|
|
list(APPEND new_path ${load_item})
|
|
endforeach(load_item)
|
|
set(guile_load_path ${new_path})
|
|
endif (MINGW64)
|
|
if (WIN32 AND NOT MINGW64)
|
|
string(REPLACE ";" "\\\\;" GUILE_LOAD_PATH "${guile_load_path}")
|
|
else()
|
|
string(REPLACE ";" ":" GUILE_LOAD_PATH "${guile_load_path}")
|
|
endif()
|
|
list(APPEND env GUILE_LOAD_PATH=${GUILE_LOAD_PATH})
|
|
set(GUILE_ENV ${env} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
|
|
function(gnc_add_test _TARGET _SOURCE_FILES TEST_INCLUDE_VAR_NAME TEST_LIBS_VAR_NAME)
|
|
set(HAVE_ENV_VARS FALSE)
|
|
if (${ARGC} GREATER 4)
|
|
# Extra arguments are treated as environment variables
|
|
set(HAVE_ENV_VARS TRUE)
|
|
endif()
|
|
set(TEST_INCLUDE_DIRS ${${TEST_INCLUDE_VAR_NAME}})
|
|
set(TEST_LIBS ${${TEST_LIBS_VAR_NAME}})
|
|
set_source_files_properties (${_SOURCE_FILES} PROPERTIES OBJECT_DEPENDS ${CONFIG_H})
|
|
add_executable(${_TARGET} EXCLUDE_FROM_ALL ${_SOURCE_FILES})
|
|
target_link_libraries(${_TARGET} ${TEST_LIBS})
|
|
target_include_directories(${_TARGET} PRIVATE ${TEST_INCLUDE_DIRS})
|
|
if (${HAVE_ENV_VARS})
|
|
add_test(${_TARGET} ${CMAKE_COMMAND} -E env "GNC_UNINSTALLED=YES;GNC_BUILDDIR=${CMAKE_BINARY_DIR};${ARGN}"
|
|
${CMAKE_BINARY_DIR}/bin/${_TARGET}
|
|
)
|
|
set_tests_properties(${_TARGET} PROPERTIES ENVIRONMENT "GNC_UNINSTALLED=YES;GNC_BUILDDIR=${CMAKE_BINARY_DIR};${ARGN}")
|
|
else()
|
|
add_test(NAME ${_TARGET} COMMAND ${_TARGET})
|
|
set_tests_properties(${_TARGET} PROPERTIES ENVIRONMENT "GNC_UNINSTALLED=YES;GNC_BUILDDIR=${CMAKE_BINARY_DIR}")
|
|
endif()
|
|
add_dependencies(check ${_TARGET})
|
|
endfunction()
|
|
|
|
function(gnc_add_test_with_guile _TARGET _SOURCE_FILES TEST_INCLUDE_VAR_NAME TEST_LIBS_VAR_NAME)
|
|
get_guile_env()
|
|
gnc_add_test(${_TARGET} "${_SOURCE_FILES}" "${TEST_INCLUDE_VAR_NAME}" "${TEST_LIBS_VAR_NAME}"
|
|
"${GUILE_ENV};${ARGN}"
|
|
)
|
|
endfunction()
|
|
|
|
|
|
function(gnc_add_scheme_test _TARGET _SOURCE_FILE)
|
|
add_test(${_TARGET} ${CMAKE_COMMAND} -E env
|
|
${GUILE_EXECUTABLE} --debug -c "(load-from-path \"${_TARGET}\")(exit (run-test))"
|
|
)
|
|
get_guile_env()
|
|
set_tests_properties(${_TARGET} PROPERTIES ENVIRONMENT "${GUILE_ENV};${ARGN}")
|
|
endfunction()
|
|
|
|
function(gnc_add_scheme_tests _SOURCE_FILES)
|
|
foreach(test_file ${_SOURCE_FILES})
|
|
get_filename_component(basename ${test_file} NAME_WE)
|
|
gnc_add_scheme_test(${basename} ${test_file})
|
|
endforeach()
|
|
endfunction()
|
|
|
|
function(gnc_gtest_configure)
|
|
message(STATUS "Checking for GTEST")
|
|
if (NOT DEFINED ${GTEST_ROOT})
|
|
set(GTEST_ROOT $ENV{GTEST_ROOT})
|
|
endif()
|
|
if (NOT DEFINED ${GMOCK_ROOT})
|
|
set(GMOCK_ROOT $ENV{GMOCK_ROOT})
|
|
endif()
|
|
find_path(GTEST_INCLUDE_DIR gtest/gtest.h
|
|
HINTS ${GTEST_ROOT}/include ${GMOCK_ROOT}/gtest/include /usr/include)
|
|
find_path(GTEST_SRC_DIR src/gtest-all.cc
|
|
HINTS ${GTEST_ROOT} ${GMOCK_ROOT}/gtest /usr/src/gtest)
|
|
find_library(GTEST_SHARED_LIB gtest)
|
|
find_library(GTEST_MAIN_LIB gtest_main)
|
|
if ((GTEST_SHARED_LIB OR GTEST_SRC_DIR) AND GTEST_INCLUDE_DIR)
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
find_package(Threads REQUIRED)
|
|
set(GTEST_FOUND YES CACHE INTERNAL "Found GTest")
|
|
if(GTEST_SHARED_LIB)
|
|
set(GTEST_LIB "${GTEST_SHARED_LIB};${GTEST_MAIN_LIB}" PARENT_SCOPE)
|
|
unset(GTEST_SRC_DIR CACHE)
|
|
else()
|
|
set(GTEST_SRC "${GTEST_SRC_DIR}/src/gtest_main.cc" PARENT_SCOPE)
|
|
set(GTEST_LIB "${CMAKE_BINARY_DIR}/common/test-core/libgtest.a" PARENT_SCOPE)
|
|
endif()
|
|
else()
|
|
message(FATAL_ERROR "GTEST not found. Please install it or set GTEST_ROOT or GMOCK_ROOT")
|
|
endif()
|
|
|
|
message(STATUS "Checking for GMOCK")
|
|
find_path(GMOCK_INCLUDE_DIR gmock/gmock.h
|
|
HINTS ${GMOCK_ROOT}/include /usr/include)
|
|
unset(GMOCK_SRC_DIR CACHE)
|
|
find_library(GMOCK_SHARED_LIB gmock)
|
|
find_library(GMOCK_MAIN_LIB gmock_main)
|
|
find_path(GMOCK_SRC_DIR src/gmock-all.cc
|
|
HINTS ${GMOCK_ROOT} /usr/src/gmock)
|
|
if (GMOCK_SRC_DIR)
|
|
set(GMOCK_MAIN_SRC_DIR "${GMOCK_SRC_DIR}/src")
|
|
else()
|
|
find_path(GMOCK_SRC_DIR gmock-all.cc
|
|
HINTS ${GMOCK_ROOT} /usr/src/gmock)
|
|
if (GMOCK_SRC_DIR)
|
|
set(GMOCK_MAIN_SRC_DIR "${GMOCK_SRC_DIR}")
|
|
endif()
|
|
endif()
|
|
if (GMOCK_INCLUDE_DIR AND (GMOCK_SHARED_LIB OR GMOCK_SRC_DIR))
|
|
set(GMOCK_FOUND YES PARENT_SCOPE)
|
|
if(GMOCK_SHARED_LIB)
|
|
set(GMOCK_LIB "${GMOCK_SHARED_LIB};${GMOCK_MAIN_LIB}" PARENT_SCOPE)
|
|
unset(GMOCK_SRC_DIR CACHE)
|
|
else()
|
|
set(GMOCK_SRC "${GMOCK_MAIN_SRC_DIR}/gmock-all.cc" PARENT_SCOPE)
|
|
set(GMOCK_LIB "${CMAKE_BINARY_DIR}/common/test-core/libgmock.a" PARENT_SCOPE)
|
|
endif()
|
|
else()
|
|
message(FATAL_ERROR "GMOCK not found. Please install it or set GMOCK_ROOT")
|
|
endif()
|
|
endfunction()
|