summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2019-02-06 11:50:27 +0000
committerKitware Robot <kwrobot@kitware.com>2019-02-06 06:50:36 -0500
commit4400ac07f7bb7da1d85244d1b5ddc2dfd75273f1 (patch)
treeb62367ddfa55d5034fa1dc47c2c72389d5f86bef
parent3a2387bce79a6c8ea79f64e80079accbbd8696b2 (diff)
parenta28caabf453ab41851b75a40a2e49706439f9478 (diff)
downloadcmake-4400ac07f7bb7da1d85244d1b5ddc2dfd75273f1.tar.gz
Merge topic 'autogen_same_name_different_extension'
a28caabf45 Autogen: AUTOMOC support for files with the same name but different extensions 1f802295f2 Autogen: Extend the SameName test with same name but different extension files Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !2920
-rw-r--r--Source/cmQtAutoGeneratorMocUic.cxx46
-rw-r--r--Source/cmQtAutoGeneratorMocUic.h2
-rw-r--r--Tests/QtAutogen/SameName/CMakeLists.txt4
-rw-r--r--Tests/QtAutogen/SameName/main.cpp13
-rw-r--r--Tests/QtAutogen/SameName/object.h13
-rw-r--r--Tests/QtAutogen/SameName/object.h++13
-rw-r--r--Tests/QtAutogen/SameName/object.hpp13
-rw-r--r--Tests/QtAutogen/SameName/object.hxx13
8 files changed, 103 insertions, 14 deletions
diff --git a/Source/cmQtAutoGeneratorMocUic.cxx b/Source/cmQtAutoGeneratorMocUic.cxx
index 0ba52243cf..ddff4cf879 100644
--- a/Source/cmQtAutoGeneratorMocUic.cxx
+++ b/Source/cmQtAutoGeneratorMocUic.cxx
@@ -678,19 +678,21 @@ void cmQtAutoGeneratorMocUic::JobMocT::Process(WorkerT& wrk)
BuildFile += '/';
BuildFile += IncludeString;
} else {
- std::string rel = wrk.FileSys().GetFilePathChecksum(SourceFile);
- rel += "/moc_";
- rel += wrk.FileSys().GetFilenameWithoutLastExtension(SourceFile);
- rel += ".cpp";
- // Register relative file path
- wrk.Gen().ParallelMocAutoRegister(rel);
+ // Relative build path
+ std::string relPath = wrk.FileSys().GetFilePathChecksum(SourceFile);
+ relPath += "/moc_";
+ relPath += wrk.FileSys().GetFilenameWithoutLastExtension(SourceFile);
+
+ // Register relative file path with duplication check
+ relPath = wrk.Gen().ParallelMocAutoRegister(relPath);
+
// Absolute build path
if (wrk.Base().MultiConfig) {
BuildFile = wrk.Base().AutogenIncludeDir;
BuildFile += '/';
- BuildFile += rel;
+ BuildFile += relPath;
} else {
- BuildFile = wrk.Base().AbsoluteBuildPath(rel);
+ BuildFile = wrk.Base().AbsoluteBuildPath(relPath);
}
}
@@ -1953,11 +1955,31 @@ bool cmQtAutoGeneratorMocUic::ParallelMocIncluded(
return (MocIncludedFiles_.find(sourceFile) != MocIncludedFiles_.end());
}
-void cmQtAutoGeneratorMocUic::ParallelMocAutoRegister(
- std::string const& mocFile)
+std::string cmQtAutoGeneratorMocUic::ParallelMocAutoRegister(
+ std::string const& baseName)
{
- std::lock_guard<std::mutex> mocLock(JobsMutex_);
- MocAutoFiles_.emplace(mocFile);
+ std::string res;
+ {
+ std::lock_guard<std::mutex> mocLock(JobsMutex_);
+ res = baseName;
+ res += ".cpp";
+ if (MocAutoFiles_.find(res) == MocAutoFiles_.end()) {
+ MocAutoFiles_.emplace(res);
+ } else {
+ // Append number suffix to the file name
+ for (unsigned int ii = 2; ii != 1024; ++ii) {
+ res = baseName;
+ res += '_';
+ res += std::to_string(ii);
+ res += ".cpp";
+ if (MocAutoFiles_.find(res) == MocAutoFiles_.end()) {
+ MocAutoFiles_.emplace(res);
+ break;
+ }
+ }
+ }
+ }
+ return res;
}
void cmQtAutoGeneratorMocUic::ParallelMocAutoUpdated()
diff --git a/Source/cmQtAutoGeneratorMocUic.h b/Source/cmQtAutoGeneratorMocUic.h
index 32a6006dcf..c22df29ab3 100644
--- a/Source/cmQtAutoGeneratorMocUic.h
+++ b/Source/cmQtAutoGeneratorMocUic.h
@@ -389,7 +389,7 @@ public:
bool ParallelJobPushMoc(JobHandleT& jobHandle);
bool ParallelJobPushUic(JobHandleT& jobHandle);
bool ParallelMocIncluded(std::string const& sourceFile);
- void ParallelMocAutoRegister(std::string const& mocFile);
+ std::string ParallelMocAutoRegister(std::string const& baseName);
void ParallelMocAutoUpdated();
private:
diff --git a/Tests/QtAutogen/SameName/CMakeLists.txt b/Tests/QtAutogen/SameName/CMakeLists.txt
index 6d42499e69..8d4f71f65e 100644
--- a/Tests/QtAutogen/SameName/CMakeLists.txt
+++ b/Tests/QtAutogen/SameName/CMakeLists.txt
@@ -17,6 +17,10 @@ add_executable(sameName
ccc/item.cpp
ccc/data.qrc
item.cpp
+ object.h
+ object.h++
+ object.hpp
+ object.hxx
data.qrc
main.cpp
)
diff --git a/Tests/QtAutogen/SameName/main.cpp b/Tests/QtAutogen/SameName/main.cpp
index a4ffcb350a..92f15cd5f7 100644
--- a/Tests/QtAutogen/SameName/main.cpp
+++ b/Tests/QtAutogen/SameName/main.cpp
@@ -3,14 +3,25 @@
#include "bbb/aaa/item.hpp"
#include "bbb/item.hpp"
#include "ccc/item.hpp"
+#include "item.hpp"
+#include "object.h"
+#include "object.h++"
+#include "object.hpp"
+#include "object.hxx"
int main(int argv, char** args)
{
- // Object instances
+ // Item instances
+ ::Item item;
::aaa::Item aaa_item;
::aaa::bbb::Item aaa_bbb_item;
::bbb::Item bbb_item;
::bbb::aaa::Item bbb_aaa_item;
::ccc::Item ccc_item;
+ // Object instances
+ ::Object_h obj_h;
+ ::Object_hplpl obj_hplpl;
+ ::Object_hpp obj_hpp;
+ ::Object_hxx obj_hxx;
return 0;
}
diff --git a/Tests/QtAutogen/SameName/object.h b/Tests/QtAutogen/SameName/object.h
new file mode 100644
index 0000000000..86620941ac
--- /dev/null
+++ b/Tests/QtAutogen/SameName/object.h
@@ -0,0 +1,13 @@
+#ifndef OBJECT_H
+#define OBJECT_H
+
+#include <QObject>
+
+class Object_h : public QObject
+{
+ Q_OBJECT
+ Q_SLOT
+ void go(){};
+};
+
+#endif
diff --git a/Tests/QtAutogen/SameName/object.h++ b/Tests/QtAutogen/SameName/object.h++
new file mode 100644
index 0000000000..64222b7eca
--- /dev/null
+++ b/Tests/QtAutogen/SameName/object.h++
@@ -0,0 +1,13 @@
+#ifndef OBJECT_HPLPL
+#define OBJECT_HPLPL
+
+#include <QObject>
+
+class Object_hplpl : public QObject
+{
+ Q_OBJECT
+ Q_SLOT
+ void go(){};
+};
+
+#endif
diff --git a/Tests/QtAutogen/SameName/object.hpp b/Tests/QtAutogen/SameName/object.hpp
new file mode 100644
index 0000000000..035050ec74
--- /dev/null
+++ b/Tests/QtAutogen/SameName/object.hpp
@@ -0,0 +1,13 @@
+#ifndef OBJECT_HPP
+#define OBJECT_HPP
+
+#include <QObject>
+
+class Object_hpp : public QObject
+{
+ Q_OBJECT
+ Q_SLOT
+ void go(){};
+};
+
+#endif
diff --git a/Tests/QtAutogen/SameName/object.hxx b/Tests/QtAutogen/SameName/object.hxx
new file mode 100644
index 0000000000..c3c050f130
--- /dev/null
+++ b/Tests/QtAutogen/SameName/object.hxx
@@ -0,0 +1,13 @@
+#ifndef OBJECT_HXX
+#define OBJECT_HXX
+
+#include <QObject>
+
+class Object_hxx : public QObject
+{
+ Q_OBJECT
+ Q_SLOT
+ void go(){};
+};
+
+#endif