aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/cmake/vcpkg_check_features.cmake82
-rw-r--r--scripts/cmake/vcpkg_common_functions.cmake1
2 files changed, 83 insertions, 0 deletions
diff --git a/scripts/cmake/vcpkg_check_features.cmake b/scripts/cmake/vcpkg_check_features.cmake
new file mode 100644
index 000000000..c8848e987
--- /dev/null
+++ b/scripts/cmake/vcpkg_check_features.cmake
@@ -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()
diff --git a/scripts/cmake/vcpkg_common_functions.cmake b/scripts/cmake/vcpkg_common_functions.cmake
index b99f8bee8..827d43abe 100644
--- a/scripts/cmake/vcpkg_common_functions.cmake
+++ b/scripts/cmake/vcpkg_common_functions.cmake
@@ -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)