Alexey Gladkov <gladkov.alexey@xxxxxxxxx> writes: > One possible way to compile the linux kernel is by using the O=<DIR> > parameter to place all generated files outside the source tree. > > Prior to this patch, sindex filters processed sources to exclude system > files. The base directory of the project was the current directory. > > When compiled outside of the source tree, this may not be the case. > This patch adds a parameter and an environment variable to specify > the source tree. > > You can use it like this: > > $ make O=$PWD-build C=2 CHECK="sindex -B $PWD add --" > > This parameter is also needed for searching if you want to display > the source code line because sindex does not store lines in the database > but reads them from source files. Tested-by: "Eric W. Biederman" <ebiederm@xxxxxxxxxxxx> This simple little example search now works for me: sindex --database=$PWD-build/sindex.sqlite search -m w task_struct.pid > Signed-off-by: Alexey Gladkov <gladkov.alexey@xxxxxxxxx> > --- > sindex.c | 21 +++++++++++++++++---- > 1 file changed, 17 insertions(+), 4 deletions(-) > > diff --git a/sindex.c b/sindex.c > index 22836a95..bff6d8c4 100644 > --- a/sindex.c > +++ b/sindex.c > @@ -101,11 +101,13 @@ static void show_help(int ret) > "\n" > "Options:\n" > " -D, --database=FILE Specify database file (default: %2$s);\n" > + " -B, --basedir=DIR Define project top directory (default is the current directory);\n" > " -v, --verbose Show information about what is being done;\n" > " -h, --help Show this text and exit.\n" > "\n" > "Environment:\n" > " SINDEX_DATABASE Database file location.\n" > + " SINDEX_BASEDIR Project top directory.\n" > "\n" > "Report bugs to authors.\n" > "\n", > @@ -125,9 +127,6 @@ static void show_help_add(int ret) > " -v, --verbose Show information about what is being done;\n" > " -h, --help Show this text and exit.\n" > "\n" > - "Environment:\n" > - " SINDEX_BASEDIRE Project top directory.\n" > - "\n" > "Report bugs to authors.\n" > "\n", > progname); > @@ -251,21 +250,26 @@ static void parse_cmdline(int argc, char **argv) > { > static const struct option long_options[] = { > { "database", required_argument, NULL, 'D' }, > + { "basedir", required_argument, NULL, 'B' }, > { "verbose", no_argument, NULL, 'v' }, > { "help", no_argument, NULL, 'h' }, > { NULL } > }; > int c; > + char *basedir = getenv("SINDEX_BASEDIR"); > char *env; > > if ((env = getenv("SINDEX_DATABASE")) != NULL) > sindex_dbfile = env; > > - while ((c = getopt_long(argc, argv, "+D:vh", long_options, NULL)) != -1) { > + while ((c = getopt_long(argc, argv, "+B:D:vh", long_options, NULL)) != -1) { > switch (c) { > case 'D': > sindex_dbfile = optarg; > break; > + case 'B': > + basedir = optarg; > + break; > case 'v': > sindex_verbose++; > break; > @@ -278,6 +282,12 @@ static void parse_cmdline(int argc, char **argv) > message("command required"); > show_usage(); > } > + > + if (basedir) { > + if (!realpath(basedir, cwd)) > + sindex_error(1, errno, "unable to get project base directory"); > + n_cwd = strlen(cwd); > + } > } > > static void parse_cmdline_add(int argc, char **argv) > @@ -1016,6 +1026,9 @@ static void command_search(int argc, char **argv) > char *dberr = NULL; > sqlite3_str *query = sqlite3_str_new(sindex_db); > > + if (chdir(cwd) < 0) > + sindex_error(1, errno, "unable to change directory: %s", cwd); > + > if (query_appendf(query, > "SELECT" > " file.name,"