Commit f089255ad04fd3306ebca7d9dcc46b215202ece6
Committed by
GitHub
1 parent
51861584
Adding support for conan.io (#83)
* Adding fix for #75, rename requires to needs * Removing check for install commands (should still be run in subproject) * Adding conan build * Some small changes to CMake * Adding nicer Travis code * Adding package test, find works now
Showing
10 changed files
with
151 additions
and
25 deletions
.appveyor.yml
| @@ -5,12 +5,17 @@ branches: | @@ -5,12 +5,17 @@ branches: | ||
| 5 | install: | 5 | install: |
| 6 | - set PATH=C:\Python36;%PATH% | 6 | - set PATH=C:\Python36;%PATH% |
| 7 | - cmake --version | 7 | - cmake --version |
| 8 | + - pip install conan | ||
| 9 | + - conan user | ||
| 10 | + - conan --version | ||
| 8 | 11 | ||
| 9 | build_script: | 12 | build_script: |
| 10 | - mkdir build | 13 | - mkdir build |
| 11 | - cd build | 14 | - cd build |
| 12 | - cmake .. -DCLI_SINGLE_FILE_TESTS=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_GENERATOR="Visual Studio 14 2015" | 15 | - cmake .. -DCLI_SINGLE_FILE_TESTS=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_GENERATOR="Visual Studio 14 2015" |
| 13 | - cmake --build . | 16 | - cmake --build . |
| 17 | + - cd .. | ||
| 18 | + - conan create . CLIUtils/CLI11 | ||
| 14 | 19 | ||
| 15 | test_script: | 20 | test_script: |
| 16 | - ctest --output-on-failure -C Debug | 21 | - ctest --output-on-failure -C Debug |
.ci/run_codecov.sh
| 1 | set -evx | 1 | set -evx |
| 2 | 2 | ||
| 3 | cd ${TRAVIS_BUILD_DIR} | 3 | cd ${TRAVIS_BUILD_DIR} |
| 4 | +mkdir -p build | ||
| 4 | cd build | 5 | cd build |
| 5 | cmake .. -DCLI_SINGLE_FILE_TESTS=OFF -DCLI_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Coverage | 6 | cmake .. -DCLI_SINGLE_FILE_TESTS=OFF -DCLI_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Coverage |
| 6 | cmake --build . -- -j2 | 7 | cmake --build . -- -j2 |
.gitignore
.travis.yml
| @@ -30,8 +30,11 @@ matrix: | @@ -30,8 +30,11 @@ matrix: | ||
| 30 | - clang-tidy-3.9 | 30 | - clang-tidy-3.9 |
| 31 | env: | 31 | env: |
| 32 | - COMPILER=3.9 | 32 | - COMPILER=3.9 |
| 33 | - - CHECK_STYLE=yes | ||
| 34 | - CLI_CXX_STD=14 | 33 | - CLI_CXX_STD=14 |
| 34 | + script: | ||
| 35 | + - cd "${TRAVIS_BUILD_DIR}" | ||
| 36 | + - scripts/check_style.sh | ||
| 37 | + - .ci/check_tidy.sh | ||
| 35 | - compiler: clang | 38 | - compiler: clang |
| 36 | addons: | 39 | addons: |
| 37 | apt: | 40 | apt: |
| @@ -39,8 +42,13 @@ matrix: | @@ -39,8 +42,13 @@ matrix: | ||
| 39 | - clang-3.5 | 42 | - clang-3.5 |
| 40 | env: | 43 | env: |
| 41 | - COMPILER=3.5 | 44 | - COMPILER=3.5 |
| 42 | - - DEPLOY_MAT=yes | ||
| 43 | - DOXYFILE=$TRAVIS_BUILD_DIR/docs/Doxyfile | 45 | - DOXYFILE=$TRAVIS_BUILD_DIR/docs/Doxyfile |
| 46 | + after_success: | ||
| 47 | + - | | ||
| 48 | + if [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ] | ||
| 49 | + then | ||
| 50 | + echo "Updating docs" && cd $TRAVIS_BUILD_DIR && .ci/build_docs.sh | ||
| 51 | + fi | ||
| 44 | - compiler: gcc | 52 | - compiler: gcc |
| 45 | addons: | 53 | addons: |
| 46 | apt: | 54 | apt: |
| @@ -52,8 +60,12 @@ matrix: | @@ -52,8 +60,12 @@ matrix: | ||
| 52 | - lcov | 60 | - lcov |
| 53 | env: | 61 | env: |
| 54 | - COMPILER=6 | 62 | - COMPILER=6 |
| 55 | - - COVERALLS=yes | ||
| 56 | - CLI_CXX_STD=14 | 63 | - CLI_CXX_STD=14 |
| 64 | + before_install: | ||
| 65 | + - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps" | ||
| 66 | + - cd $TRAVIS_BUILD_DIR | ||
| 67 | + - . .ci/build_lcov.sh | ||
| 68 | + - .ci/run_codecov.sh | ||
| 57 | - compiler: gcc | 69 | - compiler: gcc |
| 58 | addons: | 70 | addons: |
| 59 | apt: | 71 | apt: |
| @@ -61,38 +73,34 @@ matrix: | @@ -61,38 +73,34 @@ matrix: | ||
| 61 | - g++-4.7 | 73 | - g++-4.7 |
| 62 | env: | 74 | env: |
| 63 | - COMPILER=4.7 | 75 | - COMPILER=4.7 |
| 76 | + before_install: | ||
| 77 | + - python -m pip install --user conan | ||
| 78 | + - conan user | ||
| 79 | + after_success: | ||
| 80 | + - conan create . CLIUtils/CLI11 | ||
| 64 | - os: osx | 81 | - os: osx |
| 82 | + compiler: clang | ||
| 65 | before_install: | 83 | before_install: |
| 84 | + - brew update | ||
| 85 | + - echo 'brew "python"' > Brewfile | ||
| 86 | + - echo 'brew "conan"' >> Brewfile | ||
| 87 | + - brew bundle | ||
| 66 | - python -m ensurepip --user | 88 | - python -m ensurepip --user |
| 89 | + - conan user | ||
| 90 | + after_success: | ||
| 91 | + - conan create . CLIUtils/CLI11 | ||
| 67 | install: | 92 | install: |
| 68 | - python -c 'import sys; print(sys.version_info[:])' | 93 | - python -c 'import sys; print(sys.version_info[:])' |
| 69 | - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps" | 94 | - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps" |
| 70 | - if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd $TRAVIS_BUILD_DIR && . .ci/prepare_altern.sh ; fi | 95 | - if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd $TRAVIS_BUILD_DIR && . .ci/prepare_altern.sh ; fi |
| 71 | - if [ "$TRAVIS_OS_NAME" = "linux" ] ; then cd $TRAVIS_BUILD_DIR && . .ci/build_cmake.sh ; fi | 96 | - if [ "$TRAVIS_OS_NAME" = "linux" ] ; then cd $TRAVIS_BUILD_DIR && . .ci/build_cmake.sh ; fi |
| 72 | - if [ "$TRAVIS_OS_NAME" = "linux" ] ; then cd $TRAVIS_BUILD_DIR && . .ci/build_doxygen.sh ; fi | 97 | - if [ "$TRAVIS_OS_NAME" = "linux" ] ; then cd $TRAVIS_BUILD_DIR && . .ci/build_doxygen.sh ; fi |
| 73 | -- if [ -n "$COVERALLS" ] ; then cd $TRAVIS_BUILD_DIR && . .ci/build_lcov.sh ; fi | ||
| 74 | - cd "${DEPS_DIR}" | 98 | - cd "${DEPS_DIR}" |
| 75 | - if [ "$(python -c 'import sys; print(sys.version_info[0])')" = "2" ] ; then python -m pip install --user pathlib ; fi | 99 | - if [ "$(python -c 'import sys; print(sys.version_info[0])')" = "2" ] ; then python -m pip install --user pathlib ; fi |
| 76 | - cmake --version | 100 | - cmake --version |
| 77 | script: | 101 | script: |
| 78 | - cd "${TRAVIS_BUILD_DIR}" | 102 | - cd "${TRAVIS_BUILD_DIR}" |
| 79 | -- | | ||
| 80 | - if [ -n "$CHECK_STYLE" ] | ||
| 81 | - then | ||
| 82 | - scripts/check_style.sh | ||
| 83 | - .ci/check_tidy.sh | ||
| 84 | - else | ||
| 85 | - .ci/travis.sh | ||
| 86 | - fi | ||
| 87 | -after_success: | ||
| 88 | -- if [ -n "$COVERALLS" ] ; then cd $TRAVIS_BUILD_DIR && .ci/run_codecov.sh ; fi | ||
| 89 | -- echo "${TRAVIS_BRANCH}" | ||
| 90 | -- echo "${TRAVIS_PULL_REQUEST}" | ||
| 91 | -- | | ||
| 92 | - if [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ] && [ -n "$DEPLOY_MAT" ] | ||
| 93 | - then | ||
| 94 | - echo "Updating docs" && cd $TRAVIS_BUILD_DIR && .ci/build_docs.sh | ||
| 95 | - fi | 103 | +- .ci/travis.sh |
| 96 | deploy: | 104 | deploy: |
| 97 | provider: releases | 105 | provider: releases |
| 98 | api_key: | 106 | api_key: |
CMakeLists.txt
| 1 | cmake_minimum_required(VERSION 3.4 FATAL_ERROR) | 1 | cmake_minimum_required(VERSION 3.4 FATAL_ERROR) |
| 2 | 2 | ||
| 3 | -project(CLI11 CXX) | 3 | +project(CLI11 LANGUAGES CXX) |
| 4 | 4 | ||
| 5 | -SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) | 5 | +SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) |
| 6 | 6 | ||
| 7 | set(CLI_CXX_STD "11" CACHE STRING "The CMake standard to require") | 7 | set(CLI_CXX_STD "11" CACHE STRING "The CMake standard to require") |
| 8 | 8 | ||
| @@ -51,10 +51,43 @@ endif() | @@ -51,10 +51,43 @@ endif() | ||
| 51 | 51 | ||
| 52 | file(GLOB CLI_headers "${CMAKE_CURRENT_SOURCE_DIR}/include/CLI/*") | 52 | file(GLOB CLI_headers "${CMAKE_CURRENT_SOURCE_DIR}/include/CLI/*") |
| 53 | # To see in IDE, must be listed for target | 53 | # To see in IDE, must be listed for target |
| 54 | + | ||
| 54 | add_library(CLI11 INTERFACE) | 55 | add_library(CLI11 INTERFACE) |
| 55 | -target_include_directories(CLI11 INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include") | 56 | + |
| 57 | +# Duplicated because CMake adds the current source dir if you don't. | ||
| 58 | +target_include_directories(CLI11 INTERFACE | ||
| 59 | + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> | ||
| 60 | + $<INSTALL_INTERFACE:include>) | ||
| 61 | + | ||
| 62 | +# Make add_subdirectory work like find_package | ||
| 63 | +add_library(CLI11::CLI11 ALIAS CLI11) | ||
| 64 | + | ||
| 65 | +# This folder should be installed | ||
| 56 | install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/CLI DESTINATION include) | 66 | install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/CLI DESTINATION include) |
| 57 | 67 | ||
| 68 | +# Use find_package on the installed package | ||
| 69 | +# Since we have no custom code, we can directly write this | ||
| 70 | +# to Config.cmake (otherwise we'd have a custom config and would | ||
| 71 | +# import Targets.cmake | ||
| 72 | + | ||
| 73 | +# Make an export target | ||
| 74 | +install(TARGETS CLI11 | ||
| 75 | + EXPORT CLI11Targets) | ||
| 76 | + | ||
| 77 | +# Install the export target as a file | ||
| 78 | +install(EXPORT CLI11Targets | ||
| 79 | + FILE CLI11Config.cmake | ||
| 80 | + NAMESPACE CLI11:: | ||
| 81 | + DESTINATION lib/cmake/CLI11) | ||
| 82 | + | ||
| 83 | +# Use find_package on the installed package | ||
| 84 | +export(TARGETS CLI11 | ||
| 85 | + NAMESPACE CLI11:: | ||
| 86 | + FILE CLI11Targets.cmake) | ||
| 87 | + | ||
| 88 | +# Register in the user cmake package registry | ||
| 89 | +export(PACKAGE CLI11) | ||
| 90 | + | ||
| 58 | # Single file test | 91 | # Single file test |
| 59 | find_package(PythonInterp) | 92 | find_package(PythonInterp) |
| 60 | if(CUR_PROJ AND PYTHONINTERP_FOUND) | 93 | if(CUR_PROJ AND PYTHONINTERP_FOUND) |
cmake/AddGoogletest.cmake
| @@ -15,7 +15,7 @@ download_project(PROJ googletest | @@ -15,7 +15,7 @@ download_project(PROJ googletest | ||
| 15 | ) | 15 | ) |
| 16 | 16 | ||
| 17 | set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) | 17 | set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) |
| 18 | -add_subdirectory(${googletest_SOURCE_DIR} ${googletest_SOURCE_DIR}) | 18 | +add_subdirectory(${googletest_SOURCE_DIR} ${googletest_SOURCE_DIR} EXCLUDE_FROM_ALL) |
| 19 | 19 | ||
| 20 | if (CMAKE_CONFIGURATION_TYPES) | 20 | if (CMAKE_CONFIGURATION_TYPES) |
| 21 | add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} | 21 | add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} |
conanfile.py
0 โ 100644
| 1 | +from conans import ConanFile, CMake | ||
| 2 | + | ||
| 3 | +class HelloConan(ConanFile): | ||
| 4 | + name = "CLI11" | ||
| 5 | + version = "1.3.0" | ||
| 6 | + url = "https://github.com/CLIUtils/CLI11" | ||
| 7 | + settings = "os", "compiler", "arch", "build_type" | ||
| 8 | + license = "BSD 3 clause" | ||
| 9 | + description = "Command Line Interface toolkit for C++11" | ||
| 10 | + | ||
| 11 | + exports_sources = "LICENCE", "include/*", "cmake/*", "CMakeLists.txt", "tests/*" | ||
| 12 | + | ||
| 13 | + def build(self): # this is not building a library, just tests | ||
| 14 | + cmake = CMake(self) | ||
| 15 | + cmake.definitions["CLI_EXAMPLES"] = "OFF" | ||
| 16 | + cmake.definitions["CLI_SINGLE_FILE"] = "OFF" | ||
| 17 | + cmake.configure() | ||
| 18 | + cmake.build() | ||
| 19 | + cmake.test() | ||
| 20 | + cmake.install() | ||
| 21 | + | ||
| 22 | + def package_id(self): | ||
| 23 | + self.info.header_only() |
test_package/CMakeLists.txt
0 โ 100644
| 1 | +project(PackageTest CXX) | ||
| 2 | +cmake_minimum_required(VERSION 3.1) | ||
| 3 | + | ||
| 4 | +include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) | ||
| 5 | +conan_basic_setup() | ||
| 6 | + | ||
| 7 | +set(CMAKE_CXX_STANDARD 11) | ||
| 8 | +set(CMAKE_CXX_EXTENSIONS OFF) | ||
| 9 | +set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||
| 10 | + | ||
| 11 | +message(STATUS "${CMAKE_PREFIX_PATH}") | ||
| 12 | + | ||
| 13 | +find_package(CLI11 CONFIG REQUIRED) | ||
| 14 | + | ||
| 15 | +add_executable(example example.cpp) | ||
| 16 | +target_link_libraries(example CLI11::CLI11) |
test_package/conanfile.py
0 โ 100644
| 1 | +from conans import ConanFile, CMake | ||
| 2 | +import os | ||
| 3 | + | ||
| 4 | +class HelloTestConan(ConanFile): | ||
| 5 | + settings = "os", "compiler", "build_type", "arch" | ||
| 6 | + generators = "cmake" | ||
| 7 | + | ||
| 8 | + def build(self): | ||
| 9 | + cmake = CMake(self) | ||
| 10 | + cmake.configure() | ||
| 11 | + cmake.build() | ||
| 12 | + | ||
| 13 | + def imports(self): | ||
| 14 | + self.copy("*.dll", dst="bin", src="bin") | ||
| 15 | + self.copy("*.dylib*", dst="bin", src="lib") | ||
| 16 | + | ||
| 17 | + def test(self): | ||
| 18 | + os.chdir("bin") | ||
| 19 | + self.run(".%sexample" % os.sep) |
test_package/example.cpp
0 โ 100644
| 1 | +// This file is a "Hello, world!" CLI11 program | ||
| 2 | + | ||
| 3 | +#include "CLI/CLI.hpp" | ||
| 4 | + | ||
| 5 | +#include <iostream> | ||
| 6 | + | ||
| 7 | +int main(int argc, char **argv) { | ||
| 8 | + | ||
| 9 | + CLI::App app("Some nice discription"); | ||
| 10 | + | ||
| 11 | + int x = 0; | ||
| 12 | + app.add_option("-x", x, "an integer value", true /* show default */); | ||
| 13 | + | ||
| 14 | + bool flag; | ||
| 15 | + app.add_flag("-f,--flag", flag, "a flag option"); | ||
| 16 | + | ||
| 17 | + CLI11_PARSE(app, argc, argv); | ||
| 18 | + | ||
| 19 | + return 0; | ||
| 20 | +} |