http://sources.redhat.com/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=automake&pr=483
Hi Dennis, Sorry for the long delay, and thanks for the bug report. Looking at the `missing' script, there are a couple more issues: - the sed scripts for matching `-o' and `--output' aren't all the same; furthermore, they are less strict than they could be: we can know for sure both flags will be preceded by a space, and there will be exactly one space or equal sign between `--output' and its argument (all due to how we echo the args before); - autom4te isn't documented in --help output. So then I got adventurous and wrote another one of those testsuite tests that are supposed to entertain the reader. ;-) (I'll leave it as an exercise to find out why I removed usage of `[' from `missing'.) OK to apply both attached patches? Cheers, Ralf * lib/missing (sed_minuso, sed_output): New variables. (autom4te, help2man, makeinfo): Use them. Unifies detection of `-o FILE', `--output FILE', `--output=FILE', stricter regex. Fixes `missing' to detect `--output' for help2man (PR 483). Report by Dennis J. Linse <[EMAIL PROTECTED]>. (autom4te): Document in `missing --help'. * THANKS: Update. * lib/missing: Remove superfluous quotes. Replace all uses of `[' by `test', for consistency, and for.. * tests/missing4.test: ..this new test. * tests/Makefile.am: Update.
* lib/missing (sed_minuso, sed_output): New variables. (autom4te, help2man, makeinfo): Use them. Unifies detection of `-o FILE', `--output FILE', `--output=FILE', stricter regex. Fixes `missing' to detect `--output' for help2man (PR 483). Report by Dennis J. Linse <[EMAIL PROTECTED]>. (autom4te): Document in `missing --help'. * THANKS: Update. Index: THANKS =================================================================== RCS file: /cvs/automake/automake/THANKS,v retrieving revision 1.281 diff -u -r1.281 THANKS --- THANKS 20 Apr 2006 16:24:15 -0000 1.281 +++ THANKS 22 Apr 2006 11:37:55 -0000 @@ -52,6 +52,7 @@ David Pashley [EMAIL PROTECTED] David Zaroski [EMAIL PROTECTED] Dean Povey [EMAIL PROTECTED] +Dennis J. Linse [EMAIL PROTECTED] Derek R. Price [EMAIL PROTECTED] Diab Jerius [EMAIL PROTECTED] Didier Cassirame [EMAIL PROTECTED] Index: lib/missing =================================================================== RCS file: /cvs/automake/automake/lib/missing,v retrieving revision 1.30 diff -u -r1.30 missing --- lib/missing 12 Jan 2006 21:11:14 -0000 1.30 +++ lib/missing 22 Apr 2006 11:25:33 -0000 @@ -1,7 +1,7 @@ #! /bin/sh # Common stub for a few missing GNU programs while installing. -scriptversion=2006-01-12.21 +scriptversion=2006-04-22.14 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. @@ -33,6 +33,8 @@ fi run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. @@ -77,6 +79,7 @@ aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c @@ -192,8 +195,8 @@ You can get \`$1' as part of \`Autoconf' from any GNU archive site." - file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` - test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else @@ -267,11 +270,9 @@ \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` - fi - if [ -f "$file" ]; then + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then touch $file else test -z "$file" || exec >$file @@ -289,7 +290,8 @@ DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
* lib/missing: Remove superfluous quotes. Replace all uses of `[' by `test', for consistency, and for.. * tests/missing4.test: ..this new test. * tests/Makefile.am: Update. Index: lib/missing =================================================================== RCS file: /cvs/automake/automake/lib/missing,v retrieving revision 1.30 diff -u -r1.30 missing --- lib/missing 12 Jan 2006 21:11:14 -0000 1.30 +++ lib/missing 22 Apr 2006 11:25:33 -0000 @@ -44,7 +46,7 @@ msg="missing on your system" -case "$1" in +case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= @@ -106,7 +109,7 @@ # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). -case "$1" in +case $1 in lex|yacc) # Not GNU programs, they don't have --version. ;; @@ -135,7 +138,7 @@ # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. -case "$1" in +case $1 in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if @@ -164,7 +167,7 @@ test -z "$files" && files="config.h" touch_files= for f in $files; do - case "$f" in + case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; @@ -214,25 +217,25 @@ in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h - if [ $# -ne 1 ]; then + if test $# -ne 1; then eval LASTARG="\${$#}" - case "$LASTARG" in + case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if [ -f "$SRCFILE" ]; then + if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if [ -f "$SRCFILE" ]; then + if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi - if [ ! -f y.tab.h ]; then + if test ! -f y.tab.h; then echo >y.tab.h fi - if [ ! -f y.tab.c ]; then + if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; @@ -244,18 +247,18 @@ in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c - if [ $# -ne 1 ]; then + if test $# -ne 1; then eval LASTARG="\${$#}" - case "$LASTARG" in + case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if [ -f "$SRCFILE" ]; then + if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi - if [ ! -f lex.yy.c ]; then + if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; @@ -322,13 +324,13 @@ fi firstarg="$1" if shift; then - case "$firstarg" in + case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac - case "$firstarg" in + case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 Index: tests/Makefile.am =================================================================== RCS file: /cvs/automake/automake/tests/Makefile.am,v retrieving revision 1.602 diff -u -r1.602 Makefile.am --- tests/Makefile.am 19 Apr 2006 16:41:32 -0000 1.602 +++ tests/Makefile.am 22 Apr 2006 11:43:36 -0000 @@ -357,6 +357,7 @@ missing.test \ missing2.test \ missing3.test \ +missing4.test \ mkinstall.test \ mkinst2.test \ mkinst3.test \ --- /dev/null 2006-04-22 14:16:50.823007744 +0200 +++ tests/missing4.test 2006-04-22 13:51:28.000000000 +0200 @@ -0,0 +1,67 @@ +#! /bin/sh +# Copyright (C) 2006 Free Software Foundation, Inc. +# +# This file is part of GNU Automake. +# +# GNU Automake is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# GNU Automake is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Automake; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + +# test how well `missing' finds output file names of various tools. +# PR automake/483. + +. ./defs || exit 1 + +set -e + +# these programs may be invoked by `missing' +needed_tools='chmod find sed test touch' +needed_tools_csep=`echo $needed_tools | sed 's/ /, /g'` + +cat >configure.in <<EOF +AC_INIT([missing4], [1.0]) +m4_foreach([tool], [$needed_tools_csep], + [AC_PATH_PROG(tool, tool, [false]) + AC_CONFIG_FILES(tool, chmod +x tool) + ]) +AC_OUTPUT +EOF + +for tool in $needed_tools; do + cat >$tool.in <<EOF +#! /bin/sh +exec @$tool@ "\$@" +EOF +done + +$AUTOCONF +./configure + +echo output-file > output-file +cp output-file my--output--file-o + +save_PATH=$PATH +PATH=. +export PATH +missing --help +missing --version +for tool in autom4te help2man makeinfo; do + missing --run $tool -o my--output--file-o input + missing --run $tool --output my--output--file-o input +done +PATH=$save_PATH +export PATH +diff output-file my--output--file-o +test ! -f ./--file-o +test ! -f input