From 5380ad9d58c614aeaddb6be7a7fcc28cbf50c856 Mon Sep 17 00:00:00 2001 From: Orkun Tokdemir Date: Wed, 31 May 2023 16:48:04 +0200 Subject: Tests: Add test for AUTOMOC_MOC_OPTIONS Fixes: #23894 --- Tests/QtAutogen/MocOptions2/CMakeLists.txt | 10 ++++++++++ Tests/QtAutogen/MocOptions2/main.cpp | 7 +++++++ Tests/QtAutogen/MocOptions2/object.cpp | 5 +++++ Tests/QtAutogen/MocOptions2/object.hpp | 15 +++++++++++++++ Tests/QtAutogen/Tests.cmake | 1 + 5 files changed, 38 insertions(+) create mode 100644 Tests/QtAutogen/MocOptions2/CMakeLists.txt create mode 100644 Tests/QtAutogen/MocOptions2/main.cpp create mode 100644 Tests/QtAutogen/MocOptions2/object.cpp create mode 100644 Tests/QtAutogen/MocOptions2/object.hpp diff --git a/Tests/QtAutogen/MocOptions2/CMakeLists.txt b/Tests/QtAutogen/MocOptions2/CMakeLists.txt new file mode 100644 index 0000000..c664f4d --- /dev/null +++ b/Tests/QtAutogen/MocOptions2/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.16) +project(MocOptions2) +include("../AutogenCoreTest.cmake") + +# Test extra options passed to moc via AUTOMOC_MOC_OPTIONS +add_executable(mocOptions object.cpp main.cpp) +set_property(TARGET mocOptions PROPERTY AUTOMOC ON) +target_compile_options(mocOptions PRIVATE "-D_EXTRA_DEFINE") +set_property(TARGET mocOptions PROPERTY AUTOMOC_MOC_OPTIONS "-D_EXTRA_DEFINE") +target_link_libraries(mocOptions ${QT_LIBRARIES}) diff --git a/Tests/QtAutogen/MocOptions2/main.cpp b/Tests/QtAutogen/MocOptions2/main.cpp new file mode 100644 index 0000000..98875f0 --- /dev/null +++ b/Tests/QtAutogen/MocOptions2/main.cpp @@ -0,0 +1,7 @@ +#include "object.hpp" + +int main() +{ + Object object; + return 0; +} diff --git a/Tests/QtAutogen/MocOptions2/object.cpp b/Tests/QtAutogen/MocOptions2/object.cpp new file mode 100644 index 0000000..7960736 --- /dev/null +++ b/Tests/QtAutogen/MocOptions2/object.cpp @@ -0,0 +1,5 @@ +#include "object.hpp" + +Object::Object() +{ +} diff --git a/Tests/QtAutogen/MocOptions2/object.hpp b/Tests/QtAutogen/MocOptions2/object.hpp new file mode 100644 index 0000000..0bb4e81 --- /dev/null +++ b/Tests/QtAutogen/MocOptions2/object.hpp @@ -0,0 +1,15 @@ +#ifndef Object_HPP +#define Object_HPP + +#include + +#ifdef _EXTRA_DEFINE +class Object : public QObject +{ + Q_OBJECT +public: + Object(); +}; +#endif + +#endif diff --git a/Tests/QtAutogen/Tests.cmake b/Tests/QtAutogen/Tests.cmake index 7dd9c84..d676abd 100644 --- a/Tests/QtAutogen/Tests.cmake +++ b/Tests/QtAutogen/Tests.cmake @@ -12,6 +12,7 @@ ADD_AUTOGEN_TEST(ManySources manySources) ADD_AUTOGEN_TEST(MocInterfaceMacroNames) ADD_AUTOGEN_TEST(MocOnly mocOnly) ADD_AUTOGEN_TEST(MocOptions mocOptions) +ADD_AUTOGEN_TEST(MocOptions2) ADD_AUTOGEN_TEST(ObjectLibrary someProgram) ADD_AUTOGEN_TEST(Parallel parallel) ADD_AUTOGEN_TEST(Parallel1 parallel1) -- cgit v0.12 From 5e513e562ff66725ebb99e7cf83ad4579deebd8e Mon Sep 17 00:00:00 2001 From: Orkun Tokdemir Date: Wed, 31 May 2023 17:17:44 +0200 Subject: Help: Add AUTOMOC_MOC_OPTIONS example --- Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst b/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst index 330849b..11ab147 100644 --- a/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst +++ b/Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst @@ -15,3 +15,39 @@ is created, or an empty string otherwise. See the :manual:`cmake-qt(7)` manual for more information on using CMake with Qt. + +EXAMPLE +^^^^^^^ + +In this example, the ``moc`` tool is invoked with the ``-D_EXTRA_DEFINE`` +option when generating the moc file for ``object.cpp``. + +``CMakeLists.txt`` + .. code-block:: cmake + + add_executable(mocOptions object.cpp main.cpp) + set_property(TARGET mocOptions PROPERTY AUTOMOC ON) + target_compile_options(mocOptions PRIVATE "-D_EXTRA_DEFINE") + set_property(TARGET mocOptions PROPERTY AUTOMOC_MOC_OPTIONS "-D_EXTRA_DEFINE") + target_link_libraries(mocOptions Qt6::Core) + +``object.hpp`` + .. code-block:: c++ + + #ifndef Object_HPP + #define Object_HPP + + #include + + #ifdef _EXTRA_DEFINE + class Object : public QObject + { + Q_OBJECT + public: + + Object(); + + }; + #endif + + #endif -- cgit v0.12 From feb56a666f1fcadcc209d8fa3de007cbbfed9f76 Mon Sep 17 00:00:00 2001 From: Orkun Tokdemir Date: Wed, 31 May 2023 17:46:48 +0200 Subject: cmTarget: Improve const correctness of AddUtility --- Source/cmTarget.cxx | 3 ++- Source/cmTarget.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index b55554d..a1aca5d 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -1218,7 +1218,8 @@ void cmTarget::SetLanguageStandardProperty(std::string const& lang, languageStandardProperty.Backtraces.emplace_back(featureBacktrace); } -void cmTarget::AddUtility(std::string const& name, bool cross, cmMakefile* mf) +void cmTarget::AddUtility(std::string const& name, bool cross, + cmMakefile const* mf) { this->impl->Utilities.insert(BT>( { name, cross }, mf ? mf->GetBacktrace() : cmListFileBacktrace())); diff --git a/Source/cmTarget.h b/Source/cmTarget.h index 5fe5a28..b793065 100644 --- a/Source/cmTarget.h +++ b/Source/cmTarget.h @@ -174,7 +174,7 @@ public: * commands. It is not a full path nor does it have an extension. */ void AddUtility(std::string const& name, bool cross, - cmMakefile* mf = nullptr); + cmMakefile const* mf = nullptr); void AddUtility(BT> util); //! Get the utilities used by this target std::set>> const& GetUtilities() const; -- cgit v0.12 From 55d93bdabfa89c20563135c03e8cf54e338dffed Mon Sep 17 00:00:00 2001 From: Orkun Tokdemir Date: Wed, 31 May 2023 17:46:48 +0200 Subject: cmQtAutoGenInitializer: Improve const correctness --- Source/cmQtAutoGenInitializer.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx index 2c48e78..81bf65c 100644 --- a/Source/cmQtAutoGenInitializer.cxx +++ b/Source/cmQtAutoGenInitializer.cxx @@ -1389,7 +1389,7 @@ bool cmQtAutoGenInitializer::InitAutogenTarget() for (const cmTarget* t : this->AutogenTarget.DependTargets) { std::string depname = t->GetName(); if (t->IsImported()) { - auto ttype = t->GetType(); + auto const ttype = t->GetType(); if (ttype == cmStateEnums::TargetType::STATIC_LIBRARY || ttype == cmStateEnums::TargetType::SHARED_LIBRARY || ttype == cmStateEnums::TargetType::UNKNOWN_LIBRARY) { @@ -1478,7 +1478,7 @@ bool cmQtAutoGenInitializer::InitAutogenTarget() } if (!useNinjaDepfile) { // Add additional autogen target dependencies to autogen target - for (cmTarget* depTarget : this->AutogenTarget.DependTargets) { + for (cmTarget const* depTarget : this->AutogenTarget.DependTargets) { autogenTarget->AddUtility(depTarget->GetName(), false, this->Makefile); } } @@ -2002,7 +2002,7 @@ static cmQtAutoGen::IntegerVersion parseMocVersion(std::string str) cmQtAutoGen::IntegerVersion result; static const std::string prelude = "moc "; - size_t pos = str.find(prelude); + size_t const pos = str.find(prelude); if (pos == std::string::npos) { return result; } @@ -2120,7 +2120,7 @@ cmQtAutoGenInitializer::GetQtVersion(cmGeneratorTarget const* target, res.first = knownQtVersions.at(0); } else { // Pick a version from the known versions: - for (auto it : knownQtVersions) { + for (auto const& it : knownQtVersions) { if (it.Major == res.second) { res.first = it; break; -- cgit v0.12 From b6f66b445a32b6a931b33b1dd399f64fb21ef429 Mon Sep 17 00:00:00 2001 From: Orkun Tokdemir Date: Wed, 31 May 2023 17:46:48 +0200 Subject: cmQtAutoGenInitializer: Remove no-op calls --- Source/cmQtAutoGenInitializer.cxx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx index 81bf65c..a5c043d 100644 --- a/Source/cmQtAutoGenInitializer.cxx +++ b/Source/cmQtAutoGenInitializer.cxx @@ -1381,8 +1381,6 @@ bool cmQtAutoGenInitializer::InitAutogenTarget() // '_autogen' target. const auto timestampTargetName = cmStrCat(this->GenTarget->GetName(), "_autogen_timestamp_deps"); - std::vector timestampTargetProvides; - cmCustomCommandLines timestampTargetCommandLines; // Add additional autogen target dependencies to // '_autogen_timestamp_deps'. @@ -1401,9 +1399,7 @@ bool cmQtAutoGenInitializer::InitAutogenTarget() auto cc = cm::make_unique(); cc->SetWorkingDirectory(this->Dir.Work.c_str()); - cc->SetByproducts(timestampTargetProvides); cc->SetDepends(dependencies); - cc->SetCommandLines(timestampTargetCommandLines); cc->SetEscapeOldStyle(false); cmTarget* timestampTarget = this->LocalGen->AddUtilityCommand( timestampTargetName, true, std::move(cc)); -- cgit v0.12 From 1f4b374d6e936960d902307bc9dcd4e8d93168e2 Mon Sep 17 00:00:00 2001 From: Orkun Tokdemir Date: Wed, 31 May 2023 17:46:48 +0200 Subject: cmQtAutoGenInitializer: Reduce string copies --- Source/cmQtAutoGenInitializer.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx index a5c043d..c9f65f6 100644 --- a/Source/cmQtAutoGenInitializer.cxx +++ b/Source/cmQtAutoGenInitializer.cxx @@ -1394,7 +1394,7 @@ bool cmQtAutoGenInitializer::InitAutogenTarget() depname = cmStrCat("$GetName(), ">"); } } - dependencies.push_back(depname); + dependencies.emplace_back(std::move(depname)); } auto cc = cm::make_unique(); -- cgit v0.12