Skip to content

Commit

Permalink
[vcpkg] Add vcpkg_check_features (microsoft#6958)
Browse files Browse the repository at this point in the history
* [vcpkg] Add vcpkg_check_feature, vcpkg_check_features

* [vcpkg] Remove vcpkg_check_feature

* [oniguruma,xtensor] Use vcpkg_check_features
  • Loading branch information
myd7349 authored and cbezault committed Jun 28, 2019
1 parent 5b6b665 commit b4675fd
Show file tree
Hide file tree
Showing 8 changed files with 136 additions and 21 deletions.
1 change: 1 addition & 0 deletions docs/maintainers/portfile-functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
41 changes: 41 additions & 0 deletions docs/maintainers/vcpkg_check_features.md
Original file line number Diff line number Diff line change
@@ -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)
3 changes: 2 additions & 1 deletion ports/oniguruma/CONTROL
Original file line number Diff line number Diff line change
@@ -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
6 changes: 1 addition & 5 deletions ports/oniguruma/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down
3 changes: 2 additions & 1 deletion ports/xtensor/CONTROL
Original file line number Diff line number Diff line change
@@ -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
Expand Down
20 changes: 6 additions & 14 deletions ports/xtensor/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -36,6 +27,7 @@ vcpkg_configure_cmake(
-DDOWNLOAD_GBENCHMARK=OFF
-DDEFAULT_COLUMN_MAJOR=OFF
-DDISABLE_VS2017=OFF
${FEATURE_OPTIONS}
)

vcpkg_install_cmake()
Expand Down
82 changes: 82 additions & 0 deletions scripts/cmake/vcpkg_check_features.cmake
Original file line number Diff line number Diff line change
@@ -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 change: 1 addition & 0 deletions scripts/cmake/vcpkg_common_functions.cmake
Original file line number Diff line number Diff line change
@@ -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)
Expand Down

0 comments on commit b4675fd

Please sign in to comment.