<p dir="ltr"><br>
</p>
<p dir="ltr"></p>
<p dir="ltr">On Mon, Apr 6, 2015, 3:27 AM Kim Gräsman <<a href="mailto:kim.grasman@gmail.com">kim.grasman@gmail.com</a>> wrote:</p>
<blockquote><p dir="ltr">Hey all,</p>
<p dir="ltr">This sounds like a good development, and I'd like to throw in my 2 cents.</p>
<p dir="ltr">I looked at a related problem before, and I think it boils down to the<br>
same challenge -- Manuel and I discussed it on the bug here:<br>
<a href="http://llvm.org/bugs/show_bug.cgi?id=19687">http://llvm.org/bugs/show_bug.cgi?id=19687</a></p>
<p dir="ltr">I ran out of steam before I got around to any real implementation, but<br>
I think the primary challenge is that CMake and Ninja (or other<br>
compdb-producers) don't necessarily have the arguments in list form<br>
either. They usually seem to just have a command-line.</p>
</blockquote>
<p dir="ltr"></p>
<p dir="ltr">Which should be fine if we allow both.</p>
<blockquote><p dir="ltr"></p>
<p dir="ltr">So the complexity of splitting the command-line into arguments can<br>
either go in all the world's generators, or in the single consumer in<br>
LibTooling.</p>
</blockquote>
<p dir="ltr"></p>
<p dir="ltr">Or we add a little complexity to libtooling to allow both.</p>
<blockquote><p dir="ltr"></p>
<p dir="ltr">- Kim</p>
<p dir="ltr">On Mon, Apr 6, 2015 at 10:41 AM, Laszlo Nagy<br>
<<a href="mailto:rizsotto.mailinglist@gmail.com">rizsotto.mailinglist@gmail.com</a>> wrote:<br>
> hi there,<br>
><br>
> i'm also writing a tool (Bear) which generate the compilation database. and<br>
> had a few bugs in my code about escaping the command. if it's not too late i<br>
> would also propose a format for the problem. ;)<br>
><br>
> {<br>
>   directory: "/my/path"<br>
>   cmd: ["path to binary", "-c", "filename"],<br>
> ...<br>
> }<br>
><br>
> which would reformat the command field as a JSON array. would still give the<br>
> readability of the command and keep the order of the arguments. (i'm not<br>
> sure that the recommended multiple "argument" key would be correct JSON.)<br>
><br>
> how does it sound for you?<br>
><br>
> regards,<br>
> Laszlo<br>
><br>
><br>
> On Mon, Apr 6, 2015 at 1:11 AM, Manuel Klimek <<a href="mailto:klimek@google.com">klimek@google.com</a>> wrote:<br>
>><br>
>> Also, I think we want to introduce a new keyword for the binary.<br>
>> So both of these should work:<br>
>> {<br>
>>   directory: "/my/path"<br>
>>   binary: "path to binary"<br>
>>   argument: "-c"<br>
>>   argument: "filename"<br>
>> ...<br>
>> }<br>
>> or the shell-escaped command inside the json escaped string:<br>
>> {<br>
>>   directory: "/my/path"<br>
>>   command: "path\\ to\\ binary -c filename"<br>
>> ...<br>
>> }<br>
>> The thing to note is that both shell escaping and shell unescaping are<br>
>> sufficiently hard on non-unix platforms, and even on unix platforms it's<br>
>> just not nice to go from one to the other.<br>
>><br>
>> Cheers,<br>
>> /Manuel<br>
>><br>
>> On Sun, Apr 5, 2015 at 4:01 PM Manuel Klimek <<a href="mailto:klimek@google.com">klimek@google.com</a>> wrote:<br>
>>><br>
>>> Yes, I think it's easy enough to make compatible<br>
>>><br>
>>><br>
>>> On Sun, Apr 5, 2015, 8:42 AM Daniel Dilts <<a href="mailto:diltsman@gmail.com">diltsman@gmail.com</a>> wrote:<br>
>>>><br>
>>>> I like that a lot better.  I will look at what that is going to take.<br>
>>>><br>
>>>> If it goes that direction, will it be necessary to also support the<br>
>>>> older format?  I know there are tools, like CMake, that can produce this<br>
>>>> file format.<br>
>>>><br>
>>>> On Sun, Apr 5, 2015 at 8:26 AM, Manuel Klimek <<a href="mailto:klimek@google.com">klimek@google.com</a>> wrote:<br>
>>>>><br>
>>>>> On Sun, Apr 5, 2015 at 8:19 AM Daniel Dilts <<a href="mailto:diltsman@gmail.com">diltsman@gmail.com</a>> wrote:<br>
>>>>>><br>
>>>>>> So, escape the backslashes once for JSON and a second time for Clang?<br>
>>>>><br>
>>>>><br>
>>>>> Well, a second time for "shell".<br>
>>>>> A different idea that has come up was to just add (optional) 'arg'<br>
>>>>> fields to the json, instead of the shell escaping, which seems much more<br>
>>>>> pleasant to work with across platforms, like this:<br>
>>>>> {<br>
>>>>>   directory: '/my/path'<br>
>>>>>   command: 'just the exec'<br>
>>>>>   argument: '-c'<br>
>>>>>   argument: 'filename'<br>
>>>>> ...<br>
>>>>> }<br>
>>>>> Patches for that would be welcome :)<br>
>>>>><br>
>>>>>><br>
>>>>>><br>
>>>>>> If this is going to be necessary on Windows, it probably ought to be<br>
>>>>>> added to the documentation for the compilation database file format.<br>
>>>>>><br>
>>>>>> On Fri, Apr 3, 2015 at 7:49 PM, Manuel Klimek <<a href="mailto:klimek@google.com">klimek@google.com</a>><br>
>>>>>> wrote:<br>
>>>>>>><br>
>>>>>>> Why not escape the backslashes when writing the compilation db?<br>
>>>>>>><br>
>>>>>>><br>
>>>>>>> On Fri, Apr 3, 2015, 1:54 PM Daniel Dilts <<a href="mailto:diltsman@gmail.com">diltsman@gmail.com</a>> wrote:<br>
>>>>>>>><br>
>>>>>>>> I finally had the opportunity to look into this.<br>
>>>>>>>><br>
>>>>>>>> CommandLineArgumentParser in JSONCompilationDatabase.cpp deals with<br>
>>>>>>>> escapes by discarding all backslash characters.  I imagine that this works<br>
>>>>>>>> pretty well on Linux, not perfectly, but well enough.<br>
>>>>>>>><br>
>>>>>>>> Windows uses backslash as a separator in file paths, so this breaks<br>
>>>>>>>> most file paths on Windows.<br>
>>>>>>>><br>
>>>>>>>> How would one go about fixing this so it works on both Windows and<br>
>>>>>>>> Linux?  Obviously the different escape sequences need to be implemented.<br>
>>>>>>>> What I really mean is, how do you make it so that it uses the correct set of<br>
>>>>>>>> escapes depending on platform?<br>
>>>>>>>><br>
>>>>>>>><br>
>>>>>>>> On Tue, Mar 17, 2015 at 12:57 PM, Manuel Klimek <<a href="mailto:klimek@google.com">klimek@google.com</a>><br>
>>>>>>>> wrote:<br>
>>>>>>>>><br>
>>>>>>>>> I haven't had time to look.<br>
>>>>>>>>><br>
>>>>>>>>> On Tue, Mar 17, 2015 at 6:06 PM Daniel Dilts <<a href="mailto:diltsman@gmail.com">diltsman@gmail.com</a>><br>
>>>>>>>>> wrote:<br>
>>>>>>>>>><br>
>>>>>>>>>> What appears to be the exact problem?  Are relative paths just not<br>
>>>>>>>>>> properly implemented, or is the problem more specific than that?<br>
>>>>>>>>>><br>
>>>>>>>>>> On Tue, Mar 17, 2015 at 4:07 AM, Manuel Klimek <<a href="mailto:klimek@google.com">klimek@google.com</a>><br>
>>>>>>>>>> wrote:<br>
>>>>>>>>>>><br>
>>>>>>>>>>> I think this is a known problem. Patches very welcome :)<br>
>>>>>>>>>>><br>
>>>>>>>>>>> On Tue, Mar 17, 2015 at 1:14 AM Daniel Dilts <<a href="mailto:diltsman@gmail.com">diltsman@gmail.com</a>><br>
>>>>>>>>>>> wrote:<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> I am calling runClangTidy using a JSONCompilationDatabase that I<br>
>>>>>>>>>>>> generate from a string.  Everything works perfectly until I have a relative<br>
>>>>>>>>>>>> path.<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> With the following database I use<br>
>>>>>>>>>>>> "D:\\CMakeTest\\bld\\..\\src\\main.cpp" as the file to open:<br>
>>>>>>>>>>>> [<br>
>>>>>>>>>>>>    {<br>
>>>>>>>>>>>>       "directory": "D:\\CMakeTest\\bld\\",<br>
>>>>>>>>>>>>       "command"  : "D:/llvm/build/Debug/bin/clang.exe<br>
>>>>>>>>>>>> -I\"C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\include\"<br>
>>>>>>>>>>>> -I\"C:\\Program Files (x86)\\Microsoft Visual Studio<br>
>>>>>>>>>>>> 12.0\\VC\\atlmfc\\include\" -I\"C:\\Program Files (x86)\\Windows<br>
>>>>>>>>>>>> Kits\\8.1\\Include\\um\" -I\"C:\\Program Files (x86)\\Windows<br>
>>>>>>>>>>>> Kits\\8.1\\Include\\shared\" -I\"C:\\Program Files (x86)\\Windows<br>
>>>>>>>>>>>> Kits\\8.1\\Include\\winrt\"   -I\"C:\\Program Files (x86)\\Microsoft Visual<br>
>>>>>>>>>>>> Studio 12.0\\VC\\include\" -I\"C:\\Program Files (x86)\\Microsoft Visual<br>
>>>>>>>>>>>> Studio 12.0\\VC\\atlmfc\\include\" -I\"C:\\Program Files (x86)\\Windows<br>
>>>>>>>>>>>> Kits\\8.1\\Include\\um\" -I\"C:\\Program Files (x86)\\Windows<br>
>>>>>>>>>>>> Kits\\8.1\\Include\\shared\" -I\"C:\\Program Files (x86)\\Windows<br>
>>>>>>>>>>>> Kits\\8.1\\Include\\winrt\"   -DWIN32 -D_WINDOWS -D_DEBUG<br>
>>>>>>>>>>>> -DCMAKE_INTDIR=\"Debug\" ..\\src\\main.cpp",<br>
>>>>>>>>>>>>       "file"     : "..\\src\\main.cpp"<br>
>>>>>>>>>>>>    },<br>
>>>>>>>>>>>> ]<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> This gives me an output of "Error while processing<br>
>>>>>>>>>>>> D:\\CMakeTest\\bld\\..\\src\\main.cpp."<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> When I use the following database with<br>
>>>>>>>>>>>> "D:\\CMakeTest\\src\\main.cpp" as the file to open, everything works.<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> [<br>
>>>>>>>>>>>>    {<br>
>>>>>>>>>>>>       "directory": "D:\\CMakeTest\\src\\",<br>
>>>>>>>>>>>>       "command"  : "D:/llvm/build/Debug/bin/clang.exe<br>
>>>>>>>>>>>> -I\"C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\include\"<br>
>>>>>>>>>>>> -I\"C:\\Program Files (x86)\\Microsoft Visual Studio<br>
>>>>>>>>>>>> 12.0\\VC\\atlmfc\\include\" -I\"C:\\Program Files (x86)\\Windows<br>
>>>>>>>>>>>> Kits\\8.1\\Include\\um\" -I\"C:\\Program Files (x86)\\Windows<br>
>>>>>>>>>>>> Kits\\8.1\\Include\\shared\" -I\"C:\\Program Files (x86)\\Windows<br>
>>>>>>>>>>>> Kits\\8.1\\Include\\winrt\"   -I\"C:\\Program Files (x86)\\Microsoft Visual<br>
>>>>>>>>>>>> Studio 12.0\\VC\\include\" -I\"C:\\Program Files (x86)\\Microsoft Visual<br>
>>>>>>>>>>>> Studio 12.0\\VC\\atlmfc\\include\" -I\"C:\\Program Files (x86)\\Windows<br>
>>>>>>>>>>>> Kits\\8.1\\Include\\um\" -I\"C:\\Program Files (x86)\\Windows<br>
>>>>>>>>>>>> Kits\\8.1\\Include\\shared\" -I\"C:\\Program Files (x86)\\Windows<br>
>>>>>>>>>>>> Kits\\8.1\\Include\\winrt\"   -DWIN32 -D_WINDOWS -D_DEBUG<br>
>>>>>>>>>>>> -DCMAKE_INTDIR=\"Debug\" main.cpp",<br>
>>>>>>>>>>>>       "file"     : "main.cpp"<br>
>>>>>>>>>>>>    },<br>
>>>>>>>>>>>> ]<br>
>>>>>>>>>>>><br>
>>>>>>>>>>>><br>
>>>>>>>>>>>> Is there something that I am doing wrong?  The only changes<br>
>>>>>>>>>>>> between the two compilation databases are the directory and file entries.<br>
>>>>>>>>>>>> Both should refer to the same absolute path.<br>
>>>>>>>>>>>> _______________________________________________<br>
>>>>>>>>>>>> cfe-dev mailing list<br>
>>>>>>>>>>>> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
>>>>>>>>>>>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
>>>>>>>>>><br>
>>>>>>>>>><br>
>>>>>>>><br>
>>>>>><br>
>>>><br>
>><br>
>> _______________________________________________<br>
>> cfe-dev mailing list<br>
>> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
>><br>
><br>
><br>
> _______________________________________________<br>
> cfe-dev mailing list<br>
> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
><br>
</p>
</blockquote>
<p dir="ltr"><br>
</p>