]> granicus.if.org Git - clang/commit
[JSONCompilationDatabase] Strip distcc/ccache/gomacc wrappers from parsed commands.
authorSam McCall <sam.mccall@gmail.com>
Fri, 12 Jul 2019 10:11:40 +0000 (10:11 +0000)
committerSam McCall <sam.mccall@gmail.com>
Fri, 12 Jul 2019 10:11:40 +0000 (10:11 +0000)
commit834a93f953ac6789f39dbeb86d8144f847807353
tree8fabd886999357199263b2ed7038fd5fb15aba85
parenta56b827e7e6e74ab8ededb50640c73e1169fcb1a
[JSONCompilationDatabase] Strip distcc/ccache/gomacc wrappers from parsed commands.

Summary:
It's common to use compiler wrappers by setting CC="gomacc clang++".
This results in both args appearing in compile_commands.json, and clang's driver
can't handle this.

This patch attempts to recognize this pattern (by looking for well-known
wrappers) and dropping argv0 in this case.

It conservatively ignores other cases for now:
 - wrappers with unknown names
 - wrappers that accept -flags
 - wrappers where the compiler to use is implied (usually cc or gcc)

This is done at the JSONCompilationDatabase level rather than somewhere more
fundamental, as (hopefully) this isn't a general conceptual problem, but a messy
aspect of the nature of the ecosystem around compile_commands.json.
i.e. compilation databases more tightly tied to the build system should not have
this problem.

Reviewers: phosek, klimek

Subscribers: llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D64297

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@365887 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Tooling/JSONCompilationDatabase.cpp
unittests/Tooling/CompilationDatabaseTest.cpp