From 9c92e7970f51790b85d737273d3890f9c5a4292c Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sun, 30 Sep 2018 21:49:46 +0300 Subject: [PATCH] Add install support, cmake_install_test --- .travis.yml | 13 +++++++++++++ CMakeLists.txt | 27 +++++++++++++++++++++++++- test/cmake_install_test/CMakeLists.txt | 17 ++++++++++++++++ test/cmake_install_test/main.cpp | 8 ++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 test/cmake_install_test/CMakeLists.txt create mode 100644 test/cmake_install_test/main.cpp diff --git a/.travis.yml b/.travis.yml index 57b44e9..5fb4977 100644 --- a/.travis.yml +++ b/.travis.yml @@ -241,6 +241,19 @@ matrix: - cmake --build . - cmake --build . --target check + - os: linux + compiler: clang++ + env: CMAKE_INSTALL_TEST=1 + install: true + script: + - mkdir __build__ && cd __build__ + - cmake -DCMAKE_INSTALL_PREFIX=~/.local .. + - cmake --build . --target install + - cd ../test/cmake_install_test && mkdir __build__ && cd __build__ + - cmake -DCMAKE_INSTALL_PREFIX=~/.local .. + - cmake --build . + - cmake --build . --target check + install: - BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true - cd .. diff --git a/CMakeLists.txt b/CMakeLists.txt index 58f2dd6..ee06fad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,13 +7,17 @@ cmake_minimum_required(VERSION 3.5) project(BoostMp11 VERSION 1.69.0 LANGUAGES CXX) add_library(boost_mp11 INTERFACE) +set_property(TARGET boost_mp11 PROPERTY EXPORT_NAME mp11) + add_library(Boost::mp11 ALIAS boost_mp11) -target_include_directories(boost_mp11 INTERFACE include) +target_include_directories(boost_mp11 INTERFACE $ $) target_compile_features(boost_mp11 INTERFACE cxx_alias_templates cxx_variadic_templates cxx_decltype) if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + # --target check + # requires CMake 3.11 so we just carry it around include(cmake/FetchContent.cmake) @@ -37,6 +41,27 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $) + # --target install + + set(CONFIG_INSTALL_DIR lib/cmake/${PROJECT_NAME}-${PROJECT_VERSION}) + + install(TARGETS boost_mp11 EXPORT ${PROJECT_NAME}Targets) + install(EXPORT ${PROJECT_NAME}Targets DESTINATION ${CONFIG_INSTALL_DIR} NAMESPACE Boost:: FILE ${PROJECT_NAME}Config.cmake) + + install(DIRECTORY include/ DESTINATION include) + + include(CMakePackageConfigHelpers) + + # Mp11 is independent of 32/64, so this hack makes BoostMp11ConfigVersion.cmake skip the check + set(OLD_CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P}) + unset(CMAKE_SIZEOF_VOID_P) + write_basic_package_version_file("${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" COMPATIBILITY AnyNewerVersion) + set(CMAKE_SIZEOF_VOID_P ${OLD_CMAKE_SIZEOF_VOID_P}) + + install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" DESTINATION ${CONFIG_INSTALL_DIR}) + + #export(EXPORT ${PROJECT_NAME}Targets NAMESPACE Boost:: FILE ${PROJECT_NAME}Config.cmake) + endif() if(COMMAND boost_test) diff --git a/test/cmake_install_test/CMakeLists.txt b/test/cmake_install_test/CMakeLists.txt new file mode 100644 index 0000000..1a3a449 --- /dev/null +++ b/test/cmake_install_test/CMakeLists.txt @@ -0,0 +1,17 @@ +# Copyright 2018 Peter Dimov +# Distributed under the Boost Software License, Version 1.0. +# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt + +cmake_minimum_required(VERSION 3.5) + +project(cmake_install_test LANGUAGES CXX) + +find_package(BoostMp11 REQUIRED) + +add_executable(main main.cpp) +target_link_libraries(main Boost::mp11) + +enable_testing() +add_test(NAME main COMMAND main) + +add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $) diff --git a/test/cmake_install_test/main.cpp b/test/cmake_install_test/main.cpp new file mode 100644 index 0000000..da23712 --- /dev/null +++ b/test/cmake_install_test/main.cpp @@ -0,0 +1,8 @@ +#include +using namespace boost::mp11; + +int main() +{ + using L1 = mp_list; + return mp_size>::value == 2? 0: 1; +}