4cb889f166
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.
27 lines
No EOL
1.2 KiB
Diff
27 lines
No EOL
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.
|