From 0829d82ed138868f8ded32d8f0e8cfe68c5a39e3 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 9 Oct 2018 05:29:33 +0300 Subject: [PATCH] Add boost_fetch.cmake --- CMakeLists.txt | 6 +++- cmake/boost_fetch.cmake | 73 +++++++++++++++++++++++++++++++++++++++++ test/CMakeLists.txt | 4 +-- test/arguments.cpp | 14 ++++---- 4 files changed, 87 insertions(+), 10 deletions(-) create mode 100644 cmake/boost_fetch.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 888f79b..3f7c5c8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,10 +8,14 @@ project(BoostMinCMake LANGUAGES CXX) if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + include(cmake/boost_fetch.cmake) include(cmake/boost_test.cmake) - enable_testing() + boost_fetch(boostorg/config TAG develop) + boost_fetch(boostorg/assert TAG develop) + boost_fetch(boostorg/core TAG develop) + enable_testing() add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $) add_subdirectory(test) diff --git a/cmake/boost_fetch.cmake b/cmake/boost_fetch.cmake new file mode 100644 index 0000000..045f60a --- /dev/null +++ b/cmake/boost_fetch.cmake @@ -0,0 +1,73 @@ +# 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 + +if(NOT COMMAND FetchContent_Populate) + + if(CMAKE_VERSION VERSION_LESS 3.11) + + message(STATUS "Fetching FetchContent.cmake") + + file(DOWNLOAD + "https://gitlab.kitware.com/cmake/cmake/raw/v3.11.3/Modules/FetchContent.cmake" + "${CMAKE_BINARY_DIR}/Modules/FetchContent.cmake" + ) + + file(DOWNLOAD + "https://gitlab.kitware.com/cmake/cmake/raw/v3.11.3/Modules/FetchContent/CMakeLists.cmake.in" + "${CMAKE_BINARY_DIR}/Modules/FetchContent/CMakeLists.cmake.in" + ) + + include(${CMAKE_BINARY_DIR}/Modules/FetchContent.cmake) + + else() + + include(FetchContent) + + endif() + +endif() + +function(boost_fetch) + + cmake_parse_arguments(_ "" "TAG" "" ${ARGN}) + + if(NOT __UNPARSED_ARGUMENTS) + + message(FATAL_ERROR "boost_fetch: missing required argument, repository name") + return() + + endif() + + list(GET __UNPARSED_ARGUMENTS 0 REPO) + list(REMOVE_AT __UNPARSED_ARGUMENTS 0) + + if(__UNPARSED_ARGUMENTS) + + message(WARNING "boost_fetch: extra arguments ignored: ${__UNPARSED_ARGUMENTS}") + + endif() + + if(NOT __TAG) + + set(__TAG master) + + endif() + + string(MAKE_C_IDENTIFIER ${REPO} NAME) + + message(STATUS "Fetching ${REPO}:${__TAG}") + + if(CMAKE_VERSION VERSION_LESS 3.6) + + FetchContent_Populate(${NAME} QUIET GIT_REPOSITORY "https://github.com/${REPO}" GIT_TAG ${__TAG}) + + else() + + FetchContent_Populate(${NAME} QUIET GIT_REPOSITORY "https://github.com/${REPO}" GIT_TAG ${__TAG} GIT_SHALLOW 1) + + endif() + + add_subdirectory(${${NAME}_SOURCE_DIR} ${${NAME}_BINARY_DIR}) + +endfunction(boost_fetch) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ab17ae1..b3cfae6 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -18,6 +18,6 @@ boost_test(TYPE run-fail SOURCES run_fail.cpp) boost_test_jamfile(FILE Jamfile PREFIX BoostMinCMake2) -# +# arguments -boost_test(TYPE run SOURCES arguments.cpp ARGUMENTS pumpkin) +boost_test(TYPE run SOURCES arguments.cpp ARGUMENTS pumpkin LIBRARIES Boost::core) diff --git a/test/arguments.cpp b/test/arguments.cpp index 36c5a9b..8ebe8ed 100644 --- a/test/arguments.cpp +++ b/test/arguments.cpp @@ -2,17 +2,17 @@ // 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 -#include +#include #include -#define TEST(expr) if(!(expr)) { std::cerr << __FILE__ << "(" << __LINE__ << "): test '" #expr "' failed." << std::endl; r = 1; } - int main( int ac, char const* av[] ) { - int r = 0; + BOOST_TEST_EQ( ac, 2 ); - TEST( ac == 2 ) - TEST( ac >= 2 && strcmp( av[1], "pumpkin" ) == 0 ) + if( ac >= 2 ) + { + BOOST_TEST_CSTR_EQ( av[1], "pumpkin" ); + } - return r; + return boost::report_errors(); }