Re: [Qemu-devel] Stop using which in ./configure

2010-01-20 Thread Loïc Minier
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

2010-01-19 Thread Loïc Minier
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

2010-01-19 Thread Loïc Minier
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

2010-01-19 Thread Loïc Minier
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

2010-01-19 Thread Krumme, Chris
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

2010-01-19 Thread Stefan Weil
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)