mirror of
https://github.com/microsoft/vcpkg.git
synced 2025-01-14 06:08:03 +08:00
[vcpkg] Add vcpkg_check_features (#6958)
* [vcpkg] Add vcpkg_check_feature, vcpkg_check_features * [vcpkg] Remove vcpkg_check_feature * [oniguruma,xtensor] Use vcpkg_check_features
This commit is contained in:
parent
5b6b66512b
commit
b4675fd65a
@ -6,6 +6,7 @@
|
||||
- [vcpkg\_apply\_patches](vcpkg_apply_patches.md)
|
||||
- [vcpkg\_build\_cmake](vcpkg_build_cmake.md)
|
||||
- [vcpkg\_build\_msbuild](vcpkg_build_msbuild.md)
|
||||
- [vcpkg\_check\_features](vcpkg_check_features.md)
|
||||
- [vcpkg\_check\_linkage](vcpkg_check_linkage.md)
|
||||
- [vcpkg\_clean\_msbuild](vcpkg_clean_msbuild.md)
|
||||
- [vcpkg\_configure\_cmake](vcpkg_configure_cmake.md)
|
||||
|
41
docs/maintainers/vcpkg_check_features.md
Normal file
41
docs/maintainers/vcpkg_check_features.md
Normal file
@ -0,0 +1,41 @@
|
||||
# vcpkg_check_features
|
||||
|
||||
Check if one or more features are part of the package installation.
|
||||
|
||||
## Usage
|
||||
```cmake
|
||||
vcpkg_check_features(
|
||||
<feature1> <output_variable1>
|
||||
[<feature2> <output_variable2>]
|
||||
...
|
||||
)
|
||||
```
|
||||
|
||||
`vcpkg_check_features` accepts a list of (feature, output_variable) pairs.
|
||||
The syntax is similar to the `PROPERTIES` argument of `set_target_properties`.
|
||||
|
||||
`vcpkg_check_features` will create a variable `FEATURE_OPTIONS` in the
|
||||
parent scope, which you can pass as a part of `OPTIONS` argument when
|
||||
calling functions like `vcpkg_config_cmake`:
|
||||
```cmake
|
||||
vcpkg_config_cmake(
|
||||
SOURCE_PATH ${SOURCE_PATH}
|
||||
PREFER_NINJA
|
||||
OPTIONS
|
||||
-DBUILD_TESTING=ON
|
||||
${FEATURE_OPTIONS}
|
||||
)
|
||||
```
|
||||
|
||||
## Notes
|
||||
`vcpkg_check_features` is supposed to be called only once. Otherwise, the
|
||||
`FEATURE_OPTIONS` variable set by a previous call will be overwritten.
|
||||
|
||||
## Examples
|
||||
|
||||
* [czmq](https://github.com/microsoft/vcpkg/blob/master/ports/czmq/portfile.cmake)
|
||||
* [oniguruma](https://github.com/microsoft/vcpkg/blob/master/ports/oniguruma/portfile.cmake)
|
||||
* [xtensor](https://github.com/microsoft/vcpkg/blob/master/ports/xtensor/portfile.cmake)
|
||||
|
||||
## Source
|
||||
[scripts/cmake/vcpkg_check_features.cmake](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_check_features.cmake)
|
@ -1,6 +1,7 @@
|
||||
Source: oniguruma
|
||||
Version: 6.9.2
|
||||
Version: 6.9.2-1
|
||||
Description: Modern and flexible regular expressions library
|
||||
Homepage: https://github.com/kkos/oniguruma
|
||||
|
||||
Feature: non-posix
|
||||
Description: Disable POSIX API
|
||||
|
@ -8,11 +8,7 @@ vcpkg_from_github(
|
||||
HEAD_REF master
|
||||
)
|
||||
|
||||
if("non-posix" IN_LIST FEATURES)
|
||||
set(ENABLE_POSIX_API OFF)
|
||||
else()
|
||||
set(ENABLE_POSIX_API ON)
|
||||
endif()
|
||||
vcpkg_check_features(non-posix ENABLE_POSIX_API)
|
||||
|
||||
vcpkg_configure_cmake(
|
||||
SOURCE_PATH ${SOURCE_PATH}
|
||||
|
@ -1,6 +1,7 @@
|
||||
Source: xtensor
|
||||
Version: 0.20.7
|
||||
Version: 0.20.7-1
|
||||
Description: C++ tensors with broadcasting and lazy computing
|
||||
Homepage: https://quantstack.net/xtensor
|
||||
Build-Depends: nlohmann-json, xtl
|
||||
|
||||
Feature: xsimd
|
||||
|
@ -5,29 +5,20 @@ include(vcpkg_common_functions)
|
||||
vcpkg_from_github(
|
||||
OUT_SOURCE_PATH SOURCE_PATH
|
||||
REPO QuantStack/xtensor
|
||||
REF 0.20.7
|
||||
REF 0.20.7
|
||||
SHA512 de09900d0934f9b10453f16e43d1c3af28503f365224f9c6789b88a0cf00db820ca31e12099df1a2e3aafa73d7d83223df82f01b7611c1addb48367f936e5122
|
||||
HEAD_REF master
|
||||
)
|
||||
|
||||
if("xsimd" IN_LIST FEATURES)
|
||||
set(XTENSOR_USE_XSIMD ON)
|
||||
else()
|
||||
set(XTENSOR_USE_XSIMD OFF)
|
||||
endif()
|
||||
|
||||
if("tbb" IN_LIST FEATURES)
|
||||
set(XTENSOR_USE_TBB ON)
|
||||
else()
|
||||
set(XTENSOR_USE_TBB OFF)
|
||||
endif()
|
||||
vcpkg_check_features(
|
||||
xsimd XTENSOR_USE_XSIMD
|
||||
tbb XTENSOR_USE_TBB
|
||||
)
|
||||
|
||||
vcpkg_configure_cmake(
|
||||
SOURCE_PATH ${SOURCE_PATH}
|
||||
PREFER_NINJA
|
||||
OPTIONS
|
||||
-DXTENSOR_USE_XSIMD=${XTENSOR_USE_XSIMD}
|
||||
-DXTENSOR_USE_TBB=${XTENSOR_USE_TBB}
|
||||
-DXTENSOR_ENABLE_ASSERT=OFF
|
||||
-DXTENSOR_CHECK_DIMENSION=OFF
|
||||
-DBUILD_TESTS=OFF
|
||||
@ -36,6 +27,7 @@ vcpkg_configure_cmake(
|
||||
-DDOWNLOAD_GBENCHMARK=OFF
|
||||
-DDEFAULT_COLUMN_MAJOR=OFF
|
||||
-DDISABLE_VS2017=OFF
|
||||
${FEATURE_OPTIONS}
|
||||
)
|
||||
|
||||
vcpkg_install_cmake()
|
||||
|
82
scripts/cmake/vcpkg_check_features.cmake
Normal file
82
scripts/cmake/vcpkg_check_features.cmake
Normal file
@ -0,0 +1,82 @@
|
||||
## # vcpkg_check_features
|
||||
##
|
||||
## Check if one or more features are part of the package installation.
|
||||
##
|
||||
## ## Usage
|
||||
## ```cmake
|
||||
## vcpkg_check_features(
|
||||
## <feature1> <output_variable1>
|
||||
## [<feature2> <output_variable2>]
|
||||
## ...
|
||||
## )
|
||||
## ```
|
||||
##
|
||||
## `vcpkg_check_features` accepts a list of (feature, output_variable) pairs.
|
||||
## The syntax is similar to the `PROPERTIES` argument of `set_target_properties`.
|
||||
##
|
||||
## `vcpkg_check_features` will create a variable `FEATURE_OPTIONS` in the
|
||||
## parent scope, which you can pass as a part of `OPTIONS` argument when
|
||||
## calling functions like `vcpkg_config_cmake`:
|
||||
## ```cmake
|
||||
## vcpkg_config_cmake(
|
||||
## SOURCE_PATH ${SOURCE_PATH}
|
||||
## PREFER_NINJA
|
||||
## OPTIONS
|
||||
## -DBUILD_TESTING=ON
|
||||
## ${FEATURE_OPTIONS}
|
||||
## )
|
||||
## ```
|
||||
##
|
||||
## ## Notes
|
||||
## `vcpkg_check_features` is supposed to be called only once. Otherwise, the
|
||||
## `FEATURE_OPTIONS` variable set by a previous call will be overwritten.
|
||||
##
|
||||
## ## Examples
|
||||
##
|
||||
## * [czmq](https://github.com/microsoft/vcpkg/blob/master/ports/czmq/portfile.cmake)
|
||||
## * [oniguruma](https://github.com/microsoft/vcpkg/blob/master/ports/oniguruma/portfile.cmake)
|
||||
## * [xtensor](https://github.com/microsoft/vcpkg/blob/master/ports/xtensor/portfile.cmake)
|
||||
function(vcpkg_check_features)
|
||||
cmake_parse_arguments(_vcf "" "" "" ${ARGN})
|
||||
|
||||
list(LENGTH ARGN _vcf_ARGC)
|
||||
math(EXPR _vcf_INCORRECT_ARGN "${_vcf_ARGC} % 2")
|
||||
|
||||
if(_vcf_INCORRECT_ARGN)
|
||||
message(FATAL_ERROR "Called with incorrect number of arguments.")
|
||||
endif()
|
||||
|
||||
set(_vcf_IS_FEATURE_ARG ON)
|
||||
set(_vcf_FEATURE_OPTIONS)
|
||||
|
||||
# Process (feature, output_var) pairs
|
||||
foreach(_vcf_ARG ${ARGN})
|
||||
if(_vcf_IS_FEATURE_ARG)
|
||||
set(_vcf_FEATURE ${_vcf_ARG})
|
||||
|
||||
if(NOT ${_vcf_FEATURE} IN_LIST ALL_FEATURES)
|
||||
message(FATAL_ERROR "Unknown feature: ${_vcf_FEATURE}")
|
||||
endif()
|
||||
|
||||
set(_vcf_IS_FEATURE_ARG OFF)
|
||||
else()
|
||||
set(_vcf_FEATURE_VAR ${_vcf_ARG})
|
||||
|
||||
if(${_vcf_FEATURE} IN_LIST FEATURES)
|
||||
set(${_vcf_FEATURE_VAR} ON PARENT_SCOPE)
|
||||
else()
|
||||
set(${_vcf_FEATURE_VAR} OFF PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
list(APPEND _vcf_FEATURE_OPTIONS "-D${_vcf_FEATURE_VAR}=${${_vcf_FEATURE_VAR}}")
|
||||
|
||||
set(_vcf_IS_FEATURE_ARG ON)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(DEFINED FEATURE_OPTIONS)
|
||||
message(WARNING "FEATURE_OPTIONS is already defined and will be overwritten.")
|
||||
endif()
|
||||
|
||||
set(FEATURE_OPTIONS ${_vcf_FEATURE_OPTIONS} PARENT_SCOPE)
|
||||
endfunction()
|
@ -1,5 +1,6 @@
|
||||
include(vcpkg_acquire_msys)
|
||||
include(vcpkg_add_to_path)
|
||||
include(vcpkg_check_features)
|
||||
include(vcpkg_check_linkage)
|
||||
include(vcpkg_clean_msbuild)
|
||||
include(vcpkg_download_distfile)
|
||||
|
Loading…
x
Reference in New Issue
Block a user