Mercurial > hg > octave-lyh > gnulib-hg
changeset 12404:44954971957b
init.sh: avoid Solaris 10 /bin/sh portability problem
Solaris 10's /bin/sh does not pass '.' arguments 2..N to the
sourced script:
$ printf 'echo "$@"\n' > f; /bin/sh -c '. ./f bar'
$ printf 'echo "$@"\n' > f; bash -c '. ./f bar'
bar
tests/init.sh relied on that, accepting a --set-path=DIR argument,
and two tests used that idiom.
* tests/init.sh: Update suggested usage comments.
(path_prepend_): New function, to be used in place of
the --src-path=DIR option.
Disallow empty strings and strings containing ":".
(setup_): Move PATH-prepending code into path_prepend_.
* tests/test-pread.sh: Adapt to new usage.
* tests/test-xalloc-die.sh: Likewise.
author | Jim Meyering <meyering@redhat.com> |
---|---|
date | Tue, 08 Dec 2009 20:37:50 +0100 |
parents | 085e83b725e1 |
children | fc655d62b4b9 |
files | ChangeLog tests/init.sh tests/test-pread.sh tests/test-xalloc-die.sh |
diffstat | 4 files changed, 42 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2009-12-08 Jim Meyering <meyering@redhat.com> + + init.sh: avoid Solaris 10 /bin/sh portability problem + Solaris 10's /bin/sh does not pass '.' arguments 2.. to the + sourced script: + $ printf 'echo "$@"\n' > f; /bin/sh -c '. ./f bar' + $ printf 'echo "$@"\n' > f; /bin/bash -c '. ./f bar' + bar + tests/init.sh relied on that, accepting a --set-path=DIR argument, + and two tests used that idiom. + * tests/init.sh: Update suggested usage comments. + (path_prepend_): New function, to be used in place + of the --src-path=DIR option. + (setup_): Move PATH-prepending code into path_prepend_. + * tests/test-pread.sh: Adapt to new usage. + * tests/test-xalloc-die.sh: Likewise. + 2009-12-08 Simon Josefsson <simon@josefsson.org> * doc/gnulib.texi (Glibc pty.h): Add.
--- a/tests/init.sh +++ b/tests/init.sh @@ -22,7 +22,7 @@ # # #!/bin/sh # : ${srcdir=.} -# . "$srcdir/init.sh" --set-path=. +# . "$srcdir/init.sh"; path_prepend_ . # Execute some commands. # Note that these commands are executed in a subdirectory, therefore you # need to prepend "../" to relative filenames in the build directory. @@ -47,7 +47,7 @@ # Makefile: # $ export srcdir=../../tests # this is an example # 3. Execute the commands from the test, copy&pasting them one by one: -# $ . "$srcdir/init.sh" --set-path=. +# $ . "$srcdir/init.sh"; path_prepend_ . # ... # 4. Finally # $ exit @@ -92,29 +92,31 @@ exit $__st } +# Use this function to prepend to PATH an absolute name for each +# specified, possibly-$initial_cwd_relative, directory. +path_prepend_() +{ + while test $# != 0; do + path_dir_=$1 + case $path_dir_ in + '') fail_ "invalid path dir: '$1'";; + /*) abs_path_dir_=$path_dir_;; + *) abs_path_dir_=`cd "$initial_cwd_/$path_dir_" && echo "$PWD"` \ + || fail_ "invalid path dir: $path_dir_";; + esac + case $abs_path_dir_ in + *:*) fail_ "invalid path dir: '$abs_path_dir_'";; + esac + PATH="$abs_path_dir_:$PATH" + shift + done + export PATH +} + setup_() { test "$VERBOSE" = yes && set -x - # Honor one or more --set-path=. options (i.e., or --set-path=../src). - # Use this option to prepend to PATH an absolute name for the - # specified, possibly-relative, directory. - while test $# != 0; do - case $1 in - --set-path=*) - path_dir_=${1#--set-path=} - test -z "$path_dir_" && fail_ "missing argument to --set-path=" - abs_path_dir_=`cd "$path_dir_" && echo "$PWD" || exit 1` \ - || fail_ "invalid path dir: $path_dir" - PATH="$abs_path_dir_:$PATH" - export PATH - shift - ;; - *) fail_ "unrecognized option: $1" - ;; - esac - done - initial_cwd_=$PWD ME_=`expr "./$0" : '.*/\(.*\)$'`
--- a/tests/test-pread.sh +++ b/tests/test-pread.sh @@ -1,6 +1,5 @@ #!/bin/sh -: ${srcdir=.} -. "$srcdir/init.sh" --set-path=. +. "${srcdir=.}/init.sh"; path_prepend_ . fail=0 : | test-pread || fail=1
--- a/tests/test-xalloc-die.sh +++ b/tests/test-xalloc-die.sh @@ -16,7 +16,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -. "${srcdir=.}/init.sh" --set-path=. +. "${srcdir=.}/init.sh"; path_prepend_ . test-xalloc-die 2> err > out case $? in