Annotation of embedaddon/ipsec-tools/ylwrap, revision 1.1.1.2
1.1 misho 1: #! /bin/sh
2: # ylwrap - wrapper for lex/yacc invocations.
3:
1.1.1.2 ! misho 4: scriptversion=2011-08-25.18; # UTC
1.1 misho 5:
6: # Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
1.1.1.2 ! misho 7: # 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
1.1 misho 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$$
1.1.1.2 ! misho 102: do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
! 103: trap "ret=129; $do_exit" 1
! 104: trap "ret=130; $do_exit" 2
! 105: trap "ret=141; $do_exit" 13
! 106: trap "ret=143; $do_exit" 15
1.1 misho 107: mkdir $dirname || exit 1
108:
109: cd $dirname
110:
111: case $# in
112: 0) "$prog" "$input" ;;
113: *) "$prog" "$@" "$input" ;;
114: esac
115: ret=$?
116:
117: if test $ret -eq 0; then
118: set X $pairlist
119: shift
120: first=yes
121: # Since DOS filename conventions don't allow two dots,
122: # the DOS version of Bison writes out y_tab.c instead of y.tab.c
123: # and y_tab.h instead of y.tab.h. Test to see if this is the case.
124: y_tab_nodot="no"
125: if test -f y_tab.c || test -f y_tab.h; then
126: y_tab_nodot="yes"
127: fi
128:
129: # The directory holding the input.
130: input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
131: # Quote $INPUT_DIR so we can use it in a regexp.
132: # FIXME: really we should care about more than `.' and `\'.
133: input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
134:
135: while test "$#" -ne 0; do
136: from="$1"
137: # Handle y_tab.c and y_tab.h output by DOS
138: if test $y_tab_nodot = "yes"; then
139: if test $from = "y.tab.c"; then
1.1.1.2 ! misho 140: from="y_tab.c"
1.1 misho 141: else
1.1.1.2 ! misho 142: if test $from = "y.tab.h"; then
! 143: from="y_tab.h"
! 144: fi
1.1 misho 145: fi
146: fi
147: if test -f "$from"; then
148: # If $2 is an absolute path name, then just use that,
149: # otherwise prepend `../'.
150: case "$2" in
1.1.1.2 ! misho 151: [\\/]* | ?:[\\/]*) target="$2";;
! 152: *) target="../$2";;
1.1 misho 153: esac
154:
155: # We do not want to overwrite a header file if it hasn't
156: # changed. This avoid useless recompilations. However the
157: # parser itself (the first file) should always be updated,
158: # because it is the destination of the .y.c rule in the
159: # Makefile. Divert the output of all other files to a temporary
160: # file so we can compare them to existing versions.
161: if test $first = no; then
1.1.1.2 ! misho 162: realtarget="$target"
! 163: target="tmp-`echo $target | sed s/.*[\\/]//g`"
1.1 misho 164: fi
165: # Edit out `#line' or `#' directives.
166: #
167: # We don't want the resulting debug information to point at
168: # an absolute srcdir; it is better for it to just mention the
169: # .y file with no path.
170: #
171: # We want to use the real output file name, not yy.lex.c for
172: # instance.
173: #
174: # We want the include guards to be adjusted too.
175: FROM=`echo "$from" | sed \
176: -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
177: -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
178: TARGET=`echo "$2" | sed \
179: -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
180: -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
181:
182: sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
183: -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
184:
185: # Check whether header files must be updated.
186: if test $first = no; then
1.1.1.2 ! misho 187: if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
! 188: echo "$2" is unchanged
! 189: rm -f "$target"
! 190: else
1.1 misho 191: echo updating "$2"
192: mv -f "$target" "$realtarget"
193: fi
194: fi
195: else
196: # A missing file is only an error for the first file. This
197: # is a blatant hack to let us support using "yacc -d". If -d
198: # is not specified, we don't want an error when the header
199: # file is "missing".
200: if test $first = yes; then
201: ret=1
202: fi
203: fi
204: shift
205: shift
206: first=no
207: done
208: else
209: ret=$?
210: fi
211:
212: # Remove the directory.
213: cd ..
214: rm -rf $dirname
215:
216: exit $ret
217:
218: # Local Variables:
219: # mode: shell-script
220: # sh-indentation: 2
221: # eval: (add-hook 'write-file-hooks 'time-stamp)
222: # time-stamp-start: "scriptversion="
223: # time-stamp-format: "%:y-%02m-%02d.%02H"
224: # time-stamp-time-zone: "UTC"
225: # time-stamp-end: "; # UTC"
226: # End:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>