Automoc: Fix support of files with the same name (#12873)

This commit is contained in:
Mariusz Pluciński 2016-02-13 11:30:31 +01:00 committed by Brad King
parent 8dfb6f8b37
commit 9beb2744d7
6 changed files with 59 additions and 4 deletions

View File

@ -1104,10 +1104,39 @@ void cmQtAutoGenerators::ParseHeaders(const std::set<std::string>& absHeaders,
std::cout << "AUTOGEN: Checking " << headerName << std::endl; std::cout << "AUTOGEN: Checking " << headerName << std::endl;
} }
const std::string basename = cmsys::SystemTools:: std::string headerDirectory;
GetFilenameWithoutLastExtension(headerName); 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);
}
const std::string currentMoc = "moc_" + basename + ".cpp"; 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_" + mocName + ".cpp";
std::string macroName; std::string macroName;
if (requiresMocing(contents, macroName)) if (requiresMocing(contents, macroName))
{ {

View File

@ -3,6 +3,6 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE 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}) target_link_libraries(libA LINK_PUBLIC ${QT_QTCORE_TARGET})
generate_export_header(libA) generate_export_header(libA)

View File

@ -0,0 +1,4 @@
#include "foo.h"
bar::foo::foo() {}
bar::foo::~foo() {}

View File

@ -0,0 +1,10 @@
#include <QObject>
namespace bar {
class foo: public QObject {
Q_OBJECT
public:
foo();
~foo();
};
}

View File

@ -0,0 +1,4 @@
#include "foo.h"
foo::foo() {}
foo::~foo() {}

View File

@ -0,0 +1,8 @@
#include <QObject>
class foo: public QObject {
Q_OBJECT
public:
foo();
~foo();
};