|
1 |
| -cmake_minimum_required(VERSION 3.1) |
| 1 | +cmake_minimum_required(VERSION 3.5) |
2 | 2 |
|
3 | 3 |
|
4 |
| -## |
5 |
| -## PROJECT |
6 |
| -## |
7 |
| -project(inja LANGUAGES CXX VERSION 1.0.1) |
8 |
| -set(INJA_VERSION ${PROJECT_VERSION}) |
| 4 | +project(inja LANGUAGES CXX VERSION 2.0.0) |
9 | 5 |
|
10 | 6 |
|
11 |
| -## |
12 |
| -## OPTIONS |
13 |
| -## |
14 |
| -option(BUILD_UNIT_TESTS "Build the unit tests" ON) |
15 |
| -option(BUILD_BENCHMARK "Build the inja benchmark" OFF) |
16 |
| -option(HUNTER_ENABLED "Use hunter to manage dependencies" OFF) |
| 7 | +option(BUILD_TESTS "Build the inja unit tests" ON) |
| 8 | +option(BUILD_BENCHMARK "Build the inja benchmark" ON) |
| 9 | +option(COVERALLS "Generate coveralls data" OFF) |
17 | 10 |
|
18 | 11 |
|
19 |
| -## |
20 |
| -## HUNTER |
21 |
| -## |
22 |
| -if(HUNTER_ENABLED) |
23 |
| - include("cmake/HunterGate.cmake") |
24 |
| - HunterGate( |
25 |
| - URL "https://github.com/ruslo/hunter/archive/v0.19.156.tar.gz" |
26 |
| - SHA1 "8d5e4635b137365e0d1ade4d60accf4e2bb41f0d" |
27 |
| - ) |
28 |
| -endif() |
| 12 | +set(CMAKE_CXX_STANDARD 17) |
| 13 | +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") |
| 14 | +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) |
| 15 | +set(CMAKE_BUILD_TYPE Debug) |
| 16 | +# set(CMAKE_BUILD_TYPE Release) |
| 17 | +# set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") |
29 | 18 |
|
30 | 19 |
|
31 |
| -## |
32 |
| -## CONFIGURATION |
33 |
| -## |
34 |
| -set(CMAKE_CXX_STANDARD 11) |
35 |
| -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") |
36 |
| -set(INJA_INCLUDE_DIR include) |
37 |
| -set(INJA_SINGLE_INCLUDE_DIR single_include) |
38 |
| -set(INJA_HEADER_INSTALL_DIR include) |
| 20 | +add_library(inja INTERFACE) |
| 21 | +target_include_directories(inja INTERFACE include) |
| 22 | + |
| 23 | + |
| 24 | +execute_process(COMMAND python3 amalgamate/amalgamate.py -c amalgamate/config.json -s include WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) |
| 25 | + |
| 26 | + |
| 27 | +if (COVERALLS) |
| 28 | + include(Coveralls) |
| 29 | + coveralls_turn_on_coverage() |
39 | 30 |
|
40 |
| -if(WIN32 AND MSVC AND MSVC_VERSION LESS 1900) |
41 |
| - message(FATAL_ERROR "[${PROJECT_NAME}] Visual Studio versions prior to 2015 do not support the noexcept keyword, which is used in the JSON library.") |
| 31 | + file(GLOB_RECURSE COVERAGE_SRCS include/inja/*.hpp) |
| 32 | + |
| 33 | + # set(COVERAGE_SRCS test/unit.cpp test/unit-renderer.cpp include/inja) |
| 34 | + |
| 35 | + coveralls_setup("${COVERAGE_SRCS}" OFF) # If we should upload. |
42 | 36 | endif()
|
43 | 37 |
|
44 | 38 |
|
45 |
| -## |
46 |
| -## TESTS |
47 |
| -## create and configure the unit test target |
48 |
| -## |
49 |
| -if(BUILD_UNIT_TESTS) |
| 39 | +if(BUILD_TESTS) |
50 | 40 | enable_testing()
|
51 |
| - add_subdirectory(test) |
52 |
| -endif() |
53 | 41 |
|
| 42 | + add_executable(inja_test |
| 43 | + test/unit.cpp |
| 44 | + test/unit-files.cpp |
| 45 | + test/unit-renderer.cpp |
| 46 | + ) |
| 47 | + target_link_libraries(inja_test PRIVATE inja) |
54 | 48 |
|
55 |
| -## |
56 |
| -## AMALGAMATE |
57 |
| -## amalgamate header files into single_include |
58 |
| -## |
59 |
| -execute_process(COMMAND python3 amalgamate/amalgamate.py -c amalgamate/config.json -s include |
60 |
| - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) |
| 49 | + add_test(inja_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/inja_test) |
61 | 50 |
|
62 | 51 |
|
63 |
| -## |
64 |
| -## TARGETS |
65 |
| -## Build targets for the interface library |
66 |
| -## |
67 |
| -add_library(inja INTERFACE) |
68 |
| -target_include_directories(inja INTERFACE |
69 |
| - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INJA_INCLUDE_DIR}> |
70 |
| - $<INSTALL_INTERFACE:${INJA_HEADER_INSTALL_DIR}> |
71 |
| -) |
72 |
| - |
73 |
| - |
74 |
| -add_library(inja_single INTERFACE) |
75 |
| -target_include_directories(inja_single INTERFACE |
76 |
| - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INJA_SINGLE_INCLUDE_DIR}> |
77 |
| - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INJA_INCLUDE_DIR}> |
78 |
| - $<INSTALL_INTERFACE:${INJA_HEADER_INSTALL_DIR}> |
79 |
| -) |
80 |
| - |
81 |
| - |
82 |
| -if(HUNTER_ENABLED) # Use Hunter to manage dependencies |
83 |
| - # Add JSON package |
84 |
| - hunter_add_package(nlohmann_json) |
85 |
| - find_package(nlohmann_json CONFIG REQUIRED) |
86 |
| - # Add dependencies to target |
87 |
| - target_link_libraries(inja INTERFACE nlohmann_json) |
| 52 | + add_library(single_inja INTERFACE) |
| 53 | + target_include_directories(single_inja INTERFACE single_include include) |
| 54 | + |
| 55 | + add_executable(single_inja_test |
| 56 | + test/unit.cpp |
| 57 | + test/unit-files.cpp |
| 58 | + test/unit-renderer.cpp |
| 59 | + ) |
| 60 | + target_link_libraries(single_inja_test PRIVATE single_inja) |
| 61 | + |
| 62 | + add_test(single_inja_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/single_inja_test) |
88 | 63 | endif()
|
89 | 64 |
|
90 | 65 |
|
91 |
| -## |
92 |
| -## INSTALL |
93 |
| -## install header files, generate and install cmake config files for find_package() |
94 |
| -## |
95 |
| -set(include_install_dir ${INJA_HEADER_INSTALL_DIR}) |
96 |
| -set(config_install_dir "lib/cmake/${PROJECT_NAME}") |
97 |
| -set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated") |
98 |
| -set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake") |
99 |
| -set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake") |
100 |
| -set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") |
101 |
| -set(namespace "${PROJECT_NAME}::") |
102 |
| -include(CMakePackageConfigHelpers) |
103 |
| - |
104 |
| - |
105 |
| -write_basic_package_version_file( |
106 |
| - "${version_config}" COMPATIBILITY SameMajorVersion |
107 |
| -) |
108 |
| -configure_package_config_file( |
109 |
| - "cmake/Config.cmake.in" |
110 |
| - "${project_config}" |
111 |
| - INSTALL_DESTINATION "${config_install_dir}" |
112 |
| -) |
113 |
| - |
114 |
| -install( |
115 |
| - TARGETS inja |
116 |
| - EXPORT "${TARGETS_EXPORT_NAME}" |
117 |
| - LIBRARY DESTINATION "lib" |
118 |
| - ARCHIVE DESTINATION "lib" |
119 |
| - RUNTIME DESTINATION "bin" |
120 |
| - INCLUDES DESTINATION "${include_install_dir}" |
121 |
| -) |
122 |
| - |
123 |
| -install( |
124 |
| - FILES ${INJA_INCLUDE_DIR}/inja.hpp |
125 |
| - DESTINATION "${include_install_dir}" |
126 |
| -) |
127 |
| - |
128 |
| -install( |
129 |
| - FILES "${project_config}" "${version_config}" |
130 |
| - DESTINATION "${config_install_dir}" |
131 |
| -) |
132 |
| - |
133 |
| -install( |
134 |
| - EXPORT "${TARGETS_EXPORT_NAME}" |
135 |
| - NAMESPACE "${namespace}" |
136 |
| - DESTINATION "${config_install_dir}" |
137 |
| -) |
| 66 | +if(BUILD_BENCHMARK) |
| 67 | + add_executable(inja_benchmark test/benchmark.cpp) |
| 68 | + target_link_libraries(inja_benchmark PRIVATE inja) |
| 69 | +endif() |
0 commit comments