Subject: [bug#49597] [PATCH core-updates 10/15] gnu: Use 'search-input-directory' when looking for C/C++ library headers.

From: Ludovic Courtès <[email-masked]>
Date: Fri, 16 Jul 2021 17:54:15 +0200

* gnu/packages/arcan.scm (arcan)[arguments]: Use
'search-input-directory' for "include/libdrm" and "include/apr-1".
* gnu/packages/bioinformatics.scm (sailfish): Likewise for jellyfish.
* gnu/packages/boost.scm (boost-for-irods): Likewise for libcxx headers.
* gnu/packages/cedille.scm (cedille): Likewise for IAL headers.
* gnu/packages/compression.scm (snappy-with-clang6): Likewise for libcxx
headers.
* gnu/packages/cups.scm (hplip): Likewise for libusb headers.
* gnu/packages/emulators.scm (pcsxr): Likewise for libcdio headers.
* gnu/packages/game-development.scm (python2-renpy): Likewise for
fribidi headers.
* gnu/packages/games.scm (pokerth): Likewise for libircclient.
* gnu/packages/guile-xyz.scm (guile-persist): Likewise for Guile.
* gnu/packages/hurd.scm (hurd): Likewise for libtirpc.
* gnu/packages/irods.scm (irods, irods-client-icommands): Likewise for
libcxx, catch2, and nlohmann-json-cpp.
* gnu/packages/julia.scm (julia): Use 'search-input-file' for libuv's
errno.h.
* gnu/packages/kde-pim.scm (kdepim-runtime): Use
'search-input-directory' for "include/KF5".
(kmessagelib): Likewise.
* gnu/packages/kde.scm (kdeconnect): Likewise.
* gnu/packages/llvm.scm (clang-runtime-3.5): Likewise for libtirpc.
* gnu/packages/mpi.scm (openmpi): Likewise for "include/infiniband".
* gnu/packages/pumpio.scm (pumpa): Use 'search-input-file' for "tidy.h"
and "aspell.h".
* gnu/packages/radio.scm (dream): Use 'search-input-file' and
'search-input-directory' for pulseaudio, sndfile, etc.
* gnu/packages/selinux.scm (policycoreutils): Likewise for PAM and
libaudit.
* gnu/packages/serialization.scm (avro-cpp-1.9-for-irods): Likewise for
libcxx.
* gnu/packages/sync.scm (nextcloud-client): Likewise for "include/KF5".
* gnu/packages/video.scm (mkvtoolnix): Likewise for "include/gtest".
(libopenshot): Likewise for "include/UnitTest++".
* gnu/packages/virtualization.scm (criu): Likewise for libnl3 and for
protobuf file.
---
 gnu/packages/arcan.scm            |  6 ++----
 gnu/packages/bioinformatics.scm   |  5 +++--
 gnu/packages/boost.scm            |  3 +--
 gnu/packages/cedille.scm          |  3 +--
 gnu/packages/compression.scm      |  4 ++--
 gnu/packages/cups.scm             |  5 ++---
 gnu/packages/emulators.scm        |  3 +--
 gnu/packages/game-development.scm |  4 +---
 gnu/packages/games.scm            |  3 +--
 gnu/packages/guile-xyz.scm        |  2 +-
 gnu/packages/hurd.scm             |  9 +++++----
 gnu/packages/irods.scm            | 17 +++++++----------
 gnu/packages/julia.scm            |  4 +---
 gnu/packages/kde-pim.scm          | 14 ++++++--------
 gnu/packages/kde.scm              | 10 ++++------
 gnu/packages/llvm.scm             | 13 ++++++-------
 gnu/packages/mpi.scm              |  9 ++++-----
 gnu/packages/pretty-print.scm     |  5 ++---
 gnu/packages/pumpio.scm           |  6 ++----
 gnu/packages/radio.scm            | 18 ++++++------------
 gnu/packages/selinux.scm          |  4 ++--
 gnu/packages/serialization.scm    |  3 +--
 gnu/packages/sync.scm             |  5 ++---
 gnu/packages/video.scm            | 11 ++++-------
 gnu/packages/virtualization.scm   | 12 ++++++------
 25 files changed, 73 insertions(+), 105 deletions(-)

diff --git a/gnu/packages/arcan.scm b/gnu/packages/arcan.scm
index a84bf0d8dd..0ab157b525 100644
--- a/gnu/packages/arcan.scm
+++ b/gnu/packages/arcan.scm
@@ -75,12 +75,10 @@
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "src/platform/cmake/modules/FindGBMKMS.cmake"
                  (("/usr/local/include/libdrm")
-                  (string-append (assoc-ref inputs "libdrm")
-                                 "/include/libdrm")))
+                  (search-input-directory inputs "include/libdrm")))
                (substitute* "src/platform/cmake/modules/FindAPR.cmake"
                  (("/usr/local/apr/include/apr-1")
-                  (string-append (assoc-ref inputs "apr")
-                                 "/include/apr-1")))
+                  (search-input-directory inputs "include/apr-1")))
                #t))
            ;; Normally, it tries to fetch patched openal with git
            ;; but copying files manually in the right place seems to work too.
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 6bd56ca085..6adc6a0276 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -9477,8 +9477,9 @@ dependency like SeqAn.")
                (("#include \"jellyfish/config.h\"") ""))
              (substitute* "src/CMakeLists.txt"
                (("\\$\\{GAT_SOURCE_DIR\\}/external/install/include/jellyfish-2.2..")
-                (string-append (assoc-ref inputs "jellyfish")
-                               "/include/jellyfish-" ,(package-version jellyfish)))
+                (search-input-directory
+                 inputs
+                 (string-append "/include/jellyfish-" ,(package-version jellyfish))))
                (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libjellyfish-2.0.a")
                 (string-append (assoc-ref inputs "jellyfish")
                                "/lib/libjellyfish-2.0.a"))
diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index 14b6734ed7..8b6bea30c4 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -238,8 +238,7 @@ across a broad spectrum of applications.")
              (let ((gcc (assoc-ref (or native-inputs inputs) "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons (string-append (assoc-ref inputs "libcxx")
-                                             "/include/c++/v1")
+                        (cons (search-input-directory inputs "/include/c++/v1")
                               ;; Hide GCC's C++ headers so that they do not interfere with
                               ;; the Clang headers.
                               (delete (string-append gcc "/include/c++")
diff --git a/gnu/packages/cedille.scm b/gnu/packages/cedille.scm
index d3dd576323..decaf25605 100644
--- a/gnu/packages/cedille.scm
+++ b/gnu/packages/cedille.scm
@@ -89,8 +89,7 @@
          (add-after 'unpack 'copy-ial
            (lambda* (#:key inputs #:allow-other-keys)
              (copy-recursively
-              (string-append (assoc-ref inputs "agda-ial")
-                             "/include/agda/ial")
+              (search-input-directory inputs "/include/agda/ial")
               "ial")
              ;; Ambiguous module if main is included from ial
              (delete-file "ial/main.agda")
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 2487515428..54c85cc64b 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1211,8 +1211,8 @@ for most inputs, but the resulting compressed files are anywhere from 20% to
              (let ((gcc (assoc-ref (or native-inputs inputs) "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons* (string-append (assoc-ref inputs "libcxx+libcxxabi")
-                                              "/include/c++/v1")
+                        (cons* (search-input-directory inputs
+                                                       "/include/c++/v1")
                                ;; Hide GCC's C++ headers so that they do not interfere with
                                ;; the Clang headers.
                                (delete (string-append gcc "/include/c++")
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index 98c7d9b12e..eb3fac3742 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2019, 2021 Ricardo Wurmus <[email-masked]>
-;;; Copyright © 2015, 2016, 2017, 2019 Ludovic Courtès <[email-masked]>
+;;; Copyright © 2015, 2016, 2017, 2019, 2021 Ludovic Courtès <[email-masked]>
 ;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <[email-masked]>
 ;;; Copyright © 2016 Danny Milosavljevic <[email-masked]>
 ;;; Copyright © 2017 Leo Famulari <[email-masked]>
@@ -600,8 +600,7 @@ should only be used as part of the Guix cups-pk-helper service.")
                  ;; FIXME Use beginning-of-word in regexp.
                  (("[[:blank:]]plugin\\.py[[:blank:]]") " ")
                  (("/usr/include/libusb-1.0")
-                  (string-append (assoc-ref inputs "libusb")
-                                 "/include/libusb-1.0"))
+                  (search-input-directory inputs "/include/libusb-1.0"))
                  (("hplip_statedir =.*$")
                   ;; Don't bail out while trying to create
                   ;; /var/lib/hplip.  We can safely change its value
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 84c6b0624f..e458d24cab 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -1914,8 +1914,7 @@ emulator.")
              (lambda* (#:key inputs #:allow-other-keys)
                (substitute* "cmake/FindCdio.cmake"
                  (("/usr/include/cdio")
-                  (string-append (assoc-ref inputs "libcdio") "/include/cdio")))
-               #t))
+                  (search-input-directory inputs "/include/cdio")))))
            (add-after 'install 'wrap-program
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (wrap-program (string-append (assoc-ref outputs "out")
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 92ab3e4fb5..80f8c77c73 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -1195,9 +1195,7 @@ developed mainly for Ren'py.")
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "module/setup.py"
                (("/usr/include/fribidi")
-                (string-append (assoc-ref inputs "fribidi")
-                               "/include/fribidi")))
-             #t))
+                (search-input-directory inputs "include/fribidi")))))
          (add-after 'set-paths 'set-build-vars
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "RENPY_CYTHON"
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 84b14696af..17c61dd387 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -12242,8 +12242,7 @@ game.")  ;thanks to Debian for description
                (("/opt/gsasl")
                 (assoc-ref inputs "gsasl"))
                (("\\$\\$\\{PREFIX\\}/include/libircclient")
-                (string-append (assoc-ref inputs "libircclient")
-                               "/include/libircclient"))
+                (search-input-directory inputs "/include/libircclient"))
                (("LIB_DIRS =")
                 (string-append "LIB_DIRS = "
                                (assoc-ref inputs "boost") "/lib")))
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 5e63075751..2874928883 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -2875,7 +2875,7 @@ chunks can be expressions as well as simple tokens.")
                (("/usr/local/lib/guile")
                 (string-append (assoc-ref outputs "out") "/lib/guile"))
                (("/usr/local/include/guile")
-                (string-append (assoc-ref inputs "guile") "/include/guile"))
+                (search-input-directory inputs "/include/guile"))
                (("-L/usr/local/lib")
                 (string-append "-L" (assoc-ref inputs "guile") "/lib")))
              #t))
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index 59a7b55943..e45f755e3b 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016, 2017 Manolis Fragkiskos Ragkousis <[email-masked]>
-;;; Copyright © 2018, 2020 Ludovic Courtès <[email-masked]>
+;;; Copyright © 2018, 2020, 2021 Ludovic Courtès <[email-masked]>
 ;;; Copyright © 2020 Efraim Flashner <[email-masked]>
 ;;; Copyright © 2020 Marius Bakke <[email-masked]>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <[email-masked]>
@@ -378,9 +378,10 @@ Hurd-minimal package which are needed for both glibc and GCC.")
            (lambda* (#:key inputs #:allow-other-keys)
              (for-each (lambda (var)
                          (setenv var
-                                 (string-append (assoc-ref inputs "libtirpc")
-                                                "/include/tirpc:"
-                                                (or (getenv var) ""))))
+                                 (string-append
+                                  (search-input-directory inputs
+                                                          "include/tirpc")
+                                  ":" (or (getenv var) ""))))
                        '("CROSS_C_INCLUDE_PATH" "C_INCLUDE_PATH"
                          "CROSS_CPATH" "CPATH"))
              #t))
diff --git a/gnu/packages/irods.scm b/gnu/packages/irods.scm
index bb0263682c..e82888e7ae 100644
--- a/gnu/packages/irods.scm
+++ b/gnu/packages/irods.scm
@@ -126,12 +126,9 @@
              (let ((gcc (assoc-ref inputs  "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons* (string-append (assoc-ref inputs "libcxx+libcxxabi")
-                                              "/include/c++/v1")
-                               (string-append (assoc-ref inputs "catch2")
-                                              "/include/catch2")
-                               (string-append (assoc-ref inputs "json")
-                                              "/include/nlohmann")
+                        (cons* (search-input-directory inputs "/include/c++/v1")
+                               (search-input-directory inputs "/include/catch2")
+                               (search-input-directory inputs "/include/nlohmann")
                                ;; Hide GCC's C++ headers so that they do not interfere with
                                ;; the Clang headers.
                                (delete (string-append gcc "/include/c++")
@@ -231,10 +228,10 @@ stored.")
              (let ((gcc (assoc-ref inputs  "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons* (string-append (assoc-ref inputs "libcxx+libcxxabi")
-                                              "/include/c++/v1")
-                               (string-append (assoc-ref inputs "json")
-                                              "/include/nlohmann")
+                        (cons* (search-input-directory inputs
+                                                       "include/c++/v1")
+                               (search-input-directory inputs
+                                                       "include/nlohmann")
                                ;; Hide GCC's C++ headers so that they do not interfere with
                                ;; the Clang headers.
                                (delete (string-append gcc "/include/c++")
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 13c9f7baf1..52dfc95a4d 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -312,9 +312,7 @@ libraries.  It is also a bit like @code{ldd} and @code{otool -L}.")
 
              (substitute* "base/Makefile"
                (("\\$\\(build_includedir\\)/uv/errno.h")
-                (string-append (assoc-ref inputs "libuv")
-                               "/include/uv/errno.h")))
-             #t))
+                (search-input-file inputs "/include/uv/errno.h")))))
          (add-before 'build 'replace-default-shell
            (lambda _
              (substitute* "base/client.jl"
diff --git a/gnu/packages/kde-pim.scm b/gnu/packages/kde-pim.scm
index db73941b42..0c7fa77b1e 100644
--- a/gnu/packages/kde-pim.scm
+++ b/gnu/packages/kde-pim.scm
@@ -757,10 +757,9 @@ for KDE PIM.")
                       ;; found during one of the compilation steps without
                       ;; this hack.
                       (setenv "CPLUS_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "akonadi-mime")
-                                             "/include/KF5:"
-                                             (or (getenv "CPLUS_INCLUDE_PATH") "")))
-                      #t)))))
+                              (string-append
+                               (search-input-directory inputs "include/KF5")
+                               ":" (or (getenv "CPLUS_INCLUDE_PATH") ""))))))))
     (home-page "https://invent.kde.org/pim/kdepim-runtime")
     (synopsis "Runtime components for Akonadi KDE")
     (description "This package contains Akonadi agents written using KDE
@@ -1369,10 +1368,9 @@ using a Qt/KMime C++ API.")
                       ;; FIXME: One of the compilation steps fail to find
                       ;; <Libkdepim/MultiplyingLine> without this hack.
                       (setenv "CPLUS_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "libkdepim")
-                                             "/include/KF5:"
-                                             (or (getenv "CPLUS_INCLUDE_PATH") "")))
-                      #t)))))
+                              (string-append
+                               (search-input-directory inputs "include/KF5")
+                               ":" (or (getenv "CPLUS_INCLUDE_PATH") ""))))))))
     (home-page "https://invent.kde.org/pim/messagelib")
     (synopsis "KDE PIM messaging libraries")
     (description "This package provides several libraries for messages,
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index 1184aa5662..65ba80a7c7 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2018 Gábor Boskovits <[email-masked]>
 ;;; Copyright © 2019 Nicolas Goaziou <[email-masked]>
 ;;; Copyright © 2018, 2019, 2020 Hartmut Goebel <[email-masked]>
-;;; Copyright © 2019, 2020 Ludovic Courtès <[email-masked]>
+;;; Copyright © 2019, 2020, 2021 Ludovic Courtès <[email-masked]>
 ;;; Copyright © 2020 Marius Bakke <[email-masked]>
 ;;; Copyright © 2020, 2021 Michael Rohleder <[email-masked]>
 ;;; Copyright © 2020 Prafulla Giri <[email-masked]>
@@ -721,11 +721,9 @@ different notification systems.")
                       ;; FIXME: <kcmutils_version.h> is not found during one
                       ;; of the compilation steps without this hack.
                       (setenv "CPLUS_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "kcmutils")
-                                             "/include/KF5:"
-                                             (or (getenv "CPLUS_INCLUDE_PATH")
-                                                 "")))
-                      #t)))
+                              (string-append
+                               (search-input-directory inputs "include/KF5")
+                               ":" (or (getenv "CPLUS_INCLUDE_PATH") ""))))))
        #:tests? #f)) ; tests fail hard in our build environment
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 38da28150b..f39a3ad49d 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -855,14 +855,13 @@ of programming tools as well as libraries with equivalent functionality.")
              (add-after 'unpack 'find-rpc-includes
                (lambda* (#:key inputs #:allow-other-keys)
                  (setenv "CPATH"
-                         (string-append (assoc-ref inputs "libtirpc")
-                                        "/include/tirpc/:"
-                                        (or (getenv "CPATH") "")))
+                         (string-append
+                          (search-input-directory inputs "/include/tirpc")
+                          ":" (or (getenv "CPATH") "")))
                  (setenv "CPLUS_INCLUDE_PATH"
-                         (string-append (assoc-ref inputs "libtirpc")
-                                        "/include/tirpc/:"
-                                        (or (getenv "CPLUS_INCLUDE_PATH") "")))
-                 #t))))))
+                         (string-append
+                          (search-input-directory inputs "/include/tirpc")
+                          ":" (or (getenv "CPLUS_INCLUDE_PATH") "")))))))))
       (inputs
        `(("libtirpc" ,libtirpc)
          ("llvm" ,llvm-3.5))))))
diff --git a/gnu/packages/mpi.scm b/gnu/packages/mpi.scm
index 2011cbcd29..af1de10377 100644
--- a/gnu/packages/mpi.scm
+++ b/gnu/packages/mpi.scm
@@ -263,12 +263,11 @@ bind processes, and much more.")
                   (add-after 'unpack 'find-opensm-headers
                     (lambda* (#:key inputs #:allow-other-keys)
                       (setenv "C_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "opensm")
-                                             "/include/infiniband"))
+                              (search-input-directory inputs
+                                                      "/include/infiniband"))
                       (setenv "CPLUS_INCLUDE_PATH"
-                              (string-append (assoc-ref inputs "opensm")
-                                             "/include/infiniband"))
-                      #t))
+                              (search-input-directory inputs
+                                                      "/include/infiniband"))))
                   (add-before 'build 'remove-absolute
                     (lambda _
                       ;; Remove compiler absolute file names (OPAL_FC_ABSOLUTE
diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm
index 1fc1441052..d7a5ddc8e5 100644
--- a/gnu/packages/pretty-print.scm
+++ b/gnu/packages/pretty-print.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2016, 2019, 2020 Efraim Flashner <[email-masked]>
 ;;; Copyright © 2016, 2021 Ricardo Wurmus <[email-masked]>
 ;;; Copyright © 2017 Marius Bakke <[email-masked]>
-;;; Copyright © 2017, 2020 Ludovic Courtès <[email-masked]>
+;;; Copyright © 2017, 2020, 2021 Ludovic Courtès <[email-masked]>
 ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <[email-masked]>
 ;;; Copyright © 2019 Meiyo Peng <[email-masked]>
 ;;; Copyright © 2020 Paul Garlick <[email-masked]>
@@ -217,8 +217,7 @@ to @code{IOStreams}.")
              (let ((gcc (assoc-ref inputs "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons (string-append (assoc-ref inputs "libcxx")
-                                             "/include/c++/v1")
+                        (cons (search-input-directory inputs "/include/c++/v1")
                               ;; Hide GCC's C++ headers so that they do not interfere with
                               ;; the Clang headers.
                               (delete (string-append gcc "/include/c++")
diff --git a/gnu/packages/pumpio.scm b/gnu/packages/pumpio.scm
index f8a60af760..1cdb2fdd88 100644
--- a/gnu/packages/pumpio.scm
+++ b/gnu/packages/pumpio.scm
@@ -50,11 +50,9 @@
              ;; Fix dependency tests.
              (substitute* "pumpa.pro"
                (("/usr/include/tidy\\.h")
-                (string-append (assoc-ref inputs "tidy")
-                               "/include/tidy.h"))
+                (search-input-file inputs "/include/tidy.h"))
                (("/usr/include/aspell.h")
-                (string-append (assoc-ref inputs "aspell")
-                               "/include/aspell.h")))
+                (search-input-file inputs "/include/aspell.h")))
              ;; Run qmake with proper installation prefix.
              (let ((prefix (string-append "PREFIX="
                                           (assoc-ref outputs "out"))))
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index 26fd22db88..c55cd55ac5 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -1723,23 +1723,17 @@ Compatible hardware/software:
                                (assoc-ref outputs "out")
                                "/share/man/man1"))
                (("/usr/include/pulse/")
-                (string-append (assoc-ref inputs "pulseaudio")
-                               "/include/pulse/"))
+                (search-input-directory inputs "include/pulse"))
                (("/usr/include/sndfile\\.h")
-                (string-append (assoc-ref inputs "libsndfile")
-                               "/include/sndfile.h"))
+                (search-input-file inputs "/include/sndfile.h"))
                (("/usr/include/opus/")
-                (string-append (assoc-ref inputs "opus")
-                               "/include/opus/"))
+                (search-input-directory inputs "include/opus"))
                (("/usr/include/speex/")
-                (string-append (assoc-ref inputs "speexdsp")
-                               "/include/speex/"))
+                (search-input-directory inputs "include/speex"))
                (("/usr/include/qwt/")
-                (string-append (assoc-ref inputs "qwt")
-                               "/include/qwt/"))
+                (search-input-directory inputs "include/qwt"))
                (("\\$\\$OUT_PWD/include/neaacdec\\.h")
-                (string-append (assoc-ref inputs "faad2")
-                               "/include/neaacdec.h")))))
+                (search-input-file inputs "/include/neaacdec.h")))))
          (replace 'configure
            (lambda _
              (invoke "qmake"))))))
diff --git a/gnu/packages/selinux.scm b/gnu/packages/selinux.scm
index 41b8fdcbe1..e7e6289d1c 100644
--- a/gnu/packages/selinux.scm
+++ b/gnu/packages/selinux.scm
@@ -397,9 +397,9 @@ tools, and libraries designed to facilitate SELinux policy analysis.")
                             "setfiles/Makefile"
                             "run_init/Makefile")
                (("/usr(/include/security/pam_appl.h)" _ file)
-                (string-append (assoc-ref inputs "pam") file))
+                (search-input-file inputs file))
                (("/usr(/include/libaudit.h)" _ file)
-                (string-append (assoc-ref inputs "audit") file))))))))
+                (search-input-file inputs file))))))))
     (inputs
      `(("audit" ,audit)
        ("pam" ,linux-pam)
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index 95c7dcee63..7fd083f93d 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -107,8 +107,7 @@ implement RPC protocols.")
              (let ((gcc (assoc-ref inputs  "gcc")))
                (setenv "CPLUS_INCLUDE_PATH"
                        (string-join
-                        (cons* (string-append (assoc-ref inputs "libcxx+libcxxabi")
-                                              "/include/c++/v1")
+                        (cons* (search-input-directory inputs "include/c++/v1")
                                ;; Hide GCC's C++ headers so that they do not interfere with
                                ;; the Clang headers.
                                (delete (string-append gcc "/include/c++")
diff --git a/gnu/packages/sync.scm b/gnu/packages/sync.scm
index c85b4f801c..d36e200def 100644
--- a/gnu/packages/sync.scm
+++ b/gnu/packages/sync.scm
@@ -156,9 +156,8 @@
                (("ON CACHE") "OFF CACHE"))
              (substitute* "src/gui/CMakeLists.txt"
                (("@kwidgetsaddons@")
-                (string-append (assoc-ref inputs "kwidgetsaddons")
-                               "/include/KF5/KWidgetsAddons/")))
-             #t))
+                (search-input-directory inputs
+                                        "/include/KF5/KWidgetsAddons/")))))
          (add-before 'check 'pre-check
            (lambda _
              ;; Tests write to $HOME.
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 44d215c69c..3fe6d11653 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -974,10 +974,8 @@ H.264 (MPEG-4 AVC) video streams.")
              #t)))
          (add-before 'configure 'add-googletest
            (lambda* (#:key inputs #:allow-other-keys)
-             (symlink
-               (string-append (assoc-ref inputs "googletest")
-                              "/include/gtest") "lib/gtest")
-             #t))
+             (symlink (search-input-file inputs "/include/gtest")
+                      "lib/gtest")))
          (replace 'build
            (lambda _
              (let ((-j (list "-j" (number->string (parallel-job-count)))))
@@ -4537,9 +4535,8 @@ create smoother and stable videos.")
              (setenv "ZMQDIR"
                      (assoc-ref inputs "zeromq"))
              (setenv "UNITTEST_DIR"
-                     (string-append (assoc-ref inputs "unittest++")
-                                    "/include/UnitTest++"))
-             #t)))))
+                     (search-input-directory inputs
+                                             "include/UnitTest++")))))))
     (home-page "https://openshot.org")
     (synopsis "Video-editing, animation, and playback library")
     (description "OpenShot Library (libopenshot) is a powerful C++ video
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 225a7de868..b0041de976 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -1340,10 +1340,9 @@ domains, their live performance and resource utilization statistics.")
            (lambda* (#:key inputs #:allow-other-keys)
              ;; The includes for libnl are located in a sub-directory.
              (setenv "C_INCLUDE_PATH"
-                     (string-append (assoc-ref inputs "libnl")
-                                    "/include/libnl3:"
-                                    (or (getenv "C_INCLUDE_PATH") "")))
-             #t))
+                     (string-append
+                      (search-input-directory inputs "/include/libnl3")
+                      ":" (or (getenv "C_INCLUDE_PATH") "")))))
          (add-after 'configure 'fix-documentation
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (substitute* "Documentation/Makefile"
@@ -1374,8 +1373,9 @@ domains, their live performance and resource utilization statistics.")
              ;; /usr/include/..., which obviously does not exist.
              (let* ((file "google/protobuf/descriptor.proto")
                     (target (string-append "images/" file))
-                    (source (string-append (assoc-ref inputs "protobuf")
-                                           "/include/" file)))
+                    (source (search-input-file
+                             inputs
+                             (string-append "include/" file))))
                (delete-file target)
                (symlink source target)
                #t)))
-- 
2.32.0