[cfe-dev] Relative Paths in Compilation Database

Daniel Dilts diltsman at gmail.com
Sun Apr 5 08:19:00 PDT 2015


So, escape the backslashes once for JSON and a second time for Clang?

If this is going to be necessary on Windows, it probably ought to be added
to the documentation for the compilation database file format.

On Fri, Apr 3, 2015 at 7:49 PM, Manuel Klimek <klimek at google.com> wrote:

> Why not escape the backslashes when writing the compilation db?
>
> On Fri, Apr 3, 2015, 1:54 PM Daniel Dilts <diltsman at gmail.com> wrote:
>
>> I finally had the opportunity to look into this.
>>
>> CommandLineArgumentParser in JSONCompilationDatabase.cpp deals with
>> escapes by discarding all backslash characters.  I imagine that this works
>> pretty well on Linux, not perfectly, but well enough.
>>
>> Windows uses backslash as a separator in file paths, so this breaks most
>> file paths on Windows.
>>
>> How would one go about fixing this so it works on both Windows and
>> Linux?  Obviously the different escape sequences need to be implemented.
>> What I really mean is, how do you make it so that it uses the correct set
>> of escapes depending on platform?
>>
>>
>> On Tue, Mar 17, 2015 at 12:57 PM, Manuel Klimek <klimek at google.com>
>> wrote:
>>
>>> I haven't had time to look.
>>>
>>> On Tue, Mar 17, 2015 at 6:06 PM Daniel Dilts <diltsman at gmail.com> wrote:
>>>
>>>> What appears to be the exact problem?  Are relative paths just not
>>>> properly implemented, or is the problem more specific than that?
>>>>
>>>> On Tue, Mar 17, 2015 at 4:07 AM, Manuel Klimek <klimek at google.com>
>>>> wrote:
>>>>
>>>>> I think this is a known problem. Patches very welcome :)
>>>>>
>>>>> On Tue, Mar 17, 2015 at 1:14 AM Daniel Dilts <diltsman at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> I am calling runClangTidy using a JSONCompilationDatabase that I
>>>>>> generate from a string.  Everything works perfectly until I have a relative
>>>>>> path.
>>>>>>
>>>>>> With the following database I use
>>>>>> "D:\\CMakeTest\\bld\\..\\src\\main.cpp" as the file to open:
>>>>>> [
>>>>>>    {
>>>>>>       "directory": "D:\\CMakeTest\\bld\\",
>>>>>>       "command"  : "D:/llvm/build/Debug/bin/clang.exe -I\"C:\\Program
>>>>>> Files (x86)\\Microsoft Visual Studio 12.0\\VC\\include\" -I\"C:\\Program
>>>>>> Files (x86)\\Microsoft Visual Studio 12.0\\VC\\atlmfc\\include\"
>>>>>> -I\"C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\um\"
>>>>>> -I\"C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\shared\"
>>>>>> -I\"C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\winrt\"
>>>>>> -I\"C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\include\"
>>>>>> -I\"C:\\Program Files (x86)\\Microsoft Visual Studio
>>>>>> 12.0\\VC\\atlmfc\\include\" -I\"C:\\Program Files (x86)\\Windows
>>>>>> Kits\\8.1\\Include\\um\" -I\"C:\\Program Files (x86)\\Windows
>>>>>> Kits\\8.1\\Include\\shared\" -I\"C:\\Program Files (x86)\\Windows
>>>>>> Kits\\8.1\\Include\\winrt\"   -DWIN32 -D_WINDOWS -D_DEBUG
>>>>>> -DCMAKE_INTDIR=\"Debug\" ..\\src\\main.cpp",
>>>>>>       "file"     : "..\\src\\main.cpp"
>>>>>>    },
>>>>>> ]
>>>>>>
>>>>>> This gives me an output of "Error while processing
>>>>>> D:\\CMakeTest\\bld\\..\\src\\main.cpp."
>>>>>>
>>>>>> When I use the following database with "D:\\CMakeTest\\src\\main.cpp"
>>>>>> as the file to open, everything works.
>>>>>>
>>>>>> [
>>>>>>    {
>>>>>>       "directory": "D:\\CMakeTest\\src\\",
>>>>>>       "command"  : "D:/llvm/build/Debug/bin/clang.exe -I\"C:\\Program
>>>>>> Files (x86)\\Microsoft Visual Studio 12.0\\VC\\include\" -I\"C:\\Program
>>>>>> Files (x86)\\Microsoft Visual Studio 12.0\\VC\\atlmfc\\include\"
>>>>>> -I\"C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\um\"
>>>>>> -I\"C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\shared\"
>>>>>> -I\"C:\\Program Files (x86)\\Windows Kits\\8.1\\Include\\winrt\"
>>>>>> -I\"C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\include\"
>>>>>> -I\"C:\\Program Files (x86)\\Microsoft Visual Studio
>>>>>> 12.0\\VC\\atlmfc\\include\" -I\"C:\\Program Files (x86)\\Windows
>>>>>> Kits\\8.1\\Include\\um\" -I\"C:\\Program Files (x86)\\Windows
>>>>>> Kits\\8.1\\Include\\shared\" -I\"C:\\Program Files (x86)\\Windows
>>>>>> Kits\\8.1\\Include\\winrt\"   -DWIN32 -D_WINDOWS -D_DEBUG
>>>>>> -DCMAKE_INTDIR=\"Debug\" main.cpp",
>>>>>>       "file"     : "main.cpp"
>>>>>>    },
>>>>>> ]
>>>>>>
>>>>>>
>>>>>> Is there something that I am doing wrong?  The only changes between
>>>>>> the two compilation databases are the directory and file entries.  Both
>>>>>> should refer to the same absolute path.
>>>>>> _______________________________________________
>>>>>> cfe-dev mailing list
>>>>>> cfe-dev at cs.uiuc.edu
>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>>>>>
>>>>>
>>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150405/9dd50795/attachment.html>


More information about the cfe-dev mailing list