Author: jkeenan
Date: Mon Feb 12 19:36:00 2007
New Revision: 16961

Modified:
   branches/buildtools/lib/Parrot/Ops2c/Utils.pm
   branches/buildtools/tools/build/ops2c.pl

Log:
1.  Added 'script' as argument to Parrot::Ops2c::Utils::new().
2.  Completed migration of initialization code from tools/build/ops2c.pl to 
Parrot::Ops2c::Utils::new().  This entailed moving these subroutines to 
Utils.pm:  _compose_preamble().
3.  Migrated code for printing C-header file from tools/build/ops2c.pl to 
Parrot::Ops2c::Utils::print_c_header_file.  This entailed moving these 
subroutines to Utils.pm:  _print_preamble_header(); 
_print_run_core_func_decl_header(); _print_coda() (though latter is still also 
defined in ops2c.pl, as it is still needed by printing to source file).

Modified: branches/buildtools/lib/Parrot/Ops2c/Utils.pm
==============================================================================
--- branches/buildtools/lib/Parrot/Ops2c/Utils.pm       (original)
+++ branches/buildtools/lib/Parrot/Ops2c/Utils.pm       Mon Feb 12 19:36:00 2007
@@ -1,5 +1,5 @@
 # Copyright (C) 2004-2006, The Perl Foundation.
-# $Id: Utils.pm 16894 2007-02-04 22:54:29Z jkeenan $
+# $Id$
 package Parrot::Ops2c::Utils;
 use strict;
 use lib ("lib/");
@@ -14,6 +14,7 @@
     }
     my $flagref = $argsref->{flag};
     my @argv = @{$argsref->{argv}};
+    $argsref->{script} ||= "tools/build/ops2c.pl";
     unless (@argv) {
         print STDERR "Parrot::Ops2c::Utils::new() requires 'trans' options: 
$!";
         return;
@@ -41,15 +42,15 @@
     $base =~ s/\.ops$//;
     my $base_ops_stub = $base . q{_ops} . $suffix;
     my $base_ops_h    = $base_ops_stub . q{.h};
-    
+
     my $incdir  = "include/parrot/oplib";
     my $include = "parrot/oplib/$base_ops_h";
     my $header  = "include/$include";
-    
+
     # SOURCE is closed and reread, which confuses make -j
     # create a temp file and rename it
     my $source = "src/ops/$base_ops_stub.c.temp";
-    
+
     if ( $base =~ m!^src/dynoplibs/! || $flagref->{dynamic} ) {
         $source             =~ s!src/ops/!!;
         $header             = $base_ops_h;
@@ -57,7 +58,7 @@
         $include            = $base_ops_h;
         $flagref->{dynamic} = 1;
     }
-    
+
     my $sym_export = $flagref->{dynamic} 
         ? 'PARROT_DYNEXT_EXPORT'
         : 'PARROT_API';
@@ -76,7 +77,7 @@
             flag        => $flagref,
         } );
     }
-    
+
     my %versions = (
         major => $ops->major_version,
         minor => $ops->minor_version,
@@ -85,6 +86,20 @@
     my $num_ops       = scalar $ops->ops;
     my $num_entries   = $num_ops + 1;          # For trailing NULL
 
+    if ( ! $flagref->{dynamic} && ! -d $incdir ) {
+        mkdir( $incdir, 0755 )
+            or die "ops2c.pl: Could not mkdir $incdir $!!\n";
+    }
+
+    my $preamble = _compose_preamble($file, $argsref->{script});
+
+    my $init_func = join q{_}, (
+        q{Parrot},
+        q{DynOp},
+        $base . $suffix,
+        @versions{ qw(major minor patch) },
+    );
+
 ###############################
     $argsref->{argv} = [EMAIL PROTECTED];
     $argsref->{trans} = $trans;
@@ -103,6 +118,9 @@
     $argsref->{num_ops} = $num_ops;
     $argsref->{num_entries} = $num_entries;
 
+    $argsref->{preamble} = $preamble;
+    $argsref->{init_func} = $init_func;
+
     $argsref->{flag} = $flagref;
     return bless $argsref, $class;
 }
@@ -125,14 +143,14 @@
 
     foreach my $f ( $argsref->{file}, @{$argsref->{argv}} ) {
         if ( $opsfiles{$f} ) {
-            print STDERR "$0: Ops file '$f' mentioned more than once!\n";
+            print STDERR "$argsref->{script}: Ops file '$f' mentioned more 
than once!\n";
             next;
         }
 
         $opsfiles{$f} = 1;
         push @opsfiles, $f;
 
-        die "$0: Could not read ops file '$f'!\n" unless -r $f;
+        die "$argsref->{script}: Could not read ops file '$f'!\n" unless -r $f;
     }
 
     my $ops = Parrot::OpsFile->new( [EMAIL PROTECTED], 
$argsref->{flag}->{nolines} );
@@ -144,4 +162,91 @@
     return $ops;
 }
 
+sub _compose_preamble {
+    my ($file, $script) = @_;
+    my $preamble = <<END_C;
+/* ex: set ro:
+ * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+ *
+ * This file is generated automatically from '$file' (and possibly other
+ * .ops files). by $script.
+ *
+ * Any changes made here will be lost!
+ *
+ */
+
+END_C
+    return $preamble;
+}
+
+sub print_c_header_file {
+    my $self = shift;
+
+    open my $HEADER, '>', $self->{header}
+        or die "ops2c.pl: Cannot open header file '$self->{header}' for 
writing: $!!\n";
+
+    _print_preamble_header( {
+        fh          => $HEADER,
+        preamble    => $self->{preamble},
+        flag        => $self->{flag},
+        sym_export  => $self->{sym_export},
+        init_func   => $self->{init_func},
+    } );
+
+    _print_run_core_func_decl_header( {
+        trans   => $self->{trans},
+        fh      => $HEADER,
+        base    => $self->{base},
+    } );
+
+    _print_coda($HEADER);
+
+    close $HEADER or die "Unable to close handle to $self->{header}: $!";
+    (-e $self->{header}) or die "$self->{header} not created: $!";
+    (-s $self->{header}) or die "$self->{header} has 0 size: $!";
+    return $self->{header};
+}
+
+sub _print_preamble_header {
+    my $argsref = shift;
+    my $fh = $argsref->{fh};
+
+    print $fh $argsref->{preamble};
+    if ($argsref->{flag}->{dynamic}) {
+        print $fh "#define PARROT_IN_EXTENSION\n";
+    }
+    print $fh <<END_C;
+#include "parrot/parrot.h"
+#include "parrot/oplib.h"
+
+$argsref->{sym_export} extern op_lib_t *$argsref->{init_func}(long init);
+
+END_C
+}
+
+sub _print_run_core_func_decl_header {
+    my $argsref = shift;
+    if ( $argsref->{trans}->can("run_core_func_decl") ) {
+        my $run_core_func = 
+            $argsref->{trans}->run_core_func_decl($argsref->{base});
+        my $fh = $argsref->{fh};
+        print $fh "$run_core_func;\n";
+    } else {
+        return;
+    }
+}
+
+sub _print_coda {
+    my $fh = shift;
+    print $fh <<END_C;
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+END_C
+}
+
 1;

Modified: branches/buildtools/tools/build/ops2c.pl
==============================================================================
--- branches/buildtools/tools/build/ops2c.pl    (original)
+++ branches/buildtools/tools/build/ops2c.pl    Mon Feb 12 19:36:00 2007
@@ -35,8 +35,9 @@
 
 #########################
 my $self = Parrot::Ops2c::Utils->new( {
-    argv            => [ @ARGV ],
-    flag            => $flagref,
+    argv    => [ @ARGV ],
+    flag    => $flagref,
+    script  => $0,
 } );
 if (not defined $self) {
     Usage();
@@ -96,6 +97,19 @@
 #my $num_ops       = scalar $ops->ops;
 #my $num_entries   = $num_ops + 1;          # For trailing NULL
 
+#if ( !$flagref->{dynamic} && !-d $incdir ) {
+#    mkdir( $incdir, 0755 ) or die "ops2c.pl: Could not mkdir $incdir $!!\n";
+#}
+#
+#my $preamble = _compose_preamble($file, $0);
+#
+#my $init_func = join q{_}, (
+#    q{Parrot},
+#    q{DynOp},
+#    $base . $suffix,
+#    @versions{ qw(major minor patch) },
+#);
+
 #########################
 local @ARGV = @{$self->{argv}};
 my $trans = $self->{trans};
@@ -114,61 +128,33 @@
 my $num_ops = $self->{num_ops};
 my $num_entries  = $self->{num_entries};
 
-#print STDERR Dumper (
-#    [EMAIL PROTECTED],
-#    $trans,
-#    $suffix,
-#    $file,
-#    $base,
-#    $incdir,
-#    $include,
-#    $header,
-#    $source,
-#    $sym_export,
-#    $ops,
-#    \%versions,
-#    $num_ops,
-#    $num_entries,
-#);
-#########################
-#
-# Open the output files:
-#
-
-if ( !$flagref->{dynamic} && !-d $incdir ) {
-    mkdir( $incdir, 0755 ) or die "ops2c.pl: Could not mkdir $incdir $!!\n";
-}
-
-my $preamble = _compose_preamble($file, $0);
+my $preamble = $self->{preamble};
+my $init_func = $self->{init_func};
 
-my $init_func = join q{_}, (
-    q{Parrot},
-    q{DynOp},
-    $base . $suffix,
-    @versions{ qw(major minor patch) },
-);
+#########################
 
 # Open the C-header (.h) file
-open my $HEADER, '>', $header
-    or die "ops2c.pl: Cannot open header file '$header' for writing: $!!\n";
-
-_print_preamble_header( {
-    fh          => $HEADER,
-    preamble    => $preamble,
-    flag        => $flagref,
-    sym_export  => $sym_export,
-    init_func   => $init_func,
-} );
-
-_print_run_core_func_decl_header( {
-    trans   => $trans,
-    fh      => $HEADER,
-    base    => $base,
-} );
-
-_print_coda($HEADER);
-
-close $HEADER or die "Unable to close handle to $header: $!";
+#open my $HEADER, '>', $header
+#    or die "ops2c.pl: Cannot open header file '$header' for writing: $!!\n";
+#
+#_print_preamble_header( {
+#    fh          => $HEADER,
+#    preamble    => $preamble,
+#    flag        => $flagref,
+#    sym_export  => $sym_export,
+#    init_func   => $init_func,
+#} );
+#
+#_print_run_core_func_decl_header( {
+#    trans   => $trans,
+#    fh      => $HEADER,
+#    base    => $base,
+#} );
+#
+#_print_coda($HEADER);
+#
+#close $HEADER or die "Unable to close handle to $header: $!";
+$self->print_c_header_file();
 ##### END printing to $HEADER #####
 
 my $defines         = $trans->defines();    # Invoked as:  ${defines}
@@ -359,50 +345,33 @@
 #    return $ops;
 #}
 
-sub _compose_preamble {
-    my ($file, $script) = @_;
-    my $preamble = <<END_C;
-/* ex: set ro:
- * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
- *
- * This file is generated automatically from '$file' (and possibly other
- * .ops files). by $script.
- *
- * Any changes made here will be lost!
- *
- */
-
-END_C
-    return $preamble;
-}
-
-sub _print_preamble_header {
-    my $argsref = shift;
-    my $fh = $argsref->{fh};
-
-    print $fh $argsref->{preamble};
-    if ($argsref->{flag}->{dynamic}) {
-        print $fh "#define PARROT_IN_EXTENSION\n";
-    }
-    print $fh <<END_C;
-#include "parrot/parrot.h"
-#include "parrot/oplib.h"
-
-$argsref->{sym_export} extern op_lib_t *$argsref->{init_func}(long init);
-
-END_C
-}
-
-sub _print_run_core_func_decl_header {
-    my $argsref = shift;
-    if ( $argsref->{trans}->can("run_core_func_decl") ) {
-        my $run_core_func = $trans->run_core_func_decl($argsref->{base});
-        my $fh = $argsref->{fh};
-        print $fh "$run_core_func;\n";
-    } else {
-        return;
-    }
-}
+#sub _print_preamble_header {
+#    my $argsref = shift;
+#    my $fh = $argsref->{fh};
+#
+#    print $fh $argsref->{preamble};
+#    if ($argsref->{flag}->{dynamic}) {
+#        print $fh "#define PARROT_IN_EXTENSION\n";
+#    }
+#    print $fh <<END_C;
+##include "parrot/parrot.h"
+##include "parrot/oplib.h"
+#
+#$argsref->{sym_export} extern op_lib_t *$argsref->{init_func}(long init);
+#
+#END_C
+#}
+#
+#sub _print_run_core_func_decl_header {
+#    my $argsref = shift;
+#    if ( $argsref->{trans}->can("run_core_func_decl") ) {
+#        my $run_core_func = $trans->run_core_func_decl($argsref->{base});
+#        my $fh = $argsref->{fh};
+#        print $fh "$run_core_func;\n";
+#    } else {
+#        return;
+#    }
+#}
 
 sub _print_coda {
     my $fh = shift;
@@ -1058,3 +1027,23 @@
 #   fill-column: 100
 # End:
 # vim: expandtab shiftwidth=4:
+
+
+__END__
+
+#print STDERR Dumper (
+#    [EMAIL PROTECTED],
+#    $trans,
+#    $suffix,
+#    $file,
+#    $base,
+#    $incdir,
+#    $include,
+#    $header,
+#    $source,
+#    $sym_export,
+#    $ops,
+#    \%versions,
+#    $num_ops,
+#    $num_entries,
+#);

Reply via email to