<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Mon, Aug 17, 2015 at 1:58 PM Laszlo Nagy <<a href="mailto:rizsotto.mailinglist@gmail.com">rizsotto.mailinglist@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>hi Manuel,<br><br></div>i would like to clarify the compilation database format once more. i think the <a href="http://clang.llvm.org/docs/JSONCompilationDatabase.html" target="_blank">page</a> has a wrong example which might be misleading. i'm developing an application which tries to generate compilation database as output, so it would be nice to clarify the documentation a bit.<br><br></div><div>here comes a simple test program.<br><br>  void test(const char * const message) { }<br></div><div>  int main() { test(MESSAGE); return 0; }</div><div><br></div><div>this can be compiled from shell with this command:<br><br><div>  $ clang -E test.c -DMESSAGE=\"hi\ there\" | grep -v ^#</div><div>  void test(const char * const message) { }</div><div>  int main() { test("hi there"); return 0; }</div><br></div><div>to create a cmake file to compile this:<br><br>  project(testing C)<br>  cmake_minimum_required(VERSION 2.8)<br>  add_definitions(-DMESSAGE="hi there")<br>  add_executable(a.out test.c)<br><br></div><div>from the console log i can see another compilation command. to see it does the same i checked manually...</div><div><br></div><div><div>  $ clang -E -DMESSAGE="\"hi there\"" test.c | grep -v ^#</div><div>  void test(const char * const message) { }</div><div>  int main() { test("hi there"); return 0; }</div></div><div><br></div><div>the cmake generated compile_commands.json looks like this:<br><br>  [{<br>    "directory": "/tmp",<br>    "command": "/usr/bin/cc  -DMESSAGE=\"\\\"hi there\\\"\"   -o CMakeFiles/exec.dir/test.c.o   -c /tmp/test.c",<br>    "file": "/tmp/test.c"<br>  }]<br><br></div><div>and it works with the clang tools (clang-check, clang-modernize, clang-tidy) the other working version would be this<br></div><div><br></div><div><div>  [{</div><div>    "directory": "/tmp",</div><div>    "command": "/usr/bin/cc  -DMESSAGE=\\\"hi\\ there\\\"   -o CMakeFiles/a.out.dir/test.c.o   -c /tmp/test.c",</div><div>    "file": "/tmp/test.c"</div><div>  }]</div></div><div><br></div><div>so, the <a href="http://clang.llvm.org/docs/JSONCompilationDatabase.html#format" target="_blank">example</a> is broken, because the SOMEDEF is not JSON+shell escaped, but only JSON.</div></div></blockquote><div><br></div><div>Well, I thought the example would generate the command line:</div><div>-DSOMEDEF="With spaces, quotes and \-es."<br></div><div>which of course does not include the "s in the macro. If that is unexpected, I'm happy for patches that clarify what exactly happens.</div><div><br></div><div>As you stumbled over this, it's obviously not clear enough and needs to be improved!</div><div> Cheers,</div><div>/Manuel</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div>