mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-23 07:52:06 +00:00
Print correctly dependency paths on Windows
Summary: Before: main.o: main.c ../include/lib\test.h After: main.o: main.c ../include/lib/test.h Fixes PR38877 Reviewers: zturner Subscribers: xbolva00, cfe-commits Differential Revision: https://reviews.llvm.org/D51847 llvm-svn: 342139
This commit is contained in:
parent
e6dd0806c7
commit
c96cb25a8b
@ -386,28 +386,32 @@ bool DFGImpl::AddFilename(StringRef Filename) {
|
||||
/// for Windows file-naming info.
|
||||
static void PrintFilename(raw_ostream &OS, StringRef Filename,
|
||||
DependencyOutputFormat OutputFormat) {
|
||||
// Convert filename to platform native path
|
||||
llvm::SmallString<256> NativePath;
|
||||
llvm::sys::path::native(Filename.str(), NativePath);
|
||||
|
||||
if (OutputFormat == DependencyOutputFormat::NMake) {
|
||||
// Add quotes if needed. These are the characters listed as "special" to
|
||||
// NMake, that are legal in a Windows filespec, and that could cause
|
||||
// misinterpretation of the dependency string.
|
||||
if (Filename.find_first_of(" #${}^!") != StringRef::npos)
|
||||
OS << '\"' << Filename << '\"';
|
||||
if (NativePath.find_first_of(" #${}^!") != StringRef::npos)
|
||||
OS << '\"' << NativePath << '\"';
|
||||
else
|
||||
OS << Filename;
|
||||
OS << NativePath;
|
||||
return;
|
||||
}
|
||||
assert(OutputFormat == DependencyOutputFormat::Make);
|
||||
for (unsigned i = 0, e = Filename.size(); i != e; ++i) {
|
||||
if (Filename[i] == '#') // Handle '#' the broken gcc way.
|
||||
for (unsigned i = 0, e = NativePath.size(); i != e; ++i) {
|
||||
if (NativePath[i] == '#') // Handle '#' the broken gcc way.
|
||||
OS << '\\';
|
||||
else if (Filename[i] == ' ') { // Handle space correctly.
|
||||
else if (NativePath[i] == ' ') { // Handle space correctly.
|
||||
OS << '\\';
|
||||
unsigned j = i;
|
||||
while (j > 0 && Filename[--j] == '\\')
|
||||
while (j > 0 && NativePath[--j] == '\\')
|
||||
OS << '\\';
|
||||
} else if (Filename[i] == '$') // $ is escaped by $$.
|
||||
} else if (NativePath[i] == '$') // $ is escaped by $$.
|
||||
OS << '$';
|
||||
OS << Filename[i];
|
||||
OS << NativePath[i];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
// Backslash followed by # or space should escape both characters, because
|
||||
// that's what GNU Make wants. GCC does the right thing with space, but not
|
||||
// #, so Clang does too. (There should be 3 backslashes before the #.)
|
||||
// SEP2F: a\b\\#c\\\ d.h
|
||||
// SEP2F: a{{[/\\]}}b{{[/\\]}}\#c{{/|\\\\}}\ d.h
|
||||
// With -fms-compatibility, Backslashes in #include are treated as path separators.
|
||||
// Backslashes are given in the emission for special characters, like 0x20 or 0x23.
|
||||
// SEP5C: a{{[/\\]}}b{{[/\\]}}\#c{{/|\\\\}}\ d.h
|
||||
|
@ -4,19 +4,19 @@
|
||||
// RUN: echo > %t.dir/a/b/x.h
|
||||
// RUN: cd %t.dir
|
||||
// RUN: %clang -MD -MF - %s -fsyntax-only -I a/b | FileCheck -check-prefix=CHECK-ONE %s
|
||||
// CHECK-ONE: {{ }}a/b{{[/\\]}}x.h
|
||||
// CHECK-ONE: {{ }}a{{[/\\]}}b{{[/\\]}}x.h
|
||||
|
||||
// PR8974 (-include flag)
|
||||
// RUN: %clang -MD -MF - %s -fsyntax-only -include a/b/x.h -DINCLUDE_FLAG_TEST | FileCheck -check-prefix=CHECK-TWO %s
|
||||
// CHECK-TWO: {{ }}a/b/x.h
|
||||
// CHECK-TWO: {{ }}a{{[/\\]}}b{{[/\\]}}x.h
|
||||
|
||||
// rdar://problem/9734352 (paths involving ".")
|
||||
// RUN: %clang -MD -MF - %s -fsyntax-only -I ./a/b | FileCheck -check-prefix=CHECK-THREE %s
|
||||
// CHECK-THREE: {{ }}a/b{{[/\\]}}x.h
|
||||
// CHECK-THREE: {{ }}a{{[/\\]}}b{{[/\\]}}x.h
|
||||
// RUN: %clang -MD -MF - %s -fsyntax-only -I .//./a/b/ | FileCheck -check-prefix=CHECK-FOUR %s
|
||||
// CHECK-FOUR: {{ }}a/b{{[/\\]}}x.h
|
||||
// CHECK-FOUR: {{ }}a{{[/\\]}}b{{[/\\]}}x.h
|
||||
// RUN: %clang -MD -MF - %s -fsyntax-only -I a/b/. | FileCheck -check-prefix=CHECK-FIVE %s
|
||||
// CHECK-FIVE: {{ }}a/b/.{{[/\\]}}x.h
|
||||
// CHECK-FIVE: {{ }}a{{[/\\]}}b{{[/\\]}}.{{[/\\]}}x.h
|
||||
// RUN: cd a/b
|
||||
// RUN: %clang -MD -MF - %s -fsyntax-only -I ./ | FileCheck -check-prefix=CHECK-SIX %s
|
||||
// CHECK-SIX: {{ }}x.h
|
||||
|
@ -30,9 +30,9 @@
|
||||
#include "Inputs/relative-dep-gen-1.h"
|
||||
|
||||
// CHECK-BUILD: mod.pcm:
|
||||
// CHECK-BUILD: {{[ \t]}}Inputs/relative-dep-gen{{(-cwd)?}}.modulemap
|
||||
// CHECK-BUILD: {{[ \t]}}Inputs/relative-dep-gen-1.h
|
||||
// CHECK-BUILD: {{[ \t]}}Inputs/relative-dep-gen-2.h
|
||||
// CHECK-BUILD: {{[ \t]}}Inputs{{[/\\]}}relative-dep-gen{{(-cwd)?}}.modulemap
|
||||
// CHECK-BUILD: {{[ \t]}}Inputs{{[/\\]}}relative-dep-gen-1.h
|
||||
// CHECK-BUILD: {{[ \t]}}Inputs{{[/\\]}}relative-dep-gen-2.h
|
||||
// CHECK-USE: use.o:
|
||||
// CHECK-USE-DAG: {{[ \t]}}relative-dep-gen.cpp
|
||||
// CHECK-EXPLICIT-DAG: mod.pcm
|
||||
|
Loading…
Reference in New Issue
Block a user