This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
cccdc725b81c0f3ed3a996a0c388495ab1a4fe3b
[perl5.git] / Makefile.SH
1 case $CONFIG in
2 '')
3     if test ! -f config.sh; then
4         ln ../config.sh . || \
5         ln ../../config.sh . || \
6         ln ../../../config.sh . || \
7         (echo "Can't find config.sh."; exit 1)
8     fi
9     . ./config.sh
10     ;;
11 esac
12 case "$0" in
13 */*) cd `expr X$0 : 'X\(.*\)/'` ;;
14 esac
15
16 case "$d_symlink" in
17 *define*) sln='ln -s' ;;
18 *) sln='ln';;
19 esac
20
21 case "$d_dosuid" in
22 *define*) suidperl='suidperl' ;;
23 *) suidperl='';;
24 esac
25
26 echo "Extracting Makefile (with variable substitutions)"
27 cat >Makefile <<!GROK!THIS!
28 # $Header: Makefile.SH,v 3.0.1.8 90/08/13 21:50:49 lwall Locked $
29 #
30 # $Log: Makefile.SH,v $
31 # Revision 3.0.1.8  90/08/13  21:50:49  lwall
32 # patch28: not all yaccs are the same
33
34 # Revision 3.0.1.7  90/08/09  02:19:56  lwall
35 # patch19: Configure now asks where you want to put scripts
36 # patch19: Added support for linked-in C subroutines
37
38 # Revision 3.0.1.6  90/03/27  15:27:15  lwall
39 # patch16: MSDOS support
40
41 # Revision 3.0.1.5  90/03/12  16:15:17  lwall
42 # patch13: some dependencies missing on perly.h
43 # patch13: some relief for buggy parallel makes
44 # patch13: bison doesn't declare extern YYSTYPE yylval;
45
46 # Revision 3.0.1.4  90/02/28  16:19:43  lwall
47 # patch9: extraneous $ on suidperl in Makefile
48
49 # Revision 3.0.1.3  89/12/21  19:09:26  lwall
50 # patch7: Configure now lets you pick between yacc or bison
51
52 # Revision 3.0.1.2  89/11/11  04:07:30  lwall
53 # patch2: $sockethdr incorporated into $ccflags
54 # patch2: $libs now has most of the -l libraries
55
56 # Revision 3.0.1.1  89/10/26  23:00:38  lwall
57 # patch1: Makefile.SH needed some more .h dependecies
58
59 # Revision 3.0  89/10/18  15:06:43  lwall
60 # 3.0 baseline
61
62
63 CC = $cc
64 YACC = $yacc
65 bin = $bin
66 scriptdir = $scriptdir
67 privlib = $privlib
68 mansrc = $mansrc
69 manext = $manext
70 CFLAGS = $ccflags $optimize
71 LDFLAGS = $ldflags
72 SMALL = $small
73 LARGE = $large $split
74 mallocsrc = $mallocsrc
75 mallocobj = $mallocobj
76 SLN = $sln
77
78 libs = $libs -lm
79
80 public = perl taintperl $suidperl
81
82 !GROK!THIS!
83
84 cat >>Makefile <<'!NO!SUBS!'
85 private = 
86
87 scripts = h2ph
88
89 MAKE = make
90
91 manpages = perl.man h2ph.man
92
93 util =
94
95 sh = Makefile.SH makedepend.SH h2ph.SH
96
97 h1 = EXTERN.h INTERN.h arg.h array.h cmd.h config.h form.h handy.h
98 h2 = hash.h perl.h regcomp.h regexp.h spat.h stab.h str.h util.h
99
100 h = $(h1) $(h2)
101
102 c1 = array.c cmd.c cons.c consarg.c doarg.c doio.c dolist.c dump.c
103 c2 = eval.c form.c hash.c $(mallocsrc) perly.c regcomp.c regexec.c
104 c3 = stab.c str.c toke.c util.c
105
106 c = $(c1) $(c2) $(c3)
107
108 obj1 = array.o cmd.o cons.o consarg.o doarg.o doio.o dolist.o dump.o
109 obj2 = eval.o form.o hash.o $(mallocobj) perly.o regcomp.o regexec.o
110 obj3 = stab.o str.o toke.o util.o
111
112 obj = $(obj1) $(obj2) $(obj3)
113
114 tobj1 = tarray.o tcmd.o tcons.o tconsarg.o tdoarg.o tdoio.o tdolist.o tdump.o
115 tobj2 = teval.o tform.o thash.o $(mallocobj) tregcomp.o tregexec.o
116 tobj3 = tstab.o tstr.o ttoke.o tutil.o
117
118 tobj = $(tobj1) $(tobj2) $(tobj3)
119
120 lintflags = -hbvxac
121
122 addedbyconf = Makefile.old bsd eunice filexp loc pdp11 usg v7
123
124 # grrr
125 SHELL = /bin/sh
126
127 .c.o:
128         $(CC) -c $(CFLAGS) $(LARGE) $*.c
129
130 all: $(public) $(private) $(util) perl.man uperl.o $(scripts)
131         cd x2p; $(MAKE) all
132         touch all
133
134 # This is the standard version that contains no "taint" checks and is
135 # used for all scripts that aren't set-id or running under something set-id.
136
137 perl: perl.o $(obj) usersub.o
138         $(CC) $(LARGE) $(LDFLAGS) $(obj) perl.o usersub.o $(libs) -o perl
139
140 uperl.o: perl.o $(obj)
141         ld $(LARGE) $(LDFLAGS) -r $(obj) perl.o $(libs) -o uperl.o
142
143 saber: perl.c
144         # load $(c) perl.c
145
146 # This version, if specified in Configure, does ONLY those scripts which need
147 # set-id emulation.  Suidperl must be setuid root.  It contains the "taint"
148 # checks as well as the special code to validate that the script in question
149 # has been invoked correctly.
150
151 suidperl: tperl.o sperly.o $(tobj) usersub.o
152         $(CC) $(LARGE) $(LDFLAGS) sperly.o $(tobj) tperl.o usersub.o $(libs) \
153             -o suidperl
154
155 # This version interprets scripts that are already set-id either via a wrapper
156 # or through the kernel allowing set-id scripts (bad idea).  Taintperl must
157 # NOT be setuid to root or anything else.  The only difference between it
158 # and normal perl is the presence of the "taint" checks.
159
160 taintperl: tperl.o tperly.o $(tobj) usersub.o
161         $(CC) $(LARGE) $(LDFLAGS) tperly.o $(tobj) tperl.o usersub.o $(libs) \
162             -o taintperl
163
164 # Replicating all this junk is yucky, but I don't see a portable way to fix it.
165
166 tperl.o: perl.c perly.h $(h)
167         /bin/rm -f tperl.c
168         $(SLN) perl.c tperl.c
169         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tperl.c
170         /bin/rm -f tperl.c
171
172 tperly.o: perly.c perly.h $(h)
173         /bin/rm -f tperly.c
174         $(SLN) perly.c tperly.c
175         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tperly.c
176         /bin/rm -f tperly.c
177
178 sperly.o: perly.c perly.h patchlevel.h $(h)
179         /bin/rm -f sperly.c
180         $(SLN) perly.c sperly.c
181         $(CC) -c -DTAINT -DIAMSUID $(CFLAGS) $(LARGE) sperly.c
182         /bin/rm -f sperly.c
183
184 tarray.o: array.c $(h)
185         /bin/rm -f tarray.c
186         $(SLN) array.c tarray.c
187         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tarray.c
188         /bin/rm -f tarray.c
189
190 tcmd.o: cmd.c $(h)
191         /bin/rm -f tcmd.c
192         $(SLN) cmd.c tcmd.c
193         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tcmd.c
194         /bin/rm -f tcmd.c
195
196 tcons.o: cons.c $(h) perly.h
197         /bin/rm -f tcons.c
198         $(SLN) cons.c tcons.c
199         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tcons.c
200         /bin/rm -f tcons.c
201
202 tconsarg.o: consarg.c $(h)
203         /bin/rm -f tconsarg.c
204         $(SLN) consarg.c tconsarg.c
205         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tconsarg.c
206         /bin/rm -f tconsarg.c
207
208 tdoarg.o: doarg.c $(h)
209         /bin/rm -f tdoarg.c
210         $(SLN) doarg.c tdoarg.c
211         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tdoarg.c
212         /bin/rm -f tdoarg.c
213
214 tdoio.o: doio.c $(h)
215         /bin/rm -f tdoio.c
216         $(SLN) doio.c tdoio.c
217         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tdoio.c
218         /bin/rm -f tdoio.c
219
220 tdolist.o: dolist.c $(h)
221         /bin/rm -f tdolist.c
222         $(SLN) dolist.c tdolist.c
223         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tdolist.c
224         /bin/rm -f tdolist.c
225
226 tdump.o: dump.c $(h)
227         /bin/rm -f tdump.c
228         $(SLN) dump.c tdump.c
229         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tdump.c
230         /bin/rm -f tdump.c
231
232 teval.o: eval.c $(h)
233         /bin/rm -f teval.c
234         $(SLN) eval.c teval.c
235         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) teval.c
236         /bin/rm -f teval.c
237
238 tform.o: form.c $(h)
239         /bin/rm -f tform.c
240         $(SLN) form.c tform.c
241         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tform.c
242         /bin/rm -f tform.c
243
244 thash.o: hash.c $(h)
245         /bin/rm -f thash.c
246         $(SLN) hash.c thash.c
247         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) thash.c
248         /bin/rm -f thash.c
249
250 tregcomp.o: regcomp.c $(h)
251         /bin/rm -f tregcomp.c
252         $(SLN) regcomp.c tregcomp.c
253         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tregcomp.c
254         /bin/rm -f tregcomp.c
255
256 tregexec.o: regexec.c $(h)
257         /bin/rm -f tregexec.c
258         $(SLN) regexec.c tregexec.c
259         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tregexec.c
260         /bin/rm -f tregexec.c
261
262 tstab.o: stab.c $(h)
263         /bin/rm -f tstab.c
264         $(SLN) stab.c tstab.c
265         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tstab.c
266         /bin/rm -f tstab.c
267
268 tstr.o: str.c $(h) perly.h
269         /bin/rm -f tstr.c
270         $(SLN) str.c tstr.c
271         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tstr.c
272         /bin/rm -f tstr.c
273
274 ttoke.o: toke.c $(h) perly.h
275         /bin/rm -f ttoke.c
276         $(SLN) toke.c ttoke.c
277         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) ttoke.c
278         /bin/rm -f ttoke.c
279
280 tutil.o: util.c $(h)
281         /bin/rm -f tutil.c
282         $(SLN) util.c tutil.c
283         $(CC) -c -DTAINT $(CFLAGS) $(LARGE) tutil.c
284         /bin/rm -f tutil.c
285
286 perly.h: perl.c
287         @ echo Dummy dependency for dumb parallel make
288         touch perly.h
289
290 perl.c: perl.y
291         @ echo 'Expect either' 29 shift/reduce and 59 reduce/reduce conflicts...
292         @ echo '           or' 27 shift/reduce and 61 reduce/reduce conflicts...
293         $(YACC) -d perl.y
294         mv y.tab.c perl.c
295         mv y.tab.h perly.h
296         echo 'extern YYSTYPE yylval;' >>perly.h
297
298 perl.o: perl.c perly.h $(h)
299         $(CC) -c $(CFLAGS) $(LARGE) perl.c
300
301 perl.man: perl_man.1 perl_man.2 perl_man.3 perl_man.4 patchlevel.h perl
302         ./perl  -e '($$r,$$p)=$$]=~/(\d+\.\d+).*\n\D*(\d+)/;' \
303                 -e 'print ".ds RP Release $$r Patchlevel $$p\n";' >perl.man
304         cat perl_man.[1-4] >>perl.man
305
306 install: all
307 # won't work with csh
308         export PATH || exit 1
309         - rm -f $(bin)/perl.old $(bin)/suidperl $(bin)/taintperl
310         - mv $(bin)/perl $(bin)/perl.old 2>/dev/null
311         - if test `pwd` != $(bin); then cp $(public) $(bin); fi
312         - cd $(bin); \
313 for pub in $(public); do \
314 chmod +x `basename $$pub`; \
315 done
316         - chmod 755 $(bin)/taintperl 2>/dev/null
317 !NO!SUBS!
318
319 case "$d_dosuid" in
320 *define*)
321     cat >>Makefile <<'!NO!SUBS!'
322         - chmod 4711 $(bin)/suidperl 2>/dev/null
323 !NO!SUBS!
324     ;;
325 esac
326
327 cat >>Makefile <<'!NO!SUBS!'
328         - test $(bin) = /usr/bin || rm -f /usr/bin/perl
329         - test $(bin) = /usr/bin || $(SLN) $(bin)/perl /usr/bin || cp $(bin)/perl /usr/bin
330         - chmod +x $(scripts)
331         - cp $(scripts) $(scriptdir)
332         - sh ./makedir $(privlib)
333         - \
334 if test `pwd` != $(privlib); then \
335 cp $(private) lib/*.pl $(privlib); \
336 fi
337 #       cd $(privlib); \
338 #for priv in $(private); do \
339 #chmod +x `basename $$priv`; \
340 #done
341         - if test `pwd` != $(mansrc); then \
342 for page in $(manpages); do \
343 cp $$page $(mansrc)/`basename $$page .man`.$(manext); \
344 done; \
345 fi
346         cd x2p; $(MAKE) install
347
348 clean:
349         rm -f *.o all perl taintperl suidperl perl.man
350         cd x2p; $(MAKE) clean
351
352 realclean:
353         cd x2p; $(MAKE) realclean
354         rm -f perl *.orig */*.orig *~ */*~ *.o core $(addedbyconf) perl.man
355         rm -f perl.c perly.h t/perl Makefile config.h makedepend makedir
356         rm -f x2p/Makefile
357
358 # The following lint has practically everything turned on.  Unfortunately,
359 # you have to wade through a lot of mumbo jumbo that can't be suppressed.
360 # If the source file has a /*NOSTRICT*/ somewhere, ignore the lint message
361 # for that spot.
362
363 lint: perl.c $(c)
364         lint $(lintflags) $(defs) perl.c $(c) > perl.fuzz
365
366 depend: makedepend
367         - test -f perly.h || cp /dev/null perly.h
368         ./makedepend
369         - test -s perly.h || /bin/rm -f perly.h
370         cd x2p; $(MAKE) depend
371
372 test: perl
373         - chmod +x t/TEST t/base.* t/comp.* t/cmd.* t/io.* t/op.*; \
374         cd t && (rm -f perl; $(SLN) ../perl .) && ./perl TEST
375
376 clist:
377         echo $(c) | tr ' ' '\012' >.clist
378
379 hlist:
380         echo $(h) | tr ' ' '\012' >.hlist
381
382 shlist:
383         echo $(sh) | tr ' ' '\012' >.shlist
384
385 # AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
386 $(obj):
387         @ echo "You haven't done a "'"make depend" yet!'; exit 1
388 makedepend: makedepend.SH
389         /bin/sh makedepend.SH
390 !NO!SUBS!
391 $eunicefix Makefile
392 case `pwd` in
393 *SH)
394     $rm -f ../Makefile
395     ln Makefile ../Makefile
396     ;;
397 esac