[cfe-dev] Are there plans for a libDriver?

Ted Kremenek kremenek at apple.com
Tue Aug 5 11:12:42 PDT 2008

On Aug 5, 2008, at 10:41 AM, Nico Weber wrote:

> On 05.08.2008, at 18:49, Ted Kremenek wrote:
>> On Aug 4, 2008, at 1:55 PM, Nico Weber wrote:
>>> On 04.08.2008, at 22:13, Ted Kremenek wrote:
>>>> On Aug 4, 2008, at 1:07 PM, Nico Weber wrote:
>>>>> Are there plans for a libDriver, which makes writing simple,  
>>>>> "one-off"
>>>>> clang clients easier? With this library, the amount of code of  
>>>>> this
>>>>> program could be reduced by a whole order of magnitude (only the
>>>>> ASTConsumer, two short loops for the -D and -I options, and the  
>>>>> call
>>>>> to ParseAST would be left).
>>>> Hi Nico,
>>>> You are not alone.  There is a lot of interest in doing this, but  
>>>> nobody has gotten around to doing it yet.  If you are interested,  
>>>> feel free to drive some work on this by submitting patches, etc.
>>> The attached patch adds directories and Makefiles for a libDriver  
>>> and moves the TextDiagnostic classes over there for starters. I  
>>> hope `svn diff` encodes `svn mv` information correctly.
>> As far as this patch is concerned, I think it is a good start.  One  
>> problem I see is that TextDiagnostPrinter.cpp currently depends on  
>> CommandLine.h, and has static variables to register command line  
>> options:
>> static llvm::cl::opt<bool>
>> NoShowColumn("fno-show-column",
>>              llvm::cl::desc("Do not include column number on  
>> diagnostics"));
>> static llvm::cl::opt<bool>
>> NoCaretDiagnostics("fno-caret-diagnostics",
>>                    llvm::cl::desc("Do not include source line and  
>> caret with"
>>                                   " diagnostics"));
>> This is no good.  We don't want library code automatically  
>> registering command line options in this manner.  I'm not certain  
>> what the proper mechanism should be for registering options from  
>> code in libDriver, but this isn't it, and should definitely be  
>> discussed in more detail on cfe-dev.  Ultimately we want libDriver  
>> to be usable not only by command line drivers, but potentially from  
>> other drivers such as an IDE, a daemon process, a CGI program, etc.
> In this case, I moved the options to clang.cpp and added flags to  
> TextDiagnosticPrinter, so there are no options in libDriver now.
> Nico

Instead of setShowColumn, etc., it seems better just to set these  
values in the ctor of TextDiagnosticPrinter.  That would transform:

       TextDiagnosticPrinter* TextDiagPrinter = new  


       TextDiagnosticPrinter* TextDiagPrinter = new  
TextDiagnosticPrinter(NoShowColumn, NoCaretDiagnostics);

It doesn't seem likely that carets/columns would be switched on/off  
after the printer is constructed.

More information about the cfe-dev mailing list