[cfe-commits] [PATCH] Implements support to run standalone tools

Douglas Gregor dgregor at apple.com
Mon Mar 26 07:43:41 PDT 2012


On Mar 26, 2012, at 7:39 AM, Manuel Klimek <klimek at google.com> wrote:

> On Mon, Mar 26, 2012 at 4:26 PM, Douglas Gregor <dgregor at apple.com> wrote:
> 
> On Mar 26, 2012, at 7:21 AM, Manuel Klimek <klimek at google.com> wrote:
> 
>> On Mon, Mar 26, 2012 at 3:56 PM, Douglas Gregor <dgregor at apple.com> wrote:
>> 
>> On Mar 26, 2012, at 4:08 AM, Manuel Klimek <klimek at google.com> wrote:
> 
>> 
>> >> Then again, when you say "CompilationDatabase", I think of something that I can extract a set { commands, arguments, source file } tuples to be executed.
>> >> Maybe that's where we are are talking past each other.
>> >
>> > When I say CompilationDatabase I think of a map<filename, { command,
>> > arguments, path}>. Does that make sense?
>> 
>> 
>> Makes sense to me, although of course this could end up being a multimap.
>> 
>> Which is also an interesting design question - at least for refactorings we'll probably want to run over all different command lines the file was compiled with (think: different configurations with different macros enabled). This would lead to a slightly different interface for CompilationDatabase though (returning a list of compile command lines for each target).
> 
> I think it's important for us to support this case in the interface.
> 
> Agreed. So something like:
> 
> /// \brief Specifies the working directory and command of a compilation.
> struct CompileCommand {
>   /// \brief The working directory the command was executed from.
>   std::string Directory;
> 
>   /// \brief The command line that was executed.
>   std::vector<std::string> CommandLine;
> };
> 
> class CompilationDatabase {
> public:
>   /// \brief Returns all compile commands in which the specified file was compiled.
>   ///
>   /// This includes compile commands that span multiple source files.
>   /// For example, for a compile command line
>   /// $ clang++ -o test a.cc b.cc t.cc
>   /// $ clang++ -o production a.cc b.cc -DPRODUCTION
>   /// A compilation database representing the project would return both command lines 
>   /// for a.cc and b.cc and only the first command line for t.cc.
>   virtual vector<CompileCommand> getCompileCommands(StringRef FilePath) = 0;
> };

Sure. Returning vectors is cheap now! ;)

> Also, I'd like to pull CompilationDatabase into its own header file if that is fine with you.

Yes, please.

	- Doug

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120326/27cf0059/attachment.html>


More information about the cfe-commits mailing list