瀏覽代碼

automoc: stricter checking for what file is included

foo.cpp must include foo.moc to have itself processed by moc

Alex
Alex Neundorf 14 年之前
父節點
當前提交
d08bc32bc2
共有 1 個文件被更改,包括 12 次插入0 次删除
  1. 12 0
      Source/cmQtAutomoc.cxx

+ 12 - 0
Source/cmQtAutomoc.cxx

@@ -517,6 +517,8 @@ void cmQtAutomoc::ParseCppFile(const std::string& absFilename,
     }
   const std::string absPath = cmsys::SystemTools::GetFilenamePath(
                    cmsys::SystemTools::GetRealPath(absFilename.c_str())) + '/';
+  const std::string scannedFileBasename = cmsys::SystemTools::
+                                  GetFilenameWithoutLastExtension(absFilename);
 
   std::string::size_type matchOffset = 0;
   if (mocIncludeRegExp.find(contentsString.c_str()))
@@ -605,6 +607,16 @@ void cmQtAutomoc::ParseCppFile(const std::string& absFilename,
         }
       else
         {
+        if (basename != scannedFileBasename)
+          {
+          std::cerr << "AUTOMOC: The file \"" << absFilename
+                    << "\" includes the moc file \"" << currentMoc
+                    << "\", which seems to be the moc file from a different "
+                    << "source file. This is not supported. "
+                    << "Include \"" << scannedFileBasename << ".moc\" to run "
+                    << "moc on this source file." << std::endl;
+          ::exit(EXIT_FAILURE);
+          }
         includedMocs[absFilename] = currentMoc;
         }
       matchOffset += mocIncludeRegExp.end();