aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAhmad Samir <a.samirh78@gmail.com>2022-03-08 14:06:53 +0200
committerAhmad Samir <a.samirh78@gmail.com>2022-03-20 12:42:44 +0200
commit4e47b053c9d799898a91b8b31f59140592c2ba4d (patch)
treefeab3195297318dbeee72732a1ea53d295f443df
parent7cb3191ccb1dc24ff21a9e41ec30d52f420c98e6 (diff)
downloadextra-cmake-modules-4e47b053c9d799898a91b8b31f59140592c2ba4d.tar.gz
extra-cmake-modules-4e47b053c9d799898a91b8b31f59140592c2ba4d.tar.bz2
Add ECMQueryQt module, which encompases both Qt5 Qmake and Qt6 qtpaths
Basically copied ECMQueryQmake to ECMQueryQt, added copyright based on git log, with the BSD 3-clause license; based on the contents of the README.rst file at the initial commit (commit 96e7fb9969b7 by Rohan Garg) of ECMQueryQmake, the README file says: All code is licensed under the BSD 3-Clause license. Will CC active devs in the MR and email Rohan Garg to confirm. Then added qtpaths CMake code path, basically you can use query_qt with Qt5 (same syntax, so a drop-in replacement for query_qmake); and Qt6. The plan is to deprecate ECMQueryQmake in favour of the new module (had to be done that way as the old module had "qmake" in the name and that could be a bit confusing).
-rw-r--r--docs/module/ECMQueryQt.rst1
-rw-r--r--modules/ECMQueryQt.cmake85
2 files changed, 86 insertions, 0 deletions
diff --git a/docs/module/ECMQueryQt.rst b/docs/module/ECMQueryQt.rst
new file mode 100644
index 00000000..120698a0
--- /dev/null
+++ b/docs/module/ECMQueryQt.rst
@@ -0,0 +1 @@
+.. ecm-module:: ../../modules/ECMQueryQt.cmake
diff --git a/modules/ECMQueryQt.cmake b/modules/ECMQueryQt.cmake
new file mode 100644
index 00000000..24dd42bc
--- /dev/null
+++ b/modules/ECMQueryQt.cmake
@@ -0,0 +1,85 @@
+# SPDX-FileCopyrightText: 2014 Rohan Garg <rohan16garg@gmail.com>
+# SPDX-FileCopyrightText: 2014 Alex Merry <alex.merry@kde.org>
+# SPDX-FileCopyrightText: 2014-2016 Aleix Pol <aleixpol@kde.org>
+# SPDX-FileCopyrightText: 2017 Friedrich W. H. Kossebau <kossebau@kde.org>
+# SPDX-FileCopyrightText: 2022 Ahmad Samir <a.samir78@gmail.com>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#[=======================================================================[.rst:
+ECMQueryQt
+---------------
+This module can be used to query the installation paths used by Qt.
+
+For Qt5 this uses ``qmake``, and for Qt6 this used ``qtpaths`` (the latter has built-in
+support to query the paths of a target platform when cross-compiling).
+
+This module defines the following function:
+::
+
+ ecm_query_qt(<result_variable> <qt_variable> [TRY])
+
+Passing ``TRY`` will result in the method not making the build fail if the executable
+used for querying has not been found, but instead simply print a warning message and
+return an empty string.
+
+Example usage:
+
+.. code-block:: cmake
+
+ include(ECMQueryQt)
+ ecm_query_qt(bin_dir QT_INSTALL_BINS)
+
+If the call succeeds ``${bin_dir}`` will be set to ``<prefix>/path/to/bin/dir`` (e.g.
+``/usr/lib64/qt/bin/``).
+
+Since: 5.93
+#]=======================================================================]
+
+include(${CMAKE_CURRENT_LIST_DIR}/QtVersionOption.cmake)
+
+if (QT_MAJOR_VERSION STREQUAL "5")
+ find_package(Qt${QT_MAJOR_VERSION}Core QUIET)
+ get_target_property(_qmake_executable_default Qt5::qmake LOCATION)
+ set(QUERY_EXECUTABLE ${_qmake_executable_default}
+ CACHE FILEPATH "Location of the Qt5 qmake executable")
+ set(_exec_name_text "Qt5 qmake")
+ set(_cli_option "-query")
+elseif(QT_MAJOR_VERSION STREQUAL "6")
+ find_package(Qt6 COMPONENTS CoreTools REQUIRED CONFIG)
+ get_target_property(_qtpaths_executable Qt6::qtpaths LOCATION)
+ set(QUERY_EXECUTABLE ${_qtpaths_executable}
+ CACHE FILEPATH "Location of the Qt6 qtpaths executable")
+ set(_exec_name_text "Qt6 qtpaths")
+ set(_cli_option "--query")
+endif()
+
+function(ecm_query_qt result_variable qt_variable)
+ set(options TRY)
+ set(oneValueArgs)
+ set(multiValueArgs)
+
+ cmake_parse_arguments(ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ if(NOT QUERY_EXECUTABLE)
+ if(ARGS_TRY)
+ set(${result_variable} "" PARENT_SCOPE)
+ message(STATUS "No ${_exec_name_text} executable found. Can't check ${qt_variable}")
+ return()
+ else()
+ message(FATAL_ERROR "No ${_exec_name_text} executable found. Can't check ${qt_variable} as required")
+ endif()
+ endif()
+ execute_process(
+ COMMAND ${QUERY_EXECUTABLE} ${_cli_option} "${qt_variable}"
+ RESULT_VARIABLE return_code
+ OUTPUT_VARIABLE output
+ )
+ if(return_code EQUAL 0)
+ string(STRIP "${output}" output)
+ file(TO_CMAKE_PATH "${output}" output_path)
+ set(${result_variable} "${output_path}" PARENT_SCOPE)
+ else()
+ message(WARNING "Failed call: ${_command} \"${qt_variable}\"")
+ message(FATAL_ERROR "${_exec_name_text} call failed: ${return_code}")
+ endif()
+endfunction()