mirror of
https://github.com/CLIUtils/CLI11.git
synced 2025-05-01 13:13:53 +00:00
fix: CMake package and pkgconfig rework (#916)
add tests that exercise the CMake module and pkg-config files --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
c299ddb2b1
commit
c071cb6297
53
.github/workflows/tests.yml
vendored
53
.github/workflows/tests.yml
vendored
@ -35,7 +35,7 @@ jobs:
|
||||
cmake -S . -B build \
|
||||
-DCMAKE_CXX_STANDARD=${{matrix.std}} \
|
||||
-DCLI11_SINGLE_FILE_TESTS=OFF \
|
||||
-DCLI11_EXAMPLES=OFF \
|
||||
-DCLI11_BUILD_EXAMPLES=OFF \
|
||||
-DCLI11_PRECOMPILED=${{matrix.precompile}} \
|
||||
-DCMAKE_BUILD_TYPE=Coverage
|
||||
|
||||
@ -139,6 +139,57 @@ jobs:
|
||||
- name: Build
|
||||
run: meson compile -C build-meson
|
||||
|
||||
install:
|
||||
name: install tests
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: true
|
||||
- name: Configure
|
||||
run: cmake -S . -B build -DCLI11_INSTALL_PACKAGE_TESTS=ON -DCMAKE_INSTALL_PREFIX=/home/runner/work/install
|
||||
- name: Build
|
||||
run: cmake --build build -j2
|
||||
- name: install
|
||||
run: cmake --install build
|
||||
- name: Run tests
|
||||
run: ctest --output-on-failure -L Packaging
|
||||
working-directory: build
|
||||
|
||||
install-precompiled:
|
||||
name: install tests precompiled
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: true
|
||||
- name: Configure
|
||||
run: cmake -S . -B build -DCLI11_INSTALL_PACKAGE_TESTS=ON -DCMAKE_INSTALL_PREFIX=/home/runner/work/install -DCLI11_PRECOMPILED=ON
|
||||
- name: Build
|
||||
run: cmake --build build -j2
|
||||
- name: install
|
||||
run: cmake --install build
|
||||
- name: Run tests
|
||||
run: ctest --output-on-failure -L Packaging
|
||||
working-directory: build
|
||||
|
||||
install-single_file:
|
||||
name: install tests single file
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: true
|
||||
- name: Configure
|
||||
run: cmake -S . -B build -DCLI11_INSTALL_PACKAGE_TESTS=ON -DCMAKE_INSTALL_PREFIX=/home/runner/work/install -DCLI11_SINGLE_FILE=ON
|
||||
- name: Build
|
||||
run: cmake --build build -j2
|
||||
- name: install
|
||||
run: cmake --install build
|
||||
- name: Run tests
|
||||
run: ctest --output-on-failure -L Packaging
|
||||
working-directory: build
|
||||
|
||||
cmake-config-ubuntu-2004:
|
||||
name: CMake config check (Ubuntu 20.04)
|
||||
runs-on: ubuntu-20.04
|
||||
|
@ -1,3 +1,7 @@
|
||||
if(CLI11_PRECOMPILED)
|
||||
configure_file("cmake/CLI11precompiled.pc.in" "CLI11.pc" @ONLY)
|
||||
else()
|
||||
configure_file("cmake/CLI11.pc.in" "CLI11.pc" @ONLY)
|
||||
endif()
|
||||
|
||||
install(FILES "${PROJECT_BINARY_DIR}/CLI11.pc" DESTINATION "${CMAKE_INSTALL_DATADIR}/pkgconfig")
|
||||
install(FILES "${PROJECT_BINARY_DIR}/CLI11.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||
|
11
cmake/CLI11precompiled.pc.in
Normal file
11
cmake/CLI11precompiled.pc.in
Normal file
@ -0,0 +1,11 @@
|
||||
prefix=@CMAKE_INSTALL_PREFIX@
|
||||
exec_prefix=${prefix}
|
||||
includedir=${prefix}/include
|
||||
libdir=${exec_prefix}/lib
|
||||
|
||||
Name: CLI11
|
||||
Description: C++ command line parser
|
||||
Version: @PROJECT_VERSION@
|
||||
|
||||
Cflags: -I${includedir} -DCLI11_COMPILE
|
||||
Libs: -L${libdir} -lCLI11
|
10
cmake/CLIsingle.hpp.in
Normal file
10
cmake/CLIsingle.hpp.in
Normal file
@ -0,0 +1,10 @@
|
||||
// Copyright (c) 2017-2023, University of Cincinnati, developed by Henry Schreiner
|
||||
// under NSF AWARD 1414736 and by the respective contributors.
|
||||
// All rights reserved.
|
||||
//
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
#pragma once
|
||||
|
||||
//single file header
|
||||
#include "../CLI11.hpp"
|
@ -112,6 +112,10 @@ if(CLI11_SINGLE_FILE)
|
||||
if(CLI11_INSTALL)
|
||||
install(FILES "${PROJECT_BINARY_DIR}/include/CLI11.hpp"
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
configure_file("${CLI11_SOURCE_DIR}/cmake/CLIsingle.hpp.in"
|
||||
"${PROJECT_BINARY_DIR}/include/CLI/CLI.hpp" @ONLY)
|
||||
install(FILES "${PROJECT_BINARY_DIR}/include/CLI/CLI.hpp"
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/CLI)
|
||||
endif()
|
||||
add_library(CLI11_SINGLE INTERFACE)
|
||||
target_link_libraries(CLI11_SINGLE INTERFACE CLI11)
|
||||
@ -129,7 +133,7 @@ if(CLI11_INSTALL)
|
||||
if(NOT CLI11_SINGLE_FILE)
|
||||
install(FILES ${CLI11_headers} ${CLI11_library_headers}
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/CLI")
|
||||
if(NOT CLI11_COMPILE)
|
||||
if(NOT CLI11_PRECOMPILED)
|
||||
install(FILES ${CLI11_impl_headers} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/CLI/impl")
|
||||
endif()
|
||||
endif()
|
||||
|
@ -277,3 +277,80 @@ if(CMAKE_BUILD_TYPE STREQUAL Coverage)
|
||||
${CLI11_TESTS}
|
||||
${CLI11_MULTIONLY_TESTS})
|
||||
endif()
|
||||
|
||||
set(CLI11_PACKAGE_SEARCH_LOC "")
|
||||
|
||||
# tests of the cmake package and pkg-config package
|
||||
if(CLI11_INSTALL_PACKAGE_TESTS)
|
||||
if(NOT MSVC)
|
||||
set(package_test_command --test-command "${CMAKE_CTEST_COMMAND}")
|
||||
else() # don't try to run the tests on MSVC since that would require copying the dll's and doing
|
||||
# some other setup that isn't that important to run on all OS
|
||||
set(package_test_command)
|
||||
endif()
|
||||
|
||||
if(CMAKE_BUILD_TYPE)
|
||||
set(CLI11_PACKAGE_TEST_BUILD_TYPE ${CMAKE_BUILD_TYPE})
|
||||
else()
|
||||
set(CLI11_PACKAGE_TEST_BUILD_TYPE Release)
|
||||
endif()
|
||||
|
||||
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/find_package_tests")
|
||||
|
||||
if(MSVC AND ${CMAKE_VERSION} VERSION_GREATER 3.12.9)
|
||||
# Tests for other CMake projects including and using CLI11 using find_package
|
||||
add_test(
|
||||
NAME find-package-testsA
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" -A "${CMAKE_GENERATOR_PLATFORM}"
|
||||
"-DCLI11_DIR=${CMAKE_INSTALL_PREFIX}" "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
|
||||
"-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}"
|
||||
"-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/find_package_tests"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/find_package_tests")
|
||||
else()
|
||||
add_test(
|
||||
NAME find-package-testsA
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" "-DCLI11_DIR=${CMAKE_INSTALL_PREFIX}"
|
||||
"-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}" "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}"
|
||||
"-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/find_package_tests"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/find_package_tests")
|
||||
endif()
|
||||
|
||||
add_test(NAME find-package-testsB
|
||||
COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/find_package_tests"
|
||||
--config ${CLI11_PACKAGE_TEST_BUILD_TYPE})
|
||||
|
||||
add_test(
|
||||
NAME find-package-testsC
|
||||
COMMAND ${CMAKE_CTEST_COMMAND} -C ${CLI11_PACKAGE_TEST_BUILD_TYPE}
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/find_package_tests")
|
||||
set_property(TEST find-package-testsA PROPERTY LABELS Packaging)
|
||||
set_property(TEST find-package-testsB PROPERTY LABELS Packaging)
|
||||
set_property(TEST find-package-testsB PROPERTY DEPENDS find-package-testsA)
|
||||
set_property(TEST find-package-testsC PROPERTY LABELS Packaging)
|
||||
set_property(TEST find-package-testsC PROPERTY DEPENDS find-package-testsB)
|
||||
|
||||
if(NOT MSVC)
|
||||
# Tests for other CMake projects using the package_config files
|
||||
add_test(
|
||||
package-config-tests
|
||||
${CMAKE_CTEST_COMMAND}
|
||||
-C
|
||||
--build-and-test
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/package_config_tests"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/package_config_tests"
|
||||
--build-generator
|
||||
"${CMAKE_GENERATOR}"
|
||||
--build-generator-platform
|
||||
"${CMAKE_GENERATOR_PLATFORM}"
|
||||
--build-options
|
||||
"-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
|
||||
"-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}"
|
||||
"-DCLI11_DIR=${CMAKE_INSTALL_PREFIX}"
|
||||
${package_test_command})
|
||||
set_property(TEST package-config-tests PROPERTY LABELS Packaging)
|
||||
endif()
|
||||
endif()
|
||||
|
19
tests/find_package_tests/CMakeLists.txt
Normal file
19
tests/find_package_tests/CMakeLists.txt
Normal file
@ -0,0 +1,19 @@
|
||||
cmake_minimum_required(VERSION 3.10...3.26)
|
||||
|
||||
project(CLI11-find-package-test)
|
||||
|
||||
include(CTest)
|
||||
|
||||
if(CLI11_DIR)
|
||||
set(CMAKE_PREFIX_PATH ${CLI11_DIR})
|
||||
endif()
|
||||
|
||||
# Test the CLI11 CMake package config
|
||||
find_package(CLI11 2.0 REQUIRED)
|
||||
|
||||
# Test the target
|
||||
add_executable(package-test ../../examples/positional_validation.cpp)
|
||||
target_link_libraries(package-test CLI11::CLI11)
|
||||
|
||||
add_test(NAME package-test1 COMMAND package-test one)
|
||||
set_property(TEST package-test1 PROPERTY PASS_REGULAR_EXPRESSION "File 1 = one")
|
21
tests/package_config_tests/CMakeLists.txt
Normal file
21
tests/package_config_tests/CMakeLists.txt
Normal file
@ -0,0 +1,21 @@
|
||||
cmake_minimum_required(VERSION 3.10...3.26)
|
||||
|
||||
project(CLI11-package-config-test)
|
||||
|
||||
include(CTest)
|
||||
|
||||
find_package(PkgConfig)
|
||||
|
||||
if(CLI11_DIR)
|
||||
set(CMAKE_PREFIX_PATH ${CLI11_DIR} ${CLI11_DIR}/lib)
|
||||
endif()
|
||||
|
||||
message(STATUS "${CLI11_DIR}-- ${CMAKE_PREFIX_PATH}")
|
||||
pkg_check_modules(CLI11 REQUIRED IMPORTED_TARGET CLI11)
|
||||
|
||||
# Test the target
|
||||
add_executable(package-config-test ../../examples/positional_validation.cpp)
|
||||
target_link_libraries(package-config-test PkgConfig::CLI11)
|
||||
|
||||
add_test(NAME package-config-test1 COMMAND package-config-test one)
|
||||
set_property(TEST package-config-test1 PROPERTY PASS_REGULAR_EXPRESSION "File 1 = one")
|
Loading…
x
Reference in New Issue
Block a user