1- cmake_minimum_required (VERSION 3.0)
1+ cmake_minimum_required (VERSION 3.0.2 )
22project (Jinja2Cpp VERSION 0.5.0)
33
4- list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /cmake)
4+ list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /cmake)
55
6- if (CMAKE_COMPILER_IS_GNUCXX AND COVERAGE_ENABLED)
7- message (STATUS "This is DEBUG build with enabled Code Coverage" )
8- set (CMAKE_BUILD_TYPE Debug)
9- include (code_coverage)
10- setup_target_for_coverage(${PROJECT_NAME} _coverage jinja2cpp_tests coverage)
11- endif ()
12-
13- set (GTEST_ROOT $ENV{GTEST_DIR} CACHE PATH "Path to GTest/GMock library root" )
14- if (NOT UNIX )
15- set (BOOST_ROOT $ENV{BOOST_DIR} CACHE PATH "Path to boost library root" )
16- set (LIBRARY_TYPE STATIC CACHE PATH "Library link type" )
17- else ()
18- set (BOOST_ROOT "/usr" CACHE PATH "Path to boost library root" )
19- set (LIBRARY_TYPE SHARED CACHE PATH "Library link type" )
20- endif ()
21-
22- if (NOT DEFINED WITH_TESTS)
23- set (WITH_TESTS TRUE )
24- endif ()
25-
26- set (EXTRA_TEST_LIBS "" )
27- set (CMAKE_CXX_STANDARD 14)
28- set (CMAKE_CXX_STANDARD_REQUIRED ON )
6+ set (CMAKE_CXX_STANDARD 14)
7+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
298if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" OR ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU" )
309 if (NOT UNIX )
31- set (EXTRA_TEST_LIBS "stdc++" )
3210 set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wa,-mbig-obj" )
33- else ()
34- include (CMakeFindDependencyMacro)
35- find_dependency(Threads)
36- set (EXTRA_TEST_LIBS Threads::Threads)
3711 endif ()
3812else ()
13+ set (COMMON_MSVC_OPTS "/wd4503 /DBOOST_ALL_NO_LIB" )
14+
3915 # MSVC
40- if (NOT DEFINED Boost_USE_STATIC_LIBS)
41- set (Boost_USE_STATIC_LIBS ON )
42- endif ()
4316 if (NOT DEFINED MSVC_RUNTIME_TYPE)
4417 set (MSVC_RUNTIME_TYPE "/MD" )
18+ set (gtest_force_shared_crt ON CACHE BOOL "" FORCE)
4519 endif ()
4620 if (CMAKE_BUILD_TYPE MATCHES "Debug" )
47- message ("#######>>>>>>>>>>!!!!!!!!!!!!!! AAAAAAAAAAAAAAAAAAAAAAAAAAAA" )
48- set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${MSVC_RUNTIME_TYPE} d" )
21+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${MSVC_RUNTIME_TYPE} d ${COMMON_MSVC_OPTS} " )
4922 set (Boost_USE_DEBUG_RUNTIME ON )
5023 else ()
51- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MSVC_RUNTIME_TYPE} " )
52- set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${MSVC_RUNTIME_TYPE} " )
24+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MSVC_RUNTIME_TYPE} ${COMMON_MSVC_OPTS} " )
25+ set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${MSVC_RUNTIME_TYPE} ${COMMON_MSVC_OPTS} " )
5326 set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/PROFILE" )
5427 set (Boost_USE_DEBUG_RUNTIME OFF )
5528 endif ()
56- endif ()
5729
58- if ("${GTEST_ROOT} " STREQUAL "" AND WITH_TESTS)
59- set (THIRDPARTY_TARGETS ${THIRDPARTY_TARGETS} gtest)
6030endif ()
6131
62- if (NOT "${BOOST_ROOT} " STREQUAL "" )
63- list (APPEND CMAKE_PREFIX_PATH ${BOOST_ROOT} )
64- set (Boost_DIR ${BOOST_ROOT} )
65- endif ()
66-
67- make_directory (${CMAKE_CURRENT_BINARY_DIR} /thirdparty)
68- execute_process (
69- COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR} " -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} ${CMAKE_CURRENT_SOURCE_DIR} /thirdparty
70- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /thirdparty
71- RESULT_VARIABLE THIRDPARTY_BUILD_RESULT
72- )
73-
74- if (THIRDPARTY_BUILD_RESULT EQUAL 0 AND THIRDPARTY_TARGETS)
75- execute_process (
76- COMMAND ${CMAKE_COMMAND} --build . --target ${THIRDPARTY_TARGETS}
77- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /thirdparty
78- RESULT_VARIABLE THIRDPARTY_BUILD_RESULT
79- )
80- endif ()
81-
82- if (NOT THIRDPARTY_BUILD_RESULT EQUAL 0)
83- message (FATAL_ERROR "Can't build thirdparty libraries" )
84- endif ()
85-
86- if ("${GTEST_ROOT} " STREQUAL "" AND WITH_TESTS)
87- set (GTEST_ROOT ${CMAKE_CURRENT_BINARY_DIR} /thirdparty/gtest/install )
88- set (GTEST_SELF_BUILD ON )
89- endif ()
32+ set (BOOST_CMAKE_LIBRARIES filesystem algorithm variant optional CACHE INTERNAL "" )
33+ add_subdirectory (thirdparty/boost EXCLUDE_FROM_ALL )
34+ add_subdirectory (thirdparty/nonstd EXCLUDE_FROM_ALL )
9035
91- if (NOT "${GTEST_ROOT} " STREQUAL "" AND WITH_TESTS)
92- list (APPEND CMAKE_PREFIX_PATH ${GTEST_ROOT} )
93- set (Gtest_DIR ${GTEST_ROOT} )
94- message (STATUS "GTest library search path: ${Gtest_DIR} " )
95- if (NOT GTEST_SELF_BUILD)
96- find_package (GTest)
97- else ()
98- set (Gtest_DIR ${GTEST_ROOT} )
99- find_package (GTest)
100- endif ()
101- if (NOT GTEST_INCLUDE_DIRS)
102- if (MSVC AND NOT GTEST_INCLUDE_DIRS)
103- set (GTEST_MSVC_SEARCH "MT" )
104- find_package (GTest)
105- else ()
106- set (GTEST_BOTH_LIBRARIES "optimized;${GTEST_ROOT} /lib/libgtest.a;debug;${GTEST_ROOT} /lib/libgtestd.a;optimized;${GTEST_ROOT} /lib/libgtest_main.a;debug;${GTEST_ROOT} /lib/libgtest_maind.a" )
107- set (GTEST_INCLUDE_DIRS ${GTEST_ROOT} /include )
108- endif ()
109- endif ()
36+ if ("${CMAKE_SOURCE_DIR} " STREQUAL "${CMAKE_CURRENT_SOURCE_DIR} " )
37+ set (JINJA2CPP_IS_MAIN_PROEJCT TRUE )
38+ else ()
39+ set (JINJA2CPP_IS_MAIN_PROEJCT FALSE )
11040endif ()
11141
112- if (WITH_TESTS)
113- find_package (Boost COMPONENTS system filesystem REQUIRED)
114- else ()
115- find_package (Boost)
116- endif ()
117-
118- add_subdirectory (thirdparty/nonstd)
42+ option (JINJA2CPP_BUILD_TESTS "Build Jinja2Cpp unit tests" ${JINJA2CPP_IS_MAIN_PROEJCT} )
11943
12044include (collect_sources)
12145
122- include_directories (
123- ${CMAKE_CURRENT_SOURCE_DIR} /include
124- )
125-
12646set (LIB_TARGET_NAME jinja2cpp)
12747
12848CollectSources(Sources Headers ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} /src)
12949CollectSources(PublicSources PublicHeaders ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} /include )
13050
131- if (CMAKE_COMPILER_IS_GNUCXX AND COVERAGE_ENABLED)
132- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage" )
133- endif ()
134-
13551add_library (${LIB_TARGET_NAME} STATIC
13652 ${Sources}
13753 ${Headers}
13854 ${PublicHeaders}
13955 )
14056
141- target_link_libraries (${LIB_TARGET_NAME} PUBLIC ThirdParty::nonstd Boost::boost) # Boost::system Boost::filesystem )
57+ target_link_libraries (${LIB_TARGET_NAME} PUBLIC ThirdParty::nonstd boost_variant boost_filesystem boost_algorithm )
14258
14359target_include_directories (${LIB_TARGET_NAME}
144- INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} /include )
60+ PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} /include )
61+
62+
63+ if (NOT MSVC )
64+ # Enable -Werror and -Wall on jinja2cpp target, ignoring warning errors from thirdparty libs
65+ include (CheckCXXCompilerFlag)
66+ check_cxx_compiler_flag(-Wno-error=parentheses COMPILER_HAS_WNO_ERROR_PARENTHESES_FLAG)
67+ check_cxx_compiler_flag(-Wno-error=deprecated-declarations COMPILER_HAS_WNO_ERROR_DEPRECATED_DECLARATIONS_FLAG)
68+ check_cxx_compiler_flag(-Wno-error=maybe-uninitialized COMPILER_HAS_WNO_ERROR_MAYBE_UNINITIALIZED_FLAG)
69+
70+ if (COMPILER_HAS_WNO_ERROR_PARENTHESES_FLAG)
71+ target_compile_options (boost_assert INTERFACE -Wno-error=parentheses)
72+ endif ()
73+ if (COMPILER_HAS_WNO_ERROR_DEPRECATED_DECLARATIONS_FLAG)
74+ target_compile_options (boost_filesystem PRIVATE -Wno-error=deprecated-declarations)
75+ endif ()
76+ if (COMPILER_HAS_WNO_ERROR_MAYBE_UNINITIALIZED_FLAG)
77+ target_compile_options (boost_variant INTERFACE -Wno-error=maybe-uninitialized)
78+ endif ()
79+
80+ target_compile_options (${LIB_TARGET_NAME} PRIVATE -Wall -Werror)
81+ endif ()
14582
146- if (WITH_TESTS )
83+ if (JINJA2CPP_BUILD_TESTS )
14784 enable_testing ()
148-
149- include_directories (
150- ${GTEST_INCLUDE_DIRS}
151- )
85+ add_subdirectory (thirdparty/gtest)
15286
15387 CollectSources(TestSources TestHeaders ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} /test )
15488 add_executable (jinja2cpp_tests ${TestSources} ${TestHeaders} )
155- target_link_libraries (jinja2cpp_tests ${GTEST_BOTH_LIBRARIES} ${LIB_TARGET_NAME} ${EXTRA_TEST_LIBS} ${Boost_LIBRARIES } )
89+ target_link_libraries (jinja2cpp_tests gtest gtest_main ${LIB_TARGET_NAME} ${EXTRA_TEST_LIBS} )
15690
15791 add_custom_command (
15892 OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /test_data/simple_template1.j2tpl
@@ -164,6 +98,8 @@ if (WITH_TESTS)
16498 add_custom_target (CopyTestData ALL
16599 DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /test_data/simple_template1.j2tpl
166100 )
101+
102+ add_test (NAME jinja2cpp_tests COMMAND jinja2cpp_tests)
167103endif ()
168104
169105install (TARGETS ${LIB_TARGET_NAME}
@@ -176,5 +112,3 @@ install (DIRECTORY thirdparty/nonstd/expected-light/include/ DESTINATION include
176112install (DIRECTORY thirdparty/nonstd/variant-light/include / DESTINATION include )
177113install (DIRECTORY thirdparty/nonstd/value -ptr-light/include / DESTINATION include )
178114install (FILES cmake/public /FindJinja2Cpp.cmake DESTINATION cmake)
179-
180- add_test (NAME jinja2cpp_tests COMMAND jinja2cpp_tests)
0 commit comments