From ddf5226bd7e120a5ef6fdf5fb82be36a48844cb7 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Tue, 19 Jun 2012 17:09:23 +0200 Subject: [PATCH] Forward-port change to QT4_ADD_RESOURCES macro for missing rcc files. Forward-port of commit 9ce67d30011db4528d3d0bbee36412e13cfb80cc in cmake.git. Change-Id: I2d6c14f68f1630fc0835b3103e5058f52c2d0d13 Reviewed-by: David Faure --- src/corelib/Qt5CoreMacros.cmake | 40 ++++++++++-------- tests/auto/cmake/CMakeLists.txt | 1 + tests/auto/cmake/pass11/CMakeLists.txt | 24 +++++++++++ tests/auto/cmake/pass11/main.cpp | 49 +++++++++++++++++++++++ tests/auto/cmake/pass11/resource_file.txt | 1 + 5 files changed, 99 insertions(+), 16 deletions(-) create mode 100644 tests/auto/cmake/pass11/CMakeLists.txt create mode 100644 tests/auto/cmake/pass11/main.cpp create mode 100644 tests/auto/cmake/pass11/resource_file.txt diff --git a/src/corelib/Qt5CoreMacros.cmake b/src/corelib/Qt5CoreMacros.cmake index cbd141aeb3..9d5f85a441 100644 --- a/src/corelib/Qt5CoreMacros.cmake +++ b/src/corelib/Qt5CoreMacros.cmake @@ -176,23 +176,31 @@ function(QT5_ADD_RESOURCES outfiles ) get_filename_component(infile ${it} ABSOLUTE) get_filename_component(rc_path ${infile} PATH) set(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cxx) - # parse file for dependencies - # all files are absolute paths or relative to the location of the qrc file - file(READ "${infile}" _RC_FILE_CONTENTS) - string(REGEX MATCHALL "]*>" "" _RC_FILE "${_RC_FILE}") - if(NOT IS_ABSOLUTE "${_RC_FILE}") - set(_RC_FILE "${rc_path}/${_RC_FILE}") - endif() - set(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}") - endforeach() - # Since this cmake function is doing the dependency scanning for these files, - # let's make a configured file and add it as a dependency so cmake is run - # again when dependencies need to be recomputed. - qt5_make_output_file("${infile}" "" "qrc.depends" out_depends) - configure_file("${infile}" "${out_depends}" COPY_ONLY) + if(EXISTS "${infile}") + # parse file for dependencies + # all files are absolute paths or relative to the location of the qrc file + file(READ "${infile}" _RC_FILE_CONTENTS) + string(REGEX MATCHALL "]*>" "" _RC_FILE "${_RC_FILE}") + if(NOT IS_ABSOLUTE "${_RC_FILE}") + set(_RC_FILE "${rc_path}/${_RC_FILE}") + endif() + set(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}") + endforeach() + # Since this cmake macro is doing the dependency scanning for these files, + # let's make a configured file and add it as a dependency so cmake is run + # again when dependencies need to be recomputed. + qt5_make_output_file("${infile}" "" "qrc.depends" out_depends) + configure_file("${infile}" "${out_depends}" COPY_ONLY) + else() + # The .qrc file does not exist (yet). Let's add a dependency and hope + # that it will be generated later + set(out_depends) + endif() + add_custom_command(OUTPUT ${outfile} COMMAND ${QT_RCC_EXECUTABLE} ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile} diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt index 40ceea1fc0..d8c41821a4 100644 --- a/tests/auto/cmake/CMakeLists.txt +++ b/tests/auto/cmake/CMakeLists.txt @@ -98,3 +98,4 @@ if (Qt5DBus_FOUND AND NOT APPLE) expect_pass(pass9) endif() expect_pass(pass10) +expect_pass(pass11) diff --git a/tests/auto/cmake/pass11/CMakeLists.txt b/tests/auto/cmake/pass11/CMakeLists.txt new file mode 100644 index 0000000000..0e9d028396 --- /dev/null +++ b/tests/auto/cmake/pass11/CMakeLists.txt @@ -0,0 +1,24 @@ + +cmake_minimum_required(VERSION 2.8) + +project(pass11) + +find_package(Qt5Core REQUIRED) + +include_directories(${Qt5Core_INCLUDE_DIRS}) + +add_definitions(${Qt5Core_DEFINITIONS}) + +qt5_add_resources(rcc_files "${CMAKE_CURRENT_BINARY_DIR}/pass11.qrc") + +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/pass11.qrc" " + + ${CMAKE_CURRENT_SOURCE_DIR}/resource_file.txt + + +") + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}") + +add_executable(pass11 main.cpp ${rcc_files}) +target_link_libraries(pass11 ${Qt5Core_LIBRARIES}) diff --git a/tests/auto/cmake/pass11/main.cpp b/tests/auto/cmake/pass11/main.cpp new file mode 100644 index 0000000000..2a43be419b --- /dev/null +++ b/tests/auto/cmake/pass11/main.cpp @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char **argv) +{ + // Compile error if the resource file was not created. + Q_INIT_RESOURCE(pass11); + return 0; +} diff --git a/tests/auto/cmake/pass11/resource_file.txt b/tests/auto/cmake/pass11/resource_file.txt new file mode 100644 index 0000000000..2c604a4f18 --- /dev/null +++ b/tests/auto/cmake/pass11/resource_file.txt @@ -0,0 +1 @@ +Ken sent me.