Skip to content

Commit 35087f0

Browse files
committed
cmake: create separate CMakeLists.txt for tests
Our CMakeLists.txt is very unwieldy in its current size, spanning more than 700 lines of code. Furthermore, it has several issues regarding scoping, where for example some defines, includes, etc. from our test suite are also applied to our normal library code. To fix this, we can separate out build instructions for our tests and move them into their own CMakeLists.txt in the "tests" directory. This reduced complexity of the root CMakeLists.txt file and fixes the issues regarding leaking build context from tests into the library.
1 parent 3267115 commit 35087f0

File tree

2 files changed

+67
-64
lines changed

2 files changed

+67
-64
lines changed

CMakeLists.txt

Lines changed: 1 addition & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -677,71 +677,8 @@ INSTALL(FILES include/git2.h DESTINATION ${INCLUDE_INSTALL_DIR} )
677677

678678
# Tests
679679
IF (BUILD_CLAR)
680-
FIND_PACKAGE(PythonInterp)
681-
682-
IF(NOT PYTHONINTERP_FOUND)
683-
MESSAGE(FATAL_ERROR "Could not find a python interpeter, which is needed to build the tests. "
684-
"Make sure python is available, or pass -DBUILD_CLAR=OFF to skip building the tests")
685-
ENDIF()
686-
687-
SET(CLAR_FIXTURES "${CMAKE_CURRENT_SOURCE_DIR}/tests/resources/")
688-
SET(CLAR_PATH "${CMAKE_CURRENT_SOURCE_DIR}/tests")
689-
ADD_DEFINITIONS(-DCLAR_FIXTURE_PATH=\"${CLAR_FIXTURES}\")
690-
ADD_DEFINITIONS(-DCLAR_TMPDIR=\"libgit2_tests\")
691-
692-
INCLUDE_DIRECTORIES(${CLAR_PATH})
693-
FILE(GLOB_RECURSE SRC_TEST ${CLAR_PATH}/*/*.c ${CLAR_PATH}/*/*.h)
694-
SET(SRC_CLAR "${CLAR_PATH}/main.c" "${CLAR_PATH}/clar_libgit2.c" "${CLAR_PATH}/clar_libgit2_trace.c" "${CLAR_PATH}/clar_libgit2_timer.c" "${CLAR_PATH}/clar.c")
695-
696-
IF(MSVC_IDE)
697-
LIST(APPEND SRC_CLAR "${CLAR_PATH}/precompiled.c")
698-
ENDIF()
699-
700-
ADD_CUSTOM_COMMAND(
701-
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/clar.suite
702-
COMMAND ${PYTHON_EXECUTABLE} generate.py -o "${CMAKE_CURRENT_BINARY_DIR}" -f -xonline -xstress .
703-
DEPENDS ${SRC_TEST}
704-
WORKING_DIRECTORY ${CLAR_PATH}
705-
)
706-
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
707-
708-
SET_SOURCE_FILES_PROPERTIES(
709-
${CLAR_PATH}/clar.c
710-
PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clar.suite)
711-
712-
ADD_EXECUTABLE(libgit2_clar ${SRC_CLAR} ${SRC_TEST} $<TARGET_OBJECTS:git2internal>)
713-
714-
IF (${CMAKE_VERSION} VERSION_GREATER 2.8.11)
715-
TARGET_INCLUDE_DIRECTORIES(libgit2_clar PRIVATE src PUBLIC include)
716-
ENDIF()
717-
718-
TARGET_LINK_LIBRARIES(libgit2_clar ${COREFOUNDATION_DIRS})
719-
TARGET_LINK_LIBRARIES(libgit2_clar ${SECURITY_DIRS})
720-
TARGET_LINK_LIBRARIES(libgit2_clar ${SSL_LIBRARIES})
721-
TARGET_LINK_LIBRARIES(libgit2_clar ${SSH_LIBRARIES})
722-
TARGET_LINK_LIBRARIES(libgit2_clar ${GSSAPI_LIBRARIES})
723-
TARGET_LINK_LIBRARIES(libgit2_clar ${ICONV_LIBRARIES})
724-
TARGET_OS_LIBRARIES(libgit2_clar)
725-
IDE_SPLIT_SOURCES(libgit2_clar)
726-
727-
IF (MSVC_IDE)
728-
# Precompiled headers
729-
SET_TARGET_PROPERTIES(libgit2_clar PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h")
730-
SET_SOURCE_FILES_PROPERTIES("${CLAR_PATH}/tests/precompiled.c" COMPILE_FLAGS "/Ycprecompiled.h")
731-
ENDIF ()
732-
733680
ENABLE_TESTING()
734-
IF (WINHTTP OR OPENSSL_FOUND OR SECURITY_FOUND)
735-
ADD_TEST(libgit2_clar libgit2_clar -ionline -xclone::local::git_style_unc_paths -xclone::local::standard_unc_paths_are_written_git_style)
736-
ELSE ()
737-
ADD_TEST(libgit2_clar libgit2_clar -v -xclone::local::git_style_unc_paths -xclone::local::standard_unc_paths_are_written_git_style)
738-
ENDIF ()
739-
740-
# Add a test target which runs the cred callback tests, to be
741-
# called after setting the url and user
742-
ADD_TEST(libgit2_clar-cred_callback libgit2_clar -v -sonline::clone::cred_callback)
743-
ADD_TEST(libgit2_clar-proxy_credentials_in_url libgit2_clar -v -sonline::clone::proxy_credentials_in_url)
744-
ADD_TEST(libgit2_clar-proxy_credentials_request libgit2_clar -v -sonline::clone::proxy_credentials_request)
681+
ADD_SUBDIRECTORY(tests)
745682
ENDIF ()
746683

747684
IF (TAGS)

tests/CMakeLists.txt

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
FIND_PACKAGE(PythonInterp)
2+
3+
IF(NOT PYTHONINTERP_FOUND)
4+
MESSAGE(FATAL_ERROR "Could not find a python interpeter, which is needed to build the tests. "
5+
"Make sure python is available, or pass -DBUILD_CLAR=OFF to skip building the tests")
6+
ENDIF()
7+
8+
SET(CLAR_FIXTURES "${CMAKE_CURRENT_SOURCE_DIR}/resources/")
9+
SET(CLAR_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
10+
ADD_DEFINITIONS(-DCLAR_FIXTURE_PATH=\"${CLAR_FIXTURES}\")
11+
ADD_DEFINITIONS(-DCLAR_TMPDIR=\"libgit2_tests\")
12+
13+
INCLUDE_DIRECTORIES(${CLAR_PATH})
14+
FILE(GLOB_RECURSE SRC_TEST ${CLAR_PATH}/*/*.c ${CLAR_PATH}/*/*.h)
15+
SET(SRC_CLAR "main.c" "clar_libgit2.c" "clar_libgit2_trace.c" "clar_libgit2_timer.c" "clar.c")
16+
17+
IF(MSVC_IDE)
18+
LIST(APPEND SRC_CLAR "precompiled.c")
19+
ENDIF()
20+
21+
ADD_CUSTOM_COMMAND(
22+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/clar.suite
23+
COMMAND ${PYTHON_EXECUTABLE} generate.py -o "${CMAKE_CURRENT_BINARY_DIR}" -f -xonline -xstress .
24+
DEPENDS ${SRC_TEST}
25+
WORKING_DIRECTORY ${CLAR_PATH}
26+
)
27+
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
28+
29+
SET_SOURCE_FILES_PROPERTIES(
30+
${CLAR_PATH}/clar.c
31+
PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clar.suite)
32+
33+
ADD_EXECUTABLE(libgit2_clar ${SRC_CLAR} ${SRC_TEST} ${GIT2INTERNAL_OBJECTS})
34+
35+
SET_TARGET_PROPERTIES(libgit2_clar PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
36+
37+
IF (${CMAKE_VERSION} VERSION_GREATER 2.8.11)
38+
TARGET_INCLUDE_DIRECTORIES(libgit2_clar PRIVATE ../src PUBLIC ../include)
39+
ENDIF()
40+
41+
TARGET_LINK_LIBRARIES(libgit2_clar ${COREFOUNDATION_DIRS})
42+
TARGET_LINK_LIBRARIES(libgit2_clar ${SECURITY_DIRS})
43+
TARGET_LINK_LIBRARIES(libgit2_clar ${SSL_LIBRARIES})
44+
TARGET_LINK_LIBRARIES(libgit2_clar ${SSH_LIBRARIES})
45+
TARGET_LINK_LIBRARIES(libgit2_clar ${GSSAPI_LIBRARIES})
46+
TARGET_LINK_LIBRARIES(libgit2_clar ${ICONV_LIBRARIES})
47+
TARGET_OS_LIBRARIES(libgit2_clar)
48+
IDE_SPLIT_SOURCES(libgit2_clar)
49+
50+
IF (MSVC_IDE)
51+
# Precompiled headers
52+
SET_TARGET_PROPERTIES(libgit2_clar PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h")
53+
SET_SOURCE_FILES_PROPERTIES("precompiled.c" COMPILE_FLAGS "/Ycprecompiled.h")
54+
ENDIF ()
55+
56+
IF (WINHTTP OR OPENSSL_FOUND OR SECURITY_FOUND)
57+
ADD_TEST(libgit2_clar "${CMAKE_BINARY_DIR}/libgit2_clar" -ionline -xclone::local::git_style_unc_paths -xclone::local::standard_unc_paths_are_written_git_style)
58+
ELSE ()
59+
ADD_TEST(libgit2_clar "${CMAKE_BINARY_DIR}/libgit2_clar" -v -xclone::local::git_style_unc_paths -xclone::local::standard_unc_paths_are_written_git_style)
60+
ENDIF ()
61+
62+
# Add a test target which runs the cred callback tests, to be
63+
# called after setting the url and user
64+
ADD_TEST(libgit2_clar-cred_callback "${CMAKE_BINARY_DIR}/libgit2_clar" -v -sonline::clone::cred_callback)
65+
ADD_TEST(libgit2_clar-proxy_credentials_in_url "${CMAKE_BINARY_DIR}/libgit2_clar" -v -sonline::clone::proxy_credentials_in_url)
66+
ADD_TEST(libgit2_clar-proxy_credentials_request "${CMAKE_BINARY_DIR}/libgit2_clar" -v -sonline::clone::proxy_credentials_request)

0 commit comments

Comments
 (0)