Clang Tooling: Run multiple tools with different args

Hi,
   I have to run multiple tools in the same code using different set of
arguments for each (different source files). Seperately both tools work
fine. But when I run them both, the source path list in the second tool
contains all the source paths passed to the first tool too. How can I clear
the source path list? e.g.

CommonOptionsParser parser(size,Args);
ClangTool tool(parser.getCompilations(),parser.getSourcePathList()); //
source is test.cpp

CommonOptionsParser parser1(size1,Args1);
ClangTool tool2(parser1.getCompilations(),parser.getSourcePathList());
// source is test.cpp and test1.cpp in the above while Args1 contain only
test1.cpp

    Is there a way to reset the whole toolig structure and run a completely
new tool on a new set of arguments in the same code? (I don't wanna make 4
tools and run them seperately).

Regards,
Adil

Hi,
   I have to run multiple tools in the same code using different set of
arguments for each (different source files). Seperately both tools work
fine. But when I run them both, the source path list in the second tool
contains all the source paths passed to the first tool too. How can I clear
the source path list? e.g.

CommonOptionsParser parser(size,Args);
ClangTool tool(parser.getCompilations(),parser.getSourcePathList()); //
source is test.cpp

CommonOptionsParser parser1(size1,Args1);
ClangTool tool2(parser1.getCompilations(),parser.getSourcePathList());
// source is test.cpp and test1.cpp in the above while Args1 contain only
test1.cpp

    Is there a way to reset the whole toolig structure and run a completely
new tool on a new set of arguments in the same code? (I don't wanna make 4
tools and run them seperately).

Yes, don't use CommonOptionsParser. It is mainly a convenience class to
make writing tools easy. If you want two tools with two different argument
lists, parse them yourself and hand them to the ClangTool constructors...

Cheers,
/Manuel

To parse the command line arguments myself, I used some code from the CommonOptionsParsers constrcutor. I don’t understand the sourcePaths population though. How is this list used and how is this populated? I searched through the LLVM source code and found no usage of sourcePaths anywhere? Can you provide a little more detail on how llvm command line parser and the clang parser (options after “–”) work?

To parse the command line arguments myself, I used some code from the
CommonOptionsParsers constrcutor. I don't understand the sourcePaths
population though. How is this list used and how is this populated? I
searched through the LLVM source code and found no usage of sourcePaths
anywhere? Can you provide a little more detail on how llvm command line
parser and the clang parser (options after "--") work?

This has generally nothing to do with the command line parsing.

You need to give the ClangTool a CompilationDatabase. The
CommonOptionsParser happens to implement a strategy where it:
a) tries to load a FixedCompilationDatabase when you specify args after --
on the command line
b) tries to auto-detect the compilation database from the path specified
via -p
c) tries to auto-detect the compilation database from the first source file
specified on the command line

Cheers,
/Manuel