APE=/sys/src/ape < $APE/config <plan9/buildinfo archname = plan9_$objtype privroot = /sys/lib/perl privlib = $privroot/$p9pvers archroot = /$objtype/lib/perl archlib = $archroot/$p9pvers sitelib = $privlib/site_perl sitearch = $archlib/site_perl corelib = $archlib/CORE arpalib = $corelib/arpa pwd=`{pwd} cpanlib=`{cd cpan; ls -ld * | grep '^d' | awk '{ print $10 }' | grep -v '^\.'} icpanlib=`{echo $pwd^/cpan/^$cpanlib^/lib} distlib=`{cd dist; ls -ld * | grep '^d' | awk '{ print $10 }' | grep -v '^\.'} idistlib=`{echo $pwd^/dist/^$distlib $pwd^/dist/^$distlib^/lib } extlib=`{cd ext; ls -ld * | grep '^d' | awk '{ print $10 }' | grep -v '^\.'} iextlib=`{echo $pwd^/ext/^$extlib $pwd^/ext/^$extlib/lib } buildlibs=`{echo -I$pwd^/^(lib archlib privlib) -I^$icpanlib -I^$idistlib -I^$iextlib } miniperl=`{echo $pwd/miniperl $buildlibs } perl=`{echo $pwd/perl $buildlibs } xscmd=`{echo $pwd/dist/ExtUtils-ParseXS/lib/ExtUtils/xsubpp -noprototypes -typemap $pwd/dist/ExtUtils-ParseXS/t/typemap} miniperlxs=`{echo $miniperl $xscmd} perlxs=`{echo $perl $xscmd} BASECFLAGS=-B -D_SUSV2_SOURCE -D_POSIX_SOURCE -D_BSD_EXTENSION PERLCFLAGS =-DPERL_CORE $BASECFLAGS CFLAGS=-DPERL_IS_MINIPERL $PERLCFLAGS CCCMD = $CC -c $CFLAGS PERLCCCMD= $CC -c $PERLCFLAGS XSCCCMD= $CC -c $BASECFLAGS perllib = archlib/CORE/libperl.a perlshr = archlib/CORE/libperlshr.a installman1dir = /sys/man/1 installman3dir = /sys/man/2 podnames = perl perlbook perldata perldebtut perldiag perldsc perlform perlfunc perlipc perllexwarn perllol perlmod perlmodlib perlmodinstall perlnewmod perlop perlootut perlopentut perlpacktut perlpod perlport perlrequick perlretut perlref perlreftut perlrequick perlrun perlsec perlstyle perlsub perlsyn perltie perltrap perlutil perlunifaq perluniintro perlvar faqpodnames = perlfaq perlfaq1 perlfaq2 perlfaq3 perlfaq4 perlfaq5 perlfaq6 perlfaq7 perlfaq8 perlfaq9 advpodnames = perlapi perlapio perlcall perlclib perlcompile perldebguts perldbmfilter perldebug perldelta perldiag perlebcdic perlembed perlfilter perlfork perlguts perlhack perlintern perliol perllocale perlnumber perlobj perlpodspec perlre perlthrtut perltodo perlunicode perlunicook perlxs perlxs perlxstut archpodnames = perlaix perlamiga perlbeos perlbs2000 perlce perlcygwin perldgux perlfreebsd perlhpux perlhurd perlirix perlmacosx perlmpeix perlos2 perlos390 perlos400 perlplan9 perlqnx perlsolaris perltru64 perlvms perlvos perlwin32 histpodnames = perl5004delta perl5005delta perl561delta perl56delta perl570delta perl571delta perl572delta perl573delta perl58delta perlhist libpods = ${podnames:%=pod/%.pod} perlpods = $libpods extensions = File::Glob IO Opcode DynaLoader Fcntl POSIX Cwd re B Devel::Peek attributes Hash::Util Hash::Util::FieldHash mro Storable Time::HiRes Unicode::Normalize List::Util ext_xs = Glob.xs IO.xs Opcode.xs dl_none.xs Fcntl.xs POSIX.xs Cwd.xs re.xs B.xs Peek.xs attributes.xs Util.xs FieldHash.xs mro.xs Storable.xs HiRes.xs Normalize.xs ListUtil.xs ext_c = ${ext_xs:%.xs=%.c} ext_obj = ${ext_xs:%.xs=%.$O} bsd_glob.$O poll.$O re_comp.$O re_exec.$O # Socket requires a full version of Perl (one with IO to build). more_extensions = Socket Data::Dumper more_ext_xs = Socket.xs Dumper.xs more_ext_c = ${more_ext_xs:%.xs=%.c} more_ext_obj = ${more_ext_xs:%.xs=%.$O} obj = av.$O caretx.$O deb.$O doio.$O doop.$O dquote.$O dump.$O globals.$O gv.$O hv.$O keywords.$O locale.$O malloc.$O mathoms.$O mg.$O mro_core.$O numeric.$O op.$O pad.$O perlapi.$O perlio.$O perly.$O pp.$O pp_ctl.$O pp_hot.$O pp_pack.$O pp_sort.$O pp_sys.$O reentr.$O regcomp.$O regexec.$O run.$O scope.$O sv.$O taint.$O time64.$O toke.$O universal.$O utf8.$O util.$O OBJS = perl.$O plan9.$O $obj # TODO: what's this used for? testlist = `{cd t; echo base/*.t comp/*.t cmd/*.t run/*.t io/*.t re/*.t opbasic/*.t op/*.t uni/*.t perf/*.t} install:V: perl preplibrary cp perl /$objtype/bin/perl-$p9pvers cp plan9/aperl /rc/bin/Perl-$p9pvers if (test ! -d $privroot) mkdir $privroot if (test ! -d $privlib) mkdir $privlib if (test ! -d $privlib/auto) mkdir $privlib/auto if (test ! -d $sitelib) mkdir $sitelib if (test ! -d $archroot) mkdir $archroot if (test ! -d $archlib) mkdir $archlib if (test ! -d $sitearch) mkdir $sitearch if (test ! -d $corelib) mkdir $corelib if (test ! -d $arpalib) mkdir $arpalib cp *.h plan9/*.h $corelib cp plan9/arpa/*.h $arpalib # Populate library directories {cd privlib ; tar c . } | {cd $privlib ; tar x } {cd lib ; tar c . } | {cd $privlib ; tar x } {cd archlib ; tar c . } | {cd $archlib ; tar x } # mk man # don't make man pages now--resolve multiversion perl: perlnosocket more_extensions $LD $PERLCFLAGS -o perl perlmain.$O perl.$O $perllib $perlshr $more_ext_obj perlnosocket: config.h miniperlmain.$O miniperl archlib/Config.pm perlmain.$O $perlshr $LD $PERLCFLAGS -o perl perlmain.$O perl.$O $perllib $perlshr miniperl: config.h $perllib miniperlmain.$O $LD $CFLAGS -o miniperl miniperlmain.$O $perllib preplibrary:V: miniperl archlib/Config.pm mkdir -p privlib/auto for (file in lib/*.pm lib/*/*.pm archlib/Config.pm) $miniperl -e 'use AutoSplit; autosplit(@ARGV)' $file privlib/auto $perllib(%):N: % $perllib: ${OBJS:%=$perllib(%)} mkdir -p archlib/CORE ar rv $perllib $OBJS $RANLIB $perllib miniperlmain.$O: config.h uudmap.h $CCCMD miniperlmain.c perlmain.$O: config.h perlmain.c $PERLCCCMD perl.c $PERLCCCMD perlmain.c malloc.$O: malloc.c # Does the PTRDIFF_MAX need to be set per architecture? $CCCMD -DPTRDIFF_MAX^'='^9223372036854775807L malloc.c perlmain.c: miniperl extensions archlib/Config.pm $miniperl -MExtUtils::Miniperl -e 'writemain(\q{perlmain.c}, @ARGV)' $extensions config.h: plan9/fndvers plan9/fndvers mkdir -p archlib/CORE cp config.h archlib/CORE $perlshr(%):N: % $perlshr: ${ext_obj:%=$perlshr(%)} ar rv $perlshr $ext_obj $RANLIB $perlshr uudmap.h: generate_uudmap.c $CCCMD generate_uudmap.c # This is currently a show-stopper for cross-compilation: find the true $objtype by looking at kernel? $LD $CFLAGS -o generate_uudmap generate_uudmap.$O chmod +x generate_uudmap ./generate_uudmap uudmap.h bitcount.h mg_data.h extensions:V: miniperl archlib/Config.pm $ext_c dist/XSLoader/XSLoader.pm more_extensions:V: perlnosocket $more_ext_c $more_ext_obj ext_obj=`{echo $ext_obj $more_ext_obj} Socket.$O: Socket.c $XSCCCMD -I plan9 Socket.c attributes.$O: attributes.c $XSCCCMD -I plan9 attributes.c mro.$O: mro.c $XSCCCMD -I plan9 mro.c B.$O: B.c $XSCCCMD -I plan9 B.c Peek.$O: Peek.c $XSCCCMD -I plan9 Peek.c Util.$O: Util.c $XSCCCMD -I plan9 Util.c FieldHash.$O: FieldHash.c $XSCCCMD -I plan9 FieldHash.c re.$O: re.c $XSCCCMD -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT -I plan9 re.c re_comp.$O: re_comp.c $XSCCCMD -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT -I plan9 re_comp.c re_exec.$O: re_exec.c $XSCCCMD -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT -I plan9 re_exec.c Cwd.$O: Cwd.c IO.c cp dist/IO/ppport.h dist/PathTools $XSCCCMD -DDOUBLE_SLASHES_SPECIAL^'='^0 -I plan9 Cwd.c IO.$O: extensions $XSCCCMD -I plan9 IO.c poll.$O: extensions $XSCCCMD -I plan9 poll.c POSIX.$O: extensions $XSCCCMD -I plan9 POSIX.c Glob.$O: extensions $XSCCCMD -I plan9 Glob.c bsd_glob.$O: extensions $XSCCCMD -I plan9 -I. bsd_glob.c Normalize.$O: extensions $XSCCCMD -I plan9 -I. Normalize.c Dumper.$O: Dumper.c $XSCCCMD -I plan9 -I. Dumper.c HiRes.$O: extensions $XSCCCMD -I plan9 -I. HiRes.c Storable.$O: extensions $XSCCCMD -I plan9 -I. Storable.c ListUtil.$O: extensions $XSCCCMD -I plan9 -I. ListUtil.c Opcode.$O: extensions $XSCCCMD -I plan9 Opcode.c Fcntl.$O: extensions $XSCCCMD -I plan9 Fcntl.c dl_none.$O: extensions $XSCCCMD -I plan9 dl_none.c Glob.c: archlib/Config.pm ext/File-Glob/Glob.xs cd ext/File-Glob $miniperl Makefile.PL # to write constants cd $pwd $miniperlxs ext/File-Glob/Glob.xs > $target cp ext/File-Glob/bsd_glob.^(c h) $pwd mkdir -p archlib/File cp ext/File-Glob/Glob.pm archlib/File/Glob.pm ppport.h: archlib/Config.pm if (test ! -f /bin/sh) bind -a /386/bin/ape /bin # specify the list, otherwise suicide $miniperl mkppport --list mkppport.lst Cwd.c: archlib/Config.pm dist/PathTools/Cwd.xs $miniperlxs dist/PathTools/Cwd.xs > $target cp dist/PathTools/Cwd.pm archlib { cd dist/PathTools/lib; tar c . } | { mkdir -p archlib; cd archlib; tar x } IO.c: archlib/Config.pm dist/IO/IO.xs ppport.h $miniperlxs dist/IO/IO.xs > $target cp dist/IO/poll.^(c h) $pwd cp dist/IO/IO.pm archlib { cd dist/IO/lib; tar c . } | { mkdir -p archlib; cd archlib; tar x } dist/XSLoader/XSLoader.pm: archlib/Config.pm cd dist/XSLoader $miniperl XSLoader_pm.PL cp XSLoader.pm $pwd/archlib ext/Errno/Errno.pm: perlnosocket cd ext/Errno $perl Makefile.PL $perl Errno_pm.PL arch.txt cp Errno.pm $pwd/archlib Socket.c: perlnosocket cpan/Socket/Socket.xs ext/Errno/Errno.pm cd cpan/Socket $perl Makefile.PL # to write const-xs.inc cd $pwd $perlxs cpan/Socket/Socket.xs > $target cp cpan/Socket/Socket.pm archlib uni.data: archlib/Config.pm lib/unicore/mktables $miniperl lib/unicore/mktables -C lib/unicore -makelist -p Normalize.c: archlib/Config.pm dist/Unicode-Normalize/Normalize.xs uni.data $miniperl dist/Unicode-Normalize/mkheader $miniperlxs dist/Unicode-Normalize/Normalize.xs > $target mkdir -p archlib/Unicode cp dist/Unicode-Normalize/Normalize.pm archlib/Unicode Dumper.c: perlnosocket dist/Data-Dumper/Dumper.xs $perlxs dist/Data-Dumper/Dumper.xs > $target mkdir -p archlib/Data cp dist/Data-Dumper/Dumper.pm archlib/Data HiRes.c: archlib/Config.pm dist/Time-HiRes/HiRes.xs cd dist/Time-HiRes $miniperl Makefile.PL # to write const-xs.inc cd $pwd $miniperlxs dist/Time-HiRes/HiRes.xs > $target mkdir -p archlib/Time cp dist/Time-HiRes/HiRes.pm archlib/Time ListUtil.c: archlib/Config.pm cpan/Scalar-List-Utils/ListUtil.xs cp cpan/Scalar-List-Utils/multicall.h $pwd $miniperlxs cpan/Scalar-List-Utils/ListUtil.xs > $target { cd cpan/Scalar-List-Utils/lib; tar c . } | { mkdir -p archlib; cd archlib; tar x } Storable.c: archlib/Config.pm dist/Storable/Storable.xs $miniperlxs dist/Storable/Storable.xs > $target cp dist/Storable/Storable.pm archlib Opcode.c: archlib/Config.pm ext/Opcode/Opcode.xs $miniperlxs ext/Opcode/Opcode.xs > $target cp ext/Opcode/^(Opcode ops)^.pm archlib Fcntl.c: archlib/Config.pm ext/Fcntl/Fcntl.xs cd ext/Fcntl $miniperl Makefile.PL # to write const-xs.inc cd $pwd $miniperlxs ext/Fcntl/Fcntl.xs > $target cp ext/Fcntl/Fcntl.pm archlib POSIX.c: archlib/Config.pm ext/POSIX/POSIX.xs cd ext/POSIX $miniperl Makefile.PL # to write const-xs.inc cd $pwd $miniperlxs ext/POSIX/POSIX.xs > $target cp ext/POSIX/lib/POSIX.pm archlib B.c: archlib/Config.pm ext/B/B.xs cd ext/B $miniperl Makefile.PL PERL_CORE^'='^1 # to write const-xs.inc cd $pwd $miniperlxs ext/B/B.xs > $target cp ext/B/^(B O)^.pm archlib Peek.c: archlib/Config.pm ext/Devel-Peek/Peek.xs $miniperlxs ext/Devel-Peek/Peek.xs > $target cp ext/Devel-Peek/Peek.pm archlib attributes.c: archlib/Config.pm ext/attributes/attributes.xs $miniperlxs ext/attributes/attributes.xs > $target cp ext/attributes/attributes.pm archlib mro.c: archlib/Config.pm ext/mro/mro.xs $miniperlxs ext/mro/mro.xs > $target cp ext/mro/mro.pm archlib Util.c: archlib/Config.pm ext/Hash-Util/Util.xs $miniperlxs ext/Hash-Util/Util.xs > $target { cd ext/Hash-Util/lib; tar c . } | { cd archlib; tar x } FieldHash.c: archlib/Config.pm ext/Hash-Util-FieldHash/FieldHash.xs $miniperlxs ext/Hash-Util-FieldHash/FieldHash.xs > $target { cd ext/Hash-Util-FieldHash/lib; tar c . } | { cd archlib; tar x } re.c: archlib/Config.pm ext/re/re.xs $miniperlxs ext/re/re.xs > $target cp ext/re/re_^(comp top)^.h $pwd cp ext/re/re.pm archlib re_comp.c: miniperl re.c regcomp.c cp regcomp.c $target re_exec.c: miniperl re.c regexec.c cp regexec.c $target dl_none.c: archlib/Config.pm ext/DynaLoader/dl_none.xs cd ext/DynaLoader; $miniperl DynaLoader_pm.PL cd $pwd $miniperlxs ext/DynaLoader/dl_none.xs > $target cp ext/DynaLoader/DynaLoader.pm archlib preptest:Q: perl # Bind the crap out of everything, as different tests expect different INCs cp perl t/perl cd t mntpt=/$objtype/lib/perl if (test ! -d $mntpt ) { mkdir $mntpt rmdir=1 } ramfs -m $mntpt mkdir -p $mntpt/5.32.0/site_perl echo -n Binding directories for (l in $pwd/lib $pwd/archlib $icpanlib $idistlib $iextlib ) { if (test -d $l ) { if (! ~ `{grep $l <{ns} >[1]/dev/null; echo $status} '') bind -a $l $mntpt/5.32.0/site_perl echo -n . } } bind $mntpt/5.32.0/site_perl $pwd/lib echo done echo Binding sh if (! ~ `{grep /$objtype/bin/ape <{ns} >[1]/dev/null; echo $status} '') bind -a /$objtype/bin/ape /bin minitest:V: preptest cd t perl TEST $testlist unmount $pwd/lib unmount $mntpt if (~ $rmdir 1) rm $mntpt rm t/perl test:V: preptest cd t perl TEST `{ ls */*.t | comm -23 - ../plan9/exclude } unmount $pwd/lib unmount $mntpt if (~ $rmdir 1) rm $mntpt rm t/perl plan9.$O: config.h plan9/plan9.c cp plan9/plan9.c plan9.c $CCCMD plan9.c %.$O: config.h %.c $CCCMD $stem.c archlib/Config.pm: config.sh $miniperl make_patchnum.pl $miniperl configpm cp lib/Config.pm archlib/Config.pm cp lib/Config_heavy.pl archlib/Config_heavy.pl cp lib/Config_git.pl archlib/Config_git.pl config.sh: miniperl miniperl plan9/genconfig.pl $extensions $more_extensions installall:V: for (386 68000 68020 arm arm amd64 mips power power64 sparc sparc64 spim) mk install man:V: $perlpods pod/pod2man.PL perl perl pod/pod2man.PL for (i in $podnames) pod/pod2man pod/$i.pod > $installman3dir/$i for (i in $faqpodnames) pod/pod2man pod/$i.pod > $installman3dir/$i for (i in $advpodnames) pod/pod2man pod/$i.pod > $installman3dir/$i for (i in $archpodnames) pod/pod2man pod/$i.pod > $installman3dir/$i for (i in $histpodnames) pod/pod2man pod/$i.pod > $installman3dir/$i nuke clean:V: rm -f *.$O config.sh $perllib config.h $perlshr perlmain.c perl miniperl git_version.h $ext_c $more_ext_c generate_uudmap uudmap.h bitcount.h mg_data.h plan9.c plan9ish.h math.h bsd_glob.^(c h) poll.^(c h) re_*.^(c h) uni.data multicall.h rm -rf privlib archlib deleteman:V: rm -f $installman1dir/perl* $installman3dir/perl*