Work also without perlio.
[p5sagit/p5-mst-13.2.git] / embed.pl
index 6aa391e..8da5df7 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -5,7 +5,7 @@ require 5.003;  # keep this compatible, an old perl is all we may have before
 
 BEGIN {
     # Get function prototypes
-    require 'regen.pl';
+    require 'regen_lib.pl';
 }
 
 #
@@ -18,11 +18,30 @@ BEGIN {
 sub do_not_edit ($)
 {
     my $file = shift;
+    
+    my $years;
+
+    if ($file eq 'embed.h') {
+        $years = '1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003';
+    } elsif ($file eq 'embedvar.h') {
+        $years = '1999, 2000, 2001, 2002, 2003';
+    } elsif ($file eq 'global.sym') {
+        $years = '1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003';
+    } elsif ($file eq 'perlapi.c') {
+        $years = '1999, 2000, 2001';
+    } elsif ($file eq 'perlapi.h') {
+        $years = '1999, 2000, 2001, 2002, 2003';
+    } elsif ($file eq 'proto.h') {
+        $years = '1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003';
+    }
+
+    $years =~ s/1999,/1999,\n  / if length $years > 40;
+
     my $warning = <<EOW;
 
    $file
 
-   Copyright (c) 1997-2002, Larry Wall
+   Copyright (C) $years, by Larry Wall and others
 
    You may distribute under the terms of either the GNU General Public
    License or the Artistic License, as specified in the README file.
@@ -184,7 +203,7 @@ sub write_protos {
            my $prefix = $flags =~ /n/ ? '' : 'pTHX_';
            my $args = scalar @args;
            $ret .= "\n#ifdef CHECK_FORMAT\n";
-           $ret .= sprintf " __attribute__((format(printf,%s%d,%s%d)))",
+           $ret .= sprintf " __attribute__((format(__printf__,%s%d,%s%d)))",
                                    $prefix, $args - 1, $prefix, $args;
            $ret .= "\n#endif\n";
        }
@@ -200,8 +219,9 @@ sub write_global_sym {
     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";
        }
     }
@@ -316,7 +336,11 @@ print EM do_not_edit ("embed.h"), <<'END';
 
 /* (Doing namespace management portably in C is really gross.) */
 
-#ifndef PERL_HIDE_SHORT_NAMES
+/* 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 */
 
@@ -340,7 +364,7 @@ walk_table {
                $ret .= hide($func,"Perl_$func");
            }
        }
-         unless ($flags =~ /A/) {
+       if ($ret ne '' && $flags !~ /A/) {
            if ($flags =~ /E/) {
                $ret = "#if defined(PERL_CORE) || defined(PERL_EXT)\n$ret#endif\n";
            } else {
@@ -428,7 +452,7 @@ print EM <<'END';
 
 #endif /* PERL_IMPLICIT_CONTEXT */
 
-#endif /* #ifndef PERL_HIDE_SHORT_NAMES */
+#endif /* #ifndef PERL_NO_SHORT_NAMES */
 
 END
 
@@ -474,7 +498,7 @@ print EM <<'END';
    an extra argument but grab the context pointer using the macro
    dTHX.
  */
-#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_HIDE_SHORT_NAMES)
+#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