diff --git a/modules/ECMFindQMLModule.cmake.in b/modules/ECMFindQMLModule.cmake.in new file mode 100644 --- /dev/null +++ b/modules/ECMFindQMLModule.cmake.in @@ -0,0 +1,51 @@ +#============================================================================= +# Copyright 2015 Aleix Pol Gonzalez +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +include(FindPackageHandleStandardArgs) + +find_program(QMLPLUGINDUMP_PROGRAM qmlplugindump) +execute_process(COMMAND "${QMLPLUGINDUMP_PROGRAM}" "@MODULE_NAME@" "@VERSION@" ERROR_VARIABLE ERRORS_OUTPUT OUTPUT_VARIABLE DISREGARD_VARIABLE RESULT_VARIABLE ExitCode) + +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() + +find_package_handle_standard_args(@GENMODULE@ + FOUND_VAR + @GENMODULE@_FOUND + REQUIRED_VARS + @GENMODULE@_FOUND + VERSION_VAR + @GENMODULE@_VERSION + HANDLE_COMPONENTS +) + + diff --git a/modules/ECMQMLModules.cmake b/modules/ECMQMLModules.cmake new file mode 100644 --- /dev/null +++ b/modules/ECMQMLModules.cmake @@ -0,0 +1,67 @@ +#.rst: +# FindQMLModule +# ------- +# +# Find QML import modules through a find_qmlmodule() call. +# It uses the qmlplugindump application to find the plugins and sets them up as +# runtime dependencies. +# +# This is useful so that when we configure a project we are noified when some +# QML imports are not present in the system, thus having the application compilable +# but fail at runtime. +# +# :: +# ecm_find_qmlmodule( ...) +# +# Any further arguments passed will be forwarded into a find_package() call. See +# find_package() documentation for more information. +# +# Usage example: +# +# .. code-block:: cmake +# +# ecm_find_qmlmodule(org.kde.kirigami 2.1) +# +#============================================================================= +# Copyright 2015 Aleix Pol Gonzalez +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +set(MODULES_DIR ${CMAKE_CURRENT_LIST_DIR}) + +function(ecm_find_qmlmodule MODULE_NAME VERSION) + set(GENMODULE "${MODULE_NAME}-QMLModule") + + configure_file("${MODULES_DIR}/ECMFindQMLModule.cmake.in" "Find${GENMODULE}.cmake" @ONLY) + + set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_BINARY_DIR}" ${CMAKE_MODULE_PATH}) + find_package(${GENMODULE} ${ARGN}) + + if(COMMAND set_package_properties) + set_package_properties(${GENMODULE} PROPERTIES + DESCRIPTION "QML module '${MODULE_NAME}' is a runtime dependency." + TYPE RUNTIME) + endif() +endfunction() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -211,3 +211,16 @@ ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_BINARY_DIR}/ECMPoQmToolsTest/check.cmake" ) endif() + +find_package(Qt5Quick CONFIG) +set_package_properties( + Qt5Quick + PROPERTIES + URL "http://www.qt.io/" + DESCRIPTION "Qt5 Quick library." + TYPE OPTIONAL + PURPOSE "Required to run tests for the ECMQMLModules module." +) +if (TARGET Qt5::Quick) + add_test_macro(ECMQMLModules dummy) +endif()