More explicit Solaris instructions
[p5sagit/p5-mst-13.2.git] / Makefile.SH
index 1dad340..ec99d02 100755 (executable)
@@ -1,3 +1,4 @@
+#! /bin/sh
 case $CONFIG in
 '')
        if test -f config.sh; then TOP=.;
@@ -22,27 +23,31 @@ 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"
+               shrpldflags="$shrpldflags -b noentry $ldflags $libs $cryptlib"
+               aixinstdir=`pwd | sed 's/\/UU$//'`
+               linklibperl="-L $archlibexp/CORE -L $aixinstdir -lperl"
                ;;
        esac
-    ;;
-*)
-       pldlflags=''
-       shrpenv=''
+       ;;
+*)     pldlflags=''
        ;;
 esac
 
@@ -101,10 +106,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
@@ -217,18 +224,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,18 +240,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)
-
 !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!
@@ -264,14 +251,22 @@ if test -r $osname/Makefile.SHs ; then
 Makefile: $osname/Makefile.SHs
 !GROK!THIS!
 else
-       $spitshell >>Makefile <<!NO!SUBS!
+       $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!'
@@ -281,9 +276,33 @@ $(LIBPERL): $& perl$(OBJ_EXT) $(obj)
 !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
+       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
+       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
+       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"
@@ -291,7 +310,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)
+       $(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
@@ -339,12 +364,13 @@ 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
        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
+       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
        - 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
@@ -388,19 +414,34 @@ d_dummy $(dynamic_ext):   miniperl preplibrary $(DYNALOADER) FORCE
 s_dummy $(static_ext): miniperl preplibrary $(DYNALOADER) FORCE
        @sh ext/util/make_ext static $@ 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 ; \
        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
@@ -416,12 +457,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.
@@ -438,7 +473,7 @@ MAKEDEPEND = makedepend
 $(FIRSTMAKEFILE):      Makefile $(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
@@ -459,11 +494,11 @@ check test: miniperl perl preplibrary $(dynamic_ext)
 
 # 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
 
 clist: $(c)
        echo $(c) | tr ' ' '\012' >.clist
@@ -477,15 +512,12 @@ 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()'
-
 # AUTOMATICALLY GENERATED MAKE DEPENDENCIES--PUT NOTHING BELOW THIS LINE
 # If this runs make out of memory, delete /usr/include lines.
 !NO!SUBS!