1
0
mirror of https://github.com/CLIUtils/CLI11.git synced 2025-04-29 20:23:55 +00:00

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
This commit is contained in:
Henry Schreiner 2018-03-09 08:30:22 +01:00 committed by GitHub
parent 5186158442
commit f089255ad0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 152 additions and 26 deletions

View File

@ -5,12 +5,17 @@ branches:
install: install:
- set PATH=C:\Python36;%PATH% - set PATH=C:\Python36;%PATH%
- cmake --version - cmake --version
- pip install conan
- conan user
- conan --version
build_script: build_script:
- mkdir build - mkdir build
- cd build - cd build
- cmake .. -DCLI_SINGLE_FILE_TESTS=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_GENERATOR="Visual Studio 14 2015" - cmake .. -DCLI_SINGLE_FILE_TESTS=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_GENERATOR="Visual Studio 14 2015"
- cmake --build . - cmake --build .
- cd ..
- conan create . CLIUtils/CLI11
test_script: test_script:
- ctest --output-on-failure -C Debug - ctest --output-on-failure -C Debug

View File

@ -1,6 +1,7 @@
set -evx set -evx
cd ${TRAVIS_BUILD_DIR} cd ${TRAVIS_BUILD_DIR}
mkdir -p build
cd build cd build
cmake .. -DCLI_SINGLE_FILE_TESTS=OFF -DCLI_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Coverage cmake .. -DCLI_SINGLE_FILE_TESTS=OFF -DCLI_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Coverage
cmake --build . -- -j2 cmake --build . -- -j2

1
.gitignore vendored
View File

@ -1,6 +1,7 @@
a.out* a.out*
*.swp *.swp
/*build* /*build*
/test_package/build
/Makefile /Makefile
/CMakeFiles/* /CMakeFiles/*
/cmake_install.cmake /cmake_install.cmake

View File

@ -30,8 +30,11 @@ matrix:
- clang-tidy-3.9 - clang-tidy-3.9
env: env:
- COMPILER=3.9 - COMPILER=3.9
- CHECK_STYLE=yes
- CLI_CXX_STD=14 - CLI_CXX_STD=14
script:
- cd "${TRAVIS_BUILD_DIR}"
- scripts/check_style.sh
- .ci/check_tidy.sh
- compiler: clang - compiler: clang
addons: addons:
apt: apt:
@ -39,8 +42,13 @@ matrix:
- clang-3.5 - clang-3.5
env: env:
- COMPILER=3.5 - COMPILER=3.5
- DEPLOY_MAT=yes
- DOXYFILE=$TRAVIS_BUILD_DIR/docs/Doxyfile - DOXYFILE=$TRAVIS_BUILD_DIR/docs/Doxyfile
after_success:
- |
if [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]
then
echo "Updating docs" && cd $TRAVIS_BUILD_DIR && .ci/build_docs.sh
fi
- compiler: gcc - compiler: gcc
addons: addons:
apt: apt:
@ -52,8 +60,12 @@ matrix:
- lcov - lcov
env: env:
- COMPILER=6 - COMPILER=6
- COVERALLS=yes
- CLI_CXX_STD=14 - CLI_CXX_STD=14
before_install:
- DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
- cd $TRAVIS_BUILD_DIR
- . .ci/build_lcov.sh
- .ci/run_codecov.sh
- compiler: gcc - compiler: gcc
addons: addons:
apt: apt:
@ -61,38 +73,34 @@ matrix:
- g++-4.7 - g++-4.7
env: env:
- COMPILER=4.7 - COMPILER=4.7
- os: osx
before_install: before_install:
- python -m pip install --user conan
- conan user
after_success:
- conan create . CLIUtils/CLI11
- os: osx
compiler: clang
before_install:
- brew update
- echo 'brew "python"' > Brewfile
- echo 'brew "conan"' >> Brewfile
- brew bundle
- python -m ensurepip --user - python -m ensurepip --user
- conan user
after_success:
- conan create . CLIUtils/CLI11
install: install:
- python -c 'import sys; print(sys.version_info[:])' - python -c 'import sys; print(sys.version_info[:])'
- DEPS_DIR="${TRAVIS_BUILD_DIR}/deps" - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd $TRAVIS_BUILD_DIR && . .ci/prepare_altern.sh ; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then cd $TRAVIS_BUILD_DIR && . .ci/prepare_altern.sh ; fi
- if [ "$TRAVIS_OS_NAME" = "linux" ] ; then cd $TRAVIS_BUILD_DIR && . .ci/build_cmake.sh ; fi - if [ "$TRAVIS_OS_NAME" = "linux" ] ; then cd $TRAVIS_BUILD_DIR && . .ci/build_cmake.sh ; fi
- if [ "$TRAVIS_OS_NAME" = "linux" ] ; then cd $TRAVIS_BUILD_DIR && . .ci/build_doxygen.sh ; fi - if [ "$TRAVIS_OS_NAME" = "linux" ] ; then cd $TRAVIS_BUILD_DIR && . .ci/build_doxygen.sh ; fi
- if [ -n "$COVERALLS" ] ; then cd $TRAVIS_BUILD_DIR && . .ci/build_lcov.sh ; fi
- cd "${DEPS_DIR}" - cd "${DEPS_DIR}"
- if [ "$(python -c 'import sys; print(sys.version_info[0])')" = "2" ] ; then python -m pip install --user pathlib ; fi - if [ "$(python -c 'import sys; print(sys.version_info[0])')" = "2" ] ; then python -m pip install --user pathlib ; fi
- cmake --version - cmake --version
script: script:
- cd "${TRAVIS_BUILD_DIR}" - cd "${TRAVIS_BUILD_DIR}"
- | - .ci/travis.sh
if [ -n "$CHECK_STYLE" ]
then
scripts/check_style.sh
.ci/check_tidy.sh
else
.ci/travis.sh
fi
after_success:
- if [ -n "$COVERALLS" ] ; then cd $TRAVIS_BUILD_DIR && .ci/run_codecov.sh ; fi
- echo "${TRAVIS_BRANCH}"
- echo "${TRAVIS_PULL_REQUEST}"
- |
if [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ] && [ -n "$DEPLOY_MAT" ]
then
echo "Updating docs" && cd $TRAVIS_BUILD_DIR && .ci/build_docs.sh
fi
deploy: deploy:
provider: releases provider: releases
api_key: api_key:

View File

@ -1,8 +1,8 @@
cmake_minimum_required(VERSION 3.4 FATAL_ERROR) cmake_minimum_required(VERSION 3.4 FATAL_ERROR)
project(CLI11 CXX) project(CLI11 LANGUAGES CXX)
SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
set(CLI_CXX_STD "11" CACHE STRING "The CMake standard to require") set(CLI_CXX_STD "11" CACHE STRING "The CMake standard to require")
@ -51,10 +51,43 @@ endif()
file(GLOB CLI_headers "${CMAKE_CURRENT_SOURCE_DIR}/include/CLI/*") file(GLOB CLI_headers "${CMAKE_CURRENT_SOURCE_DIR}/include/CLI/*")
# To see in IDE, must be listed for target # To see in IDE, must be listed for target
add_library(CLI11 INTERFACE) add_library(CLI11 INTERFACE)
target_include_directories(CLI11 INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include")
# Duplicated because CMake adds the current source dir if you don't.
target_include_directories(CLI11 INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
# Make add_subdirectory work like find_package
add_library(CLI11::CLI11 ALIAS CLI11)
# This folder should be installed
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/CLI DESTINATION include) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/CLI DESTINATION include)
# Use find_package on the installed package
# Since we have no custom code, we can directly write this
# to Config.cmake (otherwise we'd have a custom config and would
# import Targets.cmake
# Make an export target
install(TARGETS CLI11
EXPORT CLI11Targets)
# Install the export target as a file
install(EXPORT CLI11Targets
FILE CLI11Config.cmake
NAMESPACE CLI11::
DESTINATION lib/cmake/CLI11)
# Use find_package on the installed package
export(TARGETS CLI11
NAMESPACE CLI11::
FILE CLI11Targets.cmake)
# Register in the user cmake package registry
export(PACKAGE CLI11)
# Single file test # Single file test
find_package(PythonInterp) find_package(PythonInterp)
if(CUR_PROJ AND PYTHONINTERP_FOUND) if(CUR_PROJ AND PYTHONINTERP_FOUND)

View File

@ -15,7 +15,7 @@ download_project(PROJ googletest
) )
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
add_subdirectory(${googletest_SOURCE_DIR} ${googletest_SOURCE_DIR}) add_subdirectory(${googletest_SOURCE_DIR} ${googletest_SOURCE_DIR} EXCLUDE_FROM_ALL)
if (CMAKE_CONFIGURATION_TYPES) if (CMAKE_CONFIGURATION_TYPES)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}

23
conanfile.py Normal file
View File

@ -0,0 +1,23 @@
from conans import ConanFile, CMake
class HelloConan(ConanFile):
name = "CLI11"
version = "1.3.0"
url = "https://github.com/CLIUtils/CLI11"
settings = "os", "compiler", "arch", "build_type"
license = "BSD 3 clause"
description = "Command Line Interface toolkit for C++11"
exports_sources = "LICENCE", "include/*", "cmake/*", "CMakeLists.txt", "tests/*"
def build(self): # this is not building a library, just tests
cmake = CMake(self)
cmake.definitions["CLI_EXAMPLES"] = "OFF"
cmake.definitions["CLI_SINGLE_FILE"] = "OFF"
cmake.configure()
cmake.build()
cmake.test()
cmake.install()
def package_id(self):
self.info.header_only()

View File

@ -0,0 +1,16 @@
project(PackageTest CXX)
cmake_minimum_required(VERSION 3.1)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
message(STATUS "${CMAKE_PREFIX_PATH}")
find_package(CLI11 CONFIG REQUIRED)
add_executable(example example.cpp)
target_link_libraries(example CLI11::CLI11)

19
test_package/conanfile.py Normal file
View File

@ -0,0 +1,19 @@
from conans import ConanFile, CMake
import os
class HelloTestConan(ConanFile):
settings = "os", "compiler", "build_type", "arch"
generators = "cmake"
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
def imports(self):
self.copy("*.dll", dst="bin", src="bin")
self.copy("*.dylib*", dst="bin", src="lib")
def test(self):
os.chdir("bin")
self.run(".%sexample" % os.sep)

20
test_package/example.cpp Normal file
View File

@ -0,0 +1,20 @@
// This file is a "Hello, world!" CLI11 program
#include "CLI/CLI.hpp"
#include <iostream>
int main(int argc, char **argv) {
CLI::App app("Some nice discription");
int x = 0;
app.add_option("-x", x, "an integer value", true /* show default */);
bool flag;
app.add_flag("-f,--flag", flag, "a flag option");
CLI11_PARSE(app, argc, argv);
return 0;
}