* [Qemu-devel] [PATCH] configure: Avoid non-portable 'test -o/-a'
@ 2019-02-05 2:39 Eric Blake
2019-02-05 13:12 ` Peter Maydell
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Eric Blake @ 2019-02-05 2:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-trivial, thuth
POSIX says that it is better to use &&/|| and two separate test
invocations than it is to try and use -a and -o (in fact, there
are some tests that are inherently ambiguous to parse if the
user passes in corner-case input like "(").
Since we cannot guarantee which shell runs configure, we cannot
rely on -o/-a always following bash's parser rules.
Signed-off-by: Eric Blake <eblake@redhat.com>
---
configure | 63 +++++++++++++++++++++++++++++--------------------------
1 file changed, 33 insertions(+), 30 deletions(-)
diff --git a/configure b/configure
index 3d89870d996..61bc70708e4 100755
--- a/configure
+++ b/configure
@@ -1834,8 +1834,8 @@ fi
# Consult white-list to determine whether to enable werror
# by default. Only enable by default for git builds
if test -z "$werror" ; then
- if test -d "$source_path/.git" -a \
- \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
+ if test -d "$source_path/.git" && \
+ { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
werror="yes"
else
werror="no"
@@ -2940,7 +2940,7 @@ EOF
sdl=yes
# static link with sdl ? (note: sdl.pc's --static --libs is broken)
- if test "$sdl" = "yes" -a "$static" = "yes" ; then
+ if test "$sdl" = "yes" && test "$static" = "yes" ; then
if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
@@ -3082,7 +3082,7 @@ fi
##########################################
# VNC SASL detection
-if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
+if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
cat > $TMPC <<EOF
#include <sasl/sasl.h>
#include <stdio.h>
@@ -3105,7 +3105,7 @@ fi
##########################################
# VNC JPEG detection
-if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
+if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
cat > $TMPC <<EOF
#include <stdio.h>
#include <jpeglib.h>
@@ -3127,7 +3127,7 @@ fi
##########################################
# VNC PNG detection
-if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
+if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
cat > $TMPC <<EOF
//#include <stdio.h>
#include <png.h>
@@ -3491,7 +3491,7 @@ fi
# This workaround is required due to a bug in pkg-config file for glib as it
# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
-if test "$static" = yes -a "$mingw32" = yes; then
+if test "$static" = yes && test "$mingw32" = yes; then
QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
fi
@@ -3584,7 +3584,7 @@ fi
##########################################
# pixman support probe
-if test "$want_tools" = "no" -a "$softmmu" = "no"; then
+if test "$want_tools" = "no" && test "$softmmu" = "no"; then
pixman_cflags=
pixman_libs=
elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
@@ -3699,7 +3699,7 @@ else
done
fi
-if test "$mingw32" != yes -a "$pthread" = no; then
+if test "$mingw32" != yes && test "$pthread" = no; then
error_exit "pthread check failed" \
"Make sure to have the pthread libs and headers installed."
fi
@@ -3826,7 +3826,7 @@ fi
##########################################
# TPM passthrough is only on x86 Linux
-if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
+if test "$targetos" = Linux && { test "$cpu" = i386 || test "$cpu" = x86_64; }; then
tpm_passthrough=$tpm
else
tpm_passthrough=no
@@ -3992,7 +3992,7 @@ EOF
fi
fi
-if test "$opengl" = "yes" -a "$have_x11" = "yes"; then
+if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
for target in $target_list; do
case $target in
lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
@@ -4612,8 +4612,8 @@ elif compile_prog "" "$pthread_lib -lrt" ; then
libs_qga="$libs_qga -lrt"
fi
-if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
- "$haiku" != "yes" ; then
+if test "$darwin" != "yes" && test "$mingw32" != "yes" && \
+ test "$solaris" != yes && test "$haiku" != "yes" ; then
libs_softmmu="-lutil $libs_softmmu"
fi
@@ -4688,7 +4688,8 @@ fi
##########################################
# check if we have VSS SDK headers for win
-if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
+if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
+ test "$vss_win32_sdk" != "no" ; then
case "$vss_win32_sdk" in
"") vss_win32_include="-isystem $source_path" ;;
*\ *) # The SDK is installed in "Program Files" by default, but we cannot
@@ -4727,7 +4728,8 @@ fi
# VSS provider from the source. It is usually unnecessary because the
# pre-compiled .tlb file is included.
-if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
+if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
+ test "$guest_agent_with_vss" = "yes" ; then
if test -z "$win_sdk"; then
programfiles="$PROGRAMFILES"
test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
@@ -4743,7 +4745,7 @@ fi
##########################################
# check if mingw environment provides a recent ntddscsi.h
-if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
+if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
cat > $TMPC << EOF
#include <windows.h>
#include <ntddscsi.h>
@@ -4790,7 +4792,7 @@ case "$capstone" in
"" | yes)
if $pkg_config capstone; then
capstone=system
- elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
+ elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
capstone=git
elif test -e "${source_path}/capstone/Makefile" ; then
capstone=internal
@@ -5162,7 +5164,7 @@ fi
# There is no point enabling this if cpuid.h is not usable,
# since we won't be able to select the new routines.
-if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
+if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
cat > $TMPC << EOF
#pragma GCC push_options
#pragma GCC target("avx2")
@@ -5220,7 +5222,7 @@ EOF
fi
cmpxchg128=no
-if test "$int128" = yes -a "$atomic128" = no; then
+if test "$int128" = yes && test "$atomic128" = no; then
cat > $TMPC << EOF
int main(void)
{
@@ -5893,9 +5895,9 @@ fi
# Mac OS X ships with a broken assembler
roms=
-if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
- "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
- "$softmmu" = yes ; then
+if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
+ test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
+ test "$softmmu" = yes ; then
# Different host OS linkers have different ideas about the name of the ELF
# emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
# variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
@@ -5907,7 +5909,7 @@ if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
fi
done
fi
-if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
+if test "$cpu" = "ppc64" && test "$targetos" != "Darwin" ; then
roms="$roms spapr-rtas"
fi
@@ -6373,7 +6375,7 @@ if test "$modules" = "yes"; then
echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
echo "CONFIG_MODULES=y" >> $config_host_mak
fi
-if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
+if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
echo "CONFIG_X11=y" >> $config_host_mak
echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
echo "X11_LIBS=$x11_libs" >> $config_host_mak
@@ -6568,7 +6570,7 @@ fi
if test "$vhost_scsi" = "yes" ; then
echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
fi
-if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
+if test "$vhost_net" = "yes" && test "$vhost_user" = "yes"; then
echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
fi
if test "$vhost_crypto" = "yes" ; then
@@ -6963,11 +6965,11 @@ elif test "$ARCH" = "sparc64" ; then
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
elif test "$ARCH" = "s390x" ; then
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
-elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
+elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
elif test "$ARCH" = "ppc64" ; then
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
-elif test "$ARCH" = "riscv32" -o "$ARCH" = "riscv64" ; then
+elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
else
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
@@ -7384,7 +7386,7 @@ if test ! -z "$gdb_xml_files" ; then
echo "TARGET_XML_FILES=$list" >> $config_target_mak
fi
-if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
+if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
echo "TARGET_HAS_BFLT=y" >> $config_target_mak
fi
if test "$target_bsd_user" = "yes" ; then
@@ -7506,7 +7508,7 @@ if test "$gprof" = "yes" ; then
fi
fi
-if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
+if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
ldflags="$ldflags $textseg_ldflags"
fi
@@ -7518,7 +7520,8 @@ fi
# - we build the system emulation for s390x (qemu-system-s390x)
# - KVM is enabled
# - the linker supports --s390-pgste
-if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
+if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
+ test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
if ld_has --s390-pgste ; then
ldflags="-Wl,--s390-pgste $ldflags"
fi
--
2.20.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] configure: Avoid non-portable 'test -o/-a'
2019-02-05 2:39 [Qemu-devel] [PATCH] configure: Avoid non-portable 'test -o/-a' Eric Blake
@ 2019-02-05 13:12 ` Peter Maydell
2019-02-05 15:36 ` Philippe Mathieu-Daudé
2019-02-06 14:52 ` [Qemu-devel] [Qemu-trivial] " Laurent Vivier
2 siblings, 0 replies; 4+ messages in thread
From: Peter Maydell @ 2019-02-05 13:12 UTC (permalink / raw)
To: Eric Blake; +Cc: QEMU Developers, QEMU Trivial, Thomas Huth
On Tue, 5 Feb 2019 at 02:46, Eric Blake <eblake@redhat.com> wrote:
>
> POSIX says that it is better to use &&/|| and two separate test
> invocations than it is to try and use -a and -o (in fact, there
> are some tests that are inherently ambiguous to parse if the
> user passes in corner-case input like "(").
>
> Since we cannot guarantee which shell runs configure, we cannot
> rely on -o/-a always following bash's parser rules.
>
> Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
thanks
-- PMM
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] configure: Avoid non-portable 'test -o/-a'
2019-02-05 2:39 [Qemu-devel] [PATCH] configure: Avoid non-portable 'test -o/-a' Eric Blake
2019-02-05 13:12 ` Peter Maydell
@ 2019-02-05 15:36 ` Philippe Mathieu-Daudé
2019-02-06 14:52 ` [Qemu-devel] [Qemu-trivial] " Laurent Vivier
2 siblings, 0 replies; 4+ messages in thread
From: Philippe Mathieu-Daudé @ 2019-02-05 15:36 UTC (permalink / raw)
To: Eric Blake, qemu-devel; +Cc: qemu-trivial, thuth
On 2/5/19 3:39 AM, Eric Blake wrote:
> POSIX says that it is better to use &&/|| and two separate test
> invocations than it is to try and use -a and -o (in fact, there
> are some tests that are inherently ambiguous to parse if the
> user passes in corner-case input like "(").
>
> Since we cannot guarantee which shell runs configure, we cannot
> rely on -o/-a always following bash's parser rules.
>
> Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
(bash, ash, dash, ksh)
> ---
> configure | 63 +++++++++++++++++++++++++++++--------------------------
> 1 file changed, 33 insertions(+), 30 deletions(-)
>
> diff --git a/configure b/configure
> index 3d89870d996..61bc70708e4 100755
> --- a/configure
> +++ b/configure
> @@ -1834,8 +1834,8 @@ fi
> # Consult white-list to determine whether to enable werror
> # by default. Only enable by default for git builds
> if test -z "$werror" ; then
> - if test -d "$source_path/.git" -a \
> - \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
> + if test -d "$source_path/.git" && \
> + { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
> werror="yes"
> else
> werror="no"
> @@ -2940,7 +2940,7 @@ EOF
> sdl=yes
>
> # static link with sdl ? (note: sdl.pc's --static --libs is broken)
> - if test "$sdl" = "yes" -a "$static" = "yes" ; then
> + if test "$sdl" = "yes" && test "$static" = "yes" ; then
> if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
> sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
> sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
> @@ -3082,7 +3082,7 @@ fi
>
> ##########################################
> # VNC SASL detection
> -if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
> +if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
> cat > $TMPC <<EOF
> #include <sasl/sasl.h>
> #include <stdio.h>
> @@ -3105,7 +3105,7 @@ fi
>
> ##########################################
> # VNC JPEG detection
> -if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
> +if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
> cat > $TMPC <<EOF
> #include <stdio.h>
> #include <jpeglib.h>
> @@ -3127,7 +3127,7 @@ fi
>
> ##########################################
> # VNC PNG detection
> -if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
> +if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
> cat > $TMPC <<EOF
> //#include <stdio.h>
> #include <png.h>
> @@ -3491,7 +3491,7 @@ fi
> # This workaround is required due to a bug in pkg-config file for glib as it
> # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
>
> -if test "$static" = yes -a "$mingw32" = yes; then
> +if test "$static" = yes && test "$mingw32" = yes; then
> QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
> fi
>
> @@ -3584,7 +3584,7 @@ fi
> ##########################################
> # pixman support probe
>
> -if test "$want_tools" = "no" -a "$softmmu" = "no"; then
> +if test "$want_tools" = "no" && test "$softmmu" = "no"; then
> pixman_cflags=
> pixman_libs=
> elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
> @@ -3699,7 +3699,7 @@ else
> done
> fi
>
> -if test "$mingw32" != yes -a "$pthread" = no; then
> +if test "$mingw32" != yes && test "$pthread" = no; then
> error_exit "pthread check failed" \
> "Make sure to have the pthread libs and headers installed."
> fi
> @@ -3826,7 +3826,7 @@ fi
> ##########################################
> # TPM passthrough is only on x86 Linux
>
> -if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
> +if test "$targetos" = Linux && { test "$cpu" = i386 || test "$cpu" = x86_64; }; then
> tpm_passthrough=$tpm
> else
> tpm_passthrough=no
> @@ -3992,7 +3992,7 @@ EOF
> fi
> fi
>
> -if test "$opengl" = "yes" -a "$have_x11" = "yes"; then
> +if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
> for target in $target_list; do
> case $target in
> lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
> @@ -4612,8 +4612,8 @@ elif compile_prog "" "$pthread_lib -lrt" ; then
> libs_qga="$libs_qga -lrt"
> fi
>
> -if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
> - "$haiku" != "yes" ; then
> +if test "$darwin" != "yes" && test "$mingw32" != "yes" && \
> + test "$solaris" != yes && test "$haiku" != "yes" ; then
> libs_softmmu="-lutil $libs_softmmu"
> fi
>
> @@ -4688,7 +4688,8 @@ fi
> ##########################################
> # check if we have VSS SDK headers for win
>
> -if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
> +if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
> + test "$vss_win32_sdk" != "no" ; then
> case "$vss_win32_sdk" in
> "") vss_win32_include="-isystem $source_path" ;;
> *\ *) # The SDK is installed in "Program Files" by default, but we cannot
> @@ -4727,7 +4728,8 @@ fi
> # VSS provider from the source. It is usually unnecessary because the
> # pre-compiled .tlb file is included.
>
> -if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
> +if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
> + test "$guest_agent_with_vss" = "yes" ; then
> if test -z "$win_sdk"; then
> programfiles="$PROGRAMFILES"
> test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
> @@ -4743,7 +4745,7 @@ fi
>
> ##########################################
> # check if mingw environment provides a recent ntddscsi.h
> -if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
> +if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
> cat > $TMPC << EOF
> #include <windows.h>
> #include <ntddscsi.h>
> @@ -4790,7 +4792,7 @@ case "$capstone" in
> "" | yes)
> if $pkg_config capstone; then
> capstone=system
> - elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
> + elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
> capstone=git
> elif test -e "${source_path}/capstone/Makefile" ; then
> capstone=internal
> @@ -5162,7 +5164,7 @@ fi
> # There is no point enabling this if cpuid.h is not usable,
> # since we won't be able to select the new routines.
>
> -if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
> +if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
> cat > $TMPC << EOF
> #pragma GCC push_options
> #pragma GCC target("avx2")
> @@ -5220,7 +5222,7 @@ EOF
> fi
>
> cmpxchg128=no
> -if test "$int128" = yes -a "$atomic128" = no; then
> +if test "$int128" = yes && test "$atomic128" = no; then
> cat > $TMPC << EOF
> int main(void)
> {
> @@ -5893,9 +5895,9 @@ fi
>
> # Mac OS X ships with a broken assembler
> roms=
> -if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
> - "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
> - "$softmmu" = yes ; then
> +if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
> + test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
> + test "$softmmu" = yes ; then
> # Different host OS linkers have different ideas about the name of the ELF
> # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
> # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
> @@ -5907,7 +5909,7 @@ if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
> fi
> done
> fi
> -if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
> +if test "$cpu" = "ppc64" && test "$targetos" != "Darwin" ; then
> roms="$roms spapr-rtas"
> fi
>
> @@ -6373,7 +6375,7 @@ if test "$modules" = "yes"; then
> echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
> echo "CONFIG_MODULES=y" >> $config_host_mak
> fi
> -if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
> +if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
> echo "CONFIG_X11=y" >> $config_host_mak
> echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
> echo "X11_LIBS=$x11_libs" >> $config_host_mak
> @@ -6568,7 +6570,7 @@ fi
> if test "$vhost_scsi" = "yes" ; then
> echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
> fi
> -if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
> +if test "$vhost_net" = "yes" && test "$vhost_user" = "yes"; then
> echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
> fi
> if test "$vhost_crypto" = "yes" ; then
> @@ -6963,11 +6965,11 @@ elif test "$ARCH" = "sparc64" ; then
> QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
> elif test "$ARCH" = "s390x" ; then
> QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
> -elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
> +elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
> QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
> elif test "$ARCH" = "ppc64" ; then
> QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
> -elif test "$ARCH" = "riscv32" -o "$ARCH" = "riscv64" ; then
> +elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
> QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
> else
> QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
> @@ -7384,7 +7386,7 @@ if test ! -z "$gdb_xml_files" ; then
> echo "TARGET_XML_FILES=$list" >> $config_target_mak
> fi
>
> -if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
> +if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
> echo "TARGET_HAS_BFLT=y" >> $config_target_mak
> fi
> if test "$target_bsd_user" = "yes" ; then
> @@ -7506,7 +7508,7 @@ if test "$gprof" = "yes" ; then
> fi
> fi
>
> -if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
> +if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
> ldflags="$ldflags $textseg_ldflags"
> fi
>
> @@ -7518,7 +7520,8 @@ fi
> # - we build the system emulation for s390x (qemu-system-s390x)
> # - KVM is enabled
> # - the linker supports --s390-pgste
> -if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
> +if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
> + test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
> if ld_has --s390-pgste ; then
> ldflags="-Wl,--s390-pgste $ldflags"
> fi
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [Qemu-trivial] [PATCH] configure: Avoid non-portable 'test -o/-a'
2019-02-05 2:39 [Qemu-devel] [PATCH] configure: Avoid non-portable 'test -o/-a' Eric Blake
2019-02-05 13:12 ` Peter Maydell
2019-02-05 15:36 ` Philippe Mathieu-Daudé
@ 2019-02-06 14:52 ` Laurent Vivier
2 siblings, 0 replies; 4+ messages in thread
From: Laurent Vivier @ 2019-02-06 14:52 UTC (permalink / raw)
To: Eric Blake, qemu-devel; +Cc: qemu-trivial, thuth
On 05/02/2019 03:39, Eric Blake wrote:
> POSIX says that it is better to use &&/|| and two separate test
> invocations than it is to try and use -a and -o (in fact, there
> are some tests that are inherently ambiguous to parse if the
> user passes in corner-case input like "(").
>
> Since we cannot guarantee which shell runs configure, we cannot
> rely on -o/-a always following bash's parser rules.
>
> Signed-off-by: Eric Blake <eblake@redhat.com>
> ---
> configure | 63 +++++++++++++++++++++++++++++--------------------------
> 1 file changed, 33 insertions(+), 30 deletions(-)
>
> diff --git a/configure b/configure
> index 3d89870d996..61bc70708e4 100755
> --- a/configure
> +++ b/configure
> @@ -1834,8 +1834,8 @@ fi
> # Consult white-list to determine whether to enable werror
> # by default. Only enable by default for git builds
> if test -z "$werror" ; then
> - if test -d "$source_path/.git" -a \
> - \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
> + if test -d "$source_path/.git" && \
> + { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
> werror="yes"
> else
> werror="no"
> @@ -2940,7 +2940,7 @@ EOF
> sdl=yes
>
> # static link with sdl ? (note: sdl.pc's --static --libs is broken)
> - if test "$sdl" = "yes" -a "$static" = "yes" ; then
> + if test "$sdl" = "yes" && test "$static" = "yes" ; then
> if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
> sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
> sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
> @@ -3082,7 +3082,7 @@ fi
>
> ##########################################
> # VNC SASL detection
> -if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
> +if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
> cat > $TMPC <<EOF
> #include <sasl/sasl.h>
> #include <stdio.h>
> @@ -3105,7 +3105,7 @@ fi
>
> ##########################################
> # VNC JPEG detection
> -if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
> +if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
> cat > $TMPC <<EOF
> #include <stdio.h>
> #include <jpeglib.h>
> @@ -3127,7 +3127,7 @@ fi
>
> ##########################################
> # VNC PNG detection
> -if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
> +if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
> cat > $TMPC <<EOF
> //#include <stdio.h>
> #include <png.h>
> @@ -3491,7 +3491,7 @@ fi
> # This workaround is required due to a bug in pkg-config file for glib as it
> # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
>
> -if test "$static" = yes -a "$mingw32" = yes; then
> +if test "$static" = yes && test "$mingw32" = yes; then
> QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
> fi
>
> @@ -3584,7 +3584,7 @@ fi
> ##########################################
> # pixman support probe
>
> -if test "$want_tools" = "no" -a "$softmmu" = "no"; then
> +if test "$want_tools" = "no" && test "$softmmu" = "no"; then
> pixman_cflags=
> pixman_libs=
> elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
> @@ -3699,7 +3699,7 @@ else
> done
> fi
>
> -if test "$mingw32" != yes -a "$pthread" = no; then
> +if test "$mingw32" != yes && test "$pthread" = no; then
> error_exit "pthread check failed" \
> "Make sure to have the pthread libs and headers installed."
> fi
> @@ -3826,7 +3826,7 @@ fi
> ##########################################
> # TPM passthrough is only on x86 Linux
>
> -if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
> +if test "$targetos" = Linux && { test "$cpu" = i386 || test "$cpu" = x86_64; }; then
> tpm_passthrough=$tpm
> else
> tpm_passthrough=no
> @@ -3992,7 +3992,7 @@ EOF
> fi
> fi
>
> -if test "$opengl" = "yes" -a "$have_x11" = "yes"; then
> +if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
> for target in $target_list; do
> case $target in
> lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
> @@ -4612,8 +4612,8 @@ elif compile_prog "" "$pthread_lib -lrt" ; then
> libs_qga="$libs_qga -lrt"
> fi
>
> -if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
> - "$haiku" != "yes" ; then
> +if test "$darwin" != "yes" && test "$mingw32" != "yes" && \
> + test "$solaris" != yes && test "$haiku" != "yes" ; then
> libs_softmmu="-lutil $libs_softmmu"
> fi
>
> @@ -4688,7 +4688,8 @@ fi
> ##########################################
> # check if we have VSS SDK headers for win
>
> -if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
> +if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
> + test "$vss_win32_sdk" != "no" ; then
> case "$vss_win32_sdk" in
> "") vss_win32_include="-isystem $source_path" ;;
> *\ *) # The SDK is installed in "Program Files" by default, but we cannot
> @@ -4727,7 +4728,8 @@ fi
> # VSS provider from the source. It is usually unnecessary because the
> # pre-compiled .tlb file is included.
>
> -if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
> +if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
> + test "$guest_agent_with_vss" = "yes" ; then
> if test -z "$win_sdk"; then
> programfiles="$PROGRAMFILES"
> test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
> @@ -4743,7 +4745,7 @@ fi
>
> ##########################################
> # check if mingw environment provides a recent ntddscsi.h
> -if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
> +if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
> cat > $TMPC << EOF
> #include <windows.h>
> #include <ntddscsi.h>
> @@ -4790,7 +4792,7 @@ case "$capstone" in
> "" | yes)
> if $pkg_config capstone; then
> capstone=system
> - elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
> + elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
> capstone=git
> elif test -e "${source_path}/capstone/Makefile" ; then
> capstone=internal
> @@ -5162,7 +5164,7 @@ fi
> # There is no point enabling this if cpuid.h is not usable,
> # since we won't be able to select the new routines.
>
> -if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
> +if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
> cat > $TMPC << EOF
> #pragma GCC push_options
> #pragma GCC target("avx2")
> @@ -5220,7 +5222,7 @@ EOF
> fi
>
> cmpxchg128=no
> -if test "$int128" = yes -a "$atomic128" = no; then
> +if test "$int128" = yes && test "$atomic128" = no; then
> cat > $TMPC << EOF
> int main(void)
> {
> @@ -5893,9 +5895,9 @@ fi
>
> # Mac OS X ships with a broken assembler
> roms=
> -if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
> - "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
> - "$softmmu" = yes ; then
> +if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
> + test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
> + test "$softmmu" = yes ; then
> # Different host OS linkers have different ideas about the name of the ELF
> # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
> # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
> @@ -5907,7 +5909,7 @@ if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
> fi
> done
> fi
> -if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
> +if test "$cpu" = "ppc64" && test "$targetos" != "Darwin" ; then
> roms="$roms spapr-rtas"
> fi
>
> @@ -6373,7 +6375,7 @@ if test "$modules" = "yes"; then
> echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
> echo "CONFIG_MODULES=y" >> $config_host_mak
> fi
> -if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
> +if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
> echo "CONFIG_X11=y" >> $config_host_mak
> echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
> echo "X11_LIBS=$x11_libs" >> $config_host_mak
> @@ -6568,7 +6570,7 @@ fi
> if test "$vhost_scsi" = "yes" ; then
> echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
> fi
> -if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
> +if test "$vhost_net" = "yes" && test "$vhost_user" = "yes"; then
> echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
> fi
> if test "$vhost_crypto" = "yes" ; then
> @@ -6963,11 +6965,11 @@ elif test "$ARCH" = "sparc64" ; then
> QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
> elif test "$ARCH" = "s390x" ; then
> QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
> -elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
> +elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
> QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
> elif test "$ARCH" = "ppc64" ; then
> QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
> -elif test "$ARCH" = "riscv32" -o "$ARCH" = "riscv64" ; then
> +elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
> QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
> else
> QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
> @@ -7384,7 +7386,7 @@ if test ! -z "$gdb_xml_files" ; then
> echo "TARGET_XML_FILES=$list" >> $config_target_mak
> fi
>
> -if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
> +if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
> echo "TARGET_HAS_BFLT=y" >> $config_target_mak
> fi
> if test "$target_bsd_user" = "yes" ; then
> @@ -7506,7 +7508,7 @@ if test "$gprof" = "yes" ; then
> fi
> fi
>
> -if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
> +if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
> ldflags="$ldflags $textseg_ldflags"
> fi
>
> @@ -7518,7 +7520,8 @@ fi
> # - we build the system emulation for s390x (qemu-system-s390x)
> # - KVM is enabled
> # - the linker supports --s390-pgste
> -if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
> +if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
> + test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
> if ld_has --s390-pgste ; then
> ldflags="-Wl,--s390-pgste $ldflags"
> fi
>
Applied to my trivial-patches branch.
Thanks,
Laurent
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-02-06 14:52 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-02-05 2:39 [Qemu-devel] [PATCH] configure: Avoid non-portable 'test -o/-a' Eric Blake
2019-02-05 13:12 ` Peter Maydell
2019-02-05 15:36 ` Philippe Mathieu-Daudé
2019-02-06 14:52 ` [Qemu-devel] [Qemu-trivial] " Laurent Vivier
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).