From 1c79ef2189dc156bbe0f182411bcc136f140a21d Mon Sep 17 00:00:00 2001 From: Andreas Sturmlechner Date: Sun, 8 Dec 2019 15:01:33 +0100 Subject: [PATCH] ECMFindQMLModule.cmake.in: Add ECM_DISABLE_QMLPLUGINDUMP to avoid sandbox violations See also: https://phabricator.kde.org/D25812 Backstory: https://bugzilla.gnome.org/show_bug.cgi?id=744136 BUG: 387753 --- modules/ECMFindQmlModule.cmake.in | 45 ++++++++++++++++++------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/modules/ECMFindQmlModule.cmake.in b/modules/ECMFindQmlModule.cmake.in index 0ee5665e..d6e1f14c 100644 --- a/modules/ECMFindQmlModule.cmake.in +++ b/modules/ECMFindQmlModule.cmake.in @@ -7,27 +7,36 @@ include(FindPackageHandleStandardArgs) include("${ECM_MODULE_DIR}/QtVersionOption.cmake") -if (QT_MAJOR_VERSION EQUAL "5") - include("${ECM_MODULE_DIR}/ECMQueryQt.cmake") - ecm_query_qt(qt_binaries_dir QT_HOST_BINS) - find_program(QMLPLUGINDUMP_PROGRAM NAMES qmlplugindump HINTS ${qt_binaries_dir}) -elseif (QT_MAJOR_VERSION EQUAL "6") - find_package(Qt6 COMPONENTS QmlTools REQUIRED) - get_target_property(QMLPLUGINDUMP_PROGRAM Qt6::qmlplugindump LOCATION) -endif() - -if(NOT QMLPLUGINDUMP_PROGRAM) - message(WARNING "Could not find qmlplugindump. It is necessary to look up qml module dependencies.") -endif() +option (ECM_DISABLE_QMLPLUGINDUMP "Do not use qmlplugindump which may segfault in some sandboxed environments" OFF) -execute_process(COMMAND "${QMLPLUGINDUMP_PROGRAM}" "@MODULE_NAME@" "@VERSION@" ERROR_VARIABLE ERRORS_OUTPUT OUTPUT_VARIABLE DISREGARD_VARIABLE RESULT_VARIABLE ExitCode TIMEOUT 30) - -if(ExitCode EQUAL 0) +if(ECM_DISABLE_QMLPLUGINDUMP) + message(NOTICE "@GENMODULE@: qmlplugindump disabled - assuming dependency is available as >= @VERSION@.") set(@GENMODULE@_FOUND TRUE) - set(@GENMODULE@_VERSION "${PACKAGE_FIND_VERSION}") + set(@GENMODULE@_VERSION @VERSION@) else() - message(STATUS "qmlplugindump failed for @MODULE_NAME@.") - set(@GENMODULE@_FOUND FALSE) + + if (QT_MAJOR_VERSION EQUAL "5") + include("${ECM_MODULE_DIR}/ECMQueryQt.cmake") + ecm_query_qt(qt_binaries_dir QT_HOST_BINS) + find_program(QMLPLUGINDUMP_PROGRAM NAMES qmlplugindump HINTS ${qt_binaries_dir}) + elseif (QT_MAJOR_VERSION EQUAL "6") + find_package(Qt6 COMPONENTS QmlTools REQUIRED) + get_target_property(QMLPLUGINDUMP_PROGRAM Qt6::qmlplugindump LOCATION) + endif() + + if(NOT QMLPLUGINDUMP_PROGRAM) + message(WARNING "Could not find qmlplugindump. It is necessary to look up qml module dependencies.") + endif() + + execute_process(COMMAND "${QMLPLUGINDUMP_PROGRAM}" "@MODULE_NAME@" "@VERSION@" ERROR_VARIABLE ERRORS_OUTPUT OUTPUT_VARIABLE DISREGARD_VARIABLE RESULT_VARIABLE ExitCode TIMEOUT 30) + + if(ExitCode EQUAL 0) + set(@GENMODULE@_FOUND TRUE) + set(@GENMODULE@_VERSION "${PACKAGE_FIND_VERSION}") + else() + message(STATUS "qmlplugindump failed for @MODULE_NAME@.") + set(@GENMODULE@_FOUND FALSE) + endif() endif() find_package_handle_standard_args(@GENMODULE@ -- 2.35.1