summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMariusz Pluciński <mplucinski@mplucinski.com>2016-02-13 10:30:31 (GMT)
committerBrad King <brad.king@kitware.com>2016-02-16 15:45:19 (GMT)
commit9beb2744d7685fca9cd5717308d4457dffdefcdc (patch)
tree7a7771944d85d24eeb3ec9328bbb2f42e6df151c
parent8dfb6f8b372b159c050b6ea5e16b4e44dd9ed095 (diff)
downloadCMake-9beb2744d7685fca9cd5717308d4457dffdefcdc.zip
CMake-9beb2744d7685fca9cd5717308d4457dffdefcdc.tar.gz
CMake-9beb2744d7685fca9cd5717308d4457dffdefcdc.tar.bz2
Automoc: Fix support of files with the same name (#12873)
-rw-r--r--Source/cmQtAutoGenerators.cxx35
-rw-r--r--Tests/QtAutogen/Adir/CMakeLists.txt2
-rw-r--r--Tests/QtAutogen/Adir/bar/foo.cpp4
-rw-r--r--Tests/QtAutogen/Adir/bar/foo.h10
-rw-r--r--Tests/QtAutogen/Adir/foo.cpp4
-rw-r--r--Tests/QtAutogen/Adir/foo.h8
6 files changed, 59 insertions, 4 deletions
diff --git a/Source/cmQtAutoGenerators.cxx b/Source/cmQtAutoGenerators.cxx
index b16eccd..226ab43 100644
--- a/Source/cmQtAutoGenerators.cxx
+++ b/Source/cmQtAutoGenerators.cxx
@@ -1104,10 +1104,39 @@ void cmQtAutoGenerators::ParseHeaders(const std::set<std::string>& absHeaders,
std::cout << "AUTOGEN: Checking " << headerName << std::endl;
}
- const std::string basename = cmsys::SystemTools::
- GetFilenameWithoutLastExtension(headerName);
+ std::string headerDirectory;
+ if (cmsys::SystemTools::IsSubDirectory(headerName,
+ this->ProjectSourceDir))
+ {
+ headerDirectory = this->ProjectSourceDir;
+ }
+ else if (cmsys::SystemTools::IsSubDirectory(headerName,
+ this->ProjectBinaryDir))
+ {
+ headerDirectory = this->ProjectBinaryDir;
+ }
+ else
+ {
+ cmsys::SystemTools::SplitPathRootComponent(headerName,
+ &headerDirectory);
+ }
+
+ std::string baseHeaderName =
+ cmsys::SystemTools::GetFilenameWithoutLastExtension(headerName);
+
+ headerDirectory = cmsys::SystemTools::RelativePath(
+ headerDirectory, cmsys::SystemTools::GetParentDirectory(headerName));
+
+ if (!headerDirectory.empty())
+ {
+ headerDirectory += "/";
+ }
+
+ std::string mocName = headerDirectory + baseHeaderName;
+
+ cmSystemTools::ReplaceString(mocName, "/", "_");
- const std::string currentMoc = "moc_" + basename + ".cpp";
+ const std::string currentMoc = "moc_" + mocName + ".cpp";
std::string macroName;
if (requiresMocing(contents, macroName))
{
diff --git a/Tests/QtAutogen/Adir/CMakeLists.txt b/Tests/QtAutogen/Adir/CMakeLists.txt
index a1c36ff..0c7848d 100644
--- a/Tests/QtAutogen/Adir/CMakeLists.txt
+++ b/Tests/QtAutogen/Adir/CMakeLists.txt
@@ -3,6 +3,6 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
-add_library(libA SHARED libA.cpp)
+add_library(libA SHARED libA.cpp foo.cpp bar/foo.cpp)
target_link_libraries(libA LINK_PUBLIC ${QT_QTCORE_TARGET})
generate_export_header(libA)
diff --git a/Tests/QtAutogen/Adir/bar/foo.cpp b/Tests/QtAutogen/Adir/bar/foo.cpp
new file mode 100644
index 0000000..3f5e0a9
--- /dev/null
+++ b/Tests/QtAutogen/Adir/bar/foo.cpp
@@ -0,0 +1,4 @@
+#include "foo.h"
+
+bar::foo::foo() {}
+bar::foo::~foo() {}
diff --git a/Tests/QtAutogen/Adir/bar/foo.h b/Tests/QtAutogen/Adir/bar/foo.h
new file mode 100644
index 0000000..daf2367
--- /dev/null
+++ b/Tests/QtAutogen/Adir/bar/foo.h
@@ -0,0 +1,10 @@
+#include <QObject>
+
+namespace bar {
+ class foo: public QObject {
+ Q_OBJECT
+ public:
+ foo();
+ ~foo();
+ };
+}
diff --git a/Tests/QtAutogen/Adir/foo.cpp b/Tests/QtAutogen/Adir/foo.cpp
new file mode 100644
index 0000000..86e4d8e
--- /dev/null
+++ b/Tests/QtAutogen/Adir/foo.cpp
@@ -0,0 +1,4 @@
+#include "foo.h"
+
+foo::foo() {}
+foo::~foo() {}
diff --git a/Tests/QtAutogen/Adir/foo.h b/Tests/QtAutogen/Adir/foo.h
new file mode 100644
index 0000000..a51960c
--- /dev/null
+++ b/Tests/QtAutogen/Adir/foo.h
@@ -0,0 +1,8 @@
+#include <QObject>
+
+class foo: public QObject {
+ Q_OBJECT
+public:
+ foo();
+ ~foo();
+};