From da382a88bf91acc7486db3bae26a7dd0425fb856 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Wed, 18 Mar 2009 20:25:53 +0000 Subject: Driver: Get executable path using llvm::sys::Path::GetMainExecutable. llvm-svn: 67228 --- clang/tools/driver/driver.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'clang') diff --git a/clang/tools/driver/driver.cpp b/clang/tools/driver/driver.cpp index fac44032518..865b57c5aba 100644 --- a/clang/tools/driver/driver.cpp +++ b/clang/tools/driver/driver.cpp @@ -60,15 +60,18 @@ void DriverDiagnosticPrinter::HandleDiagnostic(Diagnostic::Level Level, OS << '\n'; } +llvm::sys::Path GetExecutablePath(const char *Argv0) { + // This just needs to be some symbol in the binary; C++ doesn't + // allow taking the address of ::main however. + void *P = (void*) (intptr_t) GetExecutablePath; + return llvm::sys::Path::GetMainExecutable(Argv0, P); +} + int main(int argc, const char **argv) { llvm::sys::PrintStackTraceOnErrorSignal(); llvm::PrettyStackTraceProgram X(argc, argv); - // FIXME: We should use GetMainExecutable here, probably, but we may - // want to handle symbolic links slightly differently. The problem - // is that the path derived from this will influence search paths. - llvm::sys::Path Path(argv[0]); - + llvm::sys::Path Path = GetExecutablePath(argv[0]); llvm::OwningPtr DiagClient(new DriverDiagnosticPrinter(Path.getBasename(), llvm::errs())); -- cgit v1.2.3