Skip to main content

kmpkg_check_features

Check if one or more features are a part of a package installation.

Usage

kmpkg_check_features(
OUT_FEATURE_OPTIONS <out-var>
[PREFIX <prefix>]
[FEATURES
[<feature-name> <feature-var>]...
]
[INVERTED_FEATURES
[<feature-name> <feature-var>]...
]
)

The <out-var> should be set to FEATURE_OPTIONS by convention.

kmpkg_check_features() will:

  • for each <feature-name> passed in FEATURES:
    • if the feature is set, add -D<feature-var>=ON to <out-var>, and set <prefix>_<feature-var> to ON.
    • if the feature is not set, add -D<feature-var>=OFF to <out-var>, and set <prefix>_<feature-var> to OFF.
  • for each <feature-name> passed in INVERTED_FEATURES:
    • if the feature is set, add -D<feature-var>=OFF to <out-var>, and set <prefix>_<feature-var> to OFF.
    • if the feature is not set, add -D<feature-var>=ON to <out-var>, and set <prefix>_<feature-var> to ON.

If <prefix> is not passed, then the feature vars set are simply <feature-var>, not _<feature-var>.

If INVERTED_FEATURES is not passed, then the FEATURES keyword is optional. This behavior is deprecated.

If the same <feature-var> is passed multiple times, then kmpkg_check_features will cause a fatal error, since that is a bug.

Examples

Example 1: Regular features

$ ./kmpkg install mimalloc[asm,secure]

# ports/mimalloc/portfile.cmake
kmpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
FEATURES
asm MI_SEE_ASM
override MI_OVERRIDE
secure MI_SECURE
)

kmpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
# Expands to "-DMI_SEE_ASM=ON;-DMI_OVERRIDE=OFF;-DMI_SECURE=ON"
${FEATURE_OPTIONS}
)

Example 2: Inverted features

$ ./kmpkg install cpprestsdk[websockets]

# ports/cpprestsdk/portfile.cmake
kmpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
INVERTED_FEATURES
brotli CPPREST_EXCLUDE_BROTLI
websockets CPPREST_EXCLUDE_WEBSOCKETS
)

kmpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
# Expands to "-DCPPREST_EXCLUDE_BROTLI=ON;-DCPPREST_EXCLUDE_WEBSOCKETS=OFF"
${FEATURE_OPTIONS}
)

Example 3: Set multiple options for same feature

$ ./kmpkg install pcl[cuda]

# ports/pcl/portfile.cmake
kmpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
FEATURES
cuda WITH_CUDA
cuda BUILD_CUDA
cuda BUILD_GPU
)

kmpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
# Expands to "-DWITH_CUDA=ON;-DBUILD_CUDA=ON;-DBUILD_GPU=ON"
${FEATURE_OPTIONS}
)

Example 4: Use regular and inverted features

$ ./kmpkg install rocksdb[tbb]

# ports/rocksdb/portfile.cmake
kmpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
FEATURES
tbb WITH_TBB
INVERTED_FEATURES
tbb ROCKSDB_IGNORE_PACKAGE_TBB
)

kmpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
# Expands to "-DWITH_TBB=ON;-DROCKSDB_IGNORE_PACKAGE_TBB=OFF"
${FEATURE_OPTIONS}
)

Examples in portfiles

Source

scripts/cmake/kmpkg_check_features.cmake