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