diff --git a/CMakeLists.txt b/CMakeLists.txt index 13632ae99a..ae4e82bea6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -91,7 +91,10 @@ IF(GNC_BUILD_AS_INSTALL) ENDIF() SET(SHELL_FROM_ENV $ENV{SHELL}) -SET(SHELL bin/bash) +SET(SHELL /bin/bash) +IF (WIN32) + SET(SHELL ${CMAKE_PREFIX_PATH}/mingw/msys/1.0/bin/bash.exe) +ENDIF() IF (SHELL_FROM_ENV) # Replacing this with IF ($ENV{SHELL}) doesn't work. SET(SHELL ${SHELL_FROM_ENV}) ENDIF() @@ -224,16 +227,10 @@ IF (GUILE2_FOUND) # found guile-2.0 ADD_DEFINITIONS (-DHAVE_GUILE20) SET(HAVE_GUILE2 TRUE) SET(GUILE_EFFECTIVE_VERSION 2.0) - # We also need to look up the executable - FIND_PROGRAM (GUILE_EXECUTABLE guile) - FIND_PROGRAM (GUILD_EXECUTABLE guild) - SET(GUILE_INCLUDE_DIRS ${GUILE2_INCLUDE_DIRS}) SET(GUILE_LDFLAGS ${GUILE2_LDFLAGS}) - IF (NOT GUILE_EXECUTABLE) - MESSAGE (SEND_ERROR "The guile executable was not found, but is required. Please set GUILE_EXECUTABLE.") - ENDIF (NOT GUILE_EXECUTABLE) + FIND_PROGRAM (GUILD_EXECUTABLE guild) IF (NOT GUILD_EXECUTABLE) MESSAGE (SEND_ERROR "The guild executable was not found, but is required. Please set GUILD_EXECUTABLE.") ENDIF (NOT GUILD_EXECUTABLE) @@ -245,13 +242,18 @@ ELSE() MESSAGE (SEND_ERROR "Neither guile 1.8 nor guile 2.0 where find. Please set PKG_CONFIG_PATH one of these is found.") ENDIF(NOT GUILE1_FOUND) - SET(GUILE_INCLUDE_DIRS ${GUILE1_INCLUDE_DIRS}) - SET(GUILE_LDFLAGS ${GUILE1_LDFLAGS}) SET(HAVE_GUILE1 TRUE) SET(GUILE_EFFECTIVE_VERSION 1.8) + SET(GUILE_INCLUDE_DIRS ${GUILE1_INCLUDE_DIRS}) + SET(GUILE_LDFLAGS ${GUILE1_LDFLAGS}) MESSAGE(STATUS "Using guile-1.8.x") ENDIF() +FIND_PROGRAM (GUILE_EXECUTABLE guile) +IF (NOT GUILE_EXECUTABLE) + MESSAGE (SEND_ERROR "The guile executable was not found, but is required. Please set GUILE_EXECUTABLE.") +ENDIF (NOT GUILE_EXECUTABLE) + # Qt IF (WITH_CUTECASH) SET (QT_MIN_VERSION "4.5.0") @@ -402,7 +404,7 @@ ADD_CUSTOM_TARGET(check scm-test-core scm-test-report-system scm-standard-reports-2 scm-test-standard-reports foo gncmodfoo baz gncmodbaz bar gncmodbar gncmod_agedver gncmod_incompatdep - gncmod_futuremodsys + gncmod_futuremodsys test-core-guile ) IF (NOT WIN32) ADD_DEPENDENCIES(check gncmod-backend-xml-link) diff --git a/src/backend/dbi/test/CMakeLists.txt b/src/backend/dbi/test/CMakeLists.txt index d3e7c800d6..0871be65f0 100644 --- a/src/backend/dbi/test/CMakeLists.txt +++ b/src/backend/dbi/test/CMakeLists.txt @@ -20,12 +20,15 @@ SET(test_dbi_backend_SOURCES test-dbi-stuff.c ) -GNC_ADD_TEST(test-backend-dbi "${test_dbi_backend_SOURCES}" - BACKEND_DBI_TEST_INCLUDE_DIRS BACKEND_DBI_TEST_LIBS -) +# This test does not work on Win32 +IF (NOT WIN32) + GNC_ADD_TEST(test-backend-dbi "${test_dbi_backend_SOURCES}" + BACKEND_DBI_TEST_INCLUDE_DIRS BACKEND_DBI_TEST_LIBS + ) -TARGET_COMPILE_DEFINITIONS(test-backend-dbi PRIVATE - TEST_MYSQL_URL=\"${TEST_MYSQL_URL}\" - TEST_PGSQL_URL=\"${TEST_PGSQL_URL}\" - DBI_TEST_XML_FILENAME=\"${CMAKE_CURRENT_SOURCE_DIR}/test-dbi.xml\" -) \ No newline at end of file + TARGET_COMPILE_DEFINITIONS(test-backend-dbi PRIVATE + TEST_MYSQL_URL=\"${TEST_MYSQL_URL}\" + TEST_PGSQL_URL=\"${TEST_PGSQL_URL}\" + DBI_TEST_XML_FILENAME=\"${CMAKE_CURRENT_SOURCE_DIR}/test-dbi.xml\" + ) +ENDIF() \ No newline at end of file diff --git a/src/cmake_modules/GncAddTest.cmake b/src/cmake_modules/GncAddTest.cmake index 3284ce8135..9692c5e019 100644 --- a/src/cmake_modules/GncAddTest.cmake +++ b/src/cmake_modules/GncAddTest.cmake @@ -1,4 +1,42 @@ + +FUNCTION(GET_GUILE_ENV) + SET(_GNC_MODULE_PATH ${CMAKE_BINARY_DIR}/lib:${CMAKE_BINARY_DIR}/lib/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}") + LIST(APPEND env "GUILE_WARN_DEPRECATED=no") + LIST(APPEND env "GNC_MODULE_PATH=${_GNC_MODULE_PATH}") + 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 (NOT WIN32) + LIST(APPEND env "GUILE_LOAD_COMPILED_PATH=${CMAKE_BINARY_DIR}/lib/gnucash/scm/ccache/2.0") + 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 (WIN32) + 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) @@ -14,7 +52,7 @@ FUNCTION(GNC_ADD_TEST _TARGET _SOURCE_FILES TEST_INCLUDE_VAR_NAME TEST_LIBS_VAR_ IF (${HAVE_ENV_VARS}) SET(CMAKE_COMMAND_TMP "") IF (${CMAKE_VERSION} VERSION_GREATER 3.1) - SET(CMAKE_COMMAND_TMP ${CMAKE_COMMAND} -E env) + SET(CMAKE_COMMAND_TMP ${CMAKE_COMMAND} -E env "${ARGN}") ENDIF() ADD_TEST(${_TARGET} ${CMAKE_COMMAND_TMP} ${CMAKE_BINARY_DIR}/bin/${_TARGET} @@ -27,16 +65,9 @@ FUNCTION(GNC_ADD_TEST _TARGET _SOURCE_FILES TEST_INCLUDE_VAR_NAME TEST_LIBS_VAR_ ENDFUNCTION() FUNCTION(GNC_ADD_TEST_WITH_GUILE _TARGET _SOURCE_FILES TEST_INCLUDE_VAR_NAME TEST_LIBS_VAR_NAME) - SET(_GNC_MODULE_PATH ${CMAKE_BINARY_DIR}/lib:${CMAKE_BINARY_DIR}/lib/gnucash) + GET_GUILE_ENV() GNC_ADD_TEST(${_TARGET} "${_SOURCE_FILES}" "${TEST_INCLUDE_VAR_NAME}" "${TEST_LIBS_VAR_NAME}" - GNC_UNINSTALLED=yes - GNC_BUILDDIR=${CMAKE_BINARY_DIR} - GUILE_WARN_DEPRECATED=no - GNC_MODULE_PATH=${_GNC_MODULE_PATH} - DYLD_LIBRARY_PATH=${_GNC_MODULE_PATH} - LD_LIBRARY_PATH=${_GNC_MODULE_PATH} - GUILE_LOAD_COMPILED_PATH=${CMAKE_BINARY_DIR}/lib/gnucash/scm/ccache/2.0 - ${ARGN} + "${GUILE_ENV};${ARGN}" ) ENDFUNCTION() @@ -46,19 +77,9 @@ FUNCTION(GNC_ADD_SCHEME_TEST _TARGET _SOURCE_FILE) IF (${CMAKE_VERSION} VERSION_GREATER 3.1) SET(CMAKE_COMMAND_TMP ${CMAKE_COMMAND} -E env) ENDIF() - SET(_GNC_MODULE_PATH ${CMAKE_BINARY_DIR}/lib:${CMAKE_BINARY_DIR}/lib/gnucash) - SET(GUILE_ENV - GNC_UNINSTALLED=yes - GNC_BUILDDIR=${CMAKE_BINARY_DIR} - GUILE_WARN_DEPRECATED=no - GNC_MODULE_PATH=${_GNC_MODULE_PATH} - DYLD_LIBRARY_PATH=${_GNC_MODULE_PATH} - LD_LIBRARY_PATH=${_GNC_MODULE_PATH} - GUILE_LOAD_COMPILED_PATH=${CMAKE_BINARY_DIR}/lib/gnucash/scm/ccache/2.0 - ${ARGN} - ) ADD_TEST(${_TARGET} ${CMAKE_COMMAND_TMP} ${GUILE_EXECUTABLE} --debug -l ${CMAKE_CURRENT_SOURCE_DIR}/${_SOURCE_FILE} -c "(exit (run-test))" ) - SET_TESTS_PROPERTIES(${_TARGET} PROPERTIES ENVIRONMENT "${GUILE_ENV}") + GET_GUILE_ENV() + SET_TESTS_PROPERTIES(${_TARGET} PROPERTIES ENVIRONMENT "${GUILE_ENV};${ARGN}") ENDFUNCTION() diff --git a/src/engine/test/CMakeLists.txt b/src/engine/test/CMakeLists.txt index b66c1bc9ef..d5be7e6063 100644 --- a/src/engine/test/CMakeLists.txt +++ b/src/engine/test/CMakeLists.txt @@ -42,8 +42,11 @@ SET(test_engine_SOURCES utest-Transaction.c ) -ADD_ENGINE_TEST(test-engine "${test_engine_SOURCES}") -TARGET_COMPILE_OPTIONS(test-engine PRIVATE -Wno-write-strings) +# This test does not run on Win32 +IF (NOT WIN32) + ADD_ENGINE_TEST(test-engine "${test_engine_SOURCES}") + TARGET_COMPILE_OPTIONS(test-engine PRIVATE -Wno-write-strings) +ENDIF() ADD_ENGINE_TEST(test-account-object test-account-object.c) ADD_ENGINE_TEST(test-group-vs-book test-group-vs-book.c) @@ -63,6 +66,7 @@ ADD_ENGINE_TEST(test-vendor test-vendor.c) ############################ # This is a C test that needs GUILE environment variables set. +# It does not pass on Win32. GNC_ADD_TEST_WITH_GUILE(test-scm-query test-scm-query.c ENGINE_TEST_INCLUDE_DIRS ENGINE_TEST_LIBS) ############################ diff --git a/src/gnc-module/test/CMakeLists.txt b/src/gnc-module/test/CMakeLists.txt index b9de8a4996..8bbd424f4f 100644 --- a/src/gnc-module/test/CMakeLists.txt +++ b/src/gnc-module/test/CMakeLists.txt @@ -1,6 +1,4 @@ -# TESTCOUNTS: { dir: gnc-module/test, test_count: 12 } - ADD_SUBDIRECTORY(mod-foo) ADD_SUBDIRECTORY(mod-bar) ADD_SUBDIRECTORY(mod-baz) @@ -21,45 +19,30 @@ MACRO(ADD_GNC_MODULE_TEST _TARGET _SOURCE_FILES) GNC_ADD_TEST(${_TARGET} "${_SOURCE_FILES}" GNC_MODULE_TEST_INCLUDE_DIRS GNC_MODULE_TEST_LIBS) ENDMACRO() -SET(_GNC_MODULE_PATH ${CMAKE_BINARY_DIR}/lib:${CMAKE_BINARY_DIR}/lib/gnucash) -SET(GUILE_ENV - GNC_UNINSTALLED=yes - GNC_BUILDDIR=${CMAKE_BINARY_DIR} - GUILE_WARN_DEPRECATED=no - GNC_MODULE_PATH=${_GNC_MODULE_PATH} - DYLD_LIBRARY_PATH=${_GNC_MODULE_PATH} - LD_LIBRARY_PATH=${_GNC_MODULE_PATH} - GUILE_LOAD_COMPILED_PATH=${CMAKE_BINARY_DIR}/lib/gnucash/scm/ccache/2.0 -) - - FUNCTION(RUN_TEST_WITH_GUILE _TARGET _SOURCE_FILE) + GET_GUILE_ENV() SET(CMAKE_COMMAND_TMP "") IF (${CMAKE_VERSION} VERSION_GREATER 3.1) - SET(CMAKE_COMMAND_TMP ${CMAKE_COMMAND} -E env) + SET(CMAKE_COMMAND_TMP ${CMAKE_COMMAND} -E env "${GUILE_ENV}") ENDIF() ADD_TEST(NAME ${_TARGET} COMMAND ${CMAKE_COMMAND_TMP} ${GUILE_EXECUTABLE} -s ${_SOURCE_FILE} ) + SET_TESTS_PROPERTIES(${_TARGET} PROPERTIES ENVIRONMENT "${GUILE_ENV};${ARGN}") ENDFUNCTION() -GNC_ADD_TEST_WITH_GUILE(test-load-c test-load-c.c GNC_MODULE_TEST_INCLUDE_DIRS GNC_MODULE_TEST_LIBS - GUILE_LOAD_PATH=${CMAKE_CURRENT_SOURCE_DIR}/mod-foo -) +GNC_ADD_TEST_WITH_GUILE(test-load-c test-load-c.c GNC_MODULE_TEST_INCLUDE_DIRS GNC_MODULE_TEST_LIBS) + +RUN_TEST_WITH_GUILE(test-load-scm ${CMAKE_CURRENT_SOURCE_DIR}/test-load-scm.in) + +RUN_TEST_WITH_GUILE(test-load-deps ${CMAKE_CURRENT_SOURCE_DIR}/test-load-deps.in) -RUN_TEST_WITH_GUILE(test-load-scm ${CMAKE_CURRENT_SOURCE_DIR}/test-load-scm.in - GUILE_LOAD_PATH=${CMAKE_CURRENT_SOURCE_DIR}/mod-foo -) -RUN_TEST_WITH_GUILE(test-load-deps ${CMAKE_CURRENT_SOURCE_DIR}/test-load-deps.in - GUILE_LOAD_PATH=${CMAKE_CURRENT_SOURCE_DIR}/mod-foo:${CMAKE_CURRENT_SOURCE_DIR}/mod-baz -) RUN_TEST_WITH_GUILE(test-scm-init ${CMAKE_CURRENT_SOURCE_DIR}/test-scm-init.in) -RUN_TEST_WITH_GUILE(test-scm-multi ${CMAKE_CURRENT_SOURCE_DIR}/test-scm-multi.in - GUILE_LOAD_PATH=${CMAKE_CURRENT_SOURCE_DIR}/mod-foo:${CMAKE_CURRENT_SOURCE_DIR}/mod-bar -) +RUN_TEST_WITH_GUILE(test-scm-multi ${CMAKE_CURRENT_SOURCE_DIR}/test-scm-multi.in) + RUN_TEST_WITH_GUILE(test-scm-dynload ${CMAKE_CURRENT_SOURCE_DIR}/test-scm-dynload.in) GNC_ADD_TEST_WITH_GUILE(test-modsysver test-modsysver.c @@ -72,9 +55,13 @@ GNC_ADD_TEST_WITH_GUILE(test-agedver test-agedver.c GNC_MODULE_TEST_INCLUDE_DIRS GNC_MODULE_TEST_LIBS ) +SET(_LIBDIR ${CMAKE_BINARY_DIR}/lib) +IF (WIN32) + SET(_LIBDIR ${CMAKE_BINARY_DIR}/bin) +ENDIF() GNC_ADD_TEST(test-dynload test-dynload.c GNC_MODULE_TEST_INCLUDE_DIRS GNC_MODULE_TEST_LIBS - LIBDIR=${CMAKE_BINARY_DIR}/lib + LIBDIR=${_LIBDIR} ) SET(GUILE ${GUILE_EXECUTABLE}) @@ -82,22 +69,19 @@ CONFIGURE_FILE(test-gwrapped-c.in test-gwrapped-c) CONFIGURE_FILE(test-scm-module.in test-scm-module) FUNCTION(RUN_GUILE_SHELL_TEST _TARGET _SOURCE_FILE) + GET_GUILE_ENV() SET(CMAKE_COMMAND_TMP "") IF (${CMAKE_VERSION} VERSION_GREATER 3.1) - SET(CMAKE_COMMAND_TMP ${CMAKE_COMMAND} -E env) + SET(CMAKE_COMMAND_TMP ${CMAKE_COMMAND} -E env "${GUILE_ENV}") ENDIF() ADD_TEST(NAME ${_TARGET} COMMAND ${CMAKE_COMMAND_TMP} ${SHELL} ${_SOURCE_FILE} ) - SET_TESTS_PROPERTIES(${_TARGET} PROPERTIES ENVIRONMENT "${GUILE_ENV};${ARGN}") + SET_TESTS_PROPERTIES(${_TARGET} PROPERTIES ENVIRONMENT "${GUILE_ENV}") ENDFUNCTION() -RUN_GUILE_SHELL_TEST(test-gwrapped-c ${CMAKE_CURRENT_BINARY_DIR}/test-gwrapped-c - GUILE_LOAD_PATH=${CMAKE_CURRENT_SOURCE_DIR}/mod-foo -) +RUN_GUILE_SHELL_TEST(test-gwrapped-c ${CMAKE_CURRENT_BINARY_DIR}/test-gwrapped-c) -RUN_GUILE_SHELL_TEST(test-scm-module ${CMAKE_CURRENT_BINARY_DIR}/test-scm-module - GUILE_LOAD_PATH=${CMAKE_CURRENT_SOURCE_DIR}/mod-foo -) +RUN_GUILE_SHELL_TEST(test-scm-module ${CMAKE_CURRENT_BINARY_DIR}/test-scm-module) diff --git a/src/gnc-module/test/test-dynload.c b/src/gnc-module/test/test-dynload.c index def77bf96e..fe2718bc4f 100644 --- a/src/gnc-module/test/test-dynload.c +++ b/src/gnc-module/test/test-dynload.c @@ -53,7 +53,14 @@ guile_main(void *closure, int argc, char ** argv) g_test_message(" test-dynload.c: testing dynamic linking of libgnc-module ..."); #ifdef G_OS_WIN32 /* MinGW builds libgnc-module-0.dll */ - modpath = g_module_build_path ("../.libs", "gnc-module-0"); + if (libdir == NULL) + { + modpath = g_module_build_path ("../.libs", "gnc-module-0"); + } + else + { + modpath = g_module_build_path (libdir, "gnc-module"); + } #elif defined(PLATFORM_OSX) /* We build libgnc-module as a shared library for testing, and on OSX * that means that g_module_build_path (), which uses ".so", doesn't diff --git a/src/import-export/csv-imp/test/CMakeLists.txt b/src/import-export/csv-imp/test/CMakeLists.txt index 6dd3fc3cd8..c33f23babf 100644 --- a/src/import-export/csv-imp/test/CMakeLists.txt +++ b/src/import-export/csv-imp/test/CMakeLists.txt @@ -15,8 +15,11 @@ SET(test_csv_imp_SOURCES utest-gnc-csv-model.c ) -GNC_ADD_TEST(test-csv-imp "${test_csv_imp_SOURCES}" - CSV_IMP_TEST_INCLUDE_DIRS CSV_IMP_TEST_LIBS - SRCDIR=${CMAKE_CURRENT_SOURCE_DIR} -) +# This test does not run in Win32 +IF (NOT WIN32) + GNC_ADD_TEST(test-csv-imp "${test_csv_imp_SOURCES}" + CSV_IMP_TEST_INCLUDE_DIRS CSV_IMP_TEST_LIBS + SRCDIR=${CMAKE_CURRENT_SOURCE_DIR} + ) +ENDIF() diff --git a/src/libqof/qof/test/CMakeLists.txt b/src/libqof/qof/test/CMakeLists.txt index 61fdc68efc..51b0f490db 100644 --- a/src/libqof/qof/test/CMakeLists.txt +++ b/src/libqof/qof/test/CMakeLists.txt @@ -22,5 +22,10 @@ SET(test_qof_SOURCES ${CMAKE_SOURCE_DIR}/src/test-core/unittest-support.c ) -GNC_ADD_TEST(test-qof "${test_qof_SOURCES}" TEST_QOF_INCLUDE_DIRS TEST_QOF_LIBS) -TARGET_COMPILE_DEFINITIONS(test-qof PRIVATE TESTPROG=test_qof) +# This test does not on Win32. Worse, it causes a dialog box to +# pop up due to an assertion. This interferes with running the tests +# unattended. +IF (NOT WIN32) + GNC_ADD_TEST(test-qof "${test_qof_SOURCES}" TEST_QOF_INCLUDE_DIRS TEST_QOF_LIBS) + TARGET_COMPILE_DEFINITIONS(test-qof PRIVATE TESTPROG=test_qof) +ENDIF()