mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2025-11-17 14:47:30 -05:00
Add SYSTEM option (#449)
* add system property for cpm_add_subdirectory * add test case for system property * lock CMake version in test workflow * refactor to make SYSTEM an extra config option and update tests * remove old comment change * use consistent CMake version and extension for all workflows * make warning more specific and try to trigger on windows * another attempt to trigger warning on MSVC * update readme * simplify test case and use git tag * add SYSTEM option to .cmake-format * forward system arg for source overrides * enable system implicitly for the single argument syntax * Use SYSTEM option for FetchContent and add_subdirectory (#441) * Use SYSTEM option for FetchContent and add_subdirectory * Add SYSTEM option to syntax and doku * Update CPM.cmake * Update .cmake-format --------- Co-authored-by: Lars Melchior <TheLartians@users.noreply.github.com> --------- Co-authored-by: Claus Klein <claus.klein@arcormail.de>
This commit is contained in:
@@ -34,6 +34,7 @@ parse:
|
||||
HTTP_USERNAME: 1
|
||||
HTTP_PASSWORD: 1
|
||||
EXCLUDE_FROM_ALL: 1
|
||||
SYSTEM: 1
|
||||
SOURCE_SUBDIR: 1
|
||||
OPTIONS: +
|
||||
cpmfindpackage:
|
||||
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
gcc:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: build all
|
||||
env:
|
||||
CC: gcc
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
clang:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v3
|
||||
- name: build all
|
||||
env:
|
||||
CC: clang
|
||||
2
.github/workflows/publish.yaml
vendored
2
.github/workflows/publish.yaml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
name: Publish CPM.cmake
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Set CPM version by tag
|
||||
run: |
|
||||
|
||||
@@ -14,7 +14,12 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup cmake
|
||||
uses: jwlawson/actions-setup-cmake@v1.13
|
||||
with:
|
||||
cmake-version: '3.25.x'
|
||||
|
||||
- name: Install format dependencies
|
||||
run: pip3 install clang-format==14.0.6 cmake_format==0.6.11 pyyaml
|
||||
@@ -20,7 +20,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: clone
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup cmake
|
||||
uses: jwlawson/actions-setup-cmake@v1.13
|
||||
with:
|
||||
cmake-version: '3.25.x'
|
||||
|
||||
- name: unit tests
|
||||
run: |
|
||||
@@ -68,6 +68,10 @@ On the other hand, if `VERSION` hasn't been explicitly specified, CPM can automa
|
||||
|
||||
If an additional optional parameter `EXCLUDE_FROM_ALL` is set to a truthy value, then any targets defined inside the dependency won't be built by default. See the [CMake docs](https://cmake.org/cmake/help/latest/prop_tgt/EXCLUDE_FROM_ALL.html) for details.
|
||||
|
||||
If an additional optional parameter `SYSTEM` is set to a truthy value, the SYSTEM directory property of the subdirectory added will be set to true.
|
||||
See the [add_subdirectory ](https://cmake.org/cmake/help/latest/command/add_subdirectory.html?highlight=add_subdirectory)
|
||||
and [SYSTEM](https://cmake.org/cmake/help/latest/prop_tgt/SYSTEM.html#prop_tgt:SYSTEM) target property for details.
|
||||
|
||||
A single-argument compact syntax is also supported:
|
||||
|
||||
```cmake
|
||||
|
||||
@@ -513,8 +513,8 @@ function(CPMAddPackage)
|
||||
if(argnLength EQUAL 1)
|
||||
cpm_parse_add_package_single_arg("${ARGN}" ARGN)
|
||||
|
||||
# The shorthand syntax implies EXCLUDE_FROM_ALL
|
||||
set(ARGN "${ARGN};EXCLUDE_FROM_ALL;YES")
|
||||
# The shorthand syntax implies EXCLUDE_FROM_ALL and SYSTEM
|
||||
set(ARGN "${ARGN};EXCLUDE_FROM_ALL;YES;SYSTEM;YES;")
|
||||
endif()
|
||||
|
||||
set(oneValueArgs
|
||||
@@ -531,6 +531,7 @@ function(CPMAddPackage)
|
||||
DOWNLOAD_COMMAND
|
||||
FIND_PACKAGE_ARGUMENTS
|
||||
NO_CACHE
|
||||
SYSTEM
|
||||
GIT_SHALLOW
|
||||
EXCLUDE_FROM_ALL
|
||||
SOURCE_SUBDIR
|
||||
@@ -626,6 +627,7 @@ function(CPMAddPackage)
|
||||
NAME "${CPM_ARGS_NAME}"
|
||||
SOURCE_DIR "${PACKAGE_SOURCE}"
|
||||
EXCLUDE_FROM_ALL "${CPM_ARGS_EXCLUDE_FROM_ALL}"
|
||||
SYSTEM "${CPM_ARGS_SYSTEM}"
|
||||
OPTIONS "${CPM_ARGS_OPTIONS}"
|
||||
SOURCE_SUBDIR "${CPM_ARGS_SOURCE_SUBDIR}"
|
||||
DOWNLOAD_ONLY "${DOWNLOAD_ONLY}"
|
||||
@@ -739,9 +741,13 @@ function(CPMAddPackage)
|
||||
endif()
|
||||
|
||||
cpm_add_subdirectory(
|
||||
"${CPM_ARGS_NAME}" "${DOWNLOAD_ONLY}"
|
||||
"${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}" "${${CPM_ARGS_NAME}_BINARY_DIR}"
|
||||
"${CPM_ARGS_EXCLUDE_FROM_ALL}" "${CPM_ARGS_OPTIONS}"
|
||||
"${CPM_ARGS_NAME}"
|
||||
"${DOWNLOAD_ONLY}"
|
||||
"${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}"
|
||||
"${${CPM_ARGS_NAME}_BINARY_DIR}"
|
||||
"${CPM_ARGS_EXCLUDE_FROM_ALL}"
|
||||
"${CPM_ARGS_SYSTEM}"
|
||||
"${CPM_ARGS_OPTIONS}"
|
||||
)
|
||||
set(PACKAGE_INFO "${PACKAGE_INFO} at ${download_directory}")
|
||||
|
||||
@@ -794,9 +800,13 @@ function(CPMAddPackage)
|
||||
endif()
|
||||
if(${populated})
|
||||
cpm_add_subdirectory(
|
||||
"${CPM_ARGS_NAME}" "${DOWNLOAD_ONLY}"
|
||||
"${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}" "${${CPM_ARGS_NAME}_BINARY_DIR}"
|
||||
"${CPM_ARGS_EXCLUDE_FROM_ALL}" "${CPM_ARGS_OPTIONS}"
|
||||
"${CPM_ARGS_NAME}"
|
||||
"${DOWNLOAD_ONLY}"
|
||||
"${${CPM_ARGS_NAME}_SOURCE_DIR}/${CPM_ARGS_SOURCE_SUBDIR}"
|
||||
"${${CPM_ARGS_NAME}_BINARY_DIR}"
|
||||
"${CPM_ARGS_EXCLUDE_FROM_ALL}"
|
||||
"${CPM_ARGS_SYSTEM}"
|
||||
"${CPM_ARGS_OPTIONS}"
|
||||
)
|
||||
endif()
|
||||
cpm_get_fetch_properties("${CPM_ARGS_NAME}")
|
||||
@@ -947,13 +957,18 @@ function(
|
||||
SOURCE_DIR
|
||||
BINARY_DIR
|
||||
EXCLUDE
|
||||
SYSTEM
|
||||
OPTIONS
|
||||
)
|
||||
|
||||
if(NOT DOWNLOAD_ONLY AND EXISTS ${SOURCE_DIR}/CMakeLists.txt)
|
||||
set(addSubdirectoryExtraArgs "")
|
||||
if(EXCLUDE)
|
||||
set(addSubdirectoryExtraArgs EXCLUDE_FROM_ALL)
|
||||
else()
|
||||
set(addSubdirectoryExtraArgs "")
|
||||
list(APPEND addSubdirectoryExtraArgs EXCLUDE_FROM_ALL)
|
||||
endif()
|
||||
if("${SYSTEM}" AND "${CMAKE_VERSION}" VERSION_GREATER_EQUAL "3.25")
|
||||
# https://cmake.org/cmake/help/latest/prop_dir/SYSTEM.html#prop_dir:SYSTEM
|
||||
list(APPEND addSubdirectoryExtraArgs SYSTEM)
|
||||
endif()
|
||||
if(OPTIONS)
|
||||
foreach(OPTION ${OPTIONS})
|
||||
@@ -1084,6 +1099,7 @@ function(cpm_prettify_package_arguments OUT_VAR IS_IN_COMMENT)
|
||||
DOWNLOAD_COMMAND
|
||||
FIND_PACKAGE_ARGUMENTS
|
||||
NO_CACHE
|
||||
SYSTEM
|
||||
GIT_SHALLOW
|
||||
)
|
||||
set(multiValueArgs OPTIONS)
|
||||
|
||||
@@ -157,6 +157,11 @@ class IntegrationTest < Test::Unit::TestCase
|
||||
assert_block(msg) { res.status.success? }
|
||||
end
|
||||
|
||||
def assert_failure(res)
|
||||
msg = build_message(nil, "command status was expected to be a failure, but succeeded")
|
||||
assert_block(msg) { !res.status.success? }
|
||||
end
|
||||
|
||||
def assert_same_path(a, b)
|
||||
msg = build_message(nil, "<?> expected but was\n<?>", a, b)
|
||||
assert_block(msg) { File.identical? a, b }
|
||||
|
||||
48
test/integration/test_system_warnings.rb
Normal file
48
test/integration/test_system_warnings.rb
Normal file
@@ -0,0 +1,48 @@
|
||||
require_relative './lib'
|
||||
|
||||
class SystemWarnings < IntegrationTest
|
||||
|
||||
def test_dependency_added_using_system
|
||||
for use_system in [true, false] do
|
||||
prj = make_project name: use_system ? "system" : "no_system", from_template: 'using-adder'
|
||||
prj.create_lists_from_default_template package: <<~PACK
|
||||
# this commit has a warning in a public header
|
||||
CPMAddPackage(
|
||||
NAME Adder
|
||||
GITHUB_REPOSITORY cpm-cmake/testpack-adder
|
||||
GIT_TAG v1.0.1-warnings
|
||||
SYSTEM #{use_system ? "YES" : "NO"}
|
||||
)
|
||||
# all packages using `adder` will error on warnings
|
||||
target_compile_options(adder INTERFACE
|
||||
$<$<CXX_COMPILER_ID:MSVC>:/Wall /WX>
|
||||
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Werror>
|
||||
)
|
||||
PACK
|
||||
|
||||
assert_success prj.configure
|
||||
if use_system
|
||||
assert_success prj.build
|
||||
else
|
||||
assert_failure prj.build
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_dependency_added_implicitly_using_system
|
||||
prj = make_project from_template: 'using-adder'
|
||||
prj.create_lists_from_default_template package: <<~PACK
|
||||
# this commit has a warning in a public header
|
||||
CPMAddPackage("gh:cpm-cmake/testpack-adder@1.0.1-warnings")
|
||||
# all packages using `adder` will error on warnings
|
||||
target_compile_options(adder INTERFACE
|
||||
$<$<CXX_COMPILER_ID:MSVC>:/Wall /WX>
|
||||
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Werror>
|
||||
)
|
||||
PACK
|
||||
|
||||
assert_success prj.configure
|
||||
assert_success prj.build
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user