# New Ticket Created by  "Paul Cochrane" 
# Please include the string:  [perl #40480]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=40480 >


Hi,

This patch ensures that when platform.c and platform.h are generated,
that the C-code coda isn't included more than once, and that it is
included at the end of the generated file.

HTH,

Regards,

Paul

files affected:

config/gen/platform.pm
Index: config/gen/platform.pm
===================================================================
--- config/gen/platform.pm	(revision 14845)
+++ config/gen/platform.pm	(working copy)
@@ -50,6 +50,15 @@
     print " ($generated) " if $verbose;
     print("\n") if defined $verbose && $verbose == 2;
 
+    my $coda = <<'CODA';
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+CODA
+
     # headers are merged into platform.h
     my @headers = qw/
         io.h
@@ -88,13 +97,20 @@
             local $/ = undef;
             print("\t$header_file\n") if defined $verbose && $verbose == 2;
             open IN_H, "< $header_file" or die "Can't open $header_file: $!";
+
+	    # slurp in the header file
+	    my $in_h = <IN_H>;
+
+	    # remove the (in this case) superfluous coda
+	    $in_h =~ s{\Q$coda\E\n*\z}{}xgs;
+
             print PLATFORM_H <<"END_HERE";
 /*
 ** $header_file:
 */
 #line 1 "$header_file"
 END_HERE
-            print PLATFORM_H <IN_H>, "\n\n";
+            print PLATFORM_H $in_h, "\n\n";
             close IN_H;
         }
 
@@ -129,6 +145,12 @@
 #endif
 END_HERE
 
+    # append the C code coda to the generated file
+    print PLATFORM_H <<"END_HERE";
+
+$coda
+END_HERE
+
     close PLATFORM_H;
 
     # implementation files are merged into platform.c
@@ -162,13 +184,20 @@
     if (-e "config/gen/platform/$platform/begin.c") {
         local $/ = undef;
         open IN_C, "< config/gen/platform/$platform/begin.c" or die "Can't open begin.c: $!";
+
+	# slurp in the C file
+	my $in_c = <IN_C>;
+
+	# remove the (in this case) superfluous coda
+	$in_c =~ s{\Q$coda\E\n*\z}{}xgs;
+
         print PLATFORM_C <<"END_HERE";
 /*
 ** begin.c
 */
 #line 1 "config/gen/platform/$platform/begin.c"
 END_HERE
-        print PLATFORM_C <IN_C>, "\n\n";
+        print PLATFORM_C $in_c, "\n\n";
         close IN_C;
     }
 
@@ -188,13 +217,20 @@
             local $/ = undef;
             print("\t$impl_file\n") if defined $verbose && $verbose == 2;
             open IN_C, "< $impl_file" or die "Can't open $impl_file: $!";
+
+	    # slurp in the C file
+	    my $in_c = <IN_C>;
+
+	    # remove the (in this case) superfluous coda
+	    $in_c =~ s{\Q$coda\E\n*\z}{}xgs;
+
             print PLATFORM_C <<"END_HERE";
 /*
 ** $impl_file:
 */
 #line 1 "$impl_file"
 END_HERE
-            print PLATFORM_C <IN_C>, "\n\n";
+            print PLATFORM_C $in_c, "\n\n";
             close IN_C;
         }
     }
@@ -217,6 +253,12 @@
         }
     }
 
+    # append the C code coda to the generated file
+    print PLATFORM_C <<"END_HERE";
+
+$coda
+END_HERE
+
     close PLATFORM_C;
 
     if ($conf->data->get('platform_asm')) {

Reply via email to