Browse Source

QtAutogen: Only add source files to the target if AUTORCC is ON.

The qtx_add_resources() macro adds the resource file to the output list
to maintain file-level dependencies.  Having the qrc file in a target
sources is a precondition for AUTORCC to function.

When processing the source files of a target, only add the generated
qrc_<file>.cpp to the target sources if AUTORCC is ON.  This avoids
pre-porting conflict with the macro.

Reported-by: Micha Hergarden
Stephen Kelly 11 years ago
parent
commit
8f8edeb09b

+ 16 - 12
Source/cmQtAutoGenerators.cxx

@@ -487,19 +487,23 @@ void cmQtAutoGenerators::SetupSourceFiles(cmTarget const* target)
       }
 
     std::string ext = sf->GetExtension();
-    if (ext == "qrc"
-        && !cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTORCC")))
+
+    if (target->GetPropertyAsBool("AUTORCC"))
       {
-      std::string basename = cmsys::SystemTools::
-                                    GetFilenameWithoutLastExtension(absFile);
-
-      std::string rcc_output_file = makefile->GetCurrentOutputDirectory();
-      rcc_output_file += "/qrc_" + basename + ".cpp";
-      makefile->AppendProperty("ADDITIONAL_MAKE_CLEAN_FILES",
-                              rcc_output_file.c_str(), false);
-      cmSourceFile* rccCppSource
-              = makefile->GetOrCreateSource(rcc_output_file.c_str(), true);
-      newRccFiles.push_back(rccCppSource);
+      if (ext == "qrc"
+          && !cmSystemTools::IsOn(sf->GetPropertyForUser("SKIP_AUTORCC")))
+        {
+        std::string basename = cmsys::SystemTools::
+                                      GetFilenameWithoutLastExtension(absFile);
+
+        std::string rcc_output_file = makefile->GetCurrentOutputDirectory();
+        rcc_output_file += "/qrc_" + basename + ".cpp";
+        makefile->AppendProperty("ADDITIONAL_MAKE_CLEAN_FILES",
+                                rcc_output_file.c_str(), false);
+        cmSourceFile* rccCppSource
+                = makefile->GetOrCreateSource(rcc_output_file.c_str(), true);
+        newRccFiles.push_back(rccCppSource);
+        }
       }
 
     if (!generated)

+ 7 - 1
Tests/QtAutogen/CMakeLists.txt

@@ -82,7 +82,13 @@ target_link_libraries(libC LINK_PUBLIC libB)
 
 target_link_libraries(QtAutogen codeeditorLib ${QT_LIBRARIES} libC)
 
-add_library(empty STATIC empty.cpp)
+# Add not_generated_file.qrc to the source list to get the file-level
+# dependency, but don't generate a c++ file from it.  Disable the AUTORCC
+# feature for this target.  This tests that qrc files in the sources don't
+# have an effect on generation if AUTORCC is off.
+add_library(empty STATIC empty.cpp not_generated_file.qrc)
+set_target_properties(empty PROPERTIES AUTORCC OFF)
+
 set_target_properties(empty PROPERTIES AUTOMOC TRUE)
 target_link_libraries(empty no_link_language)
 add_library(no_link_language STATIC empty.h)

+ 5 - 0
Tests/QtAutogen/not_generated_file.qrc

@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>abc.cpp</file>
+</qresource>
+</RCC>