e6a0ef4d131a12a2c57ac67c5ec7cf5ec342faa5
[p5sagit/p5-mst-13.2.git] / Makefile.SH
1 #! /bin/sh
2 case $CONFIGDOTSH in
3 '')
4         if test -f config.sh; then TOP=.;
5         elif test -f ../config.sh; then TOP=..;
6         elif test -f ../../config.sh; then TOP=../..;
7         elif test -f ../../../config.sh; then TOP=../../..;
8         elif test -f ../../../../config.sh; then TOP=../../../..;
9         else
10                 echo "Can't find config.sh."; exit 1
11         fi
12         . $TOP/config.sh
13         ;;
14 esac
15 : This forces SH files to create target in same directory as SH file.
16 : This is so that make depend always knows where to find SH derivatives.
17 case "$0" in
18 */*) cd `expr X$0 : 'X\(.*\)/'` ;;
19 esac
20
21 case "$d_dosuid" in
22 *define*) suidperl='suidperl' ;;
23 *) suidperl='';;
24 esac
25
26 linklibperl='$(LIBPERL)'
27 shrpldflags='$(LDDLFLAGS)'
28 ldlibpth=''
29 DPERL_EXTERNAL_GLOB='-DPERL_EXTERNAL_GLOB'
30 case "$useshrplib" in
31 true)
32         # Prefix all runs of 'miniperl' and 'perl' with 
33         # $ldlibpth so that ./perl finds *this* shared libperl.
34         case "$LD_LIBRARY_PATH" in
35         '')
36                 ldlibpth="LD_LIBRARY_PATH=`pwd`";;
37         *)
38                 ldlibpth="LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}";;
39         esac
40
41         pldlflags="$cccdlflags"
42         case "${osname}${osvers}" in
43         next4*)
44                 ld=libtool
45                 lddlflags="-dynamic -undefined warning -framework System \
46                 -compatibility_version 1 -current_version $patchlevel \
47                 -prebind -seg1addr 0x27000000 -install_name \$(shrpdir)/\$@"
48                 ;;
49         rhapsody*|darwin*)
50                 shrpldflags="${ldflags} -dynamiclib \
51                              -compatibility_version 1 \
52                              -current_version \
53                                 ${api_version}.${api_subversion} \
54                              -image_base 0x4be00000 \
55                              -install_name \$(shrpdir)/\$@"
56                 ;;
57         cygwin*)
58                 linklibperl="-lperl"
59                 ;;
60         sunos*)
61                 linklibperl="-lperl"
62                 ;;
63         netbsd*|freebsd[234]*|openbsd*)
64                 linklibperl="-L. -lperl"
65                 ;;
66         aix*)
67                 shrpldflags="-H512 -T512 -bhalt:4 -bM:SRE -bE:perl.exp"
68                 case "$osvers" in
69                 3*)     shrpldflags="$shrpldflags -e _nostart"
70                         ;;
71                 *)      shrpldflags="$shrpldflags -b noentry"
72                         ;;
73                 esac
74                 shrpldflags="$shrpldflags $ldflags $perllibs $cryptlib"
75                 linklibperl="-L $archlibexp/CORE -L `pwd | sed 's/\/UU$//'` -lperl"
76                 ;;
77         hpux*)
78                 linklibperl="-L `pwd | sed 's/\/UU$//'` -Wl,+s -Wl,+b$archlibexp/CORE -lperl"
79                 ;;
80         os390*)
81             linklibperl='libperl.x'
82             DPERL_EXTERNAL_GLOB=''
83             ;;
84         esac
85         case "$ldlibpthname" in
86         '') ;;
87         *)
88             case "$osname" in
89             os2)
90                 ldlibpth=''
91                 ;;
92             *)
93                 eval "ldlibpth=\"$ldlibpthname=`pwd`:\$$ldlibpthname\""
94                 ;;
95             esac
96             # Strip off any trailing :'s
97             ldlibpth=`echo $ldlibpth | sed 's/:*$//'`
98             ;;
99         esac
100         ;;
101 *)      pldlflags=''
102         ;;
103 esac
104
105 : Prepare dependency lists for Makefile.
106 dynamic_list=' '
107 for f in $dynamic_ext; do
108     : the dependency named here will never exist
109       base=`echo "$f" | sed 's/.*\///'`
110     dynamic_list="$dynamic_list lib/auto/$f/$base.$dlext"
111 done
112
113 static_list=' '
114 for f in $static_ext; do
115         base=`echo "$f" | sed 's/.*\///'`
116         static_list="$static_list lib/auto/$f/$base\$(LIB_EXT)"
117 done
118
119 nonxs_list=' '
120 for f in $nonxs_ext; do
121     base=`echo "$f" | sed 's/.*\///'`
122     nonxs_list="$nonxs_list ext/$f/pm_to_blib"
123 done
124
125 echo "Extracting Makefile (with variable substitutions)"
126 $spitshell >Makefile <<!GROK!THIS!
127 # Makefile.SH
128 # This file is derived from Makefile.SH.  Any changes made here will
129 # be lost the next time you run Configure.
130 #  Makefile is used to generate $firstmakefile.  The only difference
131 #  is that $firstmakefile has the dependencies filled in at the end.
132 #
133 #
134 # I now supply perly.c with the kits, so don't remake perly.c without byacc
135 BYACC = $byacc
136 CC = $cc
137 LD = $ld
138
139 LDFLAGS = $ldflags
140 CLDFLAGS = $ldflags
141
142 mallocsrc = $mallocsrc
143 mallocobj = $mallocobj
144 LNS = $lns
145 CPS = $cp -f
146 RMS = rm -f
147 ranlib = $ranlib
148
149 # The following are mentioned only to make metaconfig include the
150 # appropriate questions in Configure.  If you want to change these,
151 # edit config.sh instead, or specify --man1dir=/wherever on
152 # installman commandline.
153 bin = $installbin
154 scriptdir = $scriptdir
155 shrpdir = $archlibexp/CORE
156 privlib = $installprivlib
157 man1dir = $man1dir
158 man1ext = $man1ext
159 man3dir = $man3dir
160 man3ext = $man3ext
161
162 # The following are used to build and install shared libraries for
163 # dynamic loading.
164 LDDLFLAGS = $lddlflags
165 SHRPLDFLAGS = $shrpldflags
166 CCDLFLAGS = $ccdlflags
167 DLSUFFIX = .$dlext
168 PLDLFLAGS = $pldlflags
169 LIBPERL = $libperl
170 LLIBPERL= $linklibperl
171 SHRPENV = $shrpenv
172
173 # The following is used to include the current directory in
174 # the dynamic loader path you are building a shared libperl.
175 LDLIBPTH = $ldlibpth
176
177 dynamic_ext = $dynamic_list
178 static_ext = $static_list
179 nonxs_ext = $nonxs_list
180 ext = \$(dynamic_ext) \$(static_ext) \$(nonxs_ext)
181 DYNALOADER = lib/auto/DynaLoader/DynaLoader\$(LIB_EXT)
182
183 libs = $perllibs $cryptlib
184
185 public = perl $suidperl utilities translators
186
187 shellflags = $shellflags
188
189 # This is set to  MAKE=$make if your $make command doesn't
190 # do it for you.
191 $make_set_make
192
193 # These variables may need to be manually set for non-Unix systems.
194 AR = $full_ar
195 EXE_EXT = $_exe
196 LIB_EXT = $_a
197 OBJ_EXT = $_o
198 PATH_SEP = $p_
199
200 FIRSTMAKEFILE = $firstmakefile
201
202 # Any special object files needed by this architecture, e.g. os2/os2.obj
203 ARCHOBJS = $archobjs
204
205 .SUFFIXES: .c \$(OBJ_EXT)
206
207 # grrr
208 SHELL = $sh
209
210 # how to tr(anslate) newlines
211 TRNL = '$trnl'
212
213 !GROK!THIS!
214 # not used by Makefile but by installperl;
215 # mentioned here so that metaconfig picks these up
216 # $installusrbinperl
217 # $versiononly
218
219
220 ## In the following dollars and backticks do not need the extra backslash.
221 $spitshell >>Makefile <<'!NO!SUBS!'
222
223 CCCMD = `sh $(shellflags) cflags $(LIBPERL) $@`
224
225 private = preplibrary lib/ExtUtils/Miniperl.pm lib/Config.pm
226
227 # Files to be built with variable substitution before miniperl
228 # is available.
229 sh = Makefile.SH cflags.SH config_h.SH makeaperl.SH makedepend.SH \
230         makedir.SH myconfig.SH writemain.SH pod/Makefile.SH
231
232 shextract = Makefile cflags config.h makeaperl makedepend \
233         makedir myconfig writemain pod/Makefile
234
235 # Files to be built with variable substitution after miniperl is
236 # available.  Dependencies handled manually below (for now).
237
238 pl = pod/pod2html.PL pod/pod2latex.PL pod/pod2man.PL pod/pod2text.PL \
239         pod/pod2usage.PL pod/podchecker.PL pod/podselect.PL \
240         pod/buildtoc.PL
241
242 # lib/lib.pm is not listed here because it has a rule of its own.
243 plextract = pod/pod2html pod/pod2latex pod/pod2man pod/pod2text \
244         pod/pod2usage pod/podchecker pod/podselect \
245         pod/buildtoc
246
247 addedbyconf = UU $(shextract) $(plextract) lib/lib.pm pstruct
248
249 h1 = EXTERN.h INTERN.h XSUB.h av.h config.h cop.h cv.h dosish.h
250 h2 = embed.h form.h gv.h handy.h hv.h keywords.h mg.h op.h
251 h3 = opcode.h patchlevel.h perl.h perlapi.h perly.h pp.h proto.h regcomp.h
252 h4 = regexp.h scope.h sv.h unixish.h util.h iperlsys.h thread.h
253 h5 = utf8.h warnings.h
254 h = $(h1) $(h2) $(h3) $(h4) $(h5)
255
256 c1 = $(mallocsrc) av.c scope.c op.c doop.c doio.c dump.c hv.c mg.c
257 c2 = perl.c perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c
258 c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c universal.c xsutils.c
259 c4 = globals.c perlio.c perlapi.c
260
261 c = $(c1) $(c2) $(c3) $(c4) miniperlmain.c perlmain.c
262
263 obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT)
264 obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT)
265 obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) xsutils$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT)
266
267 obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
268
269 # Once perl has been Configure'd and built ok you build different
270 # perl variants (Debugging, Embedded, Multiplicity etc) by saying:
271 #       make clean; make LIBPERL=libperl<type>.a
272 # where <type> is some combination of 'd' and(or) 'e' or 'm'.
273 # See cflags to understand how this works.
274 #
275 # This mechanism is getting clunky and might not even work any more.
276 # EMBEDDING is on by default, and MULTIPLICITY doesn't work.
277 #
278
279 lintflags = -hbvxac
280
281 .c$(OBJ_EXT):
282         $(CCCMD) $(PLDLFLAGS) $*.c
283
284 all: $(FIRSTMAKEFILE) miniperl extra.pods $(private) $(public) $(dynamic_ext) $(nonxs_ext)
285         @echo " ";
286         @echo " Everything is up to date. 'make test' to run test suite."
287
288 compile: all
289         echo "testing compilation" > testcompile;
290         cd utils;  $(MAKE) compile;
291         cd x2p; $(MAKE) compile; 
292         cd pod; $(MAKE) compile;
293
294 translators:    miniperl lib/Config.pm FORCE
295         @echo " "; echo "       Making x2p stuff"; cd x2p; $(LDLIBPTH) $(MAKE) all
296
297 utilities:      miniperl lib/Config.pm $(plextract) lib/lib.pm FORCE
298         @echo " "; echo "       Making utilities"; cd utils; $(LDLIBPTH) $(MAKE) all
299
300
301 # This is now done by installman only if you actually want the man pages.
302 #       @echo " "; echo "       Making docs"; cd pod; $(MAKE) all;
303
304 # Phony target to force checking subdirectories.
305 # Apparently some makes require an action for the FORCE target.
306 FORCE:
307         @sh -c true
308 !NO!SUBS!
309 $spitshell >>Makefile <<!GROK!THIS!
310
311 # We do a copy of the op.c instead of a symlink because gcc gets huffy
312 # if we have a symlink forest to another disk (it complains about too many
313 # levels of symbolic links, even if we have only two)
314
315 opmini\$(OBJ_EXT): op.c config.h
316         \$(RMS) opmini.c
317         \$(CPS) op.c opmini.c
318         \$(CCCMD) \$(PLDLFLAGS) $DPERL_EXTERNAL_GLOB opmini.c
319         \$(RMS) opmini.c
320
321 !GROK!THIS!
322 $spitshell >>Makefile <<'!NO!SUBS!'
323 miniperlmain$(OBJ_EXT): miniperlmain.c patchlevel.h
324         $(CCCMD) $(PLDLFLAGS) $*.c
325
326 perlmain.c: miniperlmain.c config.sh $(FIRSTMAKEFILE)
327         sh writemain $(DYNALOADER) $(static_ext) > writemain.tmp
328         sh mv-if-diff writemain.tmp perlmain.c
329
330 perlmain$(OBJ_EXT): perlmain.c
331         $(CCCMD) $(PLDLFLAGS) $*.c
332
333 # The file ext.libs is a list of libraries that must be linked in
334 # for static extensions, e.g. -lm -lgdbm, etc.  The individual
335 # static extension Makefile's add to it.
336 ext.libs: $(static_ext)
337         -@test -f ext.libs || touch ext.libs
338
339 !NO!SUBS!
340
341 # How to build libperl.  This is still rather convoluted.
342 # Load up custom Makefile.SH fragment for shared loading and executables:
343 case "$osname" in
344 *)
345         Makefile_s="$osname/Makefile.SHs"
346         ;;
347 esac
348
349 case "$osname" in
350 aix)
351         $spitshell >>Makefile <<!GROK!THIS!
352 LIBS                    = $perllibs
353 # In AIX we need to change this for building Perl itself from
354 # its earlier definition (which is for building external
355 # extensions *after* Perl has been built and installed)
356 CCDLFLAGS               = `echo $ccdlflags|sed -e 's@-bE:.*/perl\.exp@-bE:perl.exp@'`
357
358 !GROK!THIS!
359         case "$useshrplib" in
360         define|true|[yY]*)
361                 $spitshell >>Makefile <<'!NO!SUBS!'
362
363 LIBPERL_NONSHR          = libperl_nonshr$(LIB_EXT)
364 MINIPERL_NONSHR         = miniperl_nonshr$(EXE_EXT)
365
366 $(LIBPERL_NONSHR): perl$(OBJ_EXT) $(obj)
367         $(RMS) $(LIBPERL_NONSHR)
368         $(AR) rcu $(LIBPERL_NONSHR) perl$(OBJ_EXT) $(obj)
369
370 $(MINIPERL_NONSHR): $(LIBPERL_NONSHR) miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT)
371         $(CC) $(LDFLAGS) -o $(MINIPERL_NONSHR) miniperlmain$(OBJ_EXT) \
372             opmini$(OBJ_EXT) $(LIBPERL_NONSHR) $(LIBS)
373
374 MINIPERLEXP             = $(MINIPERL_NONSHR)
375
376 LIBPERLEXPORT           = perl.exp
377
378 !NO!SUBS!
379                 
380                 ;;
381         *)      
382                 $spitshell >>Makefile <<'!NO!SUBS!'
383 MINIPERLEXP             = miniperl$(EXE_EXT)
384
385 PERLEXPORT              = perl.exp
386
387 !NO!SUBS!
388         ;;
389         esac
390         $spitshell >>Makefile <<'!NO!SUBS!'
391 perl.exp: $(MINIPERLEXP) makedef.pl config.sh $(SYM) $(SYMH)
392         ./$(MINIPERLEXP) makedef.pl PLATFORM=aix | sort -u | sort -f > perl.exp.tmp
393         sh mv-if-diff perl.exp.tmp perl.exp
394
395 !NO!SUBS!
396         ;;
397 os2)
398         $spitshell >>Makefile <<'!NO!SUBS!'
399 MINIPERLEXP             = miniperl
400
401 perl5.def: $(MINIPERLEXP) makedef.pl config.sh $(SYM) $(SYMH) miniperl.map
402         ./$(MINIPERLEXP) makedef.pl PLATFORM=os2 -DPERL_DLL=$(PERL_DLL) > perl.exp.tmp
403         sh mv-if-diff perl.exp.tmp perl5.def
404
405 !NO!SUBS!
406         ;;
407 esac
408
409 if test -r $Makefile_s ; then
410         . $Makefile_s
411         $spitshell >>Makefile <<!GROK!THIS!
412
413 Makefile: $Makefile_s
414 !GROK!THIS!
415 else
416         $spitshell >>Makefile <<'!NO!SUBS!'
417 $(LIBPERL): $& perl$(OBJ_EXT) $(obj) $(LIBPERLEXPORT)
418 !NO!SUBS!
419         case "$useshrplib" in
420         true)
421                 $spitshell >>Makefile <<'!NO!SUBS!'
422         $(LD) $(SHRPLDFLAGS) -o $@ perl$(OBJ_EXT) $(obj)
423 !NO!SUBS!
424                 case "$osname" in
425                 aix)
426                         $spitshell >>Makefile <<'!NO!SUBS!'
427         rm -f libperl$(OBJ_EXT)
428         mv $@ libperl$(OBJ_EXT)
429         $(AR) qv $(LIBPERL) libperl$(OBJ_EXT)
430 !NO!SUBS!
431                         ;;
432                 esac
433                 ;;
434         *)
435                 $spitshell >>Makefile <<'!NO!SUBS!'
436         rm -f $(LIBPERL)
437         $(AR) rcu $(LIBPERL) perl$(OBJ_EXT) $(obj)
438         @$(ranlib) $(LIBPERL)
439 !NO!SUBS!
440                 ;;
441         esac
442         $spitshell >>Makefile <<'!NO!SUBS!'
443
444 # How to build executables.
445
446 # The $& notation tells Sequent machines that it can do a parallel make,
447 # and is harmless otherwise.
448 # The miniperl -w -MExporter line is a basic cheap test to catch errors
449 # before make goes on to run preplibrary and then MakeMaker on extensions.
450 # This is very handy because later errors are often caused by miniperl
451 # build problems but that's not obvious to the novice.
452 # The Module used here must not depend on Config or any extensions.
453
454 !NO!SUBS!
455
456         case "${osname}${osvers}" in
457         next4*)
458                 $spitshell >>Makefile <<'!NO!SUBS!'
459 miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
460         $(CC) -o miniperl `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
461             miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
462         $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
463 !NO!SUBS!
464                 ;;
465         aix*)
466                 $spitshell >>Makefile <<'!NO!SUBS!'
467 miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
468         $(CC) -o miniperl $(CLDFLAGS) \
469             `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \
470             miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perl$(OBJ_EXT) $(libs)
471         $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
472 !NO!SUBS!
473                 ;;
474         *)
475                 $spitshell >>Makefile <<'!NO!SUBS!'
476 miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
477         $(LDLIBPTH) $(CC) $(CLDFLAGS) -o miniperl \
478             miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LLIBPERL) $(libs)
479         $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '<?>' || $(MAKE) minitest
480 !NO!SUBS!
481                 ;;
482         esac
483
484         $spitshell >>Makefile <<'!NO!SUBS!'
485
486 perl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT)
487         $(SHRPENV) $(LDLIBPTH) $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
488
489 pureperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT)
490         $(SHRPENV) $(LDLIBPTH) purify $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o pureperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
491
492 purecovperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT)
493         $(SHRPENV) $(LDLIBPTH) purecov $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o purecovperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
494
495 quantperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT)
496         $(SHRPENV) $(LDLIBPTH) quantify $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o quantperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
497
498 # This version, if specified in Configure, does ONLY those scripts which need
499 # set-id emulation.  Suidperl must be setuid root.  It contains the "taint"
500 # checks as well as the special code to validate that the script in question
501 # has been invoked correctly.
502
503 suidperl: $& sperl$(OBJ_EXT) perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT)
504         $(SHRPENV) $(LDLIBPTH) $(CC) $(CLDFLAGS) $(CCDLFLAGS) -o suidperl perlmain$(OBJ_EXT) sperl$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
505
506 !NO!SUBS!
507
508 fi
509
510 $spitshell >>Makefile <<'!NO!SUBS!'
511
512 sperl$(OBJ_EXT): perl.c $(h)
513         $(RMS) sperl.c
514         $(LNS) perl.c sperl.c
515         $(CCCMD) -DIAMSUID sperl.c
516         $(RMS) sperl.c
517
518 # We have to call our ./makedir because Ultrix 4.3 make can't handle the line
519 #       test -d lib/auto || mkdir lib/auto
520 #
521 preplibrary: miniperl lib/Config.pm
522         @sh ./makedir lib/auto
523         @echo " AutoSplitting perl library"
524         $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \
525                 autosplit_lib_modules(@ARGV)' lib/*.pm lib/*/*.pm
526
527 # Take care to avoid modifying lib/Config.pm without reason
528 # (If trying to create a new port and having problems with the configpm script, 
529 # try 'make minitest' and/or commenting out the tests at the end of configpm.)
530 lib/Config.pm: config.sh miniperl configpm lib/re.pm
531         $(LDLIBPTH) ./miniperl configpm configpm.tmp
532         sh mv-if-diff configpm.tmp $@
533
534 lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl minimod.pl lib/Config.pm
535         $(LDLIBPTH) ./miniperl minimod.pl > minimod.tmp
536         sh mv-if-diff minimod.tmp $@
537
538 lib/re.pm: ext/re/re.pm
539         rm -f $@
540         cat ext/re/re.pm > $@
541
542 $(plextract):   miniperl lib/Config.pm
543         $(LDLIBPTH) ./miniperl -Ilib $@.PL
544
545 lib/lib.pm:     miniperl lib/Config.pm
546         $(LDLIBPTH) ./miniperl -Ilib lib/lib_pm.PL
547
548 extra.pods: miniperl
549         -@test -f extra.pods && rm -f `cat extra.pods`
550         -@rm -f extra.pods
551         -@for x in `grep -l '^=[a-z]' README.* | grep -v README.vms` ; do \
552             nx=`echo $$x | sed -e "s/README\.//"`; \
553             cd pod ; $(LNS) ../$$x "perl"$$nx".pod" ; cd .. ; \
554             echo "pod/perl"$$nx".pod" >> extra.pods ; \
555         done
556         -@test -f vms/perlvms.pod && cd pod && $(LNS) ../vms/perlvms.pod perlvms.pod && cd .. && echo "pod/perlvms.pod" >> extra.pods
557
558 install-strip:
559         $(MAKE) STRIPFLAGS=-s install
560
561 install:
562         $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS)
563
564 install-verbose:
565         $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) INSTALLFLAGS=-V
566
567 install-silent:
568         $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) INSTALLFLAGS=-S
569
570 no-install:
571         $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) INSTALLFLAGS=-n
572
573 install.perl:   all installperl
574         if [ -n "$(COMPILE)" ]; \
575         then \
576                 cd utils; $(MAKE) compile; \
577                 cd ../x2p; $(MAKE) compile; \
578                 cd ../pod; $(MAKE) compile; \
579         else :; \
580         fi
581         $(LDLIBPTH) ./perl installperl $(INSTALLFLAGS) $(STRIPFLAGS)
582
583 install.man:    all installman
584         $(LDLIBPTH) ./perl installman $(INSTALLFLAGS)
585
586 # XXX Experimental. Hardwired values, but useful for testing.
587 # Eventually Configure could ask for some of these values.
588 install.html: all installhtml
589         -@test -f README.vms && cd vms && $(LNS) ../README.vms README_vms.pod && cd ..
590         $(LDLIBPTH) ./perl installhtml                   \
591       --podroot=. --podpath=. --recurse  \
592       --htmldir=$(privlib)/html     \
593       --htmlroot=$(privlib)/html    \
594       --splithead=pod/perlipc     \
595       --splititem=pod/perlfunc    \
596       --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \
597       --verbose
598
599
600 # I now supply perly.c with the kits, so the following section is
601 # used only if you force byacc to run by saying
602 #       make run_byacc
603 # Since we patch up the byacc output, the perly.fixer script needs
604 # to run with precisely the same version of byacc as I use.  You
605 # normally shouldn't remake perly.[ch].
606
607 run_byacc:      FORCE
608         $(BYACC) -d perly.y
609         -chmod 664 perly.c perly.h
610         sh $(shellflags) ./perly.fixer y.tab.c perly.c
611         sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
612             -e 's/y\.tab/perly/g' perly.c >perly.tmp && mv perly.tmp perly.c
613         sed -e '/^extern YYSTYPE yy/D' y.tab.h >yh.tmp && mv yh.tmp y.tab.h
614         cmp -s y.tab.h perly.h && rm -f y.tab.h || mv y.tab.h perly.h
615         chmod 664 vms/perly_c.vms vms/perly_h.vms
616         perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms vms/perly_h.vms
617
618 # We don't want to regenerate perly.c and perly.h, but they might
619 # appear out-of-date after a patch is applied or a new distribution is
620 # made.
621 perly.c: perly.y
622         -@sh -c true
623
624 perly.h: perly.y
625         -@sh -c true
626
627 PERLYVMS = vms/perly_c.vms vms/perly_h.vms
628
629 $(PERLYVMS):    perly.c perly.h vms/vms_yfix.pl
630         perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms vms/perly_h.vms
631
632 # No compat3.sym here since and including the 5.004_50.
633 # No interp.sym since 5.005_03.
634 SYM  = global.sym globvar.sym perlio.sym pp.sym
635
636 SYMH = perlvars.h intrpvar.h thrdvar.h
637
638 CHMOD_W = chmod +w
639
640 # The following files are generated automatically
641 #       keywords.pl:    keywords.h
642 #       opcode.pl:      opcode.h opnames.h pp_proto.h pp.sym
643 # [* embed.pl needs pp.sym generated by opcode.pl! *]
644 #       embed.pl:       proto.h embed.h embedvar.h global.sym objXSUB.h
645 #                       perlapi.h perlapi.c pod/perlintern.pod
646 #                       pod/perlapi.pod
647 #       bytecode.pl:    ext/ByteLoader/byterun.h ext/ByteLoader/byterun.c
648 #                       ext/B/B/Asmdata.pm
649 #       regcomp.pl:     regnodes.h
650 #       warnings.pl:    warnings.h lib/warnings.pm
651 # The correct versions should be already supplied with the perl kit,
652 # in case you don't have perl available.
653 # To force them to be regenerated, type
654 #       make regen_headers
655
656 keywords.h:     keywords.pl
657         -perl keywords.pl
658
659 OPCODE_PL_OUTPUT = opcode.h opnames.h pp_proto.h pp.sym
660
661 $(OPCODE_PL_OUTPUT): opcode.pl
662         -perl opcode.pl
663
664 # Really the prerequisites for the next rule  should only be "embed.pl pp.sym"
665 # Writing it this way gives make a big hint to always run opcode.pl before
666 # embed.pl. The alternative - running embed.pl then opcode.pl causes embed.pl
667 # to be re-run next make invocation, and then all object files get recompiled.
668
669 proto.h embed.h embedvar.h global.sym objXSUB.h perlapi.h perlapi.c pod/perlintern.pod pod/perlapi.pod: embed.pl $(OPCODE_PL_OUTPUT)
670         -perl embed.pl
671
672 ext/ByteLoader/byterun.h ext/ByteLoader/byterun.c ext/B/B/Asmdata.pm: bytecode.pl
673         -perl bytecode.pl
674
675 regnodes.h:     regcomp.pl
676         -perl regcomp.pl
677
678 warnings.h lib/warnings.pm: warnings.pl
679         -perl warnings.pl
680
681 AUTOGEN_FILES = keywords.h opcode.h opnames.h pp_proto.h pp.sym proto.h \
682                 embed.h embedvar.h global.sym \
683                 pod/perlintern.pod pod/perlapi.pod \
684                 objXSUB.h perlapi.h perlapi.c ext/ByteLoader/byterun.h \
685                 ext/ByteLoader/byterun.c ext/B/B/Asmdata.pm regnodes.h \
686                 warnings.h lib/warnings.pm
687
688 regen_headers:  FORCE
689         -$(CHMOD_W) $(AUTOGEN_FILES)
690         -perl keywords.pl
691         -perl opcode.pl
692         -perl embed.pl
693         -perl bytecode.pl
694         -perl regcomp.pl
695         -perl warnings.pl
696
697 regen_pods:     FORCE
698         -cd pod; $(LDLIBPTH) make regen_pods
699
700 regen_all: $(PERLYVMS) regen_headers regen_pods
701
702 # Extensions:
703 # Names added to $(dynamic_ext) or $(static_ext) or $(nonxs_ext) will
704 # automatically get built.  There should ordinarily be no need to change
705 # any of this part of makefile.
706 #
707 # The dummy dependency is a place holder in case $(dynamic_ext) or
708 # $(static_ext) is empty.
709 #
710 # DynaLoader may be needed for extensions that use Makefile.PL.
711
712 $(DYNALOADER):  miniperl preplibrary FORCE
713         @$(LDLIBPTH) sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
714
715 d_dummy $(dynamic_ext): miniperl preplibrary $(DYNALOADER) FORCE
716         @$(LDLIBPTH) sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
717
718 s_dummy $(static_ext):  miniperl preplibrary $(DYNALOADER) FORCE
719         @$(LDLIBPTH) sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
720
721 n_dummy $(nonxs_ext):   miniperl preplibrary $(DYNALOADER) FORCE
722         @$(LDLIBPTH) sh ext/util/make_ext nonxs $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
723
724 clean:          _tidy _mopup
725
726 realclean:      _realcleaner _mopup
727         @echo "Note that make realclean does not delete config.sh or Policy.sh"
728
729 _clobber:
730         rm -f config.sh cppstdin Policy.sh
731
732 clobber:        _realcleaner _mopup _clobber
733
734 distclean:      clobber
735
736 # Like distclean but also removes emacs backups and *.orig.
737 veryclean:      _verycleaner _mopup _clobber
738         -@rm -f Obsolete Wanted
739
740 # Do not 'make _mopup' directly.
741 _mopup:
742         rm -f *$(OBJ_EXT) *$(LIB_EXT) all perlmain.c
743         -@test -f extra.pods && rm -f `cat extra.pods`
744         -@test -f vms/README_vms.pod && rm -f vms/README_vms.pod
745         -rm -f perl.exp ext.libs extra.pods opmini.o
746         -rm -f perl.export perl.dll perl.libexp perl.map perl.def
747         -rm -f perl.loadmap miniperl.loadmap perl.prelmap miniperl.prelmap
748         rm -f perl suidperl miniperl $(LIBPERL) libperl.* microperl
749
750 # Do not 'make _tidy' directly.
751 _tidy:
752         -cd pod; $(LDLIBPTH) $(MAKE) clean
753         -cd utils; $(LDLIBPTH) $(MAKE) clean
754         -cd x2p; $(LDLIBPTH) $(MAKE) clean
755         -@for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) $(nonxs_ext) ; do \
756         $(LDLIBPTH) sh ext/util/make_ext clean $$x MAKE=$(MAKE) ; \
757         done
758         rm -f testcompile compilelog
759
760 _cleaner1:
761         -cd os2; rm -f Makefile
762         -cd pod; $(LDLIBPTH) $(MAKE) $(CLEAN)
763         -cd utils; $(LDLIBPTH) $(MAKE) $(CLEAN)
764         -cd x2p; $(LDLIBPTH) $(MAKE) $(CLEAN)
765         -@for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) $(nonxs_ext) ; do \
766         $(LDLIBPTH) sh ext/util/make_ext $(CLEAN) $$x MAKE=$(MAKE) ; \
767         done
768
769 _cleaner2:
770         rm -f core core.*perl.*.? *perl.core t/core t/core.perl.*.? t/*perl.core t/misctmp* t/forktmp* t/tmp* t/c t/perl t/rantests .?*.c so_locations $(LIBPERL_NONSHR) $(MINIPERL_NONSHR)
771         rm -rf $(addedbyconf)
772         rm -f $(FIRSTMAKEFILE) $(FIRSTMAKEFILE).old
773         rm -f $(private)
774         rm -rf lib/auto
775         rm -f lib/.exists lib/*/.exists lib/*/*/.exists
776         rm -f h2ph.man pstruct
777         rm -rf .config
778         rm -f testcompile compilelog
779         -rmdir lib/B lib/Data lib/Encode lib/IO/Socket lib/IO lib/Filter/Util lib/Sys lib/Thread
780
781 _realcleaner: 
782         @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=realclean
783         @$(LDLIBPTH) $(MAKE) _cleaner2
784
785 _verycleaner: 
786         @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=veryclean
787         @$(LDLIBPTH) $(MAKE) _cleaner2
788         -rm -f *~ *.orig */*~ */*.orig */*/*~ */*/*.orig
789
790 # The following lint has practically everything turned on.  Unfortunately,
791 # you have to wade through a lot of mumbo jumbo that can't be suppressed.
792 # If the source file has a /*NOSTRICT*/ somewhere, ignore the lint message
793 # for that spot.
794
795 lint: $(c)
796         lint $(lintflags) $(defs) perly.c $(c) > perl.fuzz
797
798 # Need to unset during recursion to go out of loop.
799 # The README below ensures that the dependency list is never empty and
800 # that when MAKEDEPEND is empty $(FIRSTMAKEFILE) doesn't need rebuilding.
801
802 MAKEDEPEND = Makefile makedepend
803
804 $(FIRSTMAKEFILE):       README $(MAKEDEPEND)
805         $(MAKE) depend MAKEDEPEND=
806
807 config.h: config_h.SH config.sh
808         $(SHELL) config_h.SH
809
810 # When done, touch perlmain.c so that it doesn't get remade each time.
811 depend: makedepend
812         sh ./makedepend MAKE=$(MAKE)
813         - test -s perlmain.c && touch perlmain.c
814         cd x2p; $(MAKE) depend
815
816 # Cannot postpone this until $firstmakefile is ready ;-)
817 makedepend: makedepend.SH config.sh
818         sh ./makedepend.SH
819
820 # Cannot delegate rebuilding of t/perl to make to allow interlaced
821 # test and minitest
822 test-prep: miniperl perl preplibrary utilities $(dynamic_ext) $(nonxs_ext) $(TEST_PERL_DLL)
823         cd t && (rm -f perl$(EXE_EXT); $(LNS) ../perl$(EXE_EXT) perl$(EXE_EXT))
824
825 # Second branch is for testing without a tty or controling terminal.
826 # See t/op/stat.t
827 test check: test-prep
828         if (true </dev/tty) >/dev/null 2>&1; then \
829           cd t && $(LDLIBPTH) ./perl TEST </dev/tty; \
830         else \
831           cd t && PERL_SKIP_TTY_TEST=1 $(LDLIBPTH) ./perl TEST; \
832         fi
833         @echo "Ran tests" > t/rantests
834
835 utest ucheck: test-prep
836         if (true </dev/tty) >/dev/null 2>&1; then \
837           cd t && $(LDLIBPTH) ./perl UTEST </dev/tty; \
838         else \
839           cd t && PERL_SKIP_TTY_TEST=1 $(LDLIBPTH) ./perl UTEST; \
840         fi
841
842 # For testing without a tty or controling terminal. See t/op/stat.t
843 test-notty: test-prep
844         cd t && PERL_SKIP_TTY_TEST=1 $(LDLIBPTH) ./perl TEST
845
846 # Can't depend on lib/Config.pm because that might be where miniperl
847 # is crashing.
848 minitest: miniperl lib/re.pm
849         @echo "You may see some irrelevant test failures if you have been unable"
850         @echo "to build lib/Config.pm."
851         - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../miniperl$(EXE_EXT) perl$(EXE_EXT)) \
852                 && $(LDLIBPTH) ./perl TEST base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t </dev/tty
853
854 # Handy way to run perlbug -ok without having to install and run the
855 # installed perlbug. We don't re-run the tests here - we trust the user.
856 # Please *don't* use this unless all tests pass.
857 # If you want to report test failures, use "make nok" instead.
858 ok:     utilities
859         $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)'
860
861 okfile: utilities
862         $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -F perl.ok
863
864 oknack: utilities
865         $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -A
866
867 okfilenack:     utilities
868         $(LDLIBPTH) ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)' -F perl.ok -A
869
870 nok:    utilities
871         $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)'
872
873 nokfile:        utilities
874         $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)' -F perl.nok
875
876 noknack:        utilities
877         $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)' -A
878
879 nokfilenack:    utilities
880         $(LDLIBPTH) ./perl -Ilib utils/perlbug -nok -s '(UNINSTALLED)' -F perl.nok -A
881
882 clist:  $(c)
883         echo $(c) | tr ' ' $(TRNL) >.clist
884
885 hlist:  $(h)
886         echo $(h) | tr ' ' $(TRNL) >.hlist
887
888 shlist: $(sh)
889         echo $(sh) | tr ' ' $(TRNL) >.shlist
890
891 pllist: $(pl)
892         echo $(pl) | tr ' ' $(TRNL) >.pllist
893
894 Makefile: Makefile.SH ./config.sh
895         $(SHELL) Makefile.SH
896
897 distcheck: FORCE
898         perl '-MExtUtils::Manifest=&fullcheck' -e 'fullcheck()'
899
900 elc:    emacs/cperl-mode.elc
901
902 emacs/cperl-mode.elc: emacs/cperl-mode.el
903         -cd emacs; emacs -batch -q -no-site-file -f batch-byte-compile cperl-mode.el
904
905 etags:  TAGS
906
907 TAGS: emacs/cperl-mode.elc
908         sh emacs/ptags
909
910 ctags:  tags
911
912 # Let's hope make will not go into an infinite loop on case-unsensitive systems
913 # This may also fail if . is in the head of the path, since perl will
914 # require -Ilib
915 tags:   TAGS
916         perl emacs/e2ctags.pl TAGS > tags
917
918 # AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
919 # If this runs make out of memory, delete /usr/include lines.
920 !NO!SUBS!
921
922 $eunicefix Makefile
923 case `pwd` in
924 *SH)
925     $rm -f ../Makefile
926     $ln Makefile ../Makefile
927     ;;
928 esac
929 $rm -f $firstmakefile
930
931 # Now do any special processing required before building.
932
933 case "$ebcdic" in
934 $define)
935     xxx=''
936     echo "This is an EBCDIC system, checking if any parser files need regenerating." >&4
937 case "$osname" in
938 os390|posix-bc)
939     rm -f y.tab.c y.tab.h
940     # yacc must be a reentrant ("pure") Bison in BS2000 Posix!
941     yacc -d perly.y >/dev/null 2>&1
942     if cmp -s y.tab.c perly.c; then
943         rm -f y.tab.c
944     else
945         echo "perly.y -> perly.c" >&2
946         mv -f y.tab.c perly.c
947         chmod u+w perly.c
948         sed -e '/^#include "perl\.h"/a\
949 \
950 #define yydebug    PL_yydebug\
951 #define yynerrs    PL_yynerrs\
952 #define yyerrflag  PL_yyerrflag\
953 #define yychar     PL_yychar\
954 #define yyval      PL_yyval\
955 #define yylval     PL_yylval'                           \
956             -e '/YYSTYPE *yyval;/D'                     \
957             -e '/YYSTYPE *yylval;/D'                    \
958             -e '/int  yychar,/,/yynerrs;/D'             \
959             -e 's/int yydebug = 0;/yydebug = 0;/'       \
960             -e 's/[^_]realloc(/PerlMem_realloc(/g'      \
961             -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
962             -e 's/y\.tab/perly/g' perly.c >perly.tmp && mv perly.tmp perly.c
963         xxx="$xxx perly.c"
964     fi
965     if cmp -s y.tab.h perly.h; then
966         rm -f y.tab.h
967     else
968         echo "perly.y -> perly.h" >&2
969         mv -f y.tab.h perly.h
970         xxx="$xxx perly.h"
971     fi
972     if cd x2p
973     then
974         rm -f y.tab.c y.tab.h
975         case "$osname" in
976         posix-bc)
977            # we are using two different yaccs in BS2000 Posix!
978            byacc a2p.y >/dev/null 2>&1
979            ;;
980         *) # e.g. os390
981            yacc  a2p.y >/dev/null 2>&1
982            ;;
983         esac
984         if cmp -s y.tab.c a2p.c
985         then
986             rm -f y.tab.c
987         else
988             echo "a2p.y -> a2p.c" >&2
989             mv -f y.tab.c a2p.c
990             chmod u+w a2p.c
991             sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
992                 -e 's/y\.tab/a2p/g' a2p.c >a2p.tmp && mv a2p.tmp a2p.c
993             xxx="$xxx a2p.c"
994         fi
995         # In case somebody yacc -d:ed the a2p.y.
996         if test -f y.tab.h
997         then
998             if cmp -s y.tab.h a2p.h
999             then
1000                 rm -f y.tab.h
1001             else
1002                 echo "a2p.h -> a2p.h" >&2
1003                 mv -f y.tab.h a2p.h
1004                 xxx="$xxx a2p.h"
1005             fi
1006         fi
1007         cd ..
1008     fi
1009     ;;
1010 vmesa)
1011     # Do nothing in VM/ESA.
1012     ;;
1013 *)
1014     echo "'$osname' is an EBCDIC system I don't know that well." >&4
1015     ;;
1016 esac
1017     case "$xxx" in
1018     '') echo "No parser files were regenerated.  That's okay." >&2 ;;
1019     esac
1020     ;;
1021 esac
1022