| cmake_minimum_required(VERSION 3.5) |
| |
| |
| project(inja LANGUAGES CXX VERSION 3.1.0) |
| |
| |
| option(INJA_USE_EMBEDDED_JSON "Use the shipped json header if not available on the system" ON) |
| option(INJA_INSTALL "Generate install targets for inja" ON) |
| option(INJA_EXPORT "Export the current build tree to the package registry" ON) |
| option(BUILD_TESTING "Build unit tests" ON) |
| option(INJA_BUILD_TESTS "Build unit tests when BUILD_TESTING is enabled." ON) |
| option(BUILD_BENCHMARK "Build benchmark" ON) |
| option(COVERALLS "Generate coveralls data" OFF) |
| |
| set(INJA_INSTALL_INCLUDE_DIR "include") |
| |
| set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) |
| |
| if(CMAKE_COMPILER_IS_GNUCC) |
| add_compile_options(-Wall) |
| endif() |
| |
| if(MSVC) |
| add_compile_options(/W4 /permissive- /utf-8 /Zc:__cplusplus) |
| endif() |
| |
| |
| add_library(inja INTERFACE) |
| add_library(pantor::inja ALIAS inja) |
| |
| target_include_directories(inja INTERFACE |
| $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |
| $<INSTALL_INTERFACE:${INJA_INSTALL_INCLUDE_DIR}> |
| ) |
| |
| target_compile_features(inja INTERFACE cxx_std_11) |
| |
| set(INJA_PACKAGE_USE_EMBEDDED_JSON OFF) |
| |
| if(INJA_USE_EMBEDDED_JSON) |
| find_package(nlohmann_json QUIET) |
| if(NOT nlohmann_json_FOUND) |
| set(INJA_PACKAGE_USE_EMBEDDED_JSON ON) |
| add_library(nlohmann_json INTERFACE) |
| add_library(pantor::nlohmann_json ALIAS nlohmann_json) |
| |
| target_include_directories(nlohmann_json INTERFACE |
| $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/third_party/include> |
| $<INSTALL_INTERFACE:${INJA_INSTALL_INCLUDE_DIR}/inja/json/include> |
| ) |
| |
| target_compile_features(nlohmann_json INTERFACE cxx_std_11) |
| |
| install(TARGETS nlohmann_json EXPORT injaTargets) |
| |
| set(INJA_SELECTED_JSON_LIBRARY "pantor::nlohmann_json") |
| else() |
| set(INJA_SELECTED_JSON_LIBRARY "nlohmann_json::nlohmann_json") |
| endif() |
| else() |
| # If target already exists, e.g. by git submodules |
| if(TARGET nlohmann_json) |
| set(INJA_SELECTED_JSON_LIBRARY "nlohmann_json::nlohmann_json") |
| else() |
| find_package(nlohmann_json REQUIRED) |
| set(INJA_SELECTED_JSON_LIBRARY "nlohmann_json::nlohmann_json") |
| endif() |
| endif() |
| |
| target_link_libraries(inja INTERFACE ${INJA_SELECTED_JSON_LIBRARY}) |
| |
| execute_process(COMMAND scripts/update_single_include.sh WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) |
| # CMake: add_custom_command |
| |
| |
| if(BUILD_TESTING AND INJA_BUILD_TESTS) |
| enable_testing() |
| |
| add_executable(inja_test test/test.cpp) |
| target_link_libraries(inja_test PRIVATE inja) |
| |
| add_test(inja_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/inja_test) |
| |
| |
| add_library(single_inja INTERFACE) |
| target_compile_features(single_inja INTERFACE cxx_std_11) |
| target_include_directories(single_inja INTERFACE single_include include third_party/include) |
| |
| add_executable(single_inja_test test/test.cpp) |
| target_link_libraries(single_inja_test PRIVATE single_inja) |
| |
| add_test(single_inja_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/single_inja_test) |
| endif() |
| |
| |
| if(BUILD_BENCHMARK) |
| add_executable(inja_benchmark test/benchmark.cpp) |
| target_link_libraries(inja_benchmark PRIVATE inja) |
| endif() |
| |
| |
| if(COVERALLS) |
| include(Coveralls) |
| coveralls_turn_on_coverage() |
| |
| file(GLOB_RECURSE COVERAGE_SRCS include/inja/*.hpp) |
| |
| # set(COVERAGE_SRCS test/unit.cpp test/unit-renderer.cpp include/inja) |
| |
| coveralls_setup("${COVERAGE_SRCS}" OFF) # If we should upload. |
| endif() |
| |
| |
| include(CMakePackageConfigHelpers) |
| |
| write_basic_package_version_file( |
| "${CMAKE_CURRENT_BINARY_DIR}/injaConfigVersion.cmake" |
| VERSION ${PROJECT_VERSION} |
| COMPATIBILITY SameMajorVersion |
| ) |
| |
| |
| # build tree package config |
| configure_file( |
| cmake/config/injaBuildConfig.cmake.in |
| injaConfig.cmake |
| @ONLY |
| ) |
| |
| |
| install(TARGETS inja EXPORT injaTargets) |
| |
| |
| export( |
| EXPORT injaTargets |
| NAMESPACE pantor:: |
| FILE "${CMAKE_CURRENT_BINARY_DIR}/injaTargets.cmake" |
| ) |
| |
| # build tree package config |
| configure_file( |
| cmake/config/injaBuildConfig.cmake.in |
| injaConfig.cmake |
| @ONLY |
| ) |
| |
| |
| if(INJA_INSTALL) |
| set(INJA_CONFIG_PATH "lib/cmake/inja") |
| |
| # install tree package config |
| configure_package_config_file( |
| cmake/config/injaConfig.cmake.in |
| ${INJA_CONFIG_PATH}/injaConfig.cmake |
| INSTALL_DESTINATION ${INJA_CONFIG_PATH} |
| NO_CHECK_REQUIRED_COMPONENTS_MACRO |
| ) |
| |
| install( |
| DIRECTORY include/inja |
| DESTINATION ${INJA_INSTALL_INCLUDE_DIR} |
| FILES_MATCHING PATTERN "*.hpp" |
| ) |
| install( |
| DIRECTORY third_party/include/nlohmann |
| DESTINATION ${INJA_INSTALL_INCLUDE_DIR} |
| FILES_MATCHING PATTERN "*.hpp" |
| ) |
| install( |
| FILES |
| "${CMAKE_CURRENT_BINARY_DIR}/${INJA_CONFIG_PATH}/injaConfig.cmake" |
| "${CMAKE_CURRENT_BINARY_DIR}/injaConfigVersion.cmake" |
| DESTINATION ${INJA_CONFIG_PATH} |
| ) |
| |
| install( |
| EXPORT injaTargets FILE injaTargets.cmake |
| NAMESPACE pantor:: |
| DESTINATION ${INJA_CONFIG_PATH} |
| ) |
| endif() |
| |
| |
| if(INJA_EXPORT) |
| export(PACKAGE inja) |
| endif() |