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>