[cfe-dev] Relative Paths in Compilation Database

Mehmet Erol Sanliturk m.e.sanliturk at gmail.com
Fri Apr 3 14:43:56 PDT 2015


On Fri, Apr 3, 2015 at 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
>>>>>
>>>>
>>>
>
> _______________________________________________
>
>



In Windows , forward slashes in source files are usable :

include '/a/b/....'  ( relative paths can be used such as ../../../  etc. )

( I am using this form , at least since ten years because I am compiling
the same program sources in Windows and Unix without any change , in
Fortran , Pascal , and C  )

but , in Console , only back slashes are accepted :

dir \a\b\... /S
ren \a\b\d\g.c  h.c

because , forward slashes are used for command line options .

I did not try forward slashes in quoted form : You may try it ( I do not
have any Windows at present ) :

dir "/a/b/..." /S



Thank you very much .



Mehmet Erol Sanliturk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150403/e3857ca9/attachment.html>


More information about the cfe-dev mailing list