use shutil.which instead of sys-apps/which
see https://bugs.gentoo.org/940711
--- a/SConstruct
+++ b/SConstruct
@@ -27,7 +27,8 @@ from __future__ import print_function
 FFADO_API_VERSION = "9"
 FFADO_VERSION="2.5.0"
 
-from subprocess import Popen, PIPE, check_output
+from shutil import which
+from subprocess import check_output
 import os
 import re
 import sys
@@ -162,10 +163,10 @@ def ConfigGuess( context ):
     return ret.decode()
 
 def CheckForApp( context, app ):
-    context.Message( "Checking whether '" + app + "' executes " )
-    ret = context.TryAction( app )
-    context.Result( ret[0] )
-    return ret[0]
+    context.Message( "Checking whether '" + app + "' exists " )
+    ret = which(app) is not None
+    context.Result(ret)
+    return ret
 
 def CheckForPyModule( context, module ):
     context.Message( "Checking for the python module '" + module + "' " )
@@ -220,13 +221,10 @@ version_re = re.compile(r'^(\d+)\.(\d+)\.(\d+)')
 
 def CheckJackdVer():
     print('Checking jackd version...', end='')
-    popen = Popen(("which", 'jackd'), stdout=PIPE, stderr=PIPE)
-    stdout, stderr = popen.communicate()
-    assert popen.returncode in (0, 1), "which returned a unexpected status"
-    if popen.returncode == 1:
+    jackd = which("jackd")
+    if jackd is None:
         print("not installed")
         return None
-    jackd = stdout.decode ().rstrip ()
     ret = check_output ((jackd, '--version')).decode() .rstrip ()
     ret = ret.split ('\n') [-1]; # Last line.
     ret = ret.split () [2];      # Third field.
@@ -413,10 +411,10 @@ are retried.
 
 # PyQT checks
 if env['BUILD_MIXER'] != 'false':
-    if  (    conf.CheckForApp( 'which pyuic6' ) \
+    if  (    conf.CheckForApp( 'pyuic6' ) \
          and conf.CheckForPyModule( 'PyQt6' ) \
          and conf.CheckForPyModule( 'dbus.mainloop.pyqt6' )) \
-     or (    conf.CheckForApp( 'which pyuic5' ) \
+     or (    conf.CheckForApp( 'pyuic5' ) \
          and conf.CheckForPyModule( 'PyQt5' ) \
          and conf.CheckForPyModule( 'dbus.mainloop.pyqt5' )):
         env['BUILD_MIXER'] = 'true'
@@ -446,7 +444,7 @@ for pkg in pkgs:
     name2 = pkg.replace("+","").replace(".","").replace("-","").upper()
     env['%s_FLAGS' % name2] = conf.GetPKGFlags( pkg, pkgs[pkg] )
 
-if not env['DBUS1_FLAGS'] or not env['DBUSC1_FLAGS'] or not conf.CheckForApp('which dbusxx-xml2cpp'):
+if not env['DBUS1_FLAGS'] or not env['DBUSC1_FLAGS'] or not conf.CheckForApp('dbusxx-xml2cpp'):
     env['DBUS1_FLAGS'] = b""
     env['DBUSC1_FLAGS'] = b""
     print("""
--- a/support/tools/ffado-diag.in
+++ b/support/tools/ffado-diag.in
@@ -21,6 +21,8 @@ static_info = "$LIBDATADIR/static_info.txt"
 
 # Test for common FFADO problems
 
+from shutil import which
+
 import glob
 import os.path
 import re
@@ -41,18 +43,6 @@ def indent (lines):
 def stdout (*args):
     return subprocess.check_output (args).decode ("utf8")
 
-def which (command):
-    popen = subprocess.Popen (("which", command), stdout=subprocess.PIPE,
-                              stderr=subprocess.PIPE)
-    stdout, stderr = popen.communicate ()
-    if popen.returncode == 0:
-        return stdout.decode ("utf8").rstrip ()
-    elif popen.returncode == 1:
-        return None
-    else:
-        print (stderr)
-        sys.exit (1)
-
 # Parse command line.
 usage = """Usage: ffado-diag [--static | -V | --version | --usage]
   --static       Only display executable paths and libraries.
