bear: ignore wrapper calls (#20070)

Fixes #20056
This commit is contained in:
Pavel Chuprikov 2016-11-03 15:27:03 +01:00 committed by Vladimír Čunát
parent 662c5095a8
commit 6693e3b06c
2 changed files with 33 additions and 0 deletions

View file

@ -16,6 +16,8 @@ stdenv.mkDerivation rec {
doCheck = false; # all fail
patches = [ ./ignore_wrapper.patch ];
meta = with stdenv.lib; {
description = "Tool that generates a compilation database for clang tooling";
longDescription = ''

View file

@ -0,0 +1,31 @@
--- Bear-2.2.1-src/bear/main.py.in 1970-01-01 01:00:01.000000000 +0100
+++ Bear-2.2.1-src-patch/bear/main.py.in 2016-11-02 20:23:38.050134984 +0100
@@ -48,6 +48,7 @@
import shutil
import contextlib
import logging
+from distutils.spawn import find_executable
# Ignored compiler options map for compilation database creation.
# The map is used in `split_command` method. (Which does ignore and classify
@@ -447,7 +448,6 @@
# do extra check on number of source files
return result if result.files else None
-
def split_compiler(command):
""" A predicate to decide the command is a compiler call or not.
@@ -467,7 +467,11 @@
for pattern in COMPILER_CPP_PATTERNS)
if command: # not empty list will allow to index '0' and '1:'
- executable = os.path.basename(command[0])
+ absolute_executable = os.path.realpath(find_executable(command[0]))
+ if 'wrapper' in absolute_executable:
+ return None
+
+ executable = os.path.basename(absolute_executable)
parameters = command[1:]
# 'wrapper' 'parameters' and
# 'wrapper' 'compiler' 'parameters' are valid.