qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]