From b5060477e044d7c67e6d547b4628d120c8520ec2 Mon Sep 17 00:00:00 2001 From: Sean Silva Date: Fri, 15 Aug 2014 18:58:15 +0000 Subject: [PATCH] [cleanup] Factor out setting the driver's install dir. NFC. llvm-svn: 215756 --- clang/tools/driver/driver.cpp | 42 ++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/clang/tools/driver/driver.cpp b/clang/tools/driver/driver.cpp index 1bb94a8ad81b..e695f5c3a104 100644 --- a/clang/tools/driver/driver.cpp +++ b/clang/tools/driver/driver.cpp @@ -336,6 +336,27 @@ CreateAndPopulateDiagOpts(SmallVectorImpl &argv) { return DiagOpts; } +static void SetInstallDir(SmallVectorImpl &argv, + Driver &TheDriver) { + // Attempt to find the original path used to invoke the driver, to determine + // the installed path. We do this manually, because we want to support that + // path being a symlink. + SmallString<128> InstalledPath(argv[0]); + + // Do a PATH lookup, if there are no directory components. + if (llvm::sys::path::filename(InstalledPath) == InstalledPath) { + std::string Tmp = llvm::sys::FindProgramByName( + llvm::sys::path::filename(InstalledPath.str())); + if (!Tmp.empty()) + InstalledPath = Tmp; + } + llvm::sys::fs::make_absolute(InstalledPath); + InstalledPath = llvm::sys::path::parent_path(InstalledPath); + bool exists; + if (!llvm::sys::fs::exists(InstalledPath.str(), exists) && exists) + TheDriver.setInstalledDir(InstalledPath); +} + int main(int argc_, const char **argv_) { llvm::sys::PrintStackTraceOnErrorSignal(); llvm::PrettyStackTraceProgram X(argc_, argv_); @@ -399,26 +420,7 @@ int main(int argc_, const char **argv_) { ProcessWarningOptions(Diags, *DiagOpts, /*ReportDiags=*/false); Driver TheDriver(Path, llvm::sys::getDefaultTargetTriple(), Diags); - - // Attempt to find the original path used to invoke the driver, to determine - // the installed path. We do this manually, because we want to support that - // path being a symlink. - { - SmallString<128> InstalledPath(argv[0]); - - // Do a PATH lookup, if there are no directory components. - if (llvm::sys::path::filename(InstalledPath) == InstalledPath) { - std::string Tmp = llvm::sys::FindProgramByName( - llvm::sys::path::filename(InstalledPath.str())); - if (!Tmp.empty()) - InstalledPath = Tmp; - } - llvm::sys::fs::make_absolute(InstalledPath); - InstalledPath = llvm::sys::path::parent_path(InstalledPath); - bool exists; - if (!llvm::sys::fs::exists(InstalledPath.str(), exists) && exists) - TheDriver.setInstalledDir(InstalledPath); - } + SetInstallDir(argv, TheDriver); llvm::InitializeAllTargets(); ParseProgName(argv, SavedStrings, TheDriver);