summaryrefslogtreecommitdiff
path: root/Makefile.SH
diff options
context:
space:
mode:
authorLarry Wall <lwall@netlabs.com>1994-10-17 23:00:00 +0000
committerLarry Wall <lwall@netlabs.com>1994-10-17 23:00:00 +0000
commita0d0e21ea6ea90a22318550944fe6cb09ae10cda (patch)
treefaca1018149b736b1142f487e44d1ff2de5cc1fa /Makefile.SH
parent85e6fe838fb25b257a1b363debf8691c0992ef71 (diff)
downloadperl-a0d0e21ea6ea90a22318550944fe6cb09ae10cda.tar.gz
perl 5.000perl-5.000
[editor's note: this commit combines approximate 4 months of furious releases of Andy Dougherty and Larry Wall - see pod/perlhist.pod for details. Andy notes that; Alas neither my "Irwin AccuTrack" nor my DC 600A quarter-inch cartridge backup tapes from that era seem to be readable anymore. I guess 13 years exceeds the shelf life for that backup technology :-(. ]
Diffstat (limited to 'Makefile.SH')
-rw-r--r--Makefile.SH374
1 files changed, 177 insertions, 197 deletions
diff --git a/Makefile.SH b/Makefile.SH
index 88b8b7194e..e1e666d883 100644
--- a/Makefile.SH
+++ b/Makefile.SH
@@ -22,51 +22,43 @@ case "$d_dosuid" in
*) suidperl='';;
esac
-: Certain parts of Makefile need to be commented out if dynamic
-: loading is not used.
-case "$usedl" in
-define) comment='' ;;
-*) comment='#' ;;
+: Configure sets byacc=byacc if byacc is not found. We reset it to ''
+case "$byacc" in
+''|'byacc') byacc='';;
esac
+: Prepare dependency lists for Makefile.
+dynamic_list=' '
+for f in $dynamic_ext; do
+ : the dependency named here will never exist
+ dynamic_list="$dynamic_list $f.$dlext"
+done
+
+static_list=' '
+static_ai_list=' '
+for f in $static_ext; do
+ base=`echo "$f" | sed 's/.*\///'`
+ static_list="$static_list ext/$f/$base.a"
+ if test -f ext/$f/AutoInit.c; then
+ static_ai_list="$static_ai_list ext/$f/AutoInit.c"
+ fi
+ if test -f ext/$f/AutoInit.pl; then
+ static_ai_list="$static_ai_list ext/$f/AutoInit.pl"
+ fi
+done
+
echo "Extracting Makefile (with variable substitutions)"
-: This section of the file will have variable substitutions done on it.
-: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
-: Protect any dollar signs and backticks that you do not want interpreted
-: by putting a backslash in front. You may delete these comments.
-$spitshell >Makefile <<!GROK!THIS!
-# $Makefile.SH,v $Revision: 4.1 $Date: 92/08/07 17:18:08 $
+$spitshell >Makefile <<'!NO!SUBS!'
+# Makefile.SH
# This file is derived from Makefile.SH. Any changes made here will
# be lost the next time you run Configure.
# Makefile is used to generate makefile. The only difference
# is that makefile has the dependencies filled in at the end.
#
-# \$Log: Makefile.SH,v \$
-# Revision 4.1 92/08/07 17:18:08 lwall
-# Stage 6 Snapshot
-#
-# Revision 4.0.1.4 92/06/08 11:40:43 lwall
-# patch20: cray didn't give enough memory to /bin/sh
-# patch20: various and sundry fixes
-#
-# Revision 4.0.1.3 91/11/05 15:48:11 lwall
-# patch11: saberized perl
-# patch11: added support for dbz
-#
-# Revision 4.0.1.2 91/06/07 10:14:43 lwall
-# patch4: cflags now emits entire cc command except for the filename
-# patch4: alternate make programs are now semi-supported
-# patch4: uperl.o no longer tries to link in libraries prematurely
-# patch4: installperl now installs x2p stuff too
-#
-# Revision 4.0.1.1 91/04/11 17:30:39 lwall
-# patch1: C flags are now settable on a per-file basis
-#
-# Revision 4.0 91/03/20 00:58:54 lwall
-# 4.0 baseline.
-#
#
+!NO!SUBS!
+$spitshell >>Makefile <<!GROK!THIS!
# I now supply perly.c with the kits, so don't remake perly.c without byacc
BYACC = $byacc
CC = $cc
@@ -82,9 +74,6 @@ SMALL = $small
LARGE = $large $split
mallocsrc = $mallocsrc
mallocobj = $mallocobj
-dlsrc = $dlsrc
-dlobj = $dlobj
-dldir = $dldir
LNS = $lns
RMS = rm -f
ranlib = $ranlib
@@ -94,7 +83,13 @@ ranlib = $ranlib
LDDLFLAGS = $lddlflags
CCDLFLAGS = $ccdlflags
CCCDLFLAGS = $cccdlflags
-SHLIBSUFFIX = $shlibsuffix
+DLSUFFIX = .$dlext
+
+dynamic_ext = $dynamic_list
+static_ext = $static_list
+ext = \$(dynamic_ext) \$(static_ext)
+static_ext_autoinit = $static_ai_list
+DYNALOADER = ext/DynaLoader/DynaLoader.a
libs = $libs $cryptlib
@@ -102,55 +97,57 @@ public = perl $suidperl
shellflags = $shellflags
-## To use an alternate make, set $altmake in config.sh.
+## To use an alternate make, set \$altmake in config.sh.
MAKE = ${altmake-make}
!GROK!THIS!
## In the following dollars and backticks do not need the extra backslash.
$spitshell >>Makefile <<'!NO!SUBS!'
-CCCMD = `sh $(shellflags) cflags $@`
+CCCMD = `sh $(shellflags) cflags $(perllib) $@`
private =
-scripts = h2ph
+scripts =
-manpages = perl.man h2ph.man
+manpages = perl.man
util =
sh = Makefile.SH cflags.SH embed_h.SH makedepend.SH makedir.SH writemain.SH
-h1 = EXTERN.h INTERN.h av.h cop.h config.h embed.h form.h handy.h
-h2 = hv.h op.h opcode.h perl.h regcomp.h regexp.h gv.h sv.h util.h
-
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 hvdbm.h keywords.h mg.h op.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
h = $(h1) $(h2) $(h3) $(h4)
-c1 = av.c scope.c op.c doop.c doio.c dump.c hv.c
-c2 = $(mallocsrc) mg.c perly.c pp.c regcomp.c regexec.c
+c1 = $(mallocsrc) av.c scope.c op.c doop.c doio.c dump.c hv.c mg.c
+c2 = perl.c perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c
c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c
-c = $(c1) $(c2) $(c3) $(dlsrc) miniperlmain.c perlmain.c
-
-s1 = av.c scope.c op.c doop.c doio.c dump.c hv.c
-s2 = $(mallocsrc) mg.c perly.c pp.c regcomp.c regexec.c
-s3 = gv.c sv.c taint.c toke.c util.c deb.c run.c perly.c
-
-saber = $(s1) $(s2) $(s3) $(dlsrc)
+c = $(c1) $(c2) $(c3) miniperlmain.c perlmain.c
-obj1 = av.o scope.o op.o doop.o doio.o dump.o hv.o
-obj2 = $(mallocobj) mg.o perly.o pp.o regcomp.o regexec.o
-obj3 = gv.o sv.o taint.o toke.o util.o deb.o run.o
+obj1 = $(mallocobj) gv.o toke.o perly.o op.o regcomp.o dump.o util.o mg.o
+obj2 = hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o
+obj3 = doop.o doio.o regexec.o taint.o deb.o
obj = $(obj1) $(obj2) $(obj3)
+# Once perl has been Configure'd and built ok you build different
+# perl variants (Debugging, Embedded, Multiplicity etc) by saying:
+# make clean; make perllib=libperl<type>.a
+# where <type> is some combination of 'd' and(or) 'e' or 'm'.
+# See cflags to understand how this works.
+#
+# Eventually some form of 'make-a-perl' script will automate this
+# together with linking a perl executable with any desired
+# static modules.
+perllib = libperl.a
+
lintflags = -hbvxac
-addedbyconf = Makefile.old bsd eunice filexp loc pdp11 usg v7
+addedbyconf = UU
# grrr
SHELL = /bin/sh
@@ -158,142 +155,55 @@ SHELL = /bin/sh
.c.o:
$(CCCMD) $*.c
-all: miniperl perl lib/Config.pm
-
-#all: $(public) $(private) $(util) $(scripts)
-# cd x2p; $(MAKE) all
-# touch all
+all: makefile miniperl preplibrary $(public) $(dynamic_ext)
+ @echo " "; echo " Making x2p stuff"; cd x2p; $(MAKE) all
+ @echo " "; echo " Making docs"; cd pod; $(MAKE) all;
# Phony target to force checking subdirectories.
FORCE:
!NO!SUBS!
-### Some makes have problems with the following dependency
-### if $(dlsrc) or $(dlobj) is empty.
-### Therefore, comment it out if dlsrc is null.
-###
-$spitshell >>Makefile <<!GROK!THIS!
-${comment}
-${comment}\$(dlsrc): \$(dldir)/\$(dlsrc)
-${comment} cp \$(dldir)/\$(dlsrc) \$(dlsrc)
-
-${comment}\$(dlobj): \$(dlsrc)
-${comment} \$(CCCMD) \$(dlsrc)
-
-!GROK!THIS!
-
-###
-### Boilerplate for all the .xs files in the ext directory.
-### XXX FIXME: At some point we also need to copy .pm files out of
-### XXX the ext directory into lib.
-### XXX FIXME: At some point we need to run autosplit on the .pm
-### XXX files.
-### Configure sets extensions to a string like
-### "ext/dbm/NDBM_File.xs ext/dbm/ODBM_File.xs ext/dbm/GDBM_File.xs \
-### ext/dbm/SDBM_File.xs ext/posix/POSIX.xs"
-ext=" "
-extdep=" "
-extobj=" "
-extsrc=" "
-# extradep gives any extra dependencies of this extension.
-# extraobj gives any extra thinks to link with this extension.
-for f in $extensions
-do
- base=`echo $f | $sed -e 's@.*/\(.*\).xs@\1@'`
- ext="$ext $base"
- extsrc="$extsrc $base.c"
- case $base in
- SDBM_File) extradep="ext/dbm/sdbm/libsdbm.a"
- extraobj="ext/dbm/sdbm/libsdbm.a" ;;
- POSIX) extradep=""
- extraobj="-lm" ;;
- *) extradep=""
- extraobj="" ;;
- esac
- case "$usedl" in
- define) extdep="$extdep lib/auto/$base/${base}\$(SHLIBSUFFIX)"
- ;;
- *) extdep="$extdep $base.o $extradep"
- extobj="$extobj $base.o $extraobj" ;;
- esac
-
- $spitshell >>Makefile <<!GROK!THIS!
-
-# $base extension
-$base.o: $base.c
- \$(CCCMD) \$(CCCDLFLAGS) \$*.c
-
-$base.c: $f ext/xsubpp ext/typemap
- test -f miniperl || make miniperl
- ./miniperl ext/xsubpp $f >tmp
- mv tmp $base.c
-
-${comment}lib/auto/$base/$base\$(SHLIBSUFFIX): $base.o $extradep
-${comment} test -d lib/auto/$base || mkdir lib/auto/$base
-${comment} ld \$(LDDLFLAGS) -o \$@ $base.o $extraobj
-!GROK!THIS!
-
-done
-
-$spitshell >>Makefile <<!GROK!THIS!
-
-# List of extensions (used by writemain) to generate perlmain.c
-ext=$ext
-extsrc=$extsrc
-# Extension dependencies.
-extdep=$extdep
-# How to include extensions in linking command
-extobj=$extobj
-
-ext/dbm/sdbm/libsdbm.a: ext/dbm/sdbm/sdbm.h ext/dbm/sdbm/sdbm.c
- cd ext/dbm/sdbm; \$(MAKE) -f Makefile libsdbm.a
-
-!GROK!THIS!
-
-### Now on to the rest of the Makefile.
+: Now on to the rest of the Makefile.
$spitshell >>Makefile <<'!NO!SUBS!'
# The $& notation tells Sequent machines that it can do a parallel make,
# and is harmless otherwise.
-miniperl: $& miniperlmain.o perl.o $(obj)
- $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain.o perl.o $(obj) $(libs)
+miniperl: $& miniperlmain.o $(perllib)
+ $(CC) $(LARGE) $(CLDFLAGS) -o miniperl miniperlmain.o $(perllib) $(libs)
-perlmain.c: miniperlmain.c
- sh writemain $(ext) > perlmain.c
+perlmain.c: miniperlmain.c config.sh makefile $(static_ext_autoinit)
+ sh writemain $(DYNALOADER) $(static_ext) > tmp
+ sh mv-if-diff tmp perlmain.c
perlmain.o: perlmain.c
-perl: $& perlmain.o perl.o $(obj) $(dlobj) $(extdep)
- $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain.o perl.o $(obj) $(dlobj) $(extobj) $(libs)
+# The file ext.libs is a list of libraries that must be linked in
+# for static extensions, e.g. -lm -lgdbm, etc. The individual
+# static extension Makefile's add to it.
+ext.libs: $(static_ext)
+ -@test -f ext.libs || touch ext.libs
-pureperl: $& perlmain.o perl.o $(obj) $(dlobj) $(extdep)
- purify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o pureperl perlmain.o perl.o $(obj) $(dlobj) $(extobj) $(libs)
+perl: $& perlmain.o $(perllib) $(DYNALOADER) $(static_ext) ext.libs
+ $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o perl perlmain.o $(perllib) $(DYNALOADER) $(static_ext) `cat ext.libs` $(libs)
-quantperl: $& perlmain.o perl.o $(obj) $(dlobj) $(extdep)
- quantify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o quantperl perlmain.o perl.o $(obj) $(dlobj) $(extobj) $(libs)
+pureperl: $& perlmain.o $(perllib) $(DYNALOADER) $(static_ext) ext.libs
+ purify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o pureperl perlmain.o $(perllib) $(DYNALOADER) $(static_ext) `cat ext.libs` $(libs)
-libperl.rlb: libperl.a
- $(ranlib) libperl.a
- touch libperl.rlb
+quantperl: $& perlmain.o $(perllib) $(DYNALOADER) $(static_ext) ext.libs
+ quantify $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o quantperl perlmain.o $(perllib) $(DYNALOADER) $(static_ext) `cat ext.libs` $(libs)
-libperl.a: $& perl.o $(obj)
- ar rcuv libperl.a $(obj)
+$(perllib): $& perl.o $(obj)
+ ar rcu $(perllib) perl.o $(obj)
+ @$(ranlib) $(perllib)
# This version, if specified in Configure, does ONLY those scripts which need
# set-id emulation. Suidperl must be setuid root. It contains the "taint"
# checks as well as the special code to validate that the script in question
# has been invoked correctly.
-suidperl: $& sperl.o perlmain.o libperl.rlb
- $(CC) $(LARGE) $(CLDFLAGS) sperl.o perlmain.o libperl.a $(libs) -o suidperl
-
-lib/Config.pm: config.sh miniperl
- ./miniperl configpm
-
-saber: $(saber)
- # load $(saber)
- # load /lib/libm.a
+suidperl: $& sperl.o perlmain.o $(perllib) $(DYNALOADER) $(static_ext) ext.libs
+ $(CC) $(LARGE) $(CLDFLAGS) $(CCDLFLAGS) -o suidperl perlmain.o sperl.o $(perllib) $(DYNALOADER) $(static_ext) `cat ext.libs` $(libs)
sperl.o: perl.c perly.h patchlevel.h $(h)
$(RMS) sperl.c
@@ -301,46 +211,109 @@ sperl.o: perl.c perly.h patchlevel.h $(h)
$(CCCMD) -DIAMSUID sperl.c
$(RMS) sperl.c
-perly.h: perly.c
- @ echo Dummy dependency for dumb parallel make
- touch perly.h
-
opcode.h: opcode.pl
- perl opcode.pl
embed.h: embed_h.SH global.sym interp.sym
sh embed_h.SH
-perly.c:
- @ echo 'Expect' 80 shift/reduce and 62 reduce/reduce conflicts
- $(BYACC) -d perly.y
- sh $(shellflags) ./perly.fixer y.tab.c perly.c
- mv y.tab.h perly.h
- echo 'extern YYSTYPE yylval;' >>perly.h
+preplibrary: miniperl lib/Config.pm
+ @test -d lib/auto || mkdir lib/auto
+ @echo " AutoSplitting perl library"
+ @./miniperl -Ilib -e 'use AutoSplit; \
+ autosplit_lib_modules(@ARGV)' lib/*.pm lib/*/*.pm
-perly.o: perly.c perly.h $(h)
- $(CCCMD) perly.c
+lib/Config.pm: config.sh miniperl
+ ./miniperl configpm
install: all
./perl installperl
+!NO!SUBS!
+
+: Only print out the rules for running byacc if the user _has_ byacc.
+: Otherwise, comment them out. Users who really know what they are
+: doing can uncomment them and run yacc or bison or whatever.
+: Configure sets byacc=byacc if byacc is not found.
+case "$byacc" in
+''|'byacc')
+ comment1='#'
+ comment2='' ;;
+*) comment1=''
+ comment2='#' ;;
+esac
+
+$spitshell >>Makefile <<!GROK!THIS!
+
+perly.h: perly.c
+ @ echo Dummy dependency for dumb parallel make
+ touch perly.h
+
+# I now supply perly.c with the kits, so the following section is
+# commented out if you don't have byacc.
+
+${comment1}perly.c: perly.y perly.c.diff
+${comment1} @ echo 'Expect' 109 shift/reduce and 1 reduce/reduce conflict
+${comment1} \$(BYACC) -d perly.y
+${comment1} sh \$(shellflags) ./perly.fixer y.tab.c perly.c
+${comment1} mv y.tab.h perly.h
+${comment1} echo 'extern YYSTYPE yylval;' >>perly.h
+
+# This version is used only if you do not have byacc.
+${comment2}perly.c: perly.y
+${comment2} touch perly.c
+
+!GROK!THIS!
+
+$spitshell >>Makefile <<'!NO!SUBS!'
+# Extensions:
+# Names added to $(dynamic_ext) or $(static_ext) will automatically
+# get built. There should ordinarily be no need to change any of
+# this part of makefile.
+#
+# The dummy dependency is a place holder in case $(dynamic_ext) or
+# $(static_ext) is empty.
+#
+# DynaLoader may be needed for extensions that use Makefile.PL.
+
+$(DYNALOADER): miniperl preplibrary FORCE
+ @sh ext/util/make_ext static $@
+
+d_dummy $(dynamic_ext): miniperl preplibrary $(DYNALOADER) FORCE
+ @sh ext/util/make_ext dynamic $@
+
+s_dummy $(static_ext): miniperl preplibrary $(DYNALOADER) FORCE
+ @sh ext/util/make_ext static $@
clean:
- rm -f *.o all perl miniperl
- rm -f POSIX.c ?DBM_File.c perlmain.c
- rm -f ext/dbm/sdbm/libsdbm.a
- cd ext/dbm/sdbm; $(MAKE) -f Makefile clean
- cd x2p; $(MAKE) clean
+ rm -f *.o *.a all perl suidperl miniperl
+ rm -f perlmain.c
+ rm -f perl.exp ext.libs ext/util/extlibist
+ -cd x2p; $(MAKE) clean
+ -cd pod; $(MAKE) clean
+ -@for x in ext/* ; do \
+ if test -f $$x/Makefile; then \
+ echo " Making clean in $$x"; \
+ cd $$x; $(MAKE) clean ; cd ../.. ; \
+ fi ; \
+ done
realclean: clean
- cd x2p; $(MAKE) realclean
- cd ext/dbm/sdbm; $(MAKE) -f Makefile realclean
- rm -f *.orig */*.orig *~ */*~ core $(addedbyconf) h2ph h2ph.man
- rm -f Makefile cflags embed_h makedepend makedir writemain
- rm -f config.h t/perl makefile makefile.old cflags
- rm -rf lib/auto/?DBM_File lib/auto/POSIX
+ -cd x2p; $(MAKE) realclean
+ -@for x in ext/* ; do \
+ if test -f $$x/Makefile; then \
+ echo " Making realclean in $$x"; \
+ cd $$x; $(MAKE) realclean ; cd ../.. ; \
+ fi ; \
+ done
+ rm -f *.orig */*.orig *~ */*~ core t/core
+ rm -rf $(addedbyconf)
+ rm -f Makefile cflags makedepend makedir writemain
+ rm -f config.h t/perl makefile makefile.old
rm -f x2p/Makefile x2p/makefile x2p/makefile.old x2p/cflags
rm -f lib/Config.pm
- rm -f c2ph pstruct
+ rm -rf lib/auto
+ rm -f h2ph h2ph.man c2ph pstruct
+ rm -rf .config
# The following lint has practically everything turned on. Unfortunately,
# you have to wade through a lot of mumbo jumbo that can't be suppressed.
@@ -350,13 +323,18 @@ realclean: clean
lint: perly.c $(c)
lint $(lintflags) $(defs) perly.c $(c) > perl.fuzz
+makefile: Makefile
+ make depend
+
+# When done, touch perlmain.c so that it doesn't get remade each time.
depend: makedepend
- test -f perly.h || cp /dev/null perly.h
./makedepend
- test -s perly.h || /bin/rm -f perly.h
+ - test -s perlmain.c && touch perlmain.c
cd x2p; $(MAKE) depend
-test: perl lib/Config.pm
+test: miniperl perl preplibrary $(dynamic_ext)
- cd t && chmod +x TEST */*.t
- cd t && (rm -f perl; $(LNS) ../perl perl) && ./perl TEST </dev/tty
@@ -381,3 +359,5 @@ case `pwd` in
;;
esac
rm -f makefile
+
+