From b84f1e61595d4c9344a13fa4bf76d8a258757f1b Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 20 Apr 2021 14:52:01 -0400 Subject: Autogen: Restore mocs_compilation in OBJECT libraries Since commit f65f20938c (Autogen: Avoid processing CSharp targets, 2020-11-12, v3.20.0-rc1~301^2) we collect all sources for a target earlier than previously. Clear the sources cache so that it will be re-computed later after AUTOGEN processing. Fixes: #22085 --- Source/cmQtAutoGenGlobalInitializer.cxx | 5 +++++ Tests/QtAutogen/ObjectLibrary/CMakeLists.txt | 5 +++++ Tests/RunCMake/ObjectLibrary/OwnSources-stderr.txt | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/Source/cmQtAutoGenGlobalInitializer.cxx b/Source/cmQtAutoGenGlobalInitializer.cxx index f79ffd4..f8d18f2 100644 --- a/Source/cmQtAutoGenGlobalInitializer.cxx +++ b/Source/cmQtAutoGenGlobalInitializer.cxx @@ -97,6 +97,11 @@ cmQtAutoGenGlobalInitializer::cmQtAutoGenGlobalInitializer( } std::set const& languages = target->GetAllConfigCompileLanguages(); + // cmGeneratorTarget::GetAllConfigCompileLanguages caches the target's + // sources. Clear it so that OBJECT library targets that are AUTOGEN + // initialized after this target get their added mocs_compilation.cpp + // source acknowledged by this target. + target->ClearSourcesCache(); if (languages.count("CSharp")) { // Don't process target if it's a CSharp target continue; diff --git a/Tests/QtAutogen/ObjectLibrary/CMakeLists.txt b/Tests/QtAutogen/ObjectLibrary/CMakeLists.txt index ec204e7..e8af6c9 100644 --- a/Tests/QtAutogen/ObjectLibrary/CMakeLists.txt +++ b/Tests/QtAutogen/ObjectLibrary/CMakeLists.txt @@ -16,3 +16,8 @@ target_compile_features(b PRIVATE ${QT_COMPILE_FEATURES}) # Executable with OBJECT library generator expressions add_executable(someProgram main.cpp $ $) target_link_libraries(someProgram ${QT_LIBRARIES}) + +# Executable without its own AUTOMOC. +add_executable(someProgram2 main.cpp) +target_link_libraries(someProgram2 PRIVATE a b ${QT_LIBRARIES}) +set_property(TARGET someProgram2 PROPERTY AUTOMOC OFF) diff --git a/Tests/RunCMake/ObjectLibrary/OwnSources-stderr.txt b/Tests/RunCMake/ObjectLibrary/OwnSources-stderr.txt index cb1a2e5..69230b6 100644 --- a/Tests/RunCMake/ObjectLibrary/OwnSources-stderr.txt +++ b/Tests/RunCMake/ObjectLibrary/OwnSources-stderr.txt @@ -10,4 +10,10 @@ CMake Error at OwnSources.cmake:[0-9]+ \(add_library\): Call Stack \(most recent call first\): CMakeLists.txt:[0-9]+ \(include\) + +CMake Error at OwnSources.cmake:[0-9]+ \(add_library\): + The SOURCES of "A" use a generator expression that depends on the SOURCES + themselves. +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) ++ CMake Generate step failed\. Build files cannot be regenerated correctly\.$ -- cgit v0.12