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_lib.pl';
+}
+
#
# See database of global and static function prototypes in embed.fnc
# This is used to generate prototype headers under various configurations,
$file
- Copyright (c) 1997-2002, Larry Wall
+ Copyright (c) 1997-2003, Larry Wall
You may distribute under the terms of either the GNU General Public
License or the Artistic License, as specified in the README file.
$F = $filename;
}
else {
- unlink $filename;
+ safer_unlink $filename;
open F, ">$filename" or die "Can't open $filename: $!";
$F = \*F;
}
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 () {
my $ret = "";
if (@_ > 1) {
my ($flags,$retval,$func,@args) = @_;
- if ($flags =~ /A/ && $flags !~ /[xm]/) { # public API, so export
- $func = "Perl_$func" if $flags =~ /p/;
+ if ($flags =~ /[AX]/ && $flags !~ /[xm]/
+ || $flags =~ /b/) { # public API, so export
+ $func = "Perl_$func" if $flags =~ /[pbX]/;
$ret = "$func\n";
}
}
curcop compiling
tainting tainted stack_base stack_sp sv_arenaroot
no_modify
- curstash DBsub DBsingle debstash
+ curstash DBsub DBsingle DBassertion debstash
rsfp
stdingv
defgv
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';
/* (Doing namespace management portably in C is really gross.) */
-/* NO_EMBED is no longer supported. i.e. EMBED is always active. */
+/* By defining PERL_NO_SHORT_NAMES (not done by default) the short forms
+ * (like warn instead of Perl_warn) for the API are not defined.
+ * Not defining the short forms is a good thing for cleaner embedding. */
+
+#ifndef PERL_NO_SHORT_NAMES
/* Hide global symbols */
$ret .= hide($func,"Perl_$func");
}
}
+ if ($ret ne '' && $flags !~ /A/) {
+ if ($flags =~ /E/) {
+ $ret = "#if defined(PERL_CORE) || defined(PERL_EXT)\n$ret#endif\n";
+ } else {
+ $ret = "#ifdef PERL_CORE\n$ret#endif\n";
+ }
+ }
}
$ret;
} \*EM, "";
$ret .= $alist . ")\n";
}
}
+ unless ($flags =~ /A/) {
+ if ($flags =~ /E/) {
+ $ret = "#if defined(PERL_CORE) || defined(PERL_EXT)\n$ret#endif\n";
+ } else {
+ $ret = "#ifdef PERL_CORE\n$ret#endif\n";
+ }
+ }
}
$ret;
} \*EM, "";
#endif /* PERL_IMPLICIT_CONTEXT */
+#endif /* #ifndef PERL_NO_SHORT_NAMES */
+
END
print EM <<'END';
an extra argument but grab the context pointer using the macro
dTHX.
*/
-#if defined(PERL_IMPLICIT_CONTEXT)
+#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_SHORT_NAMES)
# define croak Perl_croak_nocontext
# define deb Perl_deb_nocontext
# define die Perl_die_nocontext
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";
#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";
#endif /* __perlapi_h__ */
EOT
-close CAPIH;
+close CAPIH or die "Error closing CAPIH: $!";
print CAPI do_not_edit ("perlapi.c"), <<'EOT';
#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