support/scripts/check-merged: use getopts instead of getopt

Commit 1187c34d88 (support/scripts: move merged-usr errors message
into check-merged-usr.sh) introduced the use of getopt to parse its
options; doing so allowed to use long option (with two leading dashes),
which is more descriptive than the usual one-character options.

However, getopt is part of util-linux; it is not a shell built-in.
util-linux is not a prerequisite of Buildroot, so we may end up running
on a system where it is missing.

We could add host-util-linux as a dependency when the system does not
provide getopt, but that's not very nice; even though host-skeleton does
not need to check for merged-bin for now, it does not need getopt, and
thus we could add host-util-linux (which depends on host-skeleton) as a
dependency of skeleton-custom. But that will not be tenable over the
long run, especially if/when we do a merged-bin in host dir.

Requiring that util-linux be installed system-wide is not nice either;
it's an additional requirement on the host.

We can do like we do in the oter scripts, though: use the shell built-in
getopts. Its usage is slightly different, and does not support long
options. As it's just for use in an internal script, we can live with
the less descriptive options, though.

Switch to using getopts, it removes the need for a new host dependency.

Fixes: 1187c34d88
Reported-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Julien Olivain <ju.o@free.fr>
This commit is contained in:
Yann E. MORIN
2025-11-21 17:34:53 +01:00
committed by Julien Olivain
parent fe01d702a1
commit 793ebd5d28
3 changed files with 16 additions and 31 deletions

View File

@@ -783,9 +783,9 @@ endif
# counterparts are appropriately setup as symlinks ones to the others.
@$(call MESSAGE,"Sanity check in overlays $(call qstrip,$(BR2_ROOTFS_OVERLAY))")
support/scripts/check-merged \
--type overlay \
$(if $(BR2_ROOTFS_MERGED_USR),--merged-usr) \
$(if $(BR2_ROOTFS_MERGED_BIN),--merged-bin) \
-t overlay \
$(if $(BR2_ROOTFS_MERGED_USR),-u) \
$(if $(BR2_ROOTFS_MERGED_BIN),-b) \
$(call qstrip,$(BR2_ROOTFS_OVERLAY))
$(foreach d, $(call qstrip,$(BR2_ROOTFS_OVERLAY)), \

View File

@@ -25,9 +25,9 @@ endif
define SKELETON_CUSTOM_CONFIGURE_CMDS
support/scripts/check-merged \
--type skeleton \
$(if $(BR2_ROOTFS_MERGED_USR),--merged-usr) \
$(if $(BR2_ROOTFS_MERGED_BIN),--merged-bin) \
-t skeleton \
$(if $(BR2_ROOTFS_MERGED_USR),-u) \
$(if $(BR2_ROOTFS_MERGED_BIN),-b) \
$(SKELETON_CUSTOM_PATH)
endef

View File

@@ -23,9 +23,9 @@
# to /usr/bin)
#
# Input:
# --type TYPE the type of root to check: 'skeleton' or 'overlay'
# --merged-usr check for merged /usr
# --merged-bin check for merged /usr/bin
# -t TYPE the type of root to check: 'skeleton' or 'overlay'
# -u check for merged /usr
# -b check for merged /usr/bin
# $*: the root directories (skeleton, overlays) to check
# Output:
# stdout: the list of non-compliant paths (empty if compliant).
@@ -34,31 +34,16 @@
# !0: if any directory to check is improperly merged
#
opts="type:,merged-usr,merged-bin"
ARGS="$(getopt -n check-merged -o "" -l "${opts}" -- "${@}")" || exit 1
eval set -- "${ARGS}"
type=
merged_usr=false
merged_bin=false
while :; do
case "${1}" in
(--type)
type="${2}"
shift 2
;;
(--merged-usr)
merged_usr=true
shift
;;
(--merged-bin)
merged_bin=true
shift
;;
(--)
shift
break
;;
while getopts "t:ub" OPT; do
case "${OPT}" in
(t) type="${OPTARG}";;
(u) merged_usr=true;;
(b) merged_bin=true;;
(:) printf "option %s expects a mandatory argument\n" "${OPTARG}"; exit 1;;
(\?) printf "unknown option %s\n" "${OPTARG}"; exit 1;;
esac
done