Re: [Qemu-devel] Stop using which in ./configure
On Tue, Jan 19, 2010, Stefan Weil wrote: I did not test the whole patch, but I think this would be better: +type $local_command /dev/null 21 Attaching an updated patch Thanks -- Loïc Minier From 1c0b63fb9fc735a6d367a65a6ed1b998942fb6a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Minier?= l...@dooz.org Date: Tue, 19 Jan 2010 11:05:00 +0100 Subject: [PATCH] Add and use has() and path_of() funcs Add has() and path_of() funcs and use them across configure; has() will test whether a command or builtin is available; path_of() will search the PATH for executables and return the full pathname if found. --- configure | 53 - 1 files changed, 44 insertions(+), 9 deletions(-) diff --git a/configure b/configure index baa2800..db97a2c 100755 --- a/configure +++ b/configure @@ -27,6 +27,43 @@ compile_prog() { $cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags /dev/null 2 /dev/null } +# check whether a command is available to this shell (may be either an +# executable or a builtin) +has() { +local_command=$1 +type $local_command /dev/null 21 +} + +# search for an executable in PATH +path_of() { +local_command=$1 +local_ifs=$IFS +local_dir= + +# pathname has a dir component? +if [ ${local_command#*/} != $local_command ]; then +if [ -x $local_command ] [ ! -d $local_command ]; then +echo $local_command +return 0 +fi +fi +if [ -z $local_command ]; then +return 1 +fi + +IFS=: +for local_dir in $PATH; do +if [ -x $local_dir/$local_command ] [ ! -d $local_dir/$local_command ]; then +echo $local_dir/$local_command +IFS=$local_ifs +return 0 +fi +done +# not found +IFS=$local_ifs +return 1 +} + # default parameters cpu= prefix= @@ -763,7 +800,7 @@ fi # Solaris specific configure tool chain decisions # if test $solaris = yes ; then - solinst=`which $install 2 /dev/null | /usr/bin/grep -v no $install in` + solinst=`path_of $install` if test -z $solinst ; then echo Solaris install program not found. Use --install=/usr/ucb/install or echo install fileutils from www.blastwave.org using pkg-get -i fileutils @@ -776,7 +813,7 @@ if test $solaris = yes ; then echo using pkg-get -i fileutils, or use --install=/usr/ucb/install exit 1 fi - sol_ar=`which ar 2 /dev/null | /usr/bin/grep -v no ar in` + sol_ar=`path_of ar` if test -z $sol_ar ; then echo Error: No path includes ar if test -f /usr/ccs/bin/ar ; then @@ -969,7 +1006,7 @@ fi # pkgconfig probe pkgconfig=${cross_prefix}pkg-config -if ! test -x $(which $pkgconfig 2/dev/null); then +if ! has $pkgconfig; then # likely not cross compiling, or hope for the best pkgconfig=pkg-config fi @@ -977,7 +1014,7 @@ fi ## # Sparse probe if test $sparse != no ; then - if test -x $(which cgcc 2/dev/null); then + if has cgcc; then sparse=yes else if test $sparse = yes ; then @@ -993,7 +1030,7 @@ fi if $pkgconfig sdl --modversion /dev/null 21; then sdlconfig=$pkgconfig sdl _sdlversion=`$sdlconfig --modversion 2/dev/null | sed 's/[^0-9]//g'` -elif which sdl-config /dev/null 21; then +elif has sdl-config; then sdlconfig='sdl-config' _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'` else @@ -1424,8 +1461,7 @@ EOF fi else if test $kvm = yes ; then - if [ -x `which awk 2/dev/null` ] \ - [ -x `which grep 2/dev/null` ]; then + if has awk has grep; then kvmerr=`LANG=C $cc $QEMU_CFLAGS -o $TMPE $kvm_cflags $TMPC 21 \ | grep error: \ | awk -F error: '{if (NR1) printf(, ); printf(%s,$2);}'` @@ -1694,8 +1730,7 @@ fi # Check if tools are available to build documentation. if test $docs != no ; then - if test -x `which texi2html 2/dev/null` -a \ - -x `which pod2man 2/dev/null` ; then + if has texi2html has pod2man; then docs=yes else if test $docs = yes ; then -- 1.6.5
[Qemu-devel] Stop using which in ./configure
Hi Following the thread on the sdl-config patch, please find attached a patch to add a couple of portable shell functions which allow testing whehter a command/builtin is available and to find the full pathname of an executable in the PATH. This also replaces all uses of which in ./configure. (This should be applied on top of the sdl-config patch.) Thanks, -- Loïc Minier From 815ca36e9b3e2c56040d7fc7709c95d600ed6496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Minier?= l...@dooz.org Date: Tue, 19 Jan 2010 11:05:00 +0100 Subject: [PATCH] Add and use has() and path_of() funcs Add has() and path_of() funcs and use them across configure; has() will test whether a command or builtin is available; path_of() will search the PATH for executables and return the full pathname if found. --- configure | 57 - 1 files changed, 48 insertions(+), 9 deletions(-) diff --git a/configure b/configure index baa2800..8d67b9c 100755 --- a/configure +++ b/configure @@ -27,6 +27,47 @@ compile_prog() { $cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags /dev/null 2 /dev/null } +# check whether a command is available to this shell (may be either an +# executable or a builtin) +has() { +local_command=$1 +type $local_command /dev/null +} + +# search for an executable in PATH +path_of() { +local_command=$1 +local_path=$PATH +local_dir= +# absolute path? +if [ ${local_command#*/} != $local_command ]; then +if [ -x $local_command ] [ ! -d $local_command ]; then +echo $local_command +return 0 +fi +fi +if [ -z $local_path ] || [ -z $local_command ]; then +return 1 +fi +while :; do +local_dir=${local_path%%:*} +if [ ${local_path#*:} = $local_path ]; then +# last loop +local_path= +else +local_path=${local_path#*:} +fi +if [ -x $local_dir/$local_command ] [ ! -d $local_dir/$local_command ]; then +echo $local_dir/$local_command +return 0 +fi +if [ -z $local_path ]; then +# not found +return 1 +fi +done +} + # default parameters cpu= prefix= @@ -763,7 +804,7 @@ fi # Solaris specific configure tool chain decisions # if test $solaris = yes ; then - solinst=`which $install 2 /dev/null | /usr/bin/grep -v no $install in` + solinst=`path_of $install` if test -z $solinst ; then echo Solaris install program not found. Use --install=/usr/ucb/install or echo install fileutils from www.blastwave.org using pkg-get -i fileutils @@ -776,7 +817,7 @@ if test $solaris = yes ; then echo using pkg-get -i fileutils, or use --install=/usr/ucb/install exit 1 fi - sol_ar=`which ar 2 /dev/null | /usr/bin/grep -v no ar in` + sol_ar=`path_of ar` if test -z $sol_ar ; then echo Error: No path includes ar if test -f /usr/ccs/bin/ar ; then @@ -969,7 +1010,7 @@ fi # pkgconfig probe pkgconfig=${cross_prefix}pkg-config -if ! test -x $(which $pkgconfig 2/dev/null); then +if ! has $pkgconfig; then # likely not cross compiling, or hope for the best pkgconfig=pkg-config fi @@ -977,7 +1018,7 @@ fi ## # Sparse probe if test $sparse != no ; then - if test -x $(which cgcc 2/dev/null); then + if has cgcc; then sparse=yes else if test $sparse = yes ; then @@ -993,7 +1034,7 @@ fi if $pkgconfig sdl --modversion /dev/null 21; then sdlconfig=$pkgconfig sdl _sdlversion=`$sdlconfig --modversion 2/dev/null | sed 's/[^0-9]//g'` -elif which sdl-config /dev/null 21; then +elif has sdl-config; then sdlconfig='sdl-config' _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'` else @@ -1424,8 +1465,7 @@ EOF fi else if test $kvm = yes ; then - if [ -x `which awk 2/dev/null` ] \ - [ -x `which grep 2/dev/null` ]; then + if has awk has grep; then kvmerr=`LANG=C $cc $QEMU_CFLAGS -o $TMPE $kvm_cflags $TMPC 21 \ | grep error: \ | awk -F error: '{if (NR1) printf(, ); printf(%s,$2);}'` @@ -1694,8 +1734,7 @@ fi # Check if tools are available to build documentation. if test $docs != no ; then - if test -x `which texi2html 2/dev/null` -a \ - -x `which pod2man 2/dev/null` ; then + if has texi2html has pod2man; then docs=yes else if test $docs = yes ; then -- 1.6.5
Re: [Qemu-devel] Stop using which in ./configure
On Tue, Jan 19, 2010, Laurent Vivier wrote: Why don't you use type -P for path_of ? I don't think that's portable enough: $ sh -c 'type -P ls' -P: not found ls is /bin/ls -- Loïc Minier
Re: [Qemu-devel] Stop using which in ./configure
On Tue, Jan 19, 2010, Loïc Minier wrote: Following the thread on the sdl-config patch, please find attached a patch to add a couple of portable shell functions which allow testing whehter a command/builtin is available and to find the full pathname of an executable in the PATH. This also replaces all uses of which in ./configure. (This should be applied on top of the sdl-config patch.) Please find attached a new version of the patch with a simpler version of path_of() which uses IFS instead of the ${foo#bar} and ${foo%%bar} constructs. It also removes the special casing of an empty PATH. -- Loïc Minier From 5fc05ec61d87049ea0f29b2dd51c16e260698ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Minier?= l...@dooz.org Date: Tue, 19 Jan 2010 11:05:00 +0100 Subject: [PATCH] Add and use has() and path_of() funcs Add has() and path_of() funcs and use them across configure; has() will test whether a command or builtin is available; path_of() will search the PATH for executables and return the full pathname if found. --- configure | 53 - 1 files changed, 44 insertions(+), 9 deletions(-) diff --git a/configure b/configure index baa2800..711e335 100755 --- a/configure +++ b/configure @@ -27,6 +27,43 @@ compile_prog() { $cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags /dev/null 2 /dev/null } +# check whether a command is available to this shell (may be either an +# executable or a builtin) +has() { +local_command=$1 +type $local_command /dev/null +} + +# search for an executable in PATH +path_of() { +local_command=$1 +local_ifs=$IFS +local_dir= + +# pathname has a dir component? +if [ ${local_command#*/} != $local_command ]; then +if [ -x $local_command ] [ ! -d $local_command ]; then +echo $local_command +return 0 +fi +fi +if [ -z $local_command ]; then +return 1 +fi + +IFS=: +for local_dir in $PATH; do +if [ -x $local_dir/$local_command ] [ ! -d $local_dir/$local_command ]; then +echo $local_dir/$local_command +IFS=$local_ifs +return 0 +fi +done +# not found +IFS=$local_ifs +return 1 +} + # default parameters cpu= prefix= @@ -763,7 +800,7 @@ fi # Solaris specific configure tool chain decisions # if test $solaris = yes ; then - solinst=`which $install 2 /dev/null | /usr/bin/grep -v no $install in` + solinst=`path_of $install` if test -z $solinst ; then echo Solaris install program not found. Use --install=/usr/ucb/install or echo install fileutils from www.blastwave.org using pkg-get -i fileutils @@ -776,7 +813,7 @@ if test $solaris = yes ; then echo using pkg-get -i fileutils, or use --install=/usr/ucb/install exit 1 fi - sol_ar=`which ar 2 /dev/null | /usr/bin/grep -v no ar in` + sol_ar=`path_of ar` if test -z $sol_ar ; then echo Error: No path includes ar if test -f /usr/ccs/bin/ar ; then @@ -969,7 +1006,7 @@ fi # pkgconfig probe pkgconfig=${cross_prefix}pkg-config -if ! test -x $(which $pkgconfig 2/dev/null); then +if ! has $pkgconfig; then # likely not cross compiling, or hope for the best pkgconfig=pkg-config fi @@ -977,7 +1014,7 @@ fi ## # Sparse probe if test $sparse != no ; then - if test -x $(which cgcc 2/dev/null); then + if has cgcc; then sparse=yes else if test $sparse = yes ; then @@ -993,7 +1030,7 @@ fi if $pkgconfig sdl --modversion /dev/null 21; then sdlconfig=$pkgconfig sdl _sdlversion=`$sdlconfig --modversion 2/dev/null | sed 's/[^0-9]//g'` -elif which sdl-config /dev/null 21; then +elif has sdl-config; then sdlconfig='sdl-config' _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'` else @@ -1424,8 +1461,7 @@ EOF fi else if test $kvm = yes ; then - if [ -x `which awk 2/dev/null` ] \ - [ -x `which grep 2/dev/null` ]; then + if has awk has grep; then kvmerr=`LANG=C $cc $QEMU_CFLAGS -o $TMPE $kvm_cflags $TMPC 21 \ | grep error: \ | awk -F error: '{if (NR1) printf(, ); printf(%s,$2);}'` @@ -1694,8 +1730,7 @@ fi # Check if tools are available to build documentation. if test $docs != no ; then - if test -x `which texi2html 2/dev/null` -a \ - -x `which pod2man 2/dev/null` ; then + if has texi2html has pod2man; then docs=yes else if test $docs = yes ; then -- 1.6.5
RE: [Qemu-devel] Stop using which in ./configure
Hello Laurent, Good or bad type -P skips the aliases. Thanks Chris -Original Message- From: qemu-devel-bounces+chris.krumme=windriver@nongnu.org [mailto:qemu-devel-bounces+chris.krumme=windriver@nongnu.o rg] On Behalf Of Laurent Vivier Sent: Tuesday, January 19, 2010 4:36 AM To: l...@dooz.org Cc: qemu-devel@nongnu.org Subject: RE: [Qemu-devel] Stop using which in ./configure Hi Following the thread on the sdl-config patch, please find attached a patch to add a couple of portable shell functions which allow testing whehter a command/builtin is available and to find the full pathname of an executable in the PATH. This also replaces all uses of which in ./configure. (This should be applied on top of the sdl-config patch.) Thanks, Why don't you use type -P for path_of ? Regards, Laurent -- - laur...@vivier.eu - Tout ce qui est impossible reste à accomplirJules Verne Things are only impossible until they're not Jean-Luc Picard
Re: [Qemu-devel] Stop using which in ./configure
Loïc Minier schrieb: On Tue, Jan 19, 2010, Loïc Minier wrote: Following the thread on the sdl-config patch, please find attached a patch to add a couple of portable shell functions which allow testing whehter a command/builtin is available and to find the full pathname of an executable in the PATH. This also replaces all uses of which in ./configure. (This should be applied on top of the sdl-config patch.) Please find attached a new version of the patch with a simpler version of path_of() which uses IFS instead of the ${foo#bar} and ${foo%%bar} constructs. It also removes the special casing of an empty PATH. I did not test the whole patch, but I think this would be better: +type $local_command /dev/null 21 (type sends error messages to stderr, we don't want to see them)