[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 3/3] configure: Get help text from meson_options.txt
|
From: |
Eric Blake |
|
Subject: |
Re: [PATCH 3/3] configure: Get help text from meson_options.txt |
|
Date: |
Mon, 30 Aug 2021 10:30:22 -0500 |
|
User-agent: |
NeoMutt/20210205-739-420e15 |
On Sun, Aug 29, 2021 at 07:32:10PM +0200, Thomas Huth wrote:
> It's cumbersome to maintain the option help texts twice, once in the
> "configure" script and once in meson_options.txt. So let's add some logic to
> the configure script to read most of the help texts from meson_options.txt.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> configure | 89 ++++++++++++++++---------------------------------------
> 1 file changed, 25 insertions(+), 64 deletions(-)
>
> diff --git a/configure b/configure
> index cb125c3f84..8446b7b3ea 100755
> --- a/configure
> +++ b/configure
> +
> +current_feature=""
> +current_desc=""
current_desc is unused below.
> +while read word1 word2 ; do
A bit misleading in the variable names. As a sample, you are parsing:
option('malloc_trim', type : 'feature', value : 'auto',
description: 'enable libc malloc_trim() for memory optimization')
which read then splits into:
word1="option('malloc_trim'," word2="type : 'feature', value : 'auto',"
or
word1="description:" word2="'enable libc malloc_trim() for memory
optimization')"
Better might be the names $first and $rest. You could also play with
$IFS for more precise splitting, but your hack is good enough for the
current usage.
> + case "$word1" in
> + option*)
> + if echo "$word2" | grep -q "type[ ]*: 'feature'"; then
Unlike my complaint in patch 1 about using echo on user-supplied text,
here you are using it on test in meson_options.txt which is presumably
not going to contain \ or leading -.
> + current_feature=$(echo $word1 | sed -e "s/option('//" -e
> "s/',.*$//")
> + else
> + current_feature=""
> + fi
If desired, you can save some fork()ing by doing:
case "$word2" in *type*:*"'feature'")
current_feature=${word1%\'*}
current_feature=${current_feature#*\'}
*) current_feature=""
esac
> + ;;
> + description:)
> + if [ -n "$current_feature" ]; then
> + printf " %-15s %s\n" "$current_feature" \
> + "$(echo "$word2" | sed -e "s/^'//" -e "s/'.*$//")"
Similarly,
if [ "$current_feature" ]; then
word2=${word2%\'*}
printf " %-15s %s\n" "$current_feature" "${word2#\'}"
fi
> + current_feature=""
> + fi
> + ;;
> + esac
Missing a *) catchall case (probably a good idea to reset
current_feature back to "" on lines that don't match the two forms you
care about).
> +done < $source_path/meson_options.txt | sort
> +
> +echo
> +echo "NOTE: The object files are built at the place where configure is
> launched"
> +
> exit 0
> fi
>
> --
> 2.27.0
>
>
Overall pretty clever.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org