Annotation of embedaddon/confuse/support/ylwrap, revision 1.1
1.1 ! misho 1: #! /bin/sh
! 2: # ylwrap - wrapper for lex/yacc invocations.
! 3:
! 4: scriptversion=2009-04-28.21; # UTC
! 5:
! 6: # Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
! 7: # 2007, 2009 Free Software Foundation, Inc.
! 8: #
! 9: # Written by Tom Tromey <tromey@cygnus.com>.
! 10: #
! 11: # This program is free software; you can redistribute it and/or modify
! 12: # it under the terms of the GNU General Public License as published by
! 13: # the Free Software Foundation; either version 2, or (at your option)
! 14: # any later version.
! 15: #
! 16: # This program is distributed in the hope that it will be useful,
! 17: # but WITHOUT ANY WARRANTY; without even the implied warranty of
! 18: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 19: # GNU General Public License for more details.
! 20: #
! 21: # You should have received a copy of the GNU General Public License
! 22: # along with this program. If not, see <http://www.gnu.org/licenses/>.
! 23:
! 24: # As a special exception to the GNU General Public License, if you
! 25: # distribute this file as part of a program that contains a
! 26: # configuration script generated by Autoconf, you may include it under
! 27: # the same distribution terms that you use for the rest of that program.
! 28:
! 29: # This file is maintained in Automake, please report
! 30: # bugs to <bug-automake@gnu.org> or send patches to
! 31: # <automake-patches@gnu.org>.
! 32:
! 33: case "$1" in
! 34: '')
! 35: echo "$0: No files given. Try \`$0 --help' for more information." 1>&2
! 36: exit 1
! 37: ;;
! 38: --basedir)
! 39: basedir=$2
! 40: shift 2
! 41: ;;
! 42: -h|--h*)
! 43: cat <<\EOF
! 44: Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
! 45:
! 46: Wrapper for lex/yacc invocations, renaming files as desired.
! 47:
! 48: INPUT is the input file
! 49: OUTPUT is one file PROG generates
! 50: DESIRED is the file we actually want instead of OUTPUT
! 51: PROGRAM is program to run
! 52: ARGS are passed to PROG
! 53:
! 54: Any number of OUTPUT,DESIRED pairs may be used.
! 55:
! 56: Report bugs to <bug-automake@gnu.org>.
! 57: EOF
! 58: exit $?
! 59: ;;
! 60: -v|--v*)
! 61: echo "ylwrap $scriptversion"
! 62: exit $?
! 63: ;;
! 64: esac
! 65:
! 66:
! 67: # The input.
! 68: input="$1"
! 69: shift
! 70: case "$input" in
! 71: [\\/]* | ?:[\\/]*)
! 72: # Absolute path; do nothing.
! 73: ;;
! 74: *)
! 75: # Relative path. Make it absolute.
! 76: input="`pwd`/$input"
! 77: ;;
! 78: esac
! 79:
! 80: pairlist=
! 81: while test "$#" -ne 0; do
! 82: if test "$1" = "--"; then
! 83: shift
! 84: break
! 85: fi
! 86: pairlist="$pairlist $1"
! 87: shift
! 88: done
! 89:
! 90: # The program to run.
! 91: prog="$1"
! 92: shift
! 93: # Make any relative path in $prog absolute.
! 94: case "$prog" in
! 95: [\\/]* | ?:[\\/]*) ;;
! 96: *[\\/]*) prog="`pwd`/$prog" ;;
! 97: esac
! 98:
! 99: # FIXME: add hostname here for parallel makes that run commands on
! 100: # other machines. But that might take us over the 14-char limit.
! 101: dirname=ylwrap$$
! 102: trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
! 103: mkdir $dirname || exit 1
! 104:
! 105: cd $dirname
! 106:
! 107: case $# in
! 108: 0) "$prog" "$input" ;;
! 109: *) "$prog" "$@" "$input" ;;
! 110: esac
! 111: ret=$?
! 112:
! 113: if test $ret -eq 0; then
! 114: set X $pairlist
! 115: shift
! 116: first=yes
! 117: # Since DOS filename conventions don't allow two dots,
! 118: # the DOS version of Bison writes out y_tab.c instead of y.tab.c
! 119: # and y_tab.h instead of y.tab.h. Test to see if this is the case.
! 120: y_tab_nodot="no"
! 121: if test -f y_tab.c || test -f y_tab.h; then
! 122: y_tab_nodot="yes"
! 123: fi
! 124:
! 125: # The directory holding the input.
! 126: input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
! 127: # Quote $INPUT_DIR so we can use it in a regexp.
! 128: # FIXME: really we should care about more than `.' and `\'.
! 129: input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
! 130:
! 131: while test "$#" -ne 0; do
! 132: from="$1"
! 133: # Handle y_tab.c and y_tab.h output by DOS
! 134: if test $y_tab_nodot = "yes"; then
! 135: if test $from = "y.tab.c"; then
! 136: from="y_tab.c"
! 137: else
! 138: if test $from = "y.tab.h"; then
! 139: from="y_tab.h"
! 140: fi
! 141: fi
! 142: fi
! 143: if test -f "$from"; then
! 144: # If $2 is an absolute path name, then just use that,
! 145: # otherwise prepend `../'.
! 146: case "$2" in
! 147: [\\/]* | ?:[\\/]*) target="$2";;
! 148: *) target="../$2";;
! 149: esac
! 150:
! 151: # We do not want to overwrite a header file if it hasn't
! 152: # changed. This avoid useless recompilations. However the
! 153: # parser itself (the first file) should always be updated,
! 154: # because it is the destination of the .y.c rule in the
! 155: # Makefile. Divert the output of all other files to a temporary
! 156: # file so we can compare them to existing versions.
! 157: if test $first = no; then
! 158: realtarget="$target"
! 159: target="tmp-`echo $target | sed s/.*[\\/]//g`"
! 160: fi
! 161: # Edit out `#line' or `#' directives.
! 162: #
! 163: # We don't want the resulting debug information to point at
! 164: # an absolute srcdir; it is better for it to just mention the
! 165: # .y file with no path.
! 166: #
! 167: # We want to use the real output file name, not yy.lex.c for
! 168: # instance.
! 169: #
! 170: # We want the include guards to be adjusted too.
! 171: FROM=`echo "$from" | sed \
! 172: -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
! 173: -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
! 174: TARGET=`echo "$2" | sed \
! 175: -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
! 176: -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
! 177:
! 178: sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
! 179: -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
! 180:
! 181: # Check whether header files must be updated.
! 182: if test $first = no; then
! 183: if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
! 184: echo "$2" is unchanged
! 185: rm -f "$target"
! 186: else
! 187: echo updating "$2"
! 188: mv -f "$target" "$realtarget"
! 189: fi
! 190: fi
! 191: else
! 192: # A missing file is only an error for the first file. This
! 193: # is a blatant hack to let us support using "yacc -d". If -d
! 194: # is not specified, we don't want an error when the header
! 195: # file is "missing".
! 196: if test $first = yes; then
! 197: ret=1
! 198: fi
! 199: fi
! 200: shift
! 201: shift
! 202: first=no
! 203: done
! 204: else
! 205: ret=$?
! 206: fi
! 207:
! 208: # Remove the directory.
! 209: cd ..
! 210: rm -rf $dirname
! 211:
! 212: exit $ret
! 213:
! 214: # Local Variables:
! 215: # mode: shell-script
! 216: # sh-indentation: 2
! 217: # eval: (add-hook 'write-file-hooks 'time-stamp)
! 218: # time-stamp-start: "scriptversion="
! 219: # time-stamp-format: "%:y-%02m-%02d.%02H"
! 220: # time-stamp-time-zone: "UTC"
! 221: # time-stamp-end: "; # UTC"
! 222: # End:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>