Forward-port change to QT4_ADD_RESOURCES macro for missing rcc files.
authorStephen Kelly <stephen.kelly@kdab.com>
Tue, 19 Jun 2012 15:09:23 +0000 (17:09 +0200)
committerQt by Nokia <qt-info@nokia.com>
Sat, 23 Jun 2012 09:37:39 +0000 (11:37 +0200)
Forward-port of commit 9ce67d30011db4528d3d0bbee36412e13cfb80cc in
cmake.git.

Change-Id: I2d6c14f68f1630fc0835b3103e5058f52c2d0d13
Reviewed-by: David Faure <faure@kde.org>
src/corelib/Qt5CoreMacros.cmake
tests/auto/cmake/CMakeLists.txt
tests/auto/cmake/pass11/CMakeLists.txt [new file with mode: 0644]
tests/auto/cmake/pass11/main.cpp [new file with mode: 0644]
tests/auto/cmake/pass11/resource_file.txt [new file with mode: 0644]

index cbd141a..9d5f85a 100644 (file)
@@ -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 "<file[^<]+" _RC_FILES "${_RC_FILE_CONTENTS}")
+
         set(_RC_DEPENDS)
-        foreach(_RC_FILE ${_RC_FILES})
-            string(REGEX REPLACE "^<file[^>]*>" "" _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 "<file[^<]+" _RC_FILES "${_RC_FILE_CONTENTS}")
+            foreach(_RC_FILE ${_RC_FILES})
+                string(REGEX REPLACE "^<file[^>]*>" "" _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}
index 40ceea1..d8c4182 100644 (file)
@@ -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 (file)
index 0000000..0e9d028
--- /dev/null
@@ -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" "<!DOCTYPE RCC><RCC version=\"1.0\">
+<qresource prefix=\"/\">
+    <file>${CMAKE_CURRENT_SOURCE_DIR}/resource_file.txt</file>
+</qresource>
+</RCC>
+")
+
+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 (file)
index 0000000..2a43be4
--- /dev/null
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Stephen Kelly <stephen.kelly@kdab.com>
+** 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 <qglobal.h>
+
+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 (file)
index 0000000..2c604a4
--- /dev/null
@@ -0,0 +1 @@
+Ken sent me.