cvs commit: ponie/perl Makefile.SH

[email protected] (Nicholas Clark) 14 Oct 2004 11:44:39 -0000
Newsgroups perl.ponie.changes
Message-ID <[email protected]>
cvsuser     04/10/14 04:44:39

  Modified:    .        Configure.pl Makefile
               perl     Makefile.SH
  Added:       .        fake_pmcs.pl write_makefile.pl
  Log:
  Build the Perl5 PMCs in the src/pmc directory, making a libponie.a from them
  
  Revision  Changes    Path
  1.39      +7 -41     ponie/Configure.pl
  
  Index: Configure.pl
  ===================================================================
  RCS file: /cvs/public/ponie/Configure.pl,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -w -r1.38 -r1.39
  --- Configure.pl	11 Oct 2004 16:24:39 -0000	1.38
  +++ Configure.pl	14 Oct 2004 11:44:38 -0000	1.39
  @@ -1,5 +1,5 @@
   #!/usr/bin/perl -w
  -# $Id: Configure.pl,v 1.38 2004/10/11 16:24:39 nicholas Exp $
  +# $Id: Configure.pl,v 1.39 2004/10/14 11:44:38 nicholas Exp $
   
   use strict;
   use Config;
  @@ -58,41 +58,6 @@
   
   delete($ENV{'PERL5LIB'});
   
  -# Copy some things
  -open F, "src/pmc/perl5cargo_cult.pmc" or die $!;
  -my $template = do {local $/; <F>};
  -close F or die $!;
  -foreach (qw(null iv nv rv pv pviv pvnv pvmg pvbm pvgv pvlv pvav pvhv pvcv pvfm
  -	    pvio)) {
  -  my $leaf = "perl5$_.pmc";
  -  my $file = File::Spec->catfile('src', 'pmc', $leaf);
  -  my $real = File::Spec->catfile ($dir, 'src', 'pmc', $leaf);
  -  if (-e $file) {
  -    # So the target exists.
  -    if (-l $file && !-e $real) {
  -      # It's a symlink, and the real thing does not exist - no need
  -      next;
  -    }
  -    if (-e $real && -M $file >= -M $real) {
  -      # It's a real file, but it's newer
  -      next;
  -    }
  -    unlink $file or die "unlink '$file' failed: $!";
  -  }
  -
  -  if (-f $real) {
  -    symlink $real, $file or die "symlink $real, $file failed: $!";
  -  } else {
  -    my $code = $template;
  -    my $uc = uc $_;
  -    $code =~ s/QQQ/$uc/gm;
  -    $code =~ s/qqq/$_/gm;
  -    open F, ">$file" or die "Can't open $file: $!";
  -    print F $code or die $!;
  -    close F or die "Can't close $file: $!";
  -  }
  -}
  -
   chdir('parrot')  || die "You need to checkout parrot inside ponie";
   system($^X,'Configure.pl',
          @ARGV)
  @@ -124,8 +89,8 @@
       system('sh','Configure',@config_args)  && die "error";;
   
       my $inc_path = "$dir/parrot/include";
  -    my $inc_path_pmc = "$dir/parrot/classes";
  -    my $lib_path = "$dir/parrot/blib/lib";
  +    my $inc_path_pmc = "$dir/src/pmc";
  +    my @lib_path = ("$dir/parrot/blib/lib", "$dir/src/pmc");
   
       open (FH, "config.sh") or die $!;
       undef $/; $_ = <FH>;
  @@ -136,14 +101,15 @@
       if ($^O eq 'solaris') {
   	$bonus_libs = '-lrt ';
       }
  -    $bonus_libs .= "-lparrot -licuuc -licudata ";
  +    $bonus_libs .= "-lparrot -licuuc -licudata -lponie";
       if (" $Parrot::Config::PConfig{libs} " =~ / -lgmp /) {
   	$bonus_libs .= "-lgmp ";
       }
       $munge{cppflags} = $munge{ccflags} = " -I${inc_path} -I${inc_path_pmc}";
  -    $munge{ldflags} = $munge{lddlflags} = " -L${lib_path}";
  +    $munge{ldflags} = $munge{lddlflags}
  +      = join '', map " -L$_", @lib_path;
       $munge{libs} = $munge{perllibs} = "$bonus_libs ";
  -    $munge{libpth} = $lib_path;
  +    $munge{libpth} = join " ", @lib_path;
   
       # Put new text that the front. This gives our things priority. For example,
       # it ensures that our copy of ICU is found ahead of the system's.
  
  
  
  1.6       +8 -2      ponie/Makefile
  
  Index: Makefile
  ===================================================================
  RCS file: /cvs/public/ponie/Makefile,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -w -r1.5 -r1.6
  --- Makefile	2 Oct 2004 15:04:22 -0000	1.5
  +++ Makefile	14 Oct 2004 11:44:38 -0000	1.6
  @@ -1,4 +1,4 @@
  -# $Id: Makefile,v 1.5 2004/10/02 15:04:22 nicholas Exp $
  +# $Id: Makefile,v 1.6 2004/10/14 11:44:38 nicholas Exp $
   
   GEN_PMC = src/pmc/perl5null.pmc src/pmc/perl5nv.pmc src/pmc/perl5pv.pmc \
             src/pmc/perl5pvbm.pmc src/pmc/perl5pvcv.pmc src/pmc/perl5pvav.pmc \
  @@ -20,9 +20,15 @@
   parrot/parrot:
   	cd parrot && $(MAKE)
   
  -perl/perl: parrot/parrot
  +perl/perl: parrot/parrot src/pmc/libponie.a src/pmc/perl5pmcs.h
   	cd perl && $(MAKE)
   
  +src/pmc/libponie.a:	src/pmc/Makefile
  +	cd src/pmc && $(MAKE)
  +
  +src/pmc/Makefile: write_makefile.pl
  +	perl $< >$@
  +
   clean:
   	cd parrot && $(MAKE) clean
   	cd perl && $(MAKE) clean
  
  
  
  1.1                  ponie/fake_pmcs.pl
  
  Index: fake_pmcs.pl
  ===================================================================
  #!/usr/bin/perl -w
  # $Id: fake_pmcs.pl,v 1.1 2004/10/14 11:44:38 nicholas Exp $
  
  use strict;
  use File::Spec;
  
  # Fake up PMCs as needed.
  
  my $template_file = shift;
  die "$0: template PMC_names..." unless defined $template_file;
  
  open F, $template_file or die "Can't open $template_file: $!";
  
  my $template = do {local $/; <F>};
  
  my ($volume, $path) = File::Spec->splitpath($template_file);
  my ($atime, $mtime) = (stat $template_file)[8,9];
  
  close F or die $!;
  foreach (@ARGV) {
    my $leaf = "perl5$_.pmc";
    my $target = File::Spec->catpath($volume, $path, $leaf);
  
    my $code = $template;
    my $uc = uc $_;
    $code =~ s/QQQ/$uc/gm;
    $code =~ s/qqq/$_/gm;
  
    # Remember, -M is age, not timestamp. Older is bigger.
    if (-e $target and -M $target < -M $template_file) {
      # Target exists and is newer
      open F, $target or die "Can't open $target: $!";
      my $orig = do {local $/; <F>};
      warn "$target newer than $template_file and not the same, skipping"
        unless $orig eq $code;
      next;
    }
    open F, ">$target" or die "Can't open $target: $!";
    print F $code or die $!;
    close F or die "Can't close $target: $!";
    utime $atime, $mtime, $target
      or die "utime $atime, $mtime, $target failed: $!";
  }
  
  
  
  
  1.1                  ponie/write_makefile.pl
  
  Index: write_makefile.pl
  ===================================================================
  #!/usr/bin/perl -w
  # $Id: write_makefile.pl,v 1.1 2004/10/14 11:44:38 nicholas Exp $
  
  # A script to write (and therefore to re-write) the ponie specific makefiles.
  
  use strict;
  use Config;
  use FindBin;
  
  my $top = $FindBin::Bin;
  
  my @allPMCs
    = qw(null iv nv rv pv pviv pvnv pvmg pvbm pvgv pvlv pvav pvhv pvcv pvfm pvio);
  my @real = ();
  my %fakes;
  @fakes{@allPMCs} = ();
  delete $fakes{$_} foreach @real;
  
  system $^X, 'fake_pmcs.pl', "src/pmc/perl5cargo_cult.pmc", keys %fakes
    and die "Error";
  
  my $parrotdir = "$top/parrot";
  
  sub all {
    my $ext = shift;
    join ' ', map "perl5$_$ext", @_;
  }
  my $allobjs = join ' ', all ($Config{_o}, @allPMCs), "perl5pmcs$Config{_o}";
  my $alldumps = all (".dump", @allPMCs);
  my $allpmcs = all (".pmc", @allPMCs);
  
  print <<"EOM";
  # This Makefile was generated by $0
  
  PERL=$^X -I$parrotdir/lib
  CC=$Config{cc}
  CFLAGS=$Config{ccflags} $Config{optimize} -I$parrotdir/classes -I$parrotdir/include -I$top/perl
  
  libponie$Config{_a}: $allobjs
  	ar -r \$\@ \$\?
  	$Config{ranlib} \$\@
  
  perl5pmcs.c: $alldumps;
  	\$(PERL) $parrotdir/classes/pmc2c2.pl --no-lines --library perl5pmcs --c $allpmcs
  
  perl5pmcs$Config{_o}: perl5pmcs.c
  perl5pmcs.h: perl5pmcs.c
  EOM
  
  foreach (@allPMCs) {
    if (exists $fakes{$_}) {
      print <<"EOSNIP";
  
  perl5$_.pmc: perl5cargo_cult.pmc
  	\$(PERL) $top/fake_pmcs.pl perl5cargo_cult.pmc $_
  EOSNIP
    }
  
    print <<"EOSNIP";
  
  perl5$_.dump: perl5$_.pmc
  	\$(PERL) $parrotdir/classes/pmc2c2.pl --no-lines --include=../src/pmc --dump perl5$_.pmc
  
  perl5$_.c: $alldumps
  	\$(PERL) $parrotdir/classes/pmc2c2.pl --no-lines --c perl5$_.pmc
  
  perl5$_$Config{_o}: perl5$_.c
  EOSNIP
  }
  
  
  
  1.4       +2 -38     ponie/perl/Makefile.SH
  
  Index: Makefile.SH
  ===================================================================
  RCS file: /cvs/public/ponie/perl/Makefile.SH,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -w -r1.3 -r1.4
  --- Makefile.SH	30 Aug 2004 14:37:45 -0000	1.3
  +++ Makefile.SH	14 Oct 2004 11:44:38 -0000	1.4
  @@ -326,23 +326,20 @@
   h3 = pad.h patchlevel.h perl.h perlapi.h perly.h pp.h proto.h regcomp.h
   h4 = regexp.h scope.h sv.h unixish.h util.h iperlsys.h thread.h
   h5 = utf8.h warnings.h
  -hpmc = pmc_perl5null.h pmc_perl5iv.h pmc_perl5nv.h pmc_perl5rv.h pmc_perl5pv.h pmc_perl5pviv.h pmc_perl5pvnv.h pmc_perl5pvmg.h pmc_perl5pvbm.h pmc_perl5pvgv.h pmc_perl5pvlv.h pmc_perl5pvav.h pmc_perl5pvhv.h pmc_perl5pvcv.h pmc_perl5pvfm.h pmc_perl5pvio.h pmc_perl5pvio.h perl5pmcs.h
   h = $(h1) $(h2) $(h3) $(h4) $(h5)
   
   c1 = $(mallocsrc) av.c scope.c op.c doop.c doio.c dump.c hv.c mg.c reentr.c
   c2 = perl.c perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c
   c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c universal.c xsutils.c pad.c
   c4 = globals.c perlio.c perlapi.c numeric.c locale.c pp_pack.c pp_sort.c
  -cpmc = perl5null.c perl5iv.c perl5nv.c perl5rv.c perl5pv.c perl5pviv.c perl5pvnv.c perl5pvmg.c perl5pvbm.c perl5pvgv.c perl5pvlv.c perl5pvav.c perl5pvhv.c perl5pvcv.c perl5pvfm.c perl5pvio.c perl5pmcs.c
   
   c = $(c1) $(c2) $(c3) $(c4) miniperlmain.c perlmain.c
   
   obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT)
   obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT)
   obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) xsutils$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT)
  -obj4 = perl5null$(OBJ_EXT) perl5iv$(OBJ_EXT) perl5nv$(OBJ_EXT) perl5rv$(OBJ_EXT) perl5pv$(OBJ_EXT) perl5pviv$(OBJ_EXT) perl5pvnv$(OBJ_EXT) perl5pvmg$(OBJ_EXT) perl5pvbm$(OBJ_EXT) perl5pvgv$(OBJ_EXT) perl5pvlv$(OBJ_EXT) perl5pvav$(OBJ_EXT) perl5pvhv$(OBJ_EXT) perl5pvcv$(OBJ_EXT) perl5pvfm$(OBJ_EXT) perl5pvio$(OBJ_EXT) perl5pmcs$(OBJ_EXT)
   
  -obj = $(obj1) $(obj2) $(obj3) $(obj4) $(ARCHOBJS)
  +obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
   
   lintflags = -hbvxac
   
  @@ -709,39 +706,6 @@
   
   fi
   
  -for p in null iv nv rv pv pviv pvnv pvmg pvbm pvgv pvlv pvav pvhv pvcv pvfm pvio ; do
  -  pmcdumps="$pmcdumps ../src/pmc/perl5$p.dump"
  -  pmcs="$pmcs ../src/pmc/perl5$p.pmc"
  -done
  -
  -for p in null iv nv rv pv pviv pvnv pvmg pvbm pvgv pvlv pvav pvhv pvcv pvfm pvio ; do
  -  $spitshell >>Makefile <<!GROK!THIS!
  -
  -../src/pmc/perl5$p.dump : ../src/pmc/perl5$p.pmc
  -	perl ../parrot/classes/pmc2c2.pl --no-lines --include=../src/pmc --dump ../src/pmc/perl5$p.pmc
  -
  -perl5$p.c : $pmcdumps
  -	perl ../parrot/classes/pmc2c2.pl --no-lines --include=../src/pmc --c ../src/pmc/perl5$p.pmc
  -	sh mv-if-diff ../src/pmc/perl5$p.c perl5$p.c
  -	sh mv-if-diff ../src/pmc/pmc_perl5$p.h pmc_perl5$p.h
  -
  -perl5$p\$(OBJ_EXT) : perl5$p.c
  -
  -!GROK!THIS!
  -done
  -
  -$spitshell >>Makefile <<!GROK!THIS!
  -perl5pmcs\$(OBJ_EXT) : perl5pmcs.c
  -
  -perl5pmcs.c : $pmcdumps
  -	perl ../parrot/classes/pmc2c2.pl --no-lines --include=../src/pmc --library perl5pmcs --c $pmcs
  -
  -perl\$(OBJ_EXT) :  perl5pmcs.h
  -
  -perl5pmcs.h : perl5pmcs.c
  -
  -!GROK!THIS!
  -
   $spitshell >>Makefile <<'!NO!SUBS!'
   
   sperl$(OBJ_EXT): perl.c $(h)
  @@ -984,7 +948,7 @@
   
   # Do not 'make _mopup' directly.
   _mopup:
  -	rm -f *$(OBJ_EXT) *$(LIB_EXT) all perlmain.c $(cpmc) $(hpmc)
  +	rm -f *$(OBJ_EXT) *$(LIB_EXT) all perlmain.c
   	-rmdir .depending
   	-@test -f extra.pods && rm -f `cat extra.pods`
   	-@test -f vms/README_vms.pod && rm -f vms/README_vms.pod