From 03fc1de44ef988112f65412728cfe81a3658a1be Mon Sep 17 00:00:00 2001 From: "Friedrich W. H. Kossebau" Date: Tue, 18 Jul 2017 18:31:47 +0200 Subject: Fix usage of query_qmake: differ between calls expecting qmake or not Summary: when KDE_INSTALL_USE_QT_SYS_PATHS has been explicitely set, qmake can be considered a required dependency, otherwise the paths will not be known, which would be unexpected. Also does the code calling query_qmake, besides the one testing for the same install prefix, not handle the case of empty strings being returned and then results in bogus behaviour. Thus this patch makes code fail hard if query_qmake is expected to yield a result, but no qmake executable is found. Reviewers: #frameworks, ltoscano, rdieter, apol Reviewed By: apol Subscribers: #build_system Tags: #frameworks, #build_system Differential Revision: https://phabricator.kde.org/D6772 --- kde-modules/KDEInstallDirs.cmake | 2 +- modules/ECMAddQch.cmake | 2 +- modules/ECMGeneratePriFile.cmake | 2 +- modules/ECMQueryQmake.cmake | 20 +++++++++++++++++--- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/kde-modules/KDEInstallDirs.cmake b/kde-modules/KDEInstallDirs.cmake index 8029f0af..b0e651f6 100644 --- a/kde-modules/KDEInstallDirs.cmake +++ b/kde-modules/KDEInstallDirs.cmake @@ -455,7 +455,7 @@ include("${ECM_MODULE_DIR}/ECMQueryQmake.cmake") set(_default_KDE_INSTALL_USE_QT_SYS_PATHS OFF) if(NOT DEFINED KDE_INSTALL_USE_QT_SYS_PATHS) - query_qmake(qt_install_prefix_dir QT_INSTALL_PREFIX) + query_qmake(qt_install_prefix_dir QT_INSTALL_PREFIX TRY) if(qt_install_prefix_dir STREQUAL "${CMAKE_INSTALL_PREFIX}") message(STATUS "Installing in the same prefix as Qt, adopting their path scheme.") set(_default_KDE_INSTALL_USE_QT_SYS_PATHS ON) diff --git a/modules/ECMAddQch.cmake b/modules/ECMAddQch.cmake index 2177bf0f..f5a09dff 100644 --- a/modules/ECMAddQch.cmake +++ b/modules/ECMAddQch.cmake @@ -289,7 +289,7 @@ function(_ecm_ensure_qt_qch_targets) # get Qt version, if any find_package(Qt5Core CONFIG QUIET) # lookup tag files - query_qmake(qt_docs_dir QT_INSTALL_DOCS) + query_qmake(qt_docs_dir QT_INSTALL_DOCS TRY) find_path(_qtcoreTagsPath qtcore/qtcore.tags PATHS ${qt_docs_dir} diff --git a/modules/ECMGeneratePriFile.cmake b/modules/ECMGeneratePriFile.cmake index a64fa62f..61012185 100644 --- a/modules/ECMGeneratePriFile.cmake +++ b/modules/ECMGeneratePriFile.cmake @@ -102,7 +102,7 @@ set(_askqmake OFF) if(NOT DEFINED KDE_INSTALL_USE_QT_SYS_PATHS) include(ECMQueryQmake) - query_qmake(qt_install_prefix_dir QT_INSTALL_PREFIX) + query_qmake(qt_install_prefix_dir QT_INSTALL_PREFIX TRY) if(qt_install_prefix_dir STREQUAL "${CMAKE_INSTALL_PREFIX}") set(_askqmake ON) endif() diff --git a/modules/ECMQueryQmake.cmake b/modules/ECMQueryQmake.cmake index fa0949df..74a6df87 100644 --- a/modules/ECMQueryQmake.cmake +++ b/modules/ECMQueryQmake.cmake @@ -9,12 +9,26 @@ endif() set(QMAKE_EXECUTABLE ${_qmake_executable_default} CACHE FILEPATH "Location of the Qt5 qmake executable") +# Helper method # This is not public API (yet)! +# Usage: query_qmake( [TRY]) +# Passing TRY will result in the method not failing fatal if no qmake executable +# has been found, but instead simply returning an empty string function(query_qmake result_variable qt_variable) + set(options TRY) + set(oneValueArgs ) + set(multiValueArgs ) + + cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + if(NOT QMAKE_EXECUTABLE) - set(${result_variable} "" PARENT_SCOPE) - message(WARNING "Should specify a qmake Qt5 binary. Can't check ${qt_variable}") - return() + if(ARGS_TRY) + set(${result_variable} "" PARENT_SCOPE) + message(STATUS "No qmake Qt5 binary found. Can't check ${qt_variable}") + return() + else() + message(FATAL_ERROR "No qmake Qt5 binary found. Can't check ${qt_variable} as required") + endif() endif() execute_process( COMMAND ${QMAKE_EXECUTABLE} -query "${qt_variable}" -- cgit v1.2.1