aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFriedrich W. H. Kossebau <kossebau@kde.org>2017-07-18 18:31:47 +0200
committerFriedrich W. H. Kossebau <kossebau@kde.org>2017-07-29 01:20:36 +0200
commit03fc1de44ef988112f65412728cfe81a3658a1be (patch)
treeb04372faac1b9b7e71a2389086e06a863c307377
parentf5c11c00198e809d45399b6c8496ac838f28ad60 (diff)
downloadextra-cmake-modules-03fc1de44ef988112f65412728cfe81a3658a1be.tar.gz
extra-cmake-modules-03fc1de44ef988112f65412728cfe81a3658a1be.tar.bz2
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
-rw-r--r--kde-modules/KDEInstallDirs.cmake2
-rw-r--r--modules/ECMAddQch.cmake2
-rw-r--r--modules/ECMGeneratePriFile.cmake2
-rw-r--r--modules/ECMQueryQmake.cmake20
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(<result_variable> <qt_variable> [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}"