diff options
Diffstat (limited to 'clang/lib/Frontend/DependencyFile.cpp')
-rw-r--r-- | clang/lib/Frontend/DependencyFile.cpp | 50 |
1 files changed, 35 insertions, 15 deletions
diff --git a/clang/lib/Frontend/DependencyFile.cpp b/clang/lib/Frontend/DependencyFile.cpp index fe4218b..44268e7 100644 --- a/clang/lib/Frontend/DependencyFile.cpp +++ b/clang/lib/Frontend/DependencyFile.cpp @@ -49,6 +49,7 @@ struct DepCollectorPPCallbacks : public PPCallbacks { DepCollector.maybeAddDependency( llvm::sys::path::remove_leading_dotslash(*Filename), /*FromModule*/ false, isSystem(FileType), /*IsModuleFile*/ false, + &PP.getFileManager(), /*IsMissing*/ false); } @@ -56,9 +57,11 @@ struct DepCollectorPPCallbacks : public PPCallbacks { SrcMgr::CharacteristicKind FileType) override { StringRef Filename = llvm::sys::path::remove_leading_dotslash(SkippedFile.getName()); - DepCollector.maybeAddDependency(Filename, /*FromModule=*/false, + DepCollector.maybeAddDependency(Filename, + /*FromModule=*/false, /*IsSystem=*/isSystem(FileType), /*IsModuleFile=*/false, + &PP.getFileManager(), /*IsMissing=*/false); } @@ -69,9 +72,12 @@ struct DepCollectorPPCallbacks : public PPCallbacks { StringRef RelativePath, const Module *Imported, SrcMgr::CharacteristicKind FileType) override { if (!File) - DepCollector.maybeAddDependency(FileName, /*FromModule*/false, - /*IsSystem*/false, /*IsModuleFile*/false, - /*IsMissing*/true); + DepCollector.maybeAddDependency(FileName, + /*FromModule*/ false, + /*IsSystem*/ false, + /*IsModuleFile*/ false, + &PP.getFileManager(), + /*IsMissing*/ true); // Files that actually exist are handled by FileChanged. } @@ -82,9 +88,11 @@ struct DepCollectorPPCallbacks : public PPCallbacks { return; StringRef Filename = llvm::sys::path::remove_leading_dotslash(File->getName()); - DepCollector.maybeAddDependency(Filename, /*FromModule=*/false, + DepCollector.maybeAddDependency(Filename, + /*FromModule=*/false, /*IsSystem=*/isSystem(FileType), /*IsModuleFile=*/false, + &PP.getFileManager(), /*IsMissing=*/false); } @@ -100,10 +108,12 @@ struct DepCollectorMMCallbacks : public ModuleMapCallbacks { void moduleMapFileRead(SourceLocation Loc, const FileEntry &Entry, bool IsSystem) override { StringRef Filename = Entry.getName(); - DepCollector.maybeAddDependency(Filename, /*FromModule*/false, - /*IsSystem*/IsSystem, - /*IsModuleFile*/false, - /*IsMissing*/false); + DepCollector.maybeAddDependency(Filename, + /*FromModule*/ false, + /*IsSystem*/ IsSystem, + /*IsModuleFile*/ false, + /*FileMgr*/ nullptr, + /*IsMissing*/ false); } }; @@ -118,9 +128,11 @@ struct DepCollectorASTListener : public ASTReaderListener { } void visitModuleFile(StringRef Filename, serialization::ModuleKind Kind) override { - DepCollector.maybeAddDependency(Filename, /*FromModule*/true, - /*IsSystem*/false, /*IsModuleFile*/true, - /*IsMissing*/false); + DepCollector.maybeAddDependency(Filename, + /*FromModule*/ true, + /*IsSystem*/ false, /*IsModuleFile*/ true, + /*FileMgr*/ nullptr, + /*IsMissing*/ false); } bool visitInputFile(StringRef Filename, bool IsSystem, bool IsOverridden, bool IsExplicitModule) override { @@ -132,8 +144,9 @@ struct DepCollectorASTListener : public ASTReaderListener { if (auto FE = FileMgr.getOptionalFileRef(Filename)) Filename = FE->getName(); - DepCollector.maybeAddDependency(Filename, /*FromModule*/true, IsSystem, - /*IsModuleFile*/false, /*IsMissing*/false); + DepCollector.maybeAddDependency(Filename, /*FromModule*/ true, IsSystem, + /*IsModuleFile*/ false, /*FileMgr*/ nullptr, + /*IsMissing*/ false); return true; } }; @@ -142,9 +155,15 @@ struct DepCollectorASTListener : public ASTReaderListener { void DependencyCollector::maybeAddDependency(StringRef Filename, bool FromModule, bool IsSystem, bool IsModuleFile, + FileManager *FileMgr, bool IsMissing) { - if (sawDependency(Filename, FromModule, IsSystem, IsModuleFile, IsMissing)) + if (sawDependency(Filename, FromModule, IsSystem, IsModuleFile, IsMissing)) { + if (IsSystem && FileMgr && shouldCanonicalizeSystemDependencies()) { + if (auto F = FileMgr->getFile(Filename)) + Filename = FileMgr->getCanonicalName(*F); + } addDependency(Filename); + } } bool DependencyCollector::addDependency(StringRef Filename) { @@ -192,6 +211,7 @@ DependencyFileGenerator::DependencyFileGenerator( const DependencyOutputOptions &Opts) : OutputFile(Opts.OutputFile), Targets(Opts.Targets), IncludeSystemHeaders(Opts.IncludeSystemHeaders), + CanonicalSystemHeaders(Opts.CanonicalSystemHeaders), PhonyTarget(Opts.UsePhonyTargets), AddMissingHeaderDeps(Opts.AddMissingHeaderDeps), SeenMissingHeader(false), IncludeModuleFiles(Opts.IncludeModuleFiles), |