diff options
Diffstat (limited to 'util')
-rwxr-xr-x | util/cmake/configurejson2cmake.py | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/util/cmake/configurejson2cmake.py b/util/cmake/configurejson2cmake.py index cccfabb9e8..b0c4f61d55 100755 --- a/util/cmake/configurejson2cmake.py +++ b/util/cmake/configurejson2cmake.py @@ -914,7 +914,22 @@ def get_feature_mapping(): "condition": "NOT QT_FEATURE_icu AND QT_FEATURE_textcodec AND NOT WIN32 AND NOT QNX AND NOT ANDROID AND NOT APPLE AND WrapIconv_FOUND", }, "incredibuild_xge": None, - "ltcg": {"autoDetect": "1", "condition": "CMAKE_INTERPROCEDURAL_OPTIMIZATION"}, + "ltcg": { + "autoDetect": "ON", + "cmakePrelude": """set(__qt_ltcg_detected FALSE) +if(CMAKE_INTERPROCEDURAL_OPTIMIZATION) + set(__qt_ltcg_detected TRUE) +else() + foreach(config ${CMAKE_BUILD_TYPE} ${CMAKE_CONFIGURATION_TYPES}) + if(CMAKE_INTERPROCEDURAL_OPTIMIZATION_${config}) + set(__qt_ltcg_detected TRUE) + break() + endif() + endforeach() +endif()""", + "condition": "__qt_ltcg_detected", + "cmakeEpilogue": "unset(__qt_ltcg_detected)" + }, "msvc_mp": None, "simulator_and_device": {"condition": "UIKIT AND NOT QT_UIKIT_SDK"}, "pkg-config": {"condition": "PKG_CONFIG_FOUND"}, @@ -1001,6 +1016,8 @@ def parseFeature(ctx, feature, data, cm_fh): enable = map_condition(mapping.get("enable", data.get("enable", ""))) disable = map_condition(mapping.get("disable", data.get("disable", ""))) emitIf = map_condition(mapping.get("emitIf", data.get("emitIf", ""))) + cmakePrelude = mapping.get("cmakePrelude", None) + cmakeEpilogue = mapping.get("cmakeEpilogue", None) for k in [k for k in data.keys() if k not in handled]: print(f" XXXX UNHANDLED KEY {k} in feature description") @@ -1070,10 +1087,16 @@ def parseFeature(ctx, feature, data, cm_fh): labelAppend="", superFeature=None, autoDetect="", + cmakePrelude=None, + cmakeEpilogue=None, ): if comment: cm_fh.write(f"# {comment}\n") + if cmakePrelude is not None: + cm_fh.write(cmakePrelude) + cm_fh.write("\n") + cm_fh.write(f'qt_feature("{name}"') if publicFeature: cm_fh.write(" PUBLIC") @@ -1096,11 +1119,16 @@ def parseFeature(ctx, feature, data, cm_fh): cm_fh.write(lineify("EMIT_IF", emitIf, quote=False)) cm_fh.write(")\n") + if cmakeEpilogue is not None: + cm_fh.write(cmakeEpilogue) + cm_fh.write("\n") + # Write qt_feature() calls before any qt_feature_definition() calls # Default internal feature case. featureCalls = {} - featureCalls[feature] = {"name": feature, "labelAppend": "", "autoDetect": autoDetect} + featureCalls[feature] = {"name": feature, "labelAppend": "", "autoDetect": autoDetect, + "cmakePrelude": cmakePrelude, "cmakeEpilogue": cmakeEpilogue} # Go over all outputs to compute the number of features that have to be declared for o in output: |