Added install target and cmake package exports (#83)

This commit is contained in:
Guillaume Racicot
2019-01-26 15:15:25 -05:00
committed by pantor
parent 1dfd86fa6f
commit 11d07f5eff
6 changed files with 131 additions and 3 deletions
+107 -2
View File
@@ -4,10 +4,14 @@ cmake_minimum_required(VERSION 3.5)
project(inja LANGUAGES CXX VERSION 2.0.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_TESTS "Build the inja unit tests" ON)
option(BUILD_BENCHMARK "Build the inja benchmark" ON)
option(COVERALLS "Generate coveralls data" OFF)
set(INJA_INSTALL_INCLUDE_DIR "include")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
@@ -25,8 +29,43 @@ endif()
add_library(inja INTERFACE)
target_include_directories(inja INTERFACE include)
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()
find_package(nlohmann_json REQUIRED)
set(INJA_SELECTED_JSON_LIBRARY "nlohmann_json::nlohmann_json")
endif()
target_link_libraries(inja INTERFACE ${INJA_SELECTED_JSON_LIBRARY})
execute_process(COMMAND python3 amalgamate/amalgamate.py -c amalgamate/config.json -s include WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
@@ -57,7 +96,7 @@ if(BUILD_TESTS)
add_library(single_inja INTERFACE)
target_include_directories(single_inja INTERFACE single_include include)
target_include_directories(single_inja INTERFACE single_include include third_party/include)
add_executable(single_inja_test
test/unit.cpp
@@ -74,3 +113,69 @@ if(BUILD_BENCHMARK)
add_executable(inja_benchmark test/benchmark.cpp)
target_link_libraries(inja_benchmark PRIVATE inja)
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(FILES
"${CMAKE_CURRENT_SOURCE_DIR}/third_party/include/nlohmann/json.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/third_party/include/nlohmann/LICENSE.MIT"
DESTINATION "${INJA_INSTALL_INCLUDE_DIR}/inja/json/include/nlohmann"
)
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()
+11
View File
@@ -0,0 +1,11 @@
set(INJA_VERSION "@PROJECT_VERSION@")
set(INJA_PACKAGE_USE_EMBEDDED_JSON "@INJA_PACKAGE_USE_EMBEDDED_JSON@")
include(CMakeFindDependencyMacro)
if(NOT INJA_PACKAGE_USE_EMBEDDED_JSON)
find_dependency(nlohmann_json REQUIRED)
endif()
include("${CMAKE_CURRENT_LIST_DIR}/injaTargets.cmake")
+12
View File
@@ -0,0 +1,12 @@
@PACKAGE_INIT@
set(INJA_VERSION "@PROJECT_VERSION@")
set(INJA_PACKAGE_USE_EMBEDDED_JSON "@INJA_PACKAGE_USE_EMBEDDED_JSON@")
include(CMakeFindDependencyMacro)
if(NOT INJA_PACKAGE_USE_EMBEDDED_JSON)
find_dependency(nlohmann_json REQUIRED)
endif()
include("${CMAKE_CURRENT_LIST_DIR}/injaTargets.cmake")
+1 -1
View File
@@ -6,7 +6,7 @@ project('inja', 'cpp', default_options: ['cpp_std=c++17'])
inja_dep = declare_dependency(
include_directories: include_directories('include')
include_directories: include_directories('include', 'third_party/include')
)