1 2 3function(get_guile_env) 4 set(_GNC_MODULE_PATH ${LIBDIR_BUILD}:${LIBDIR_BUILD}/gnucash) 5 if (WIN32) 6 set(_GNC_MODULE_PATH ${CMAKE_BINARY_DIR}/bin) 7 endif() 8 set(env "") 9 list(APPEND env "GNC_UNINSTALLED=yes") 10 list(APPEND env "GNC_BUILDDIR=${CMAKE_BINARY_DIR}") 11 if (APPLE) 12 list(APPEND env "DYLD_LIBRARY_PATH=${_GNC_MODULE_PATH}:$ENV{DYLD_LIBRARY_PATH}") 13 endif() 14 if (UNIX) 15 list(APPEND env "LD_LIBRARY_PATH=${_GNC_MODULE_PATH}:$ENV{LD_LIBRARY_PATH}") 16 endif() 17 if (MINGW64) 18 set(fpath "") 19 set(path $ENV{PATH}) 20 list(INSERT path 0 ${CMAKE_BINARY_DIR}/bin) 21 foreach(dir ${path}) 22 string(REGEX REPLACE "^([A-Za-z]):" "/\\1" dir ${dir}) 23 string(REGEX REPLACE "\\\\" "/" dir ${dir}) 24 set(fpath "${fpath}${dir}:") 25 endforeach(dir) 26 list(APPEND env "PATH=${fpath}") 27 set(compiled_path "${CMAKE_BINARY_DIR}/${GUILE_REL_SITECCACHEDIR}") 28 string(REGEX REPLACE "^([A-Za-z]):" "/\\1" compiled_path ${compiled_path}) 29 list(APPEND env GUILE_LOAD_COMPILED_PATH=${compiled_path}) 30 endif() 31 list(APPEND env "GNC_MODULE_PATH=${_GNC_MODULE_PATH}") 32 list(APPEND env "GUILE=${GUILE_EXECUTABLE}") 33 34 set(guile_load_paths "") 35 #list(APPEND guile_load_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITEDIR}") 36 list(APPEND guile_load_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITEDIR}/gnucash/deprecated") # Path to gnucash' deprecated modules 37 set(guile_load_path "${guile_load_paths}") 38 39 set(guile_load_compiled_paths "") 40 list(APPEND guile_load_compiled_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITECCACHEDIR}") 41 list(APPEND guile_load_compiled_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITECCACHEDIR}/gnucash/deprecated") 42 list(APPEND guile_load_compiled_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITECCACHEDIR}/tests") 43 set(guile_load_compiled_path "${guile_load_compiled_paths}") 44 45 if (MINGW64) 46 set(new_path "") 47 foreach(load_item ${guile_load_path}) 48 string(REGEX REPLACE "^([A-Za-z]):" "/\\1" load_item ${load_item}) 49 list(APPEND new_path ${load_item}) 50 endforeach(load_item) 51 set(guile_load_path ${new_path}) 52 53 set(new_path "") 54 foreach(load_item ${guile_load_compiled_path}) 55 string(REGEX REPLACE "^([A-Za-z]):" "/\\1" load_item ${load_item}) 56 list(APPEND new_path ${load_item}) 57 endforeach(load_item) 58 set(guile_load_compiled_path ${new_path}) 59 endif() 60 if (WIN32 AND NOT MINGW64) 61 string(REPLACE ";" "\\\\;" GUILE_LOAD_PATH "${guile_load_path}") 62 string(REPLACE ";" "\\\\;" GUILE_LOAD_COMPILED_PATH "${guile_load_compiled_path}") 63 else() 64 string(REPLACE ";" ":" GUILE_LOAD_PATH "${guile_load_path}") 65 string(REPLACE ";" ":" GUILE_LOAD_COMPILED_PATH "${guile_load_compiled_path}") 66 endif() 67 list(APPEND env "GUILE_LOAD_PATH=${GUILE_LOAD_PATH}") 68 list(APPEND env "GUILE_LOAD_COMPILED_PATH=${GUILE_LOAD_COMPILED_PATH}") 69 list(APPEND env "GUILE_WARN_DEPRECATED=detailed") 70 set(GUILE_ENV ${env} PARENT_SCOPE) 71endfunction() 72 73 74function(gnc_add_test _TARGET _SOURCE_FILES TEST_INCLUDE_VAR_NAME TEST_LIBS_VAR_NAME) 75 set(HAVE_ENV_VARS FALSE) 76 if (${ARGC} GREATER 4) 77 # Extra arguments are treated as environment variables 78 set(HAVE_ENV_VARS TRUE) 79 endif() 80 set(TEST_INCLUDE_DIRS ${${TEST_INCLUDE_VAR_NAME}}) 81 set(TEST_LIBS ${${TEST_LIBS_VAR_NAME}}) 82 set_source_files_properties (${_SOURCE_FILES} PROPERTIES OBJECT_DEPENDS ${CONFIG_H}) 83 add_executable(${_TARGET} EXCLUDE_FROM_ALL ${_SOURCE_FILES}) 84 target_link_libraries(${_TARGET} ${TEST_LIBS}) 85 target_include_directories(${_TARGET} PRIVATE ${TEST_INCLUDE_DIRS}) 86 if (${HAVE_ENV_VARS}) 87 add_test(${_TARGET} ${CMAKE_COMMAND} -E env "GNC_UNINSTALLED=YES;GNC_BUILDDIR=${CMAKE_BINARY_DIR};${ARGN}" 88 ${CMAKE_BINARY_DIR}/bin/${_TARGET} 89 ) 90 set_tests_properties(${_TARGET} PROPERTIES ENVIRONMENT "GNC_UNINSTALLED=YES;GNC_BUILDDIR=${CMAKE_BINARY_DIR};${ARGN}") 91 else() 92 if (CMAKE_GENERATOR STREQUAL Xcode) 93 add_test(NAME ${_TARGET} COMMAND ${_TARGET} CONFIGURATIONS Debug;Release) 94 else() 95 add_test(NAME ${_TARGET} COMMAND ${_TARGET}) 96 endif() 97 set_tests_properties(${_TARGET} PROPERTIES ENVIRONMENT "GNC_UNINSTALLED=YES;GNC_BUILDDIR=${CMAKE_BINARY_DIR}") 98 endif() 99 add_dependencies(check ${_TARGET}) 100endfunction() 101 102function(gnc_add_test_with_guile _TARGET _SOURCE_FILES TEST_INCLUDE_VAR_NAME TEST_LIBS_VAR_NAME) 103 get_guile_env() 104 gnc_add_test(${_TARGET} "${_SOURCE_FILES}" "${TEST_INCLUDE_VAR_NAME}" "${TEST_LIBS_VAR_NAME}" 105 "${GUILE_ENV};${ARGN}" 106 ) 107endfunction() 108 109 110function(gnc_add_scheme_test _TARGET _SOURCE_FILE) 111 add_test(${_TARGET} ${CMAKE_COMMAND} -E env 112 ${GUILE_EXECUTABLE} --debug -c "(load-from-path \"${_TARGET}\")(exit (run-test))" 113 ) 114 get_guile_env() 115 set_tests_properties(${_TARGET} PROPERTIES ENVIRONMENT "${GUILE_ENV};${ARGN}") 116endfunction() 117 118function(gnc_add_scheme_tests _SOURCE_FILES) 119 foreach(test_file ${_SOURCE_FILES}) 120 get_filename_component(basename ${test_file} NAME_WE) 121 gnc_add_scheme_test(${basename} ${test_file}) 122 endforeach() 123endfunction() 124 125function(gnc_gtest_configure) 126 message(STATUS "Checking for GTEST") 127 if (NOT DEFINED ${GTEST_ROOT}) 128 set(GTEST_ROOT $ENV{GTEST_ROOT}) 129 endif() 130 unset(GTEST_SRC_DIR CACHE) 131 if (GTEST_ROOT) 132 find_path(GTEST_SRC_DIR src/gtest-all.cc NO_CMAKE_SYSTEM_PATH 133 PATHS ${GTEST_ROOT}/googletest) 134 endif() 135 if (GTEST_SRC_DIR) 136 if (EXISTS ${GTEST_SRC_DIR}/include/gtest/gtest.h) 137 set(GTEST_INCLUDE_DIR ${GTEST_SRC_DIR}/include CACHE PATH "" FORCE) 138 else() 139 message(FATAL_ERROR "GTEST sources found, but it doesn't have 'gtest/gtest.h'") 140 endif() 141 else() 142 if (GTEST_ROOT) 143 message(FATAL_ERROR "GTEST sources not found in GTEST_ROOT") 144 endif() 145 find_path(GTEST_SRC_DIR src/gtest-all.cc 146 PATHS /usr/src/googletest/googletest) 147 if (GTEST_SRC_DIR) 148 find_path(GTEST_INCLUDE_DIR gtest/gtest.h NO_CMAKE_SYSTEM_PATH 149 PATHS ${GTEST_SRC_DIR}/include) 150 endif() 151 endif() 152 find_path(GTEST_INCLUDE_DIR gtest/gtest.h) 153 if (GTEST_SRC_DIR) 154 set(lib_gtest_SOURCES 155 "${GTEST_SRC_DIR}/src/gtest_main.cc" 156 "${GTEST_SRC_DIR}/src/gtest-all.cc" 157 PARENT_SCOPE) 158 else() 159 find_library(GTEST_SHARED_LIB gtest) 160 find_library(GTEST_MAIN_LIB gtest_main) 161 if (NOT (GTEST_SHARED_LIB AND GTEST_MAIN_LIB AND GTEST_INCLUDE_DIR)) 162 message(FATAL_ERROR "GTEST not found. Please install it or set GTEST_ROOT") 163 endif() 164 endif() 165 set(THREADS_PREFER_PTHREAD_FLAG ON) 166 find_package(Threads REQUIRED) 167 set(GTEST_FOUND YES CACHE INTERNAL "Found GTest") 168 169 message(STATUS "Checking for GMOCK") 170 unset(GMOCK_SRC_DIR CACHE) 171 if (GTEST_ROOT) 172 find_path(GMOCK_SRC_DIR src/gmock-all.cc NO_CMAKE_SYSTEM_PATH 173 PATHS ${GTEST_ROOT}/googlemock) 174 endif() 175 if (GMOCK_SRC_DIR) 176 if (EXISTS ${GMOCK_SRC_DIR}/include/gmock/gmock.h) 177 set(GMOCK_INCLUDE_DIR ${GMOCK_SRC_DIR}/include CACHE PATH "" FORCE) 178 else() 179 message(FATAL_ERROR "GMOCK sources found, but it doesn't have 'gmock/gmock.h'") 180 endif() 181 else() 182 if (GTEST_ROOT) 183 message(FATAL_ERROR "GMOCK sources not found in GTEST_ROOT") 184 endif() 185 find_path(GMOCK_SRC_DIR src/gmock-all.cc 186 PATHS /usr/src/googletest/googlemock) 187 if (GMOCK_SRC_DIR) 188 find_path(GMOCK_INCLUDE_DIR gmock/gmock.h NO_CMAKE_SYSTEM_PATH 189 PATHS ${GMOCK_SRC_DIR}/include) 190 endif() 191 endif() 192 find_path(GMOCK_INCLUDE_DIR gmock/gmock.h) 193 if (GMOCK_SRC_DIR) 194 set(GMOCK_SRC "${GMOCK_SRC_DIR}/src/gmock-all.cc" PARENT_SCOPE) 195 set(GMOCK_LIB "${CMAKE_BINARY_DIR}/common/test-core/libgmock.a" PARENT_SCOPE) 196 else() 197 find_library(GMOCK_SHARED_LIB gmock) 198 find_library(GMOCK_MAIN_LIB gmock_main) 199 if (GMOCK_MAIN_LIB AND GMOCK_SHARED_LIB AND GMOCK_INCLUDE_DIR) 200 set(GMOCK_LIB "${GMOCK_SHARED_LIB};${GMOCK_MAIN_LIB}" PARENT_SCOPE) 201 else() 202 message(FATAL_ERROR "GMOCK not found. Please install it or set GTEST_ROOT") 203 endif() 204 endif() 205 set(GMOCK_FOUND YES PARENT_SCOPE) 206endfunction() 207