From 8ef4edc09ea27ef301c866f812481cf0697cbfba Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Mon, 20 Apr 2020 20:31:31 +0200 Subject: [PATCH] CMake: Fix handling of negated feature config values Consider a negated feature config value like the following: qt_feature_config("foo" QMAKE_PUBLIC_QT_CONFIG NEGATE) If this feature was disabled, it would turn up in both, enabled_features and disabled_features of module .pri files. Also, QT_CONFIG would contain foo. Expected however is that QT_CONFIG contains no-foo, and only disabled_features contains foo. Fix this by prepending a "no_" prefix to the value, similar to the "no-" prefix in the qmake build. The qt_correct_config function was adjusted to recognize "no_foo" and translate it to the qmakeish "no-foo" config value. Config values that start with "no_" but do not correspond to a feature are left untouched. You can still have values like "no_valley_too_deep" or "no_mountain_too_high". Change-Id: I23d8b18c84e04ea6dfa25cc6ccd8f7e86211b144 Reviewed-by: Alexandru Croitor --- cmake/QtBuild.cmake | 18 ++++++++++++++++-- cmake/QtFeature.cmake | 11 ++++++----- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index 5fa81fe807a..2ade160779a 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -696,12 +696,26 @@ endfunction() function(qt_correct_config out_var config) set(corrected_config "") foreach(name ${config}) + # Is the config value a known feature? get_property(feature_original_name GLOBAL PROPERTY "QT_FEATURE_ORIGINAL_NAME_${name}") if(feature_original_name) list(APPEND corrected_config "${feature_original_name}") - else() - list(APPEND corrected_config "${name}") + continue() endif() + + # Is the config value a negated known feature, e.g. no_foo? + # Then add the config value no-foo. + if(name MATCHES "^no_(.*)") + get_property(feature_original_name GLOBAL PROPERTY + "QT_FEATURE_ORIGINAL_NAME_${CMAKE_MATCH_1}") + if(feature_original_name) + list(APPEND corrected_config "no-${feature_original_name}") + continue() + endif() + endif() + + # The config value is no known feature. Add the value as is. + list(APPEND corrected_config "${name}") endforeach() set(${out_var} ${corrected_config} PARENT_SCOPE) endfunction() diff --git a/cmake/QtFeature.cmake b/cmake/QtFeature.cmake index 4cf7c0f9466..52475dfa853 100644 --- a/cmake/QtFeature.cmake +++ b/cmake/QtFeature.cmake @@ -312,16 +312,17 @@ function(qt_evaluate_qmake_config_values key) "FEATURE;NAME;CONFIG_VAR_NAME" "" ${${key}}) - set(expected "NOT") - if (arg_NEGATE) - set(expected "") - endif() - # If no custom name is specified, then the config value is the same as the feature name. if(NOT arg_NAME) set(arg_NAME "${arg_FEATURE}") endif() + set(expected "NOT") + if (arg_NEGATE) + set(expected "") + string(PREPEND arg_NAME "no_") + endif() + # The feature condition is false, there is no need to export any config values. if(${expected} ${QT_FEATURE_${arg_FEATURE}}) return()