Mercurial > hg > CbC > CbC_gcc
annotate ylwrap @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 04ced10e8804 |
children |
rev | line source |
---|---|
0 | 1 #! /bin/sh |
2 # ylwrap - wrapper for lex/yacc invocations. | |
3 | |
111 | 4 scriptversion=2013-01-12.17; # UTC |
0 | 5 |
111 | 6 # Copyright (C) 1996-2014 Free Software Foundation, Inc. |
0 | 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 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
21 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
0 | 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 | |
111 | 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 | |
0 | 64 case "$1" in |
65 '') | |
111 | 66 echo "$0: No files given. Try '$0 --help' for more information." 1>&2 |
0 | 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. | |
111 | 99 input=$1 |
0 | 100 shift |
111 | 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 | |
0 | 104 [\\/]* | ?:[\\/]*) |
105 # Absolute path; do nothing. | |
106 ;; | |
107 *) | |
108 # Relative path. Make it absolute. | |
111 | 109 input=`pwd`/$input |
0 | 110 ;; |
111 esac | |
111 | 112 input_rx=`get_dirname "$input" | quote_for_sed` |
0 | 113 |
111 | 114 # The parser itself, the first file, is the destination of the .y.c |
115 # rule in the Makefile. | |
116 parser=$1 | |
117 | |
118 # A sed program to s/FROM/TO/g for all the FROM/TO so that, for | |
119 # instance, we rename #include "y.tab.h" into #include "parse.h" | |
120 # during the conversion from y.tab.c to parse.c. | |
121 sed_fix_filenames= | |
122 | |
123 # Also rename header guards, as Bison 2.7 for instance uses its header | |
124 # guard in its implementation file. | |
125 sed_fix_header_guards= | |
126 | |
127 while test $# -ne 0; do | |
128 if test x"$1" = x"--"; then | |
0 | 129 shift |
130 break | |
131 fi | |
111 | 132 from=$1 |
0 | 133 shift |
111 | 134 to=$1 |
135 shift | |
136 sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;" | |
137 sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;" | |
0 | 138 done |
139 | |
140 # The program to run. | |
111 | 141 prog=$1 |
0 | 142 shift |
143 # Make any relative path in $prog absolute. | |
111 | 144 case $prog in |
0 | 145 [\\/]* | ?:[\\/]*) ;; |
111 | 146 *[\\/]*) prog=`pwd`/$prog ;; |
0 | 147 esac |
148 | |
149 dirname=ylwrap$$ | |
111 | 150 do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret' |
151 trap "ret=129; $do_exit" 1 | |
152 trap "ret=130; $do_exit" 2 | |
153 trap "ret=141; $do_exit" 13 | |
154 trap "ret=143; $do_exit" 15 | |
0 | 155 mkdir $dirname || exit 1 |
156 | |
157 cd $dirname | |
158 | |
159 case $# in | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
160 0) "$prog" "$input" ;; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
161 *) "$prog" "$@" "$input" ;; |
0 | 162 esac |
163 ret=$? | |
164 | |
165 if test $ret -eq 0; then | |
111 | 166 for from in * |
167 do | |
168 to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"` | |
0 | 169 if test -f "$from"; then |
170 # If $2 is an absolute path name, then just use that, | |
111 | 171 # otherwise prepend '../'. |
172 case $to in | |
173 [\\/]* | ?:[\\/]*) target=$to;; | |
174 *) target=../$to;; | |
0 | 175 esac |
176 | |
111 | 177 # Do not overwrite unchanged header files to avoid useless |
178 # recompilations. Always update the parser itself: it is the | |
179 # destination of the .y.c rule in the Makefile. Divert the | |
180 # output of all other files to a temporary file so we can | |
181 # compare them to existing versions. | |
182 if test $from != $parser; then | |
183 realtarget=$target | |
184 target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'` | |
0 | 185 fi |
186 | |
111 | 187 # Munge "#line" or "#" directives. Don't let the resulting |
188 # debug information point at an absolute srcdir. Use the real | |
189 # output file name, not yy.lex.c for instance. Adjust the | |
190 # include guards too. | |
191 sed -e "/^#/!b" \ | |
192 -e "s|$input_rx|$input_sub_rx|" \ | |
193 -e "$sed_fix_filenames" \ | |
194 -e "$sed_fix_header_guards" \ | |
195 "$from" >"$target" || ret=$? | |
0 | 196 |
111 | 197 # Check whether files must be updated. |
198 if test "$from" != "$parser"; then | |
199 if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then | |
200 echo "$to is unchanged" | |
201 rm -f "$target" | |
202 else | |
203 echo "updating $to" | |
0 | 204 mv -f "$target" "$realtarget" |
205 fi | |
206 fi | |
207 else | |
111 | 208 # A missing file is only an error for the parser. This is a |
209 # blatant hack to let us support using "yacc -d". If -d is not | |
210 # specified, don't fail when the header file is "missing". | |
211 if test "$from" = "$parser"; then | |
0 | 212 ret=1 |
213 fi | |
214 fi | |
215 done | |
216 fi | |
217 | |
218 # Remove the directory. | |
219 cd .. | |
220 rm -rf $dirname | |
221 | |
222 exit $ret | |
223 | |
224 # Local Variables: | |
225 # mode: shell-script | |
226 # sh-indentation: 2 | |
227 # eval: (add-hook 'write-file-hooks 'time-stamp) | |
228 # time-stamp-start: "scriptversion=" | |
229 # time-stamp-format: "%:y-%02m-%02d.%02H" | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
230 # time-stamp-time-zone: "UTC" |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
231 # time-stamp-end: "; # UTC" |
0 | 232 # End: |