Annotation of embedaddon/strongswan/ylwrap, revision 1.1.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>