1APE=/sys/src/ape 2< $APE/config 3<plan9/buildinfo 4archname = plan9_$objtype 5privroot = /sys/lib/perl 6privlib = $privroot/$p9pvers 7archroot = /$objtype/lib/perl 8archlib = $archroot/$p9pvers 9sitelib = $privlib/site_perl 10sitearch = $archlib/site_perl 11corelib = $archlib/CORE 12arpalib = $corelib/arpa 13 14pwd=`{pwd} 15cpanlib=`{cd cpan; ls -ld * | grep '^d' | awk '{ print $10 }' | grep -v '^\.'} 16icpanlib=`{echo $pwd^/cpan/^$cpanlib^/lib} 17distlib=`{cd dist; ls -ld * | grep '^d' | awk '{ print $10 }' | grep -v '^\.'} 18idistlib=`{echo $pwd^/dist/^$distlib $pwd^/dist/^$distlib^/lib } 19extlib=`{cd ext; ls -ld * | grep '^d' | awk '{ print $10 }' | grep -v '^\.'} 20iextlib=`{echo $pwd^/ext/^$extlib $pwd^/ext/^$extlib/lib } 21 22buildlibs=`{echo -I$pwd^/^(lib archlib privlib) -I^$icpanlib -I^$idistlib -I^$iextlib } 23miniperl=`{echo $pwd/miniperl $buildlibs } 24perl=`{echo $pwd/perl $buildlibs } 25xscmd=`{echo $pwd/dist/ExtUtils-ParseXS/lib/ExtUtils/xsubpp -noprototypes -typemap $pwd/dist/ExtUtils-ParseXS/t/typemap} 26miniperlxs=`{echo $miniperl $xscmd} 27perlxs=`{echo $perl $xscmd} 28 29BASECFLAGS=-B -D_SUSV2_SOURCE -D_POSIX_SOURCE -D_BSD_EXTENSION 30PERLCFLAGS =-DPERL_CORE $BASECFLAGS 31CFLAGS=-DPERL_IS_MINIPERL $PERLCFLAGS 32 33CCCMD = $CC -c $CFLAGS 34PERLCCCMD= $CC -c $PERLCFLAGS 35XSCCCMD= $CC -c $BASECFLAGS 36 37perllib = archlib/CORE/libperl.a 38 39perlshr = archlib/CORE/libperlshr.a 40 41installman1dir = /sys/man/1 42installman3dir = /sys/man/2 43 44podnames = 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 45faqpodnames = perlfaq perlfaq1 perlfaq2 perlfaq3 perlfaq4 perlfaq5 perlfaq6 perlfaq7 perlfaq8 perlfaq9 46advpodnames = 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 47archpodnames = perlaix perlamiga perlbeos perlbs2000 perlce perlcygwin perldgux perlfreebsd perlhpux perlhurd perlirix perlmacosx perlmpeix perlos2 perlos390 perlos400 perlplan9 perlqnx perlsolaris perltru64 perlvms perlvos perlwin32 48histpodnames = perl5004delta perl5005delta perl561delta perl56delta perl570delta perl571delta perl572delta perl573delta perl58delta perlhist 49 50libpods = ${podnames:%=pod/%.pod} 51 52perlpods = $libpods 53 54extensions = 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 55ext_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 56ext_c = ${ext_xs:%.xs=%.c} 57ext_obj = ${ext_xs:%.xs=%.$O} bsd_glob.$O poll.$O re_comp.$O re_exec.$O 58 59# Socket requires a full version of Perl (one with IO to build). 60more_extensions = Socket Data::Dumper 61more_ext_xs = Socket.xs Dumper.xs 62more_ext_c = ${more_ext_xs:%.xs=%.c} 63more_ext_obj = ${more_ext_xs:%.xs=%.$O} 64 65obj = 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 66 67OBJS = perl.$O plan9.$O $obj 68 69# TODO: what's this used for? 70testlist = `{cd t; echo base/*.t comp/*.t cmd/*.t run/*.t io/*.t re/*.t opbasic/*.t op/*.t uni/*.t perf/*.t} 71 72install:V: perl preplibrary 73 cp perl /$objtype/bin/perl-$p9pvers 74 cp plan9/aperl /rc/bin/Perl-$p9pvers 75 76 if (test ! -d $privroot) mkdir $privroot 77 if (test ! -d $privlib) mkdir $privlib 78 if (test ! -d $privlib/auto) mkdir $privlib/auto 79 if (test ! -d $sitelib) mkdir $sitelib 80 if (test ! -d $archroot) mkdir $archroot 81 if (test ! -d $archlib) mkdir $archlib 82 if (test ! -d $sitearch) mkdir $sitearch 83 if (test ! -d $corelib) mkdir $corelib 84 if (test ! -d $arpalib) mkdir $arpalib 85 cp *.h plan9/*.h $corelib 86 cp plan9/arpa/*.h $arpalib 87 88 # Populate library directories 89 {cd privlib ; tar c . } | {cd $privlib ; tar x } 90 {cd lib ; tar c . } | {cd $privlib ; tar x } 91 {cd archlib ; tar c . } | {cd $archlib ; tar x } 92 # mk man # don't make man pages now--resolve multiversion 93 94perl: perlnosocket more_extensions 95 $LD $PERLCFLAGS -o perl perlmain.$O perl.$O $perllib $perlshr $more_ext_obj 96 97perlnosocket: config.h miniperlmain.$O miniperl archlib/Config.pm perlmain.$O $perlshr 98 $LD $PERLCFLAGS -o perl perlmain.$O perl.$O $perllib $perlshr 99 100miniperl: config.h $perllib miniperlmain.$O 101 $LD $CFLAGS -o miniperl miniperlmain.$O $perllib 102 103preplibrary:V: miniperl archlib/Config.pm 104 mkdir -p privlib/auto 105 for (file in lib/*.pm lib/*/*.pm archlib/Config.pm) $miniperl -e 'use AutoSplit; autosplit(@ARGV)' $file privlib/auto 106 107$perllib(%):N: % 108$perllib: ${OBJS:%=$perllib(%)} 109 mkdir -p archlib/CORE 110 ar rv $perllib $OBJS 111 $RANLIB $perllib 112 113miniperlmain.$O: config.h uudmap.h 114 $CCCMD miniperlmain.c 115 116perlmain.$O: config.h perlmain.c 117 $PERLCCCMD perl.c 118 $PERLCCCMD perlmain.c 119 120malloc.$O: malloc.c 121 # Does the PTRDIFF_MAX need to be set per architecture? 122 $CCCMD -DPTRDIFF_MAX^'='^9223372036854775807L malloc.c 123 124perlmain.c: miniperl extensions archlib/Config.pm 125 $miniperl -MExtUtils::Miniperl -e 'writemain(\q{perlmain.c}, @ARGV)' $extensions 126 127config.h: plan9/fndvers 128 plan9/fndvers 129 mkdir -p archlib/CORE 130 cp config.h archlib/CORE 131 132$perlshr(%):N: % 133$perlshr: ${ext_obj:%=$perlshr(%)} 134 ar rv $perlshr $ext_obj 135 $RANLIB $perlshr 136 137uudmap.h: generate_uudmap.c 138 $CCCMD generate_uudmap.c 139 # This is currently a show-stopper for cross-compilation: find the true $objtype by looking at kernel? 140 $LD $CFLAGS -o generate_uudmap generate_uudmap.$O 141 chmod +x generate_uudmap 142 ./generate_uudmap uudmap.h bitcount.h mg_data.h 143 144extensions:V: miniperl archlib/Config.pm $ext_c dist/XSLoader/XSLoader.pm 145 146more_extensions:V: perlnosocket $more_ext_c $more_ext_obj 147 ext_obj=`{echo $ext_obj $more_ext_obj} 148 149Socket.$O: Socket.c 150 $XSCCCMD -I plan9 Socket.c 151 152attributes.$O: attributes.c 153 $XSCCCMD -I plan9 attributes.c 154 155mro.$O: mro.c 156 $XSCCCMD -I plan9 mro.c 157 158B.$O: B.c 159 $XSCCCMD -I plan9 B.c 160 161Peek.$O: Peek.c 162 $XSCCCMD -I plan9 Peek.c 163 164Util.$O: Util.c 165 $XSCCCMD -I plan9 Util.c 166 167FieldHash.$O: FieldHash.c 168 $XSCCCMD -I plan9 FieldHash.c 169 170re.$O: re.c 171 $XSCCCMD -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT -I plan9 re.c 172 173re_comp.$O: re_comp.c 174 $XSCCCMD -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT -I plan9 re_comp.c 175 176re_exec.$O: re_exec.c 177 $XSCCCMD -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT -I plan9 re_exec.c 178 179Cwd.$O: Cwd.c IO.c 180 cp dist/IO/ppport.h dist/PathTools 181 $XSCCCMD -DDOUBLE_SLASHES_SPECIAL^'='^0 -I plan9 Cwd.c 182 183IO.$O: extensions 184 $XSCCCMD -I plan9 IO.c 185 186poll.$O: extensions 187 $XSCCCMD -I plan9 poll.c 188 189POSIX.$O: extensions 190 $XSCCCMD -I plan9 POSIX.c 191 192Glob.$O: extensions 193 $XSCCCMD -I plan9 Glob.c 194 195bsd_glob.$O: extensions 196 $XSCCCMD -I plan9 -I. bsd_glob.c 197 198Normalize.$O: extensions 199 $XSCCCMD -I plan9 -I. Normalize.c 200 201Dumper.$O: Dumper.c 202 $XSCCCMD -I plan9 -I. Dumper.c 203 204HiRes.$O: extensions 205 $XSCCCMD -I plan9 -I. HiRes.c 206 207Storable.$O: extensions 208 $XSCCCMD -I plan9 -I. Storable.c 209 210ListUtil.$O: extensions 211 $XSCCCMD -I plan9 -I. ListUtil.c 212 213Opcode.$O: extensions 214 $XSCCCMD -I plan9 Opcode.c 215 216Fcntl.$O: extensions 217 $XSCCCMD -I plan9 Fcntl.c 218 219dl_none.$O: extensions 220 $XSCCCMD -I plan9 dl_none.c 221 222Glob.c: archlib/Config.pm ext/File-Glob/Glob.xs 223 cd ext/File-Glob 224 $miniperl Makefile.PL # to write constants 225 cd $pwd 226 $miniperlxs ext/File-Glob/Glob.xs > $target 227 cp ext/File-Glob/bsd_glob.^(c h) $pwd 228 mkdir -p archlib/File 229 cp ext/File-Glob/Glob.pm archlib/File/Glob.pm 230 231ppport.h: archlib/Config.pm 232 if (test ! -f /bin/sh) bind -a /386/bin/ape /bin 233 # specify the list, otherwise suicide 234 $miniperl mkppport --list mkppport.lst 235 236Cwd.c: archlib/Config.pm dist/PathTools/Cwd.xs 237 $miniperlxs dist/PathTools/Cwd.xs > $target 238 cp dist/PathTools/Cwd.pm archlib 239 { cd dist/PathTools/lib; tar c . } | { mkdir -p archlib; cd archlib; tar x } 240 241IO.c: archlib/Config.pm dist/IO/IO.xs ppport.h 242 $miniperlxs dist/IO/IO.xs > $target 243 cp dist/IO/poll.^(c h) $pwd 244 cp dist/IO/IO.pm archlib 245 { cd dist/IO/lib; tar c . } | { mkdir -p archlib; cd archlib; tar x } 246 247dist/XSLoader/XSLoader.pm: archlib/Config.pm 248 cd dist/XSLoader 249 $miniperl XSLoader_pm.PL 250 cp XSLoader.pm $pwd/archlib 251 252ext/Errno/Errno.pm: perlnosocket 253 cd ext/Errno 254 $perl Makefile.PL 255 $perl Errno_pm.PL arch.txt 256 cp Errno.pm $pwd/archlib 257 258Socket.c: perlnosocket cpan/Socket/Socket.xs ext/Errno/Errno.pm 259 cd cpan/Socket 260 $perl Makefile.PL # to write const-xs.inc 261 cd $pwd 262 $perlxs cpan/Socket/Socket.xs > $target 263 cp cpan/Socket/Socket.pm archlib 264 265uni.data: archlib/Config.pm lib/unicore/mktables 266 $miniperl lib/unicore/mktables -C lib/unicore -makelist -p 267 268Normalize.c: archlib/Config.pm dist/Unicode-Normalize/Normalize.xs uni.data 269 $miniperl dist/Unicode-Normalize/mkheader 270 $miniperlxs dist/Unicode-Normalize/Normalize.xs > $target 271 mkdir -p archlib/Unicode 272 cp dist/Unicode-Normalize/Normalize.pm archlib/Unicode 273 274Dumper.c: perlnosocket dist/Data-Dumper/Dumper.xs 275 $perlxs dist/Data-Dumper/Dumper.xs > $target 276 mkdir -p archlib/Data 277 cp dist/Data-Dumper/Dumper.pm archlib/Data 278 279HiRes.c: archlib/Config.pm dist/Time-HiRes/HiRes.xs 280 cd dist/Time-HiRes 281 $miniperl Makefile.PL # to write const-xs.inc 282 cd $pwd 283 $miniperlxs dist/Time-HiRes/HiRes.xs > $target 284 mkdir -p archlib/Time 285 cp dist/Time-HiRes/HiRes.pm archlib/Time 286 287ListUtil.c: archlib/Config.pm cpan/Scalar-List-Utils/ListUtil.xs 288 cp cpan/Scalar-List-Utils/multicall.h $pwd 289 $miniperlxs cpan/Scalar-List-Utils/ListUtil.xs > $target 290 { cd cpan/Scalar-List-Utils/lib; tar c . } | { mkdir -p archlib; cd archlib; tar x } 291 292Storable.c: archlib/Config.pm dist/Storable/Storable.xs 293 $miniperlxs dist/Storable/Storable.xs > $target 294 cp dist/Storable/Storable.pm archlib 295 296Opcode.c: archlib/Config.pm ext/Opcode/Opcode.xs 297 $miniperlxs ext/Opcode/Opcode.xs > $target 298 cp ext/Opcode/^(Opcode ops)^.pm archlib 299 300Fcntl.c: archlib/Config.pm ext/Fcntl/Fcntl.xs 301 cd ext/Fcntl 302 $miniperl Makefile.PL # to write const-xs.inc 303 cd $pwd 304 $miniperlxs ext/Fcntl/Fcntl.xs > $target 305 cp ext/Fcntl/Fcntl.pm archlib 306 307POSIX.c: archlib/Config.pm ext/POSIX/POSIX.xs 308 cd ext/POSIX 309 $miniperl Makefile.PL # to write const-xs.inc 310 cd $pwd 311 $miniperlxs ext/POSIX/POSIX.xs > $target 312 cp ext/POSIX/lib/POSIX.pm archlib 313 314B.c: archlib/Config.pm ext/B/B.xs 315 cd ext/B 316 $miniperl Makefile.PL PERL_CORE^'='^1 # to write const-xs.inc 317 cd $pwd 318 $miniperlxs ext/B/B.xs > $target 319 cp ext/B/^(B O)^.pm archlib 320 321Peek.c: archlib/Config.pm ext/Devel-Peek/Peek.xs 322 $miniperlxs ext/Devel-Peek/Peek.xs > $target 323 cp ext/Devel-Peek/Peek.pm archlib 324 325attributes.c: archlib/Config.pm ext/attributes/attributes.xs 326 $miniperlxs ext/attributes/attributes.xs > $target 327 cp ext/attributes/attributes.pm archlib 328 329mro.c: archlib/Config.pm ext/mro/mro.xs 330 $miniperlxs ext/mro/mro.xs > $target 331 cp ext/mro/mro.pm archlib 332 333Util.c: archlib/Config.pm ext/Hash-Util/Util.xs 334 $miniperlxs ext/Hash-Util/Util.xs > $target 335 { cd ext/Hash-Util/lib; tar c . } | { cd archlib; tar x } 336 337FieldHash.c: archlib/Config.pm ext/Hash-Util-FieldHash/FieldHash.xs 338 $miniperlxs ext/Hash-Util-FieldHash/FieldHash.xs > $target 339 { cd ext/Hash-Util-FieldHash/lib; tar c . } | { cd archlib; tar x } 340 341re.c: archlib/Config.pm ext/re/re.xs 342 $miniperlxs ext/re/re.xs > $target 343 cp ext/re/re_^(comp top)^.h $pwd 344 cp ext/re/re.pm archlib 345 346re_comp.c: miniperl re.c regcomp.c 347 cp regcomp.c $target 348 349re_exec.c: miniperl re.c regexec.c 350 cp regexec.c $target 351 352dl_none.c: archlib/Config.pm ext/DynaLoader/dl_none.xs 353 cd ext/DynaLoader; 354 $miniperl DynaLoader_pm.PL 355 cd $pwd 356 $miniperlxs ext/DynaLoader/dl_none.xs > $target 357 cp ext/DynaLoader/DynaLoader.pm archlib 358 359preptest:Q: perl 360 # Bind the crap out of everything, as different tests expect different INCs 361 cp perl t/perl 362 cd t 363 mntpt=/$objtype/lib/perl 364 if (test ! -d $mntpt ) { 365 mkdir $mntpt 366 rmdir=1 367 } 368 ramfs -m $mntpt 369 mkdir -p $mntpt/5.32.0/site_perl 370 echo -n Binding directories 371 for (l in $pwd/lib $pwd/archlib $icpanlib $idistlib $iextlib ) { 372 if (test -d $l ) { 373 if (! ~ `{grep $l <{ns} >[1]/dev/null; echo $status} '') bind -a $l $mntpt/5.32.0/site_perl 374 echo -n . 375 } 376 } 377 bind $mntpt/5.32.0/site_perl $pwd/lib 378 echo done 379 echo Binding sh 380 if (! ~ `{grep /$objtype/bin/ape <{ns} >[1]/dev/null; echo $status} '') bind -a /$objtype/bin/ape /bin 381 382minitest:V: preptest 383 cd t 384 perl TEST $testlist 385 unmount $pwd/lib 386 unmount $mntpt 387 if (~ $rmdir 1) rm $mntpt 388 rm t/perl 389 390test:V: preptest 391 cd t 392 perl TEST `{ ls */*.t | comm -23 - ../plan9/exclude } 393 unmount $pwd/lib 394 unmount $mntpt 395 if (~ $rmdir 1) rm $mntpt 396 rm t/perl 397 398plan9.$O: config.h plan9/plan9.c 399 cp plan9/plan9.c plan9.c 400 $CCCMD plan9.c 401 402%.$O: config.h %.c 403 $CCCMD $stem.c 404 405archlib/Config.pm: config.sh 406 $miniperl make_patchnum.pl 407 $miniperl configpm 408 cp lib/Config.pm archlib/Config.pm 409 cp lib/Config_heavy.pl archlib/Config_heavy.pl 410 cp lib/Config_git.pl archlib/Config_git.pl 411 412 413config.sh: miniperl 414 miniperl plan9/genconfig.pl $extensions $more_extensions 415 416installall:V: 417 for (386 68000 68020 arm arm amd64 mips power power64 sparc sparc64 spim) mk install 418 419man:V: $perlpods pod/pod2man.PL perl 420 perl pod/pod2man.PL 421 for (i in $podnames) pod/pod2man pod/$i.pod > $installman3dir/$i 422 for (i in $faqpodnames) pod/pod2man pod/$i.pod > $installman3dir/$i 423 for (i in $advpodnames) pod/pod2man pod/$i.pod > $installman3dir/$i 424 for (i in $archpodnames) pod/pod2man pod/$i.pod > $installman3dir/$i 425 for (i in $histpodnames) pod/pod2man pod/$i.pod > $installman3dir/$i 426 427nuke clean:V: 428 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 429 rm -rf privlib archlib 430 431deleteman:V: 432 rm -f $installman1dir/perl* $installman3dir/perl* 433