Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/nmake/ppcc.sh
1808 views
1
########################################################################
2
# #
3
# This software is part of the ast package #
4
# Copyright (c) 1984-2011 AT&T Intellectual Property #
5
# and is licensed under the #
6
# Eclipse Public License, Version 1.0 #
7
# by AT&T Intellectual Property #
8
# #
9
# A copy of the License is available at #
10
# http://www.eclipse.org/org/documents/epl-v10.html #
11
# (with md5 checksum b35adb5213ca9657e911e9befb180842) #
12
# #
13
# Information and Software Systems Research #
14
# AT&T Research #
15
# Florham Park NJ #
16
# #
17
# Glenn Fowler <[email protected]> #
18
# #
19
########################################################################
20
# preprocess with pp-command then run cc-command
21
#
22
# @(#)ppcc (AT&T Research) 1997-02-14
23
24
case $-:$BASH_VERSION in
25
*x*:[0123456789]*) : bash set -x is broken :; set +ex; old=1 ;;
26
*) old= ;;
27
esac
28
29
command=ppcc
30
clobber=
31
doti=
32
exec=1
33
linki=
34
multiopt=o
35
post=
36
ppfile=
37
ppld=
38
ppstdout=
39
src1="*.[cCsS]"
40
src2="*.[cC][xX][xX]"
41
src3="*.[cC][pP][pP]"
42
src4="*.[aA][sS][mM]"
43
tmp=/tmp/pC$$
44
verbose=
45
usage="Usage: $command [ -nv ] [ -o dialect-option ] pp-command ... cc-command ..."
46
while :
47
do case $# in
48
0) break ;;
49
esac
50
case $1 in
51
-o*) # these are CC.DIALECT values from $(probe C make ...)
52
case $1 in
53
-o) case $# in
54
1) echo "$usage" >&2
55
exit 2
56
;;
57
esac
58
shift
59
opt=$1
60
;;
61
*) case $RANDOM in
62
$RANDOM)opt=`echo x$1 | sed s/...//` ;;
63
*) opt=${1#??} ;;
64
esac
65
;;
66
esac
67
case $opt in
68
NO*|no*)value=
69
case $RANDOM in
70
$RANDOM)opt=`echo $opt | sed s/..//` ;;
71
*) opt=${1#??} ;;
72
esac
73
;;
74
*) case $opt in
75
*=*) case $RANDOM in
76
$RANDOM)eval `echo $opt | sed 's/\\([^=]*\\)/opt=\\1 value/'` ;;
77
*) value=${opt#*=}
78
opt=${opt%%=*}
79
;;
80
esac
81
;;
82
*) value=1
83
;;
84
esac
85
;;
86
esac
87
case $opt in
88
C++|c++)
89
ppld=$value
90
;;
91
DOTI|doti)
92
doti=$value
93
;;
94
LINKI|linki)
95
linki=$value
96
;;
97
MULTI|multi)
98
case $value in
99
"") multiopt=
100
;;
101
*) multiopt=$multiopt$value
102
;;
103
esac
104
;;
105
PPLD|ppld)
106
ppld=$value
107
;;
108
exec) exec=$value
109
;;
110
verbose)verbose=$value
111
;;
112
*) # ignore the rest for fore/back compatibility
113
;;
114
esac
115
;;
116
-*) case $1 in
117
-*[!iklnvO]*)
118
echo "$usage" >&2
119
exit 2
120
;;
121
esac
122
case $1 in
123
*i*) doti=1 ;;
124
esac
125
case $1 in
126
*k*) doti=1 linki=1 ;;
127
esac
128
case $1 in
129
*l*) ppld=1 ;;
130
esac
131
case $1 in
132
*n*) exec= ;;
133
esac
134
case $1 in
135
*v*) verbose=1 ;;
136
esac
137
case $1 in
138
*O*) old=1 ;;
139
esac
140
;;
141
*) break
142
;;
143
esac
144
shift
145
done
146
case $# in
147
0) echo "$usage" >&2
148
exit 2
149
;;
150
esac
151
trap ' status=$?
152
trap "" 0
153
case $clobber in
154
?*) case $verbose in
155
1) echo + rm -rf $clobber ;;
156
esac
157
case $exec in
158
1) rm -rf $clobber ;;
159
esac
160
;;
161
esac
162
case $post in
163
?*) case $verbose in
164
1) echo + $post ;;
165
esac
166
case $exec in
167
1) eval "$post" ;;
168
esac
169
;;
170
esac
171
exit $status
172
' 0 1 2 3 15
173
case $old in
174
'') case `(set -A a no ok; ((b=1+1)); echo "${a[1]}$b") 2>/dev/null` in
175
ok2) ;;
176
*) old=1 ;;
177
esac
178
;;
179
esac
180
case $old:$RANDOM in
181
*:$RANDOM|1:*)
182
# the hard way -- it has not kept up with the easy way below
183
nfile=
184
set '' "$@" '' "$1"
185
while :
186
do shift
187
shift
188
case $1 in
189
[-+]*) ;;
190
*) break ;;
191
esac
192
set '' "$@" "$1"
193
done
194
while :
195
do arg=$1
196
shift
197
case $arg in
198
'') break
199
;;
200
-[$multiopt])
201
case $1 in
202
?*) set '' "$@" "$arg"
203
shift
204
arg=$1
205
shift
206
;;
207
esac
208
;;
209
-E) ppstdout=1
210
doti=1
211
trap 0 1 2 3 15
212
;;
213
-P) ppfile=1
214
doti=1
215
trap 0 1 2 3 15
216
;;
217
[-+]*) ;;
218
$src1|$src2|$src3|$src4)
219
nfile=_$nfile
220
eval input$nfile='$arg'
221
case $ppstdout in
222
"") case $doti in
223
"") file=`echo $arg | sed -e "s,.*/,," -e "s,^,$tmp/,"`
224
case $clobber in
225
"") clobber=$tmp
226
case $verbose in
227
1) print -r -- + mkdir $tmp ;;
228
esac
229
case $exec in
230
1) mkdir $tmp || exit ;;
231
esac
232
;;
233
esac
234
;;
235
*) file=`echo $arg | sed -e "s,.*/,," -e "s,[.][^.]*,.i,"`
236
clobber="$clobber $file"
237
;;
238
esac
239
eval output$nfile='$file'
240
;;
241
esac
242
;;
243
esac
244
set '' "$@" "$arg"
245
shift
246
done
247
# sub-shell to split pp and cc arg lists
248
(
249
set '' "$@" '' "$1"
250
while :
251
do shift
252
shift
253
case $1 in
254
[-+]*) ;;
255
*) shift
256
break
257
;;
258
esac
259
set '' "$@" "$1"
260
done
261
case $doti$ppstdout in
262
"") set '' "$@" -D-L
263
shift
264
;;
265
esac
266
shift
267
while :
268
do arg=$1
269
shift
270
case $arg in
271
'') break
272
;;
273
-[$multiopt])
274
case $1 in
275
?*) shift ;;
276
esac
277
continue
278
;;
279
-[DIU]*|-[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*)
280
;;
281
-G) case $1 in
282
[0-9]*) shift ;;
283
esac
284
;;
285
[-+]*) continue
286
;;
287
$src1|$src2|$src3|$src4)
288
break
289
;;
290
esac
291
set '' "$@" "$arg"
292
shift
293
done
294
case $nfile in
295
?*) while :
296
do arg=$1
297
shift
298
case $arg in
299
'') break ;;
300
esac
301
done
302
n=
303
while :
304
do case $n in
305
$nfile) break ;;
306
esac
307
n=_$n
308
eval input='$input'$n
309
case $ppstdout in
310
"") eval output='$output'$n
311
case $verbose in
312
1) echo + "$@" "$input" "$output" ;;
313
esac
314
case $exec in
315
1) "$@" "$input" "$output" || exit ;;
316
esac
317
;;
318
*) case $verbose in
319
1) echo + "$@" "$input" ;;
320
esac
321
case $exec in
322
1) "$@" "$input" || exit ;;
323
esac
324
;;
325
esac
326
done
327
;;
328
esac
329
) || exit
330
case $ppfile$ppstdout in
331
?*) exit ;;
332
esac
333
while :
334
do shift
335
case $1 in
336
[-+]*) ;;
337
*) break ;;
338
esac
339
done
340
set '' "$@" '' "$1"
341
shift
342
shift
343
n=
344
while :
345
do arg=$1
346
shift
347
case $arg in
348
'') break
349
;;
350
-[$multiopt])
351
case $1 in
352
?*) set '' "$@" "$arg"
353
shift
354
arg=$1
355
shift
356
;;
357
esac
358
;;
359
-[DIU]*)case $ppld in
360
"") continue ;;
361
esac
362
;;
363
[-+]*) ;;
364
$src1|$src2|$src3|$src4)
365
n=_$n
366
eval arg='$output'$n
367
;;
368
esac
369
set '' "$@" "$arg"
370
shift
371
done
372
case $verbose in
373
1) echo + "$@" ;;
374
esac
375
case $exec in
376
1) "$@" ;;
377
esac
378
;;
379
*) integer npp=1 ncc=1 nav=1 xav=$# oav
380
set -A av "$@"
381
pp[0]=${av[0]}
382
while (( nav < xav ))
383
do arg=${av[nav]}
384
(( nav = nav + 1 ))
385
case $arg in
386
[-+]*) ;;
387
*) break ;;
388
esac
389
pp[npp]=$arg
390
(( npp = npp + 1 ))
391
done
392
case $doti in
393
"") pp[npp]=-D-L
394
(( npp = npp + 1 ))
395
;;
396
esac
397
cc[0]=$arg
398
while (( nav < xav ))
399
do arg=${av[nav]}
400
(( nav = nav + 1 ))
401
case $arg in
402
-[$multiopt]|-[Qq]dir|-[Qq]option|-[Qq]path|-[Qq]produce)
403
case $arg in
404
-[Qq]option)
405
(( oav = nav + 2 ))
406
;;
407
*) (( oav = nav + 1 ))
408
;;
409
esac
410
if (( oav > xav ))
411
then (( oav = xav ))
412
fi
413
while (( nav < oav ))
414
do cc[ncc]=$arg
415
(( ncc = ncc + 1 ))
416
arg=${av[nav]}
417
(( nav = nav + 1 ))
418
done
419
;;
420
-[DIU]*|-[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*)
421
pp[npp]=$arg
422
(( npp = npp + 1 ))
423
case $ppld in
424
"") case $arg in
425
-[DIU]*) continue ;;
426
esac
427
;;
428
esac
429
case $arg in
430
-D-*) continue ;;
431
esac
432
;;
433
-E) ppstdout=1
434
doti=1
435
trap 0 1 2 3 15
436
continue
437
;;
438
-G) case ${av[nav]} in
439
[0-9]*) cc[ncc]=$arg
440
(( ncc = ncc + 1 ))
441
arg=${av[nav]}
442
(( nav = nav + 1 ))
443
;;
444
esac
445
;;
446
-P) ppfile=1
447
doti=1
448
trap 0 1 2 3 15
449
continue
450
;;
451
-#*|-dryrun|--dryrun|-verbose|--verbose)
452
verbose=1
453
;;
454
[-+]*) ;;
455
$src1|$src2|$src3|$src4)
456
case $ppstdout in
457
"") out=${arg##*/}
458
case $doti in
459
1) out=${out%.*}.i
460
clobber="$clobber $out"
461
if test -L $out 2>/dev/null
462
then case $verbose in
463
1) echo + rm -f $out ;;
464
esac
465
case $exec in
466
1) rm -f $out ;;
467
esac
468
fi
469
case $linki:$ppfile in
470
1:) post="$post ln -s $arg $out;" ;;
471
esac
472
;;
473
*) case $clobber in
474
"") clobber=$tmp
475
case $verbose in
476
1) print -r -- + mkdir $tmp ;;
477
esac
478
case $exec in
479
1) mkdir $tmp || exit ;;
480
esac
481
;;
482
esac
483
out=$tmp/$out
484
;;
485
esac
486
pp[npp+1]=$out
487
;;
488
esac
489
pp[npp]=$arg
490
arg=$out
491
case $verbose in
492
1) print -r -- + "${pp[@]}" ;;
493
esac
494
case $exec in
495
1) "${pp[@]}" || exit ;;
496
esac
497
;;
498
esac
499
cc[ncc]=$arg
500
(( ncc = ncc + 1 ))
501
done
502
case $ppfile$ppstdout in
503
"") case $verbose in
504
1) print -r -- + "${cc[@]}" ;;
505
esac
506
case $exec in
507
1) "${cc[@]}" ;;
508
esac
509
;;
510
esac
511
esac
512
513