[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