+#! /bin/sh
case $CONFIG in
'')
if test -f config.sh; then TOP=.;
*) 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
# 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
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
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
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!
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!'
!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"
# 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
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
./miniperl minimod.pl > tmp && mv tmp $@
$(plextract): miniperl lib/Config.pm
- ./miniperl -Ilib $@.PL
+ `echo ./miniperl -Ilib $@.PL`
install: all install.perl install.man
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
# 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
perly.h: perly.y
-@sh -c true
-# The following three header files are generated automatically
+# The following files are generated automatically
# keywords.h: keywords.pl
# opcode.h: opcode.pl
# embed.h: embed.pl global.sym interp.sym
+# byterun.h: bytecode.pl
+# byterun.c: bytecode.pl
+# lib/B/Asmdata.pm: bytecode.pl
# The correct versions should be already supplied with the perl kit,
# in case you don't have perl available.
# To force them to run, type
perl keywords.pl
perl opcode.pl
perl embed.pl
+ perl bytecode.pl
# Extensions:
# Names added to $(dynamic_ext) or $(static_ext) will automatically
# 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)
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.
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
# 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
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
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.