@@ -49,16 +49,19 @@ struct DepCollectorPPCallbacks : public PPCallbacks {
49
49
DepCollector.maybeAddDependency (
50
50
llvm::sys::path::remove_leading_dotslash (*Filename),
51
51
/* FromModule*/ false , isSystem (FileType), /* IsModuleFile*/ false ,
52
+ &PP.getFileManager (),
52
53
/* IsMissing*/ false );
53
54
}
54
55
55
56
void FileSkipped (const FileEntryRef &SkippedFile, const Token &FilenameTok,
56
57
SrcMgr::CharacteristicKind FileType) override {
57
58
StringRef Filename =
58
59
llvm::sys::path::remove_leading_dotslash (SkippedFile.getName ());
59
- DepCollector.maybeAddDependency (Filename, /* FromModule=*/ false ,
60
+ DepCollector.maybeAddDependency (Filename,
61
+ /* FromModule=*/ false ,
60
62
/* IsSystem=*/ isSystem (FileType),
61
63
/* IsModuleFile=*/ false ,
64
+ &PP.getFileManager (),
62
65
/* IsMissing=*/ false );
63
66
}
64
67
@@ -69,9 +72,12 @@ struct DepCollectorPPCallbacks : public PPCallbacks {
69
72
StringRef RelativePath, const Module *Imported,
70
73
SrcMgr::CharacteristicKind FileType) override {
71
74
if (!File)
72
- DepCollector.maybeAddDependency (FileName, /* FromModule*/ false ,
73
- /* IsSystem*/ false , /* IsModuleFile*/ false ,
74
- /* IsMissing*/ true );
75
+ DepCollector.maybeAddDependency (FileName,
76
+ /* FromModule*/ false ,
77
+ /* IsSystem*/ false ,
78
+ /* IsModuleFile*/ false ,
79
+ &PP.getFileManager (),
80
+ /* IsMissing*/ true );
75
81
// Files that actually exist are handled by FileChanged.
76
82
}
77
83
@@ -82,9 +88,11 @@ struct DepCollectorPPCallbacks : public PPCallbacks {
82
88
return ;
83
89
StringRef Filename =
84
90
llvm::sys::path::remove_leading_dotslash (File->getName ());
85
- DepCollector.maybeAddDependency (Filename, /* FromModule=*/ false ,
91
+ DepCollector.maybeAddDependency (Filename,
92
+ /* FromModule=*/ false ,
86
93
/* IsSystem=*/ isSystem (FileType),
87
94
/* IsModuleFile=*/ false ,
95
+ &PP.getFileManager (),
88
96
/* IsMissing=*/ false );
89
97
}
90
98
@@ -100,10 +108,12 @@ struct DepCollectorMMCallbacks : public ModuleMapCallbacks {
100
108
void moduleMapFileRead (SourceLocation Loc, const FileEntry &Entry,
101
109
bool IsSystem) override {
102
110
StringRef Filename = Entry.getName ();
103
- DepCollector.maybeAddDependency (Filename, /* FromModule*/ false ,
104
- /* IsSystem*/ IsSystem,
105
- /* IsModuleFile*/ false ,
106
- /* IsMissing*/ false );
111
+ DepCollector.maybeAddDependency (Filename,
112
+ /* FromModule*/ false ,
113
+ /* IsSystem*/ IsSystem,
114
+ /* IsModuleFile*/ false ,
115
+ /* FileMgr*/ nullptr ,
116
+ /* IsMissing*/ false );
107
117
}
108
118
};
109
119
@@ -118,9 +128,11 @@ struct DepCollectorASTListener : public ASTReaderListener {
118
128
}
119
129
void visitModuleFile (StringRef Filename,
120
130
serialization::ModuleKind Kind) override {
121
- DepCollector.maybeAddDependency (Filename, /* FromModule*/ true ,
122
- /* IsSystem*/ false , /* IsModuleFile*/ true ,
123
- /* IsMissing*/ false );
131
+ DepCollector.maybeAddDependency (Filename,
132
+ /* FromModule*/ true ,
133
+ /* IsSystem*/ false , /* IsModuleFile*/ true ,
134
+ /* FileMgr*/ nullptr ,
135
+ /* IsMissing*/ false );
124
136
}
125
137
bool visitInputFile (StringRef Filename, bool IsSystem,
126
138
bool IsOverridden, bool IsExplicitModule) override {
@@ -132,8 +144,9 @@ struct DepCollectorASTListener : public ASTReaderListener {
132
144
if (auto FE = FileMgr.getOptionalFileRef (Filename))
133
145
Filename = FE->getName ();
134
146
135
- DepCollector.maybeAddDependency (Filename, /* FromModule*/ true , IsSystem,
136
- /* IsModuleFile*/ false , /* IsMissing*/ false );
147
+ DepCollector.maybeAddDependency (Filename, /* FromModule*/ true , IsSystem,
148
+ /* IsModuleFile*/ false , /* FileMgr*/ nullptr ,
149
+ /* IsMissing*/ false );
137
150
return true ;
138
151
}
139
152
};
@@ -142,9 +155,15 @@ struct DepCollectorASTListener : public ASTReaderListener {
142
155
void DependencyCollector::maybeAddDependency (StringRef Filename,
143
156
bool FromModule, bool IsSystem,
144
157
bool IsModuleFile,
158
+ FileManager *FileMgr,
145
159
bool IsMissing) {
146
- if (sawDependency (Filename, FromModule, IsSystem, IsModuleFile, IsMissing))
160
+ if (sawDependency (Filename, FromModule, IsSystem, IsModuleFile, IsMissing)) {
161
+ if (IsSystem && FileMgr && shouldCanonicalizeSystemDependencies ()) {
162
+ if (auto F = FileMgr->getFile (Filename))
163
+ Filename = FileMgr->getCanonicalName (*F);
164
+ }
147
165
addDependency (Filename);
166
+ }
148
167
}
149
168
150
169
bool DependencyCollector::addDependency (StringRef Filename) {
@@ -192,6 +211,7 @@ DependencyFileGenerator::DependencyFileGenerator(
192
211
const DependencyOutputOptions &Opts)
193
212
: OutputFile(Opts.OutputFile), Targets(Opts.Targets),
194
213
IncludeSystemHeaders(Opts.IncludeSystemHeaders),
214
+ CanonicalSystemHeaders(Opts.CanonicalSystemHeaders),
195
215
PhonyTarget(Opts.UsePhonyTargets),
196
216
AddMissingHeaderDeps(Opts.AddMissingHeaderDeps), SeenMissingHeader(false ),
197
217
IncludeModuleFiles(Opts.IncludeModuleFiles),
0 commit comments