Resolve against mainline
[p5sagit/p5-mst-13.2.git] / Makefile.SH
old mode 100755 (executable)
new mode 100644 (file)
index a31db2a..d334525
@@ -1,3 +1,4 @@
+#! /bin/sh
 case $CONFIG in
 '')
        if test -f config.sh; then TOP=.;
@@ -22,27 +23,41 @@ case "$d_dosuid" in
 *) suidperl='';;
 esac
 
-shrpdir=$archlibexp/CORE
-
+linklibperl='$(LIBPERL)'
+shrpldflags='$(LDDLFLAGS)'
 case "$useshrplib" in
 true)
-    pldlflags="$cccdlflags"
-    case "$osname" in 
-    os2)       shrpenv='' ;;
-       *)              shrpenv="env LD_RUN_PATH=$shrpdir";;
-       esac
+       pldlflags="$cccdlflags"
+       # NeXT-4 specific stuff.  Can't we do this in the hint file?
        case "${osname}${osvers}" in
        next4*)
-               # Can't we do this in the hint file?
-               ld='libtool -dynamic -undefined warning -framework System \
-               -compatibility_version 1 -current_version $(PATCHLEVEL) \
-               -prebind -seg1addr 0x27000000 -install_name $(SHRPDIR)/$@'
+               ld=libtool
+               lddlflags="-dynamic -undefined warning -framework System \
+               -compatibility_version 1 -current_version $patchlevel \
+               -prebind -seg1addr 0x27000000 -install_name \$(shrpdir)/\$@"
+               ;;
+       sunos*|freebsd[23]*|netbsd*)
+               linklibperl="-lperl"
+               ;;
+       aix*)
+               shrpldflags="-H512 -T512 -bhalt:4 -bM:SRE -bE:perl.exp"
+               case "$osvers" in
+               3*)
+                       shrpldflags="$shrpldflags -e _nostart $ldflags $libs $cryptlib"
+                       ;;
+               *)
+                       shrpldflags="$shrpldflags -b noentry $ldflags $libs $cryptlib"
+                       ;;
+               esac
+               aixinstdir=`pwd | sed 's/\/UU$//'`
+               linklibperl="-L $archlibexp/CORE -L $aixinstdir -lperl"
+               ;;
+       hpux10*)
+               linklibperl="-L `pwd | sed 's/\/UU$//'` -Wl,+b$archlibexp/CORE -lperl"
                ;;
        esac
-    ;;
-*)
-       pldlflags=''
-       shrpenv=''
+       ;;
+*)     pldlflags=''
        ;;
 esac
 
@@ -101,10 +116,12 @@ man3ext = $man3ext
 # The following are used to build and install shared libraries for
 # dynamic loading.
 LDDLFLAGS = $lddlflags
+SHRPLDFLAGS = $shrpldflags
 CCDLFLAGS = $ccdlflags
 DLSUFFIX = .$dlext
 PLDLFLAGS = $pldlflags
 LIBPERL = $libperl
+LLIBPERL= $linklibperl
 SHRPENV = $shrpenv
 
 dynamic_ext = $dynamic_list
@@ -169,7 +186,7 @@ addedbyconf = UU $(shextract) $(plextract) pstruct
 h1 = EXTERN.h INTERN.h XSUB.h av.h config.h cop.h cv.h dosish.h
 h2 = embed.h form.h gv.h handy.h hv.h keywords.h mg.h op.h
 h3 = opcode.h patchlevel.h perl.h perly.h pp.h proto.h regcomp.h
-h4 = regexp.h scope.h sv.h unixish.h util.h perlio.h
+h4 = regexp.h scope.h sv.h unixish.h util.h perlio.h thread.h
 h = $(h1) $(h2) $(h3) $(h4)
 
 c1 = $(mallocsrc) av.c scope.c op.c doop.c doio.c dump.c hv.c mg.c
@@ -217,18 +234,6 @@ utilities: miniperl lib/Config.pm FORCE
 FORCE:
        @sh -c true
 
-# The $& notation tells Sequent machines that it can do a parallel make,
-# and is harmless otherwise.
-# The miniperl -w -MExporter line is a basic cheap test to catch errors
-# before make goes on to run preplibrary and then MakeMaker on extensions.
-# This is very handy because later errors are often caused by miniperl
-# build problems but that's not obvious to the novice.
-# The Module used here must not depend on Config or any extensions.
-
-miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL)
-       $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain$(OBJ_EXT) $(LIBPERL) $(libs)
-       @./miniperl -w -Ilib -MExporter -e 0 || $(MAKE) minitest
-
 miniperlmain$(OBJ_EXT): miniperlmain.c
        $(CCCMD) $(PLDLFLAGS) $*.c
 
@@ -245,19 +250,10 @@ perlmain$(OBJ_EXT): perlmain.c
 ext.libs: $(static_ext)
        -@test -f ext.libs || touch ext.libs
 
-perl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs
-       $(SHRPENV) $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LIBPERL) `cat ext.libs` $(libs)
-
-pureperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs
-       purify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o pureperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LIBPERL) `cat ext.libs` $(libs)
-
-quantperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs
-       quantify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o quantperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LIBPERL) `cat ext.libs` $(libs)
-
-$(LIBPERL): $& perl$(OBJ_EXT) $(obj)
 !NO!SUBS!
+
 # How to build libperl.  This is still rather convoluted.
-# Load up custom Makefile.SH fragments?
+# Load up custom Makefile.SH fragment for shared loading and executables:
 if test -r $osname/Makefile.SHs ; then
        . $osname/Makefile.SHs
        $spitshell >>Makefile <<!GROK!THIS!
@@ -265,11 +261,22 @@ if test -r $osname/Makefile.SHs ; then
 Makefile: $osname/Makefile.SHs
 !GROK!THIS!
 else
+       $spitshell >>Makefile <<'!NO!SUBS!'
+$(LIBPERL): $& perl$(OBJ_EXT) $(obj)
+!NO!SUBS!
        case "$useshrplib" in
        true)
                $spitshell >>Makefile <<'!NO!SUBS!'
-       $(LD) $(LDDLFLAGS) -o $@ perl$(OBJ_EXT) $(obj)
+       $(LD) $(SHRPLDFLAGS) -o $@ perl$(OBJ_EXT) $(obj)
+!NO!SUBS!
+               case "$osname" in
+               aix)
+                       $spitshell >>Makefile <<'!NO!SUBS!'
+       mv $@ libperl$(OBJ_EXT)
+       $(AR) qv $(LIBPERL) libperl$(OBJ_EXT)
 !NO!SUBS!
+                       ;;
+               esac
                ;;
        *)
                $spitshell >>Makefile <<'!NO!SUBS!'
@@ -279,9 +286,33 @@ else
 !NO!SUBS!
                ;;
        esac
-fi
-               
-$spitshell >>Makefile <<'!NO!SUBS!'
+       $spitshell >>Makefile <<'!NO!SUBS!'
+
+# How to build executables.
+
+# The $& notation tells Sequent machines that it can do a parallel make,
+# and is harmless otherwise.
+# The miniperl -w -MExporter line is a basic cheap test to catch errors
+# before make goes on to run preplibrary and then MakeMaker on extensions.
+# This is very handy because later errors are often caused by miniperl
+# build problems but that's not obvious to the novice.
+# The Module used here must not depend on Config or any extensions.
+
+miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL)
+       $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain$(OBJ_EXT) $(LLIBPERL) $(libs)
+       @./miniperl -w -Ilib -MExporter -e 0 || $(MAKE) minitest
+
+perl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs
+       $(SHRPENV) $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
+
+pureperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs
+       $(SHRPENV) purify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o pureperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
+
+purecovperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs
+       $(SHRPENV) purecov $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o purecovperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
+
+quantperl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs
+       $(SHRPENV) quantify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o quantperl perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
 
 # This version, if specified in Configure, does ONLY those scripts which need
 # set-id emulation.  Suidperl must be setuid root.  It contains the "taint"
@@ -289,7 +320,13 @@ $spitshell >>Makefile <<'!NO!SUBS!'
 # has been invoked correctly.
 
 suidperl: $& sperl$(OBJ_EXT) perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs
-       $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o suidperl perlmain$(OBJ_EXT) sperl$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) `cat ext.libs` $(libs)
+       $(SHRPENV) $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o suidperl perlmain$(OBJ_EXT) sperl$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
+
+!NO!SUBS!
+
+fi
+
+$spitshell >>Makefile <<'!NO!SUBS!'
 
 sperl$(OBJ_EXT): perl.c perly.h patchlevel.h $(h)
        $(RMS) sperl.c
@@ -307,6 +344,8 @@ preplibrary: miniperl lib/Config.pm $(plextract)
                autosplit_lib_modules(@ARGV)' lib/*.pm lib/*/*.pm
 
 # Take care to avoid modifying lib/Config.pm without reason
+# (If trying to create a new port and having problems with the configpm script, 
+# try 'make minitest' and/or commenting out the tests at the end of configpm.)
 lib/Config.pm: config.sh miniperl configpm
        ./miniperl configpm tmp
        sh mv-if-diff tmp lib/Config.pm
@@ -315,7 +354,7 @@ lib/ExtUtils/Miniperl.pm: miniperlmain.c miniperl minimod.pl lib/Config.pm
        ./miniperl minimod.pl > tmp && mv tmp $@
 
 $(plextract):  miniperl lib/Config.pm
-       ./miniperl -Ilib $@.PL
+       `echo ./miniperl -Ilib $@.PL`
 
 install: all install.perl install.man
 
@@ -325,9 +364,18 @@ install.perl:      all installperl
 install.man:   all installman
        ./perl installman
 
-# Not implemented yet.
-#install.html: all installhtml
-#      ./perl installhtml
+# XXX Experimental. Hardwired values, but useful for testing.
+# Eventually Configure could ask for some of these values.
+install.html: all installhtml
+       ./perl installhtml                   \
+      --podroot=. --podpath=. --recurse  \
+      --htmldir=$(privlib)/html     \
+      --htmlroot=$(privlib)/html    \
+      --splithead=pod/perlipc     \
+      --splititem=pod/perlfunc    \
+      --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \
+      --verbose
+
 
 # I now supply perly.c with the kits, so the following section is
 # used only if you force byacc to run by saying
@@ -337,13 +385,16 @@ install.man:      all installman
 # normally shouldn't remake perly.[ch].
 
 run_byacc:     FORCE
-       @ echo 'Expect' 130 shift/reduce and 1 reduce/reduce conflict
+       @ echo 'Expect' 113 shift/reduce and 1 reduce/reduce conflict
        $(BYACC) -d perly.y
+       chmod 664 perly.c
        sh $(shellflags) ./perly.fixer y.tab.c perly.c
-       sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' perly.c >perly.tmp && mv perly.tmp perly.c
-       mv y.tab.h perly.h
-       echo 'extern YYSTYPE yylval;' >>perly.h
-       - perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms vms/perly_h.vms
+       sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
+           -e 's/y\.tab/perly/g' perly.c >perly.tmp && mv perly.tmp perly.c
+       echo 'extern YYSTYPE yylval;' >>y.tab.h
+       cmp -s y.tab.h perly.h && rm -f y.tab.h || mv y.tab.h perly.h
+       chmod 664 vms/perly_c.vms vms/perly_h.vms
+       perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms vms/perly_h.vms
 
 # We don't want to regenerate perly.c and perly.h, but they might
 # appear out-of-date after a patch is applied or a new distribution is
@@ -378,33 +429,48 @@ regen_headers:    FORCE
 # DynaLoader may be needed for extensions that use Makefile.PL.
 
 $(DYNALOADER): miniperl preplibrary FORCE
-       @sh ext/util/make_ext static $@ LIBPERL_A=$(LIBPERL)
+       @sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
 
 d_dummy $(dynamic_ext):        miniperl preplibrary $(DYNALOADER) FORCE
-       @sh ext/util/make_ext dynamic $@ LIBPERL_A=$(LIBPERL)
+       @sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
 
 s_dummy $(static_ext): miniperl preplibrary $(DYNALOADER) FORCE
-       @sh ext/util/make_ext static $@ LIBPERL_A=$(LIBPERL)
+       @sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
 
-clean:
+clean:         _tidy _mopup
+
+realclean:     _cleaner _mopup
+       @echo "Note that make realclean does not delete config.sh"
+
+clobber:       _cleaner _mopup
+       rm -f config.sh cppstdin
+
+distclean:     clobber
+
+# Do not 'make _mopup' directly.
+_mopup:
        rm -f *$(OBJ_EXT) *$(LIB_EXT) all perlmain.c
        rm -f perl.exp ext.libs
        -rm -f perl.export perl.dll perl.libexp perl.map perl.def
+       rm -f perl suidperl miniperl $(LIBPERL)
+
+# Do not 'make _tidy' directly.
+_tidy:
        -cd pod; $(MAKE) clean
        -cd utils; $(MAKE) clean
        -cd x2p; $(MAKE) clean
        -@for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) ; do \
-       sh ext/util/make_ext clean $$x ; \
+       sh ext/util/make_ext clean $$x MAKE=$(MAKE) ; \
        done
-       rm -f perl suidperl miniperl $(LIBPERL)
 
-realclean: clean
+# Do not 'make _cleaner' directly.
+_cleaner:
        -cd os2; rm -f Makefile
        -cd pod; $(MAKE) realclean
        -cd utils; $(MAKE) realclean
        -cd x2p; $(MAKE) realclean
        -@for x in $(DYNALOADER) $(dynamic_ext) $(static_ext) ; do \
-       sh ext/util/make_ext realclean $$x ; \
+       sh ext/util/make_ext realclean $$x MAKE=$(MAKE) ; \
        done
        rm -f *.orig */*.orig *~ */*~ core t/core t/c t/perl
        rm -rf $(addedbyconf)
@@ -414,12 +480,6 @@ realclean: clean
        rm -f lib/.exists
        rm -f h2ph.man pstruct
        rm -rf .config
-       @echo "Note that make realclean does not delete config.sh"
-
-clobber:       realclean
-       rm -f config.sh cppstdin
-
-distclean:     clobber
 
 # The following lint has practically everything turned on.  Unfortunately,
 # you have to wade through a lot of mumbo jumbo that can't be suppressed.
@@ -429,14 +489,16 @@ distclean:        clobber
 lint: perly.c $(c)
        lint $(lintflags) $(defs) perly.c $(c) > perl.fuzz
 
-# Need to unset during recursion to go out of loop
+# Need to unset during recursion to go out of loop.
+# The README below ensures that the dependency list is never empty and
+# that when MAKEDEPEND is empty $(FIRSTMAKEFILE) doesn't need rebuilding.
 
-MAKEDEPEND = makedepend
+MAKEDEPEND = Makefile makedepend
 
-$(FIRSTMAKEFILE):      Makefile $(MAKEDEPEND)
+$(FIRSTMAKEFILE):      README $(MAKEDEPEND)
        $(MAKE) depend MAKEDEPEND=
 
-config.h: config.sh
+config.h: config_h.SH config.sh
        $(SHELL) config_h.SH
 
 perl.exp: perl_exp.SH config.sh
@@ -444,7 +506,7 @@ perl.exp: perl_exp.SH config.sh
 
 # When done, touch perlmain.c so that it doesn't get remade each time.
 depend: makedepend
-       sh ./makedepend
+       sh ./makedepend MAKE=$(MAKE)
        - test -s perlmain.c && touch perlmain.c
        cd x2p; $(MAKE) depend
 
@@ -452,16 +514,30 @@ depend: makedepend
 makedepend: makedepend.SH config.sh
        sh ./makedepend.SH
 
-check test: miniperl perl preplibrary $(dynamic_ext)
-       - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../perl$(EXE_EXT) perl$(EXE_EXT)) && ./perl TEST </dev/tty
+test-prep: miniperl perl preplibrary $(dynamic_ext)
+       cd t && (rm -f perl$(EXE_EXT); $(LNS) ../perl$(EXE_EXT) perl$(EXE_EXT))
+
+test check: test-prep
+       cd t && ./perl TEST </dev/tty
+
+# For testing without a tty or controling terminal. See t/op/stat.t
+test-notty: test-prep
+       cd t && PERL_SKIP_TTY_TEST=1 ./perl TEST
 
 # Can't depend on lib/Config.pm because that might be where miniperl
 # is crashing.
-minitest: miniperl 
+minitest: miniperl
        @echo "You may see some irrelevant test failures if you have been unable"
        @echo "to build lib/Config.pm."
        - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../miniperl$(EXE_EXT) perl$(EXE_EXT)) \
-               && ./perl TEST base/*.t comp/*.t cmd/*.t io/*.t op/*.t </dev/tty
+               && ./perl TEST base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t </dev/tty
+
+# Handy way to run perlbug -ok without having to install and run the
+# installed perlbug. We don't re-run the tests here - we trust the user.
+# Please *don't* use this unless all tests pass.
+# If you want to report test failures, just use "perlbug -Ilib".
+ok:
+       ./perl -Ilib utils/perlbug -ok -s '(UNINSTALLED)'
 
 clist: $(c)
        echo $(c) | tr ' ' '\012' >.clist
@@ -475,14 +551,14 @@ shlist: $(sh)
 pllist: $(pl)
        echo $(pl) | tr ' ' '\012' >.pllist
 
-Makefile: Makefile.SH ./config.sh 
+Makefile: Makefile.SH ./config.sh
        $(SHELL) Makefile.SH
 
-distcheck : FORCE
+distcheck: FORCE
        perl '-MExtUtils::Manifest=&fullcheck' -e 'fullcheck()'
 
-manifest  : 
-       perl '-MExtUtils::Manifest=&mkmanifest' -e 'mkmanifest()'
+etags:
+       sh emacs/ptags
 
 # AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
 # If this runs make out of memory, delete /usr/include lines.