summaryrefslogtreecommitdiffstats
path: root/Source/cmQtAutoGenerators.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmQtAutoGenerators.cxx')
-rw-r--r--Source/cmQtAutoGenerators.cxx35
1 files changed, 32 insertions, 3 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))
{