set(test_core_SOURCES
  test-stuff.c
  unittest-support.c
)

set(test_core_noinst_HEADERS
  test-stuff.h
  unittest-support.h
)

include_directories(
  ${CMAKE_BINARY_DIR}/common
  ${CMAKE_SOURCE_DIR}/common
  ${CMAKE_SOURCE_DIR}/libgnucash/engine
  ${CMAKE_SOURCE_DIR}/common/test-core

  ${GUILE_INCLUDE_DIRS}
)

set_dist_list(test_core_DIST ${test_core_SOURCES} ${test_core_noinst_HEADERS} CMakeLists.txt
        unittest-support.i unittest-support.scm)

add_library(test-core STATIC ${test_core_SOURCES} ${test_core_noinst_HEADERS})
target_link_libraries(test-core gnc-engine PkgConfig::GLIB2)
if (UNIX)
  target_compile_options(test-core PRIVATE -fPIC)
endif()

# Command to generate the swig-unittest-support-guile.c wrapper file
gnc_add_swig_guile_command (swig-unittest-support-guile-c
    SWIG_UNITTEST_SUPPORT_GUILE_C swig-unittest-support-guile.c
    ${CMAKE_CURRENT_SOURCE_DIR}/unittest-support.i "" ${test_core_HEADERS}
)

# Command to generate the swig-unittest-support-python.c wrapper file
gnc_add_swig_python_command (swig-unittest-support-python
    SWIG_UNITTEST_SUPPORT_PYTHON_C SWIG_UNITTEST_SUPPORT_PYTHON_PY
    swig-unittest-support-python.c unittest_support.py
    ${CMAKE_CURRENT_SOURCE_DIR}/unittest-support.i ""
)

add_library(test-core-guile ${SWIG_UNITTEST_SUPPORT_GUILE_C})
target_link_libraries(test-core-guile test-core ${GUILE_LDFLAGS} PkgConfig::GLIB2)
add_dependencies (test-core-guile swig-unittest-support-guile-c )

if (WITH_PYTHON)
  add_library(unittest_support MODULE ${SWIG_UNITTEST_SUPPORT_PYTHON_C})
  target_link_libraries(unittest_support test-core ${PYTHON_LIBRARIES})
  target_include_directories(unittest_support PRIVATE ${PYTHON_INCLUDE_DIRS})
  set_target_properties(unittest_support PROPERTIES PREFIX "_")
  if (HAVE_STRINGOP_TRUNCATION)
    target_compile_options(unittest_support PRIVATE -Wno-error=stringop-truncation)
  endif()
endif()

set(test_core_SCHEME unittest-support.scm)

set(GUILE_OUTPUT_DIR   tests)
set(GUILE_DEPENDS      test-core-guile)


gnc_add_scheme_test_targets(scm-test-core
    SOURCES ${test_core_SCHEME}
    OUTPUT_DIR ${GUILE_OUTPUT_DIR}
    DEPENDS "${GUILE_DEPENDS}")

add_dependencies(check scm-test-core)


if (GTEST_SRC_DIR)
  # in contrast to GoogleTest build system libraries libgtest.a and libgtest_main.a
  # are combined to one library libtest.a here
  add_library(gtest STATIC  ${lib_gtest_SOURCES})
  if(APPLE)
    target_compile_options(gtest PRIVATE -Wno-missing-prototypes)
  else()
    target_compile_options(gtest PRIVATE -Wno-missing-declarations)
  endif()
  target_link_libraries(gtest Threads::Threads)
  target_include_directories(gtest PUBLIC ${GTEST_INCLUDE_DIR} ${GTEST_SRC_DIR})
else()
  add_library(gtest UNKNOWN IMPORTED GLOBAL)
  set_target_properties(gtest PROPERTIES
    IMPORTED_LOCATION ${GTEST_SHARED_LIB}
    INTERFACE_INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR}
    INTERFACE_LINK_LIBRARIES ${GTEST_MAIN_LIB}
  )
endif()
if (GMOCK_SRC_DIR)
  set (lib_gmock_SOURCES ${GMOCK_SRC})
  add_library(gmock STATIC  ${lib_gmock_SOURCES})
  if (APPLE)
    target_compile_options(gmock PRIVATE -Wno-missing-prototypes)
  else()
    target_compile_options(gmock PRIVATE -Wno-missing-declarations)
  endif()
  target_include_directories(gmock PUBLIC
    ${GTEST_INCLUDE_DIR} ${GTEST_SRC_DIR}
    ${GMOCK_INCLUDE_DIR} ${GMOCK_SRC_DIR})
endif()

add_executable(jenny  ${CMAKE_SOURCE_DIR}/borrowed/jenny/jenny.c)
