X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=embed.pl;h=bec3ca157e2552f5f2bddb732f28d4e6dfbcf861;hb=7e107e90b7bd52c7fb110ac98da6bb7ab38e8959;hp=548294a38e67aef7232210de7c9ce443f76651e9;hpb=7f1be197b379d10925884de5897372b0bdcbff6d;p=p5sagit%2Fp5-mst-13.2.git diff --git a/embed.pl b/embed.pl index 548294a..bec3ca1 100755 --- a/embed.pl +++ b/embed.pl @@ -3,6 +3,11 @@ require 5.003; # keep this compatible, an old perl is all we may have before # we build the new one +BEGIN { + # Get function prototypes + require 'regen.pl'; +} + # # See database of global and static function prototypes in embed.fnc # This is used to generate prototype headers under various configurations, @@ -32,14 +37,14 @@ Edit those files and run 'make regen_headers' to effect changes. EOW if ($file =~ m:\.[ch]$:) { -$warning =~ s:^: * :gm; -$warning =~ s: +$::gm; -$warning =~ s: :/:; -$warning =~ s:$:/:; + $warning =~ s:^: * :gm; + $warning =~ s: +$::gm; + $warning =~ s: :/:; + $warning =~ s:$:/:; } else { -$warning =~ s:^:# :gm; -$warning =~ s: +$::gm; + $warning =~ s:^:# :gm; + $warning =~ s: +$::gm; } $warning; } # do_not_edit @@ -51,7 +56,8 @@ open IN, "embed.fnc" or die $!; sub walk_table (&@) { my $function = shift; my $filename = shift || '-'; - my $leader = shift || do_not_edit ($filename); + my $leader = shift; + defined $leader or $leader = do_not_edit ($filename); my $trailer = shift; my $F; local *F; @@ -59,7 +65,7 @@ sub walk_table (&@) { $F = $filename; } else { - unlink $filename; + safer_unlink $filename; open F, ">$filename" or die "Can't open $filename: $!"; $F = \*F; } @@ -83,7 +89,9 @@ sub walk_table (&@) { print $F @outs; # $function->(@args) is not 5.003 } print $F $trailer if $trailer; - close $F unless ref $filename; + unless (ref $filename) { + close $F or die "Error closing $filename: $!"; + } } sub munge_c_files () { @@ -96,7 +104,7 @@ sub munge_c_files () { if (@_ > 1) { $functions->{$_[2]} = \@_ if $_[@_-1] =~ /\.\.\./; } - } '/dev/null'; + } '/dev/null', ''; local $^I = '.bak'; while (<>) { # if (/^#\s*include\s+"perl.h"/) { @@ -200,8 +208,8 @@ sub write_global_sym { $ret; } -walk_table(\&write_protos, "proto.h"); -walk_table(\&write_global_sym, "global.sym"); +walk_table(\&write_protos, "proto.h", undef); +walk_table(\&write_global_sym, "global.sym", undef); # XXX others that may need adding # warnhook @@ -301,7 +309,7 @@ sub multoff ($$) { return hide("PL_$pre$sym", "PL_$sym"); } -unlink 'embed.h'; +safer_unlink 'embed.h'; open(EM, '> embed.h') or die "Can't create embed.h: $!\n"; print EM do_not_edit ("embed.h"), <<'END'; @@ -334,7 +342,7 @@ walk_table { } } $ret; -} \*EM; +} \*EM, ""; for $sym (sort keys %ppsym) { $sym =~ s/^Perl_//; @@ -387,7 +395,7 @@ walk_table { } } $ret; -} \*EM; +} \*EM, ""; for $sym (sort keys %ppsym) { $sym =~ s/^Perl_//; @@ -487,9 +495,9 @@ print EM <<'END'; END -close(EM); +close(EM) or die "Error closing EM: $!"; -unlink 'embedvar.h'; +safer_unlink 'embedvar.h'; open(EM, '> embedvar.h') or die "Can't create embedvar.h: $!\n"; @@ -594,10 +602,10 @@ print EM <<'END'; #endif /* PERL_POLLUTE */ END -close(EM); +close(EM) or die "Error closing EM: $!"; -unlink 'perlapi.h'; -unlink 'perlapi.c'; +safer_unlink 'perlapi.h'; +safer_unlink 'perlapi.c'; open(CAPI, '> perlapi.c') or die "Can't create perlapi.c: $!\n"; open(CAPIH, '> perlapi.h') or die "Can't create perlapi.h: $!\n"; @@ -695,7 +703,7 @@ print CAPIH <<'EOT'; #endif /* __perlapi_h__ */ EOT -close CAPIH; +close CAPIH or die "Error closing CAPIH: $!"; print CAPI do_not_edit ("perlapi.c"), <<'EOT'; @@ -745,7 +753,7 @@ END_EXTERN_C #endif /* MULTIPLICITY */ EOT -close(CAPI); +close(CAPI) or die "Error closing CAPI: $!"; # functions that take va_list* for implementing vararg functions # NOTE: makedef.pl must be updated if you add symbols to %vfuncs