summaryrefslogtreecommitdiff
path: root/plan9/genconfig.pl
diff options
context:
space:
mode:
authorPerl 5 Porters <perl5-porters@africa.nicoh.com>1996-07-26 03:53:27 +0000
committerCharles Bailey <bailey@genetics.upenn.edu>1996-07-26 03:53:27 +0000
commit396e9e6f77853ce5b5bd54c151a15d6820deba3a (patch)
treedec367aaa99df9194e1d594e7c4b0a15ea41157c /plan9/genconfig.pl
parent62ac1c994e20a7298bfc84e40958ae6c95247bab (diff)
downloadperl-396e9e6f77853ce5b5bd54c151a15d6820deba3a.tar.gz
New Plan9 port
Diffstat (limited to 'plan9/genconfig.pl')
-rw-r--r--plan9/genconfig.pl272
1 files changed, 272 insertions, 0 deletions
diff --git a/plan9/genconfig.pl b/plan9/genconfig.pl
new file mode 100644
index 0000000000..2ab6295884
--- /dev/null
+++ b/plan9/genconfig.pl
@@ -0,0 +1,272 @@
+#!../miniperl
+# Habit . . .
+#
+# Extract info from config.h, and add extra data here, to generate config.sh
+# Edit the static information after __END__ to reflect your site and options
+# that went into your perl binary. In addition, values which change from run
+# to run may be supplied on the command line as key=val pairs.
+#
+# Last Modified: 28-Jun-1996 Luther Huffman lutherh@stratcom.com
+#
+
+#==== Locations of installed Perl components
+$p9pvers="5.00301";
+$prefix='';
+$p9p_objtype=$ENV{'objtype'};
+$builddir="/sys/src/cmd/perl/$p9pvers";
+$installbin="/$p9p_objtype/bin";
+$installman1dir="/sys/man/1";
+$installman3dir="/sys/man/2";
+$installprivlib="/sys/lib/perl";
+$installarchlib = "/$p9p_objtype/lib/perl/$p9pvers";
+$archname="plan9_$p9p_objtype";
+$installsitelib="$installprivlib/site_perl";
+$installsitearch="$installarchlib/site_perl";
+$installscript="/bin";
+
+unshift(@INC,'lib'); # In case someone didn't define Perl_Root
+ # before the build
+
+if ($ARGV[0] eq '-f') {
+ open(ARGS,$ARGV[1]) or die "Can't read data from $ARGV[1]: $!\n";
+ @ARGV = ();
+ while (<ARGS>) {
+ push(@ARGV,split(/\|/,$_));
+ }
+ close ARGS;
+}
+
+if (-f "config.h") { $infile = "config.h"; $outdir = "../"; }
+elsif (-f "plan9/config.h") { $infile = "plan9/config.h"; $outdir = "./"; }
+
+if ($infile) { print "Generating config.sh from $infile . . .\n"; }
+else { die <<EndOfGasp;
+Can't find config.h to read!
+ Please run this script from the perl source directory or
+ the plan9 subdirectory in the distribution.
+EndOfGasp
+}
+$outdir = '';
+open(IN,"$infile") || die "Can't open $infile: $!\n";
+open(OUT,">${outdir}config.sh") || die "Can't open ${outdir}config.sh: $!\n";
+
+$time = localtime;
+$cf_by = $ENV{'user'};
+($vers = $]) =~ tr/./_/;
+
+# Plan 9 doesn't actually use version numbering. Following the original Unix
+# precedent of assigning a Unix edition number based on the edition number
+# of the manuals, I am referring to this as Plan 9, 1st edition.
+$osvers = '1';
+
+print OUT <<EndOfIntro;
+# This file generated by genconfig.pl on a Plan 9 system.
+# Input obtained from:
+# $infile
+# $0
+# Time: $time
+
+package='perl5'
+CONFIG='true'
+cf_time='$time'
+cf_by='$cf_by'
+ccdlflags=''
+cccdlflags=''
+libpth='$installprivlib'
+ld='pcc'
+lddlflags=''
+ranlib=''
+ar='ar'
+nroff='/bin/nroff'
+eunicefix=':'
+hint='none'
+hintfile=''
+intsize='4'
+alignbytes='8'
+shrplib='define'
+usemymalloc='n'
+usevfork='true'
+useposix='true'
+spitshell='cat'
+dlsrc='dl_none.c'
+binexp='$installbin'
+man1ext=''
+man3ext=''
+arch='$archname'
+archname='$archname'
+osname='plan9'
+extensions='IO Socket Opcode Fcntl POSIX DynaLoader FileHandle'
+osvers='$osvers'
+sig_maxsig='19'
+sig_name='ZERO HUP INT QUIT ILL ABRT FPE KILL SEGV PIPE ALRM TERM USR1 USR2 CHLD CONT STOP TSTP TTIN TTOU'
+sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19'
+sig_numsig='20'
+prefix='$prefix'
+builddir='$builddir'
+installbin='$installbin'
+installman1dir='$installman1dir'
+installman3dir='$installman3dir'
+installprivlib='$installprivlib'
+installarchlib='$installarchlib'
+installsitelib='$installsitelib'
+installsitearch='$installsitearch'
+installscript='$installscript'
+scriptdir='$installscript'
+scriptdirexp='$installscript'
+EndOfIntro
+
+# Plan 9 compiler stuff
+print OUT "cc='pcc'\n";
+print OUT "d_attribut='undef'\n";
+print OUT "d_socket='define'\n";
+print OUT "d_sockpair='define'\n";
+print OUT "d_sigsetjmp='define'\n";
+print OUT "sigjmp_buf='sigjmp_buf'\n";
+print OUT "sigsetjmp='sigsetjmp(buf,save_mask)'\n";
+print OUT "siglongjmp='siglongjmp(buf,retval) '\n";
+print OUT "exe_ext=''\n";
+if ($p9p_objtype eq '386') {
+ $objext = '.8';
+}
+elsif ($p9p_objtype eq '68020') {
+ $objext = '.2';
+}
+elsif ($p9p_objtype eq 'mips') {
+ $objext = '.v';
+}
+elsif ($p9p_objtype eq 'sparc') {
+ $objext = '.k';
+}
+print OUT "obj_ext='$objext'\n";
+
+if ($p9p_objtype eq '386') {
+ $cstflags = 2;
+}
+else {
+ $cstflags = 0;
+}
+print OUT "castflags='$cstflags'\n";
+
+$myname = $ENV{'site'} ;
+($myhostname,$mydomain) = split(/\./,$myname,2);
+print OUT "myhostname='$myhostname'\n" if $myhostname;
+if ($mydomain) {
+ print OUT "mydomain='.$mydomain'\n";
+ print OUT "perladmin='$cf_by\@$myhostname.$mydomain'\n";
+ print OUT "cf_email='$cf_by\@$myhostname.$mydomain'\n";
+}
+else {
+ print OUT "perladmin='$cf_by'\n";
+ print OUT "cf_email='$cf_by'\n";
+}
+print OUT "myuname='Plan9 $myname $osvers $p9p_objtype'\n";
+
+# Before we read the C header file, find out what config.sh constants are
+# equivalent to the C preprocessor macros
+if (open(SH,"${outdir}config_h.SH")) {
+ while (<SH>) {
+ next unless m%^#(?!if).*\$%;
+ s/^#//; s!(.*?)\s*/\*.*!$1!;
+ my(@words) = split;
+ $words[1] =~ s/\(.*//; # Clip off args from macro
+ # Did we use a shell variable for the preprocessor directive?
+ if ($words[0] =~ m!^\$(\w+)!) { $pp_vars{$words[1]} = $1; }
+ if (@words > 2) { # We may also have a shell var in the value
+ shift @words; # Discard preprocessor directive
+ my($token) = shift @words; # and keep constant name
+ my($word);
+ foreach $word (@words) {
+ next unless $word =~ m!\$(\w+)!;
+ $val_vars{$token} = $1;
+ last;
+ }
+ }
+ }
+ close SH;
+}
+else { warn "Couldn't read ${outfile}config_h.SH: $!\n"; }
+$pp_vars{PLAN9} = 'define'; #Plan 9 specific
+
+# OK, now read the C header file, and retcon statements into config.sh
+while (<IN>) { # roll through the comment header in config.h
+ last if /config-start/;
+}
+
+while (<IN>) {
+ chop;
+ while (/\\\s*$/) { # pick up contination lines
+ my $line = $_;
+ $line =~ s/\\\s*$//;
+ $_ = <IN>;
+ s/^\s*//;
+ $_ = $line . $_;
+ }
+ next unless my ($blocked,$un,$token,$val) =
+ m%^(\/\*)?\s*\#\s*(un)?def\w*\s+([A-Za-z0-9]\w+)\S*\s*(.*)%;
+ if (/config-skip/) {
+ delete $pp_vars{$token} if exists $pp_vars{$token};
+ delete $val_vars{$token} if exists $val_vars{$token};
+ next;
+ }
+ $val =~ s!\s*/\*.*!!; # strip off trailing comment
+ my($had_val); # Maybe a macro with args that we just #undefd or commented
+ if (!length($val) and $val_vars{$token} and ($un || $blocked)) {
+ print OUT "$val_vars{$token}=''\n";
+ delete $val_vars{$token};
+ $had_val = 1;
+ }
+ $state = ($blocked || $un) ? 'undef' : 'define';
+ if ($pp_vars{$token}) {
+ print OUT "$pp_vars{$token}='$state'\n";
+ delete $pp_vars{$token};
+ }
+ elsif (not length $val and not $had_val) {
+ # Wups -- should have been shell var for C preprocessor directive
+ warn "Constant $token not found in config_h.SH\n";
+ $token =~ tr/A-Z/a-z/;
+ $token = "d_$token" unless $token =~ /^i_/;
+ print OUT "$token='$state'\n";
+ }
+ next unless length $val;
+ $val =~ s/^"//; $val =~ s/"$//; # remove end quotes
+ $val =~ s/","/ /g; # make signal list look nice
+
+ if ($val_vars{$token}) {
+ print OUT "$val_vars{$token}='$val'\n";
+ if ($val_vars{$token} =~ s/exp$//) {print OUT "$val_vars{$token}='$val'\n";}
+ delete $val_vars{$token};
+ }
+ elsif (!$pp_vars{$token}) { # Haven't seen it previously, either
+ warn "Constant $token not found in config_h.SH (val=|$val|)\n";
+ $token =~ tr/A-Z/a-z/;
+ print OUT "$token='$val'\n";
+ if ($token =~ s/exp$//) {print OUT "$token='$val'\n";}
+ }
+}
+close IN;
+
+foreach (sort keys %pp_vars) {
+ warn "Didn't see $_ in $infile\n";
+}
+foreach (sort keys %val_vars) {
+ warn "Didn't see $_ in $infile(val)\n";
+}
+
+
+# print OUT "libs='",join(' ',@libs),"'\n";
+# print OUT "libc='",join(' ',@crtls),"'\n";
+
+if (open(PL,"${outdir}patchlevel.h")) {
+ while (<PL>) {
+ if (/^#define PATCHLEVEL\s+(\S+)/) { print OUT "PATCHLEVEL='$1'\n"; }
+ elsif (/^#define SUBVERSION\s+(\S+)/) { print OUT "SUBVERSION='$1'\n"; }
+ }
+ close PL;
+}
+else { warn "Can't read ${outdir}patchlevel.h - skipping 'PATCHLEVEL'"; }
+
+print OUT "pager='/bin/p'\n";
+
+close OUT;
+
+