[cfe-dev] clang doesn't know about it's installation prefix when searching header files
Holger Schurig
hs4233 at mail.mn-solutions.de
Fri May 30 04:47:23 PDT 2008
> This is on Linux (Debian Etch). Maybe
> llvm::sys::Path::GetMainExecutable is buggy here?
It is indeed buggy. This
llvm::sys::Path MainExecutablePath =
llvm::sys::Path::GetMainExecutable(Argv0,
(void*)(intptr_t)InitializeIncludePaths);
+ fprintf(stderr, "MainExecutablePath %s\n", MainExecutablePath.c_str());
says that MainExecutablePath just contains "clang". But on the
shell, it says otherwise:
$ which clang
/usr/src/llvm/dist/bin/clang
Unfortunately, my shell (bash) doesn't call the program in a way
so that this can be re-used. A simple test program reveals this:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("argv[0] %s\n", argv[0]);
return 0;
}
and run it like this:
$ ./argc
argv[0] ./argc
$ mv argc /usr/src/llmv/dist/bin
$ which argc
/usr/src/llvm/dist/bin/argc
$ argc
argv[0] argc
... I see that using argv[0] is not sufficient, at least not if
bash 3.1.17 handles the PATH.
Only when I specify the full path does argv[] work:
$ /usr/src/llvm/dist/bin/argc
argv[0] /usr/src/llvm/dist/bin/argc
So, should I amend llvm::sys::Path::GetMainExecutable so that it:
* check if there is a "/" in the path?
* if not, iterate over env['PATH'] to search for itself and
use the first match?
More information about the cfe-dev
mailing list