Can Global reference files by absolute path?

Raffaele Ricciardi <[email protected]> Fri, 10 Jul 2015 15:49:18 +0200
Newsgroups gmane.comp.gnu.global.general
Message-ID <[email protected]>
Hello,

I am trying to use Global to lookup tags for each C library that a
project may use, by using GTAGSLIBPATH.  The caveat is that I would like
to generate Global files out of source, while discriminating libraries
that may share their directory (this is what happens in */usr/include/*).

So far, I have generated Global files successfully, but `global' doesn't
reference the original files correctly.  For instance, for the standard
C library, this is what happens when I run `global' from the directory
of a project:

     $ global -xs printf
     Warning: source file './stdio.h' is not available.
     printf            362 stdio.h
     ...

That is: `global' expects to find library files in the directory of the
project, instead of their own directory.  In this case, I would have
expected *stdio.h* to be referenced as */usr/include/stdio.h* instead.

I am going to describe what I have done.  I am using Global 6.5
(compiled with Exuberant Ctags 5.8) and the last version of Pygments.

First, I have created a directory to cache the Global files for the
standard C library:

     $ mkdir --parents ~/.cache/gtags/standard-c
     $ cd ~/.cache/gtags/standard-c

In this directory, I have generated a file with the list of headers that
`gtags' will parse:

     $ find /usr/include/*.h -type f > gtags.file
     $ cat gtags.file
     /usr/include/aio.h
     ...

Now, I would have expected `gtags' to be able to process `gtags.file'
from here, because it contains absolute paths, but `gtags' warns that it
is ignoring all those files because they are "out of source tree".
Apparently, I must move to the directory that contains those files
beforehand (indeed, this is the approach followed by the Tutorial).
Therefore:

     $ pushd /usr/include/
     /usr/include ~/.cache/gtags/standard-c
     $ gtags -c -f  ~/.cache/gtags/standard-c/gtags.file 
~/.cache/gtags/standard-c
     $ popd

Let's check that `gtags' has worked:

     $ ls
     GPATH  GRTAGS  GTAGS  gtags.file

OK.  Let's lookup a symbol:

     $ global -xs printf
     Warning: source file './stdio.h' is not available.
     printf            362 stdio.h
     ...

Why *./stdio.h* instead of */usr/include/stdio.h*?  Thank you.