nixpkgs/pkgs/development/tools/build-managers/bear/ignore_wrapper.patch
Olli Helenius 4cb889f166 bear: fix wrapper detection patch by checking result of find_executable
With the wrapper detection patch, if a build invokes an executable that cannot
be found in PATH by `find_executable`, bear will fail with an `AttributeError`
in `os.path.realpath`.

This can happen if the build invokes some project-local tool or command, like
`./build-something`.

Instead of calling using the result of `find_executable` directly, first check
whether the executable was found and fall back to original Bear behavior if
it was not.
2019-01-09 23:00:16 +02:00

27 lines
1.2 KiB
Diff

--- a/bear/main.py.in
+++ b/bear/main.py.in
@@ -49,6 +49,7 @@ import tempfile
import shutil
import contextlib
import logging
+from distutils.spawn import find_executable
# Map of ignored compiler option for the creation of a compilation database.
# This map is used in _split_command method, which classifies the parameters
@@ -569,7 +570,15 @@ class Compilation:
(compiler, language, rest of the command) otherwise """
if command: # not empty list will allow to index '0' and '1:'
- executable = os.path.basename(command[0]) # type: str
+ executable_file = find_executable(command[0])
+ if executable_file:
+ absolute_executable = os.path.realpath(executable_file)
+ # Ignore Nix wrappers.
+ if 'wrapper' in absolute_executable:
+ return None
+ executable = os.path.basename(absolute_executable)
+ else:
+ executable = os.path.basename(command[0])
parameters = command[1:] # type: List[str]
# 'wrapper' 'parameters' and
# 'wrapper' 'compiler' 'parameters' are valid.