From 4cb889f1660e243de3fdadcd6697e5e9676722a7 Mon Sep 17 00:00:00 2001
From: Olli Helenius <liff@iki.fi>
Date: Wed, 9 Jan 2019 23:00:16 +0200
Subject: [PATCH] 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.
---
 .../build-managers/bear/ignore_wrapper.patch  | 24 +++++++++++--------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/pkgs/development/tools/build-managers/bear/ignore_wrapper.patch b/pkgs/development/tools/build-managers/bear/ignore_wrapper.patch
index f70e3811f65..8effc723bba 100644
--- a/pkgs/development/tools/build-managers/bear/ignore_wrapper.patch
+++ b/pkgs/development/tools/build-managers/bear/ignore_wrapper.patch
@@ -1,6 +1,6 @@
---- Bear-2.3.11-src/bear/main.py.in	1970-01-01 01:00:01.000000000 +0100
-+++ Bear-2.3.11-src-patch/bear/main.py.in	1970-01-01 01:00:01.000000000 +0100
-@@ -49,6 +49,7 @@
+--- a/bear/main.py.in
++++ b/bear/main.py.in
+@@ -49,6 +49,7 @@ import tempfile
  import shutil
  import contextlib
  import logging
@@ -8,16 +8,20 @@
  
  # Map of ignored compiler option for the creation of a compilation database.
  # This map is used in _split_command method, which classifies the parameters
-@@ -540,7 +541,11 @@
-                 any(pattern.match(cmd) for pattern in COMPILER_PATTERNS_CXX)
+@@ -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
-+            absolute_executable = os.path.realpath(find_executable(command[0]))
-+            if 'wrapper' in absolute_executable:
-+                return None
-+
-+            executable = os.path.basename(absolute_executable) # 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.
\ No newline at end of file