commit: 9722fb1b99011c720459fa5f11e9b78929b060ac
Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 15 00:03:43 2021 +0000
Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Mon Mar 15 00:03:43 2021 +0000
URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=9722fb1b
Change --firmware-files handling
- Move from space-separated list to comma-separated list
to add support for firmware files with spaces.
- Add support for firmware files with spaces.
- Check for specified firmware files in determine_real_args() which
will allow us to error out early.
- Clarify documentation.
Fixes: c576f99b0b ("Misc improvements for FIRMWARE* handling")
Bug: https://bugs.gentoo.org/775221
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>
doc/genkernel.8.txt | 4 ++--
gen_determineargs.sh | 12 ++++++++----
gen_initramfs.sh | 4 ++--
genkernel.conf | 4 ++--
4 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/doc/genkernel.8.txt b/doc/genkernel.8.txt
index 44f3d59..aa18496 100644
--- a/doc/genkernel.8.txt
+++ b/doc/genkernel.8.txt
@@ -571,8 +571,8 @@ NOTE: System.map filename and System.map symlink name must
be different.
Specify directory to copy firmware from (defaults to '/lib/firmware').
*--firmware-files*=<files>::
- Specifies specific firmware files to copy. This overrides *--firmware-dir*.
- For multiple files, separate the filenames with a comma.
+ Specifies specific firmware files or directories to copy, relative to
+ *--firmware-dir*. For multiple files, separate the filenames with a comma.
*--*[*no-*]*firmware-install*::
Enable or disables installation of firmware onto root filesystem.
diff --git a/gen_determineargs.sh b/gen_determineargs.sh
index 265c557..3e6e4dd 100755
--- a/gen_determineargs.sh
+++ b/gen_determineargs.sh
@@ -1240,10 +1240,14 @@ determine_real_args() {
if isTrue "${FIRMWARE}"
then
- for ff in ${FIRMWARE_FILES}; do
- [[ ${ff} = /* ]] && gen_die "FIRMWARE_FILES should list
paths relative to FIRMWARE_DIR, not absolute."
+ IFS=',' read -r -a FIRMWARE_FILES <<< "${FIRMWARE_FILES}"
+ pushd "${FIRMWARE_DIR}" &>/dev/null || gen_die "Failed to chdir
to '${FIRMWARE_DIR}'!"
+ local ff
+ for ff in "${FIRMWARE_FILES[@]}"
+ do
+ [[ ${ff} = /* ]] && gen_die "--firmware-files contains
value '${ff}' which is not a relative path from '${FIRMWARE_DIR}'!"
+ [[ ! -e "${ff}" ]] && gen_die "--firmware-files
contains value '${ff}' which was not found in '${FIRMWARE_DIR}'!"
done
-
- [[ "${FIRMWARE_FILES}" = *,* ]] && gen_die "FIRMWARE_FILES
should be a space-separated list."
+ popd &>/dev/null || gen_die "Failed to chdir!"
fi
}
diff --git a/gen_initramfs.sh b/gen_initramfs.sh
index 65a966d..9c030c5 100755
--- a/gen_initramfs.sh
+++ b/gen_initramfs.sh
@@ -1652,10 +1652,10 @@ append_firmware() {
mkdir -p "${TDIR}"/lib/firmware || gen_die "Failed to create
'${TDIR}/lib/firmware'!"
- if [ -n "${FIRMWARE_FILES}" ]
+ if [ ${#FIRMWARE_FILES[@]} -gt 0 ]
then
pushd "${FIRMWARE_DIR}" &>/dev/null || gen_die "Failed to chdir
to '${FIRMWARE_DIR}'!"
- cp -rL --parents --target-directory="${TDIR}/lib/firmware"
${FIRMWARE_FILES} 2>/dev/null \
+ cp -rL --parents --target-directory="${TDIR}/lib/firmware"
"${FIRMWARE_FILES[@]}" 2>/dev/null \
|| gen_die "Failed to copy firmware files
(${FIRMWARE_FILES}) to '${TDIR}/lib/firmware'!"
popd &>/dev/null || gen_die "Failed to chdir!"
else
diff --git a/genkernel.conf b/genkernel.conf
index a8507d1..6c350a6 100644
--- a/genkernel.conf
+++ b/genkernel.conf
@@ -147,9 +147,9 @@ NOCOLOR="false"
# Specify directory to pull from
#FIRMWARE_DIR="/lib/firmware"
-# Specify a space-separated list of firmware files or directories to include,
+# Specify a comma-separated list of firmware files or directories to include,
# relative to FIRMWARE_DIR. If empty or unset, the full contents of
-# FIRMWARE_DIR will be included.
+# FIRMWARE_DIR will be included (if FIRMWARE option above is set to YES).
#FIRMWARE_FILES=""
# Add new kernel to grub