From: Petr Hosek Date: Wed, 29 May 2019 00:01:05 +0000 (+0000) Subject: [Driver] Search the toolchain dir with -print-file-name X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5842cf258e968526ac9847424413775771fef1be;p=clang [Driver] Search the toolchain dir with -print-file-name This is useful when looking for directories or files relative to the toolchain root, e.g. include/c++/v1. This change also adds a test to make sure this functionality doesn't regress in the future. Differential Revision: https://reviews.llvm.org/D62558 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@361903 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 4c153bf334..a57c66403a 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -4437,6 +4437,11 @@ std::string Driver::GetFilePath(StringRef Name, const ToolChain &TC) const { if (llvm::sys::fs::exists(Twine(P))) return P.str(); + SmallString<128> D(Dir); + llvm::sys::path::append(D, "..", Name); + if (llvm::sys::fs::exists(Twine(D))) + return D.str(); + if (auto P = SearchPaths(TC.getLibraryPaths())) return *P; diff --git a/test/Driver/print-file-name.c b/test/Driver/print-file-name.c new file mode 100644 index 0000000000..9447c04a5e --- /dev/null +++ b/test/Driver/print-file-name.c @@ -0,0 +1,19 @@ +// Test that -print-file-name finds the correct file. + +// RUN: %clang -print-file-name=share/asan_blacklist.txt 2>&1 \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: --target=x86_64-linux-gnu \ +// RUN: | FileCheck --check-prefix=CHECK-RESOURCE-DIR %s +// CHECK-RESOURCE-DIR: resource_dir{{/|\\\\}}share{{/|\\\\}}asan_blacklist.txt + +// RUN: %clang -print-file-name=libclang_rt.builtins.a 2>&1 \ +// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \ +// RUN: --target=x86_64-linux-gnu \ +// RUN: | FileCheck --check-prefix=CHECK-COMPILER-RT %s +// CHECK-COMPILER-RT: resource_dir_with_per_target_subdir{{/|\\\\}}lib{{/|\\\\}}x86_64-linux-gnu{{/|\\\\}}libclang_rt.builtins.a + +// RUN: %clang -print-file-name=include/c++/v1 2>&1 \ +// RUN: -ccc-install-dir %S/Inputs/basic_linux_libcxx_tree/usr/bin \ +// RUN: --target=x86_64-linux-gnu \ +// RUN: | FileCheck --check-prefix=CHECK-INSTALL-DIR %s +// CHECK-INSTALL-DIR: basic_linux_libcxx_tree{{/|\\\\}}usr{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1