summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-06-01 15:19:02 (GMT)
committerKitware Robot <kwrobot@kitware.com>2023-06-01 15:19:19 (GMT)
commitf6435f799ea7aa6669b035fee2a0559040890d27 (patch)
treebbbf240c1da7f73bf0ab4380fa814c5fb592bb7b
parent99e80ea0ac2de2e0c24652c2af8589967996a0d4 (diff)
parent1f4b374d6e936960d902307bc9dcd4e8d93168e2 (diff)
downloadCMake-f6435f799ea7aa6669b035fee2a0559040890d27.zip
CMake-f6435f799ea7aa6669b035fee2a0559040890d27.tar.gz
CMake-f6435f799ea7aa6669b035fee2a0559040890d27.tar.bz2
Merge topic 'automoc-moc-options-test'
1f4b374d6e cmQtAutoGenInitializer: Reduce string copies b6f66b445a cmQtAutoGenInitializer: Remove no-op calls 55d93bdabf cmQtAutoGenInitializer: Improve const correctness feb56a666f cmTarget: Improve const correctness of AddUtility 5e513e562f Help: Add AUTOMOC_MOC_OPTIONS example 5380ad9d58 Tests: Add test for AUTOMOC_MOC_OPTIONS Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !8523
-rw-r--r--Help/prop_tgt/AUTOMOC_MOC_OPTIONS.rst36
-rw-r--r--Source/cmQtAutoGenInitializer.cxx14
-rw-r--r--Source/cmTarget.cxx3
-rw-r--r--Source/cmTarget.h2
-rw-r--r--Tests/QtAutogen/MocOptions2/CMakeLists.txt10
-rw-r--r--Tests/QtAutogen/MocOptions2/main.cpp7
-rw-r--r--Tests/QtAutogen/MocOptions2/object.cpp5
-rw-r--r--Tests/QtAutogen/MocOptions2/object.hpp15
-rw-r--r--Tests/QtAutogen/Tests.cmake1
9 files changed, 82 insertions, 11 deletions
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 <QObject>
+
+ #ifdef _EXTRA_DEFINE
+ class Object : public QObject
+ {
+ Q_OBJECT
+ public:
+
+ Object();
+
+ };
+ #endif
+
+ #endif
diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx
index 2c48e78..c9f65f6 100644
--- a/Source/cmQtAutoGenInitializer.cxx
+++ b/Source/cmQtAutoGenInitializer.cxx
@@ -1381,29 +1381,25 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
// '_autogen' target.
const auto timestampTargetName =
cmStrCat(this->GenTarget->GetName(), "_autogen_timestamp_deps");
- std::vector<std::string> timestampTargetProvides;
- cmCustomCommandLines timestampTargetCommandLines;
// Add additional autogen target dependencies to
// '_autogen_timestamp_deps'.
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) {
depname = cmStrCat("$<TARGET_LINKER_FILE:", t->GetName(), ">");
}
}
- dependencies.push_back(depname);
+ dependencies.emplace_back(std::move(depname));
}
auto cc = cm::make_unique<cmCustomCommand>();
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));
@@ -1478,7 +1474,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 +1998,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 +2116,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;
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 4025967..81497f5 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -1210,7 +1210,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<std::pair<std::string, bool>>(
{ name, cross }, mf ? mf->GetBacktrace() : cmListFileBacktrace()));
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index ac6d130..2d12a70 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<std::pair<std::string, bool>> util);
//! Get the utilities used by this target
std::set<BT<std::pair<std::string, bool>>> const& GetUtilities() const;
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 <QObject>
+
+#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)