-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
115 lines (93 loc) · 4.3 KB
/
CMakeLists.txt
File metadata and controls
115 lines (93 loc) · 4.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
enable_testing()
# test files
set (PROJECT_LISTS_STR "")
set (PROJECT_LISTS_STR "${PROJECT_LISTS_STR}\nstatic constexpr const char* TESTFILES_DIRECTORY = \"${CMAKE_CURRENT_LIST_DIR}/testfiles\";")
add_subdirectory(testfiles)
# tests with example projects
macro(setup_test_project folderName)
add_subdirectory("testprojects/${folderName}")
set(WDIR "${CMAKE_BINARY_DIR}/testprojects/${folderName}/build")
if (NOT EXISTS ${WDIR})
file(MAKE_DIRECTORY ${WDIR})
endif()
if (WIN32)
execute_process(
COMMAND ${CMAKE_COMMAND} "-G" ${CMAKE_GENERATOR} "${PROJECT_SOURCE_DIR}/tests/testprojects/${folderName}"
WORKING_DIRECTORY ${WDIR}
)
if (NOT EXISTS "${WDIR}/compile_commands.json")
set(WDIR_NMAKE "${WDIR}_nmake")
if (NOT EXISTS ${WDIR_NMAKE})
file(MAKE_DIRECTORY ${WDIR_NMAKE})
endif()
execute_process(
COMMAND ${CMAKE_COMMAND} "-G" "NMake Makefiles" "${PROJECT_SOURCE_DIR}/tests/testprojects/${folderName}"
WORKING_DIRECTORY ${WDIR_NMAKE}
)
file(COPY "${WDIR_NMAKE}/compile_commands.json" DESTINATION ${WDIR})
endif()
else()
execute_process(
COMMAND ${CMAKE_COMMAND} "${PROJECT_SOURCE_DIR}/tests/testprojects/${folderName}"
WORKING_DIRECTORY ${WDIR}
)
endif()
string(TOUPPER ${folderName} FOLDER)
set (${FOLDER}_BUILD_DIR ${WDIR})
set (PROJECT_LISTS_STR "${PROJECT_LISTS_STR}\nstatic constexpr const char* ${FOLDER}_ROOT_DIR = \"${CMAKE_CURRENT_LIST_DIR}/testprojects/${folderName}\";")
set (PROJECT_LISTS_STR "${PROJECT_LISTS_STR}\nstatic constexpr const char* ${FOLDER}_BUILD_DIR = \"${WDIR}\";")
endmacro()
setup_test_project(hello_world)
setup_test_project(precompiled_headers)
setup_test_project(simple_project)
if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/catch.hpp")
message("Downloading Catch2")
file(DOWNLOAD https://github.com/catchorg/Catch2/releases/download/v2.13.10/catch.hpp "${CMAKE_CURRENT_BINARY_DIR}/catch.hpp" SHOW_PROGRESS)
endif()
configure_file("projects.h.in" "projects.h")
add_executable(TEST_cppscanner "${CMAKE_CURRENT_BINARY_DIR}/catch.hpp" "${CMAKE_CURRENT_BINARY_DIR}/projects.h" "main.cpp" "helpers.h" "projects.h.in"
"hello_world.cpp"
"cxx_language_features.cpp"
"cpp20_language_features.cpp"
"cpp20_library_features.cpp"
"cpp20_modules.cpp"
"stl.cpp"
"pch.cpp"
)
target_link_libraries(TEST_cppscanner scannerInvocation)
target_include_directories(TEST_cppscanner PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
if (WIN32)
set_target_properties(TEST_cppscanner PROPERTIES VS_DEBUGGER_ENVIRONMENT "PATH=${SQLite3_INCLUDE_DIR}/../bin;%PATH%")
endif()
# self test
set(SELFTEST_BUILD_DIR "${CMAKE_BINARY_DIR}/self_parse")
if (NOT EXISTS ${SELFTEST_BUILD_DIR})
file(MAKE_DIRECTORY ${SELFTEST_BUILD_DIR})
endif()
if (WIN32)
# TODO: add option for specifying the generator?
execute_process(
COMMAND ${CMAKE_COMMAND} "-G" "NMake Makefiles" "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON" "-DLLVM_DIR=${LLVM_DIR}" "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}" "-DCMAKE_BUILD_TYPE=Debug" "-DBUILD_TESTS=OFF" "-DSELF_PARSE=ON" "${PROJECT_SOURCE_DIR}"
WORKING_DIRECTORY ${SELFTEST_BUILD_DIR}
)
else()
execute_process(
COMMAND ${CMAKE_COMMAND} "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON" "-DLLVM_DIR=${LLVM_DIR}" "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}" "-DCMAKE_BUILD_TYPE=Debug" "-DBUILD_TESTS=OFF" "-DSELF_PARSE=ON" "${PROJECT_SOURCE_DIR}"
WORKING_DIRECTORY ${SELFTEST_BUILD_DIR}
)
endif()
add_executable(TEST_cppscanner_selftest "${CMAKE_CURRENT_BINARY_DIR}/catch.hpp" "selftest.cpp" "helpers.h")
target_link_libraries(TEST_cppscanner_selftest scannerInvocation)
target_include_directories(TEST_cppscanner_selftest PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_compile_definitions(TEST_cppscanner_selftest PRIVATE SELFTEST_BUILD_DIR="${SELFTEST_BUILD_DIR}")
target_compile_definitions(TEST_cppscanner_selftest PRIVATE PROJECT_SOURCE_DIR="${PROJECT_SOURCE_DIR}")
if (WIN32)
set_target_properties(TEST_cppscanner_selftest PROPERTIES VS_DEBUGGER_ENVIRONMENT "PATH=${SQLite3_INCLUDE_DIR}/../bin;%PATH%")
endif()
## cmake tests
add_test(NAME TEST_cppscanner COMMAND TEST_cppscanner)
#add_test(NAME TEST_cppscanner_selftest COMMAND TEST_cppscanner_selftest)
if (WIN32)
set_tests_properties(TEST_cppscanner
PROPERTIES ENVIRONMENT "PATH=${SQLite3_INCLUDE_DIR}/../bin;%PATH%")
endif()