You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2009/09/09 07:24:17 UTC

svn commit: r812776 - in /lucene/lucy/trunk: boilerplater/lib/Boilerplater/Binding/ perl/buildlib/Lucy/ perl/lib/ perl/lib/Lucy/ perl/t/ perl/t/charmonizer/

Author: marvin
Date: Wed Sep  9 05:24:16 2009
New Revision: 812776

URL: http://svn.apache.org/viewvc?rev=812776&view=rev
Log:
Commit LUCY-34.  Start compiling Lucy XS code.  Integrate Boilerplater and its
Perl bindings with the Perl build tools.  Break up the Charmonizer test suite
into individual test files when run from Perl.

Added:
    lucene/lucy/trunk/perl/lib/Lucy/Test.pm   (with props)
    lucene/lucy/trunk/perl/t/charmonizer/
    lucene/lucy/trunk/perl/t/charmonizer/001-integers.t   (with props)
    lucene/lucy/trunk/perl/t/charmonizer/002-func_macro.t   (with props)
    lucene/lucy/trunk/perl/t/charmonizer/003-headers.t   (with props)
    lucene/lucy/trunk/perl/t/charmonizer/004-large_files.t   (with props)
    lucene/lucy/trunk/perl/t/charmonizer/005-unused_vars.t   (with props)
    lucene/lucy/trunk/perl/t/charmonizer/006-variadic_macros.t   (with props)
    lucene/lucy/trunk/perl/t/charmonizer/007-dirmanip.t   (with props)
Removed:
    lucene/lucy/trunk/perl/t/100-charmonizer.t
Modified:
    lucene/lucy/trunk/boilerplater/lib/Boilerplater/Binding/Core.pm
    lucene/lucy/trunk/boilerplater/lib/Boilerplater/Binding/Perl.pm
    lucene/lucy/trunk/perl/buildlib/Lucy/Build.pm
    lucene/lucy/trunk/perl/lib/Lucy.pm

Modified: lucene/lucy/trunk/boilerplater/lib/Boilerplater/Binding/Core.pm
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/boilerplater/lib/Boilerplater/Binding/Core.pm?rev=812776&r1=812775&r2=812776&view=diff
==============================================================================
--- lucene/lucy/trunk/boilerplater/lib/Boilerplater/Binding/Core.pm (original)
+++ lucene/lucy/trunk/boilerplater/lib/Boilerplater/Binding/Core.pm Wed Sep  9 05:24:16 2009
@@ -93,6 +93,13 @@
 #include "charmony.h"
 
 $typedefs
+typedef struct lucy_Obj lucy_Obj;
+typedef struct lucy_VTable lucy_VTable;
+typedef struct lucy_CharBuf lucy_CharBuf;
+typedef struct lucy_ZombieCharBuf lucy_ZombieCharBuf;
+typedef struct lucy_Hash lucy_Hash;
+typedef struct lucy_VArray lucy_VArray;
+typedef struct lucy_Err lucy_Err;
 
 /* Refcount / host object */
 typedef union {

Modified: lucene/lucy/trunk/boilerplater/lib/Boilerplater/Binding/Perl.pm
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/boilerplater/lib/Boilerplater/Binding/Perl.pm?rev=812776&r1=812775&r2=812776&view=diff
==============================================================================
--- lucene/lucy/trunk/boilerplater/lib/Boilerplater/Binding/Perl.pm (original)
+++ lucene/lucy/trunk/boilerplater/lib/Boilerplater/Binding/Perl.pm Wed Sep  9 05:24:16 2009
@@ -160,13 +160,16 @@
     my ( $self, $generated_xs, $xs_init, $hand_rolled_xs ) = @_;
     return <<END_STUFF;
 #define C_LUCY_ZOMBIECHARBUF
-#include "xs/XSBind.h"
+/* #include "xs/XSBind.h" */
 #include "boil.h"
 #include "$self->{boot_h_file}"
 
-#include "Lucy/Obj/Host.h"
-#include "Lucy/Util/MemManager.h"
-#include "Lucy/Util/StringHelper.h"
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+/* #include "Lucy/Obj/Host.h" */
+/* #include "Lucy/Util/MemManager.h" */
+/* #include "Lucy/Util/StringHelper.h" */
 
 #include "Charmonizer/Test.h"
 #include "Charmonizer/Test/AllTests.h"
@@ -181,8 +184,7 @@
 {
     char* file = __FILE__;
     CHY_UNUSED_VAR(cv); 
-    CHY_UNUSED_VAR(items);
-    $xs_init
+    CHY_UNUSED_VAR(items); $xs_init
 }
 
 $hand_rolled_xs

Modified: lucene/lucy/trunk/perl/buildlib/Lucy/Build.pm
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/buildlib/Lucy/Build.pm?rev=812776&r1=812775&r2=812776&view=diff
==============================================================================
--- lucene/lucy/trunk/perl/buildlib/Lucy/Build.pm (original)
+++ lucene/lucy/trunk/perl/buildlib/Lucy/Build.pm Wed Sep  9 05:24:16 2009
@@ -1,6 +1,9 @@
 use strict;
 use warnings;
 
+use lib '../boilerplater/lib';
+use lib 'boilerplater/lib';
+
 package Lucy::Build::CBuilder;
 BEGIN { our @ISA = "ExtUtils::CBuilder"; }
 use Config;
@@ -92,6 +95,8 @@
 my $AUTOGEN_DIR          = 'autogen';
 my $XS_SOURCE_DIR        = 'xs';
 
+sub new { shift->SUPER::new( recursive_test_files => 1, @_ ) }
+
 # Collect all relevant Charmonizer files.
 sub ACTION_metaquote {
     my $self          = shift;
@@ -168,7 +173,6 @@
     # Write the infile with which to communicate args to charmonize.
     my $os_name   = lc( $Config{osname} );
     my $flags     = "$Config{ccflags} " . $self->extra_ccflags;
-    
     my $verbosity = $ENV{DEBUG_CHARM} ? 2 : 1;
     my $cc        = "$Config{cc}";
     unlink $charmony_in;
@@ -194,58 +198,240 @@
     }
 }
 
-sub ACTION_build_charm_test {
+sub _compile_boilerplater {
     my $self = shift;
 
+    require Boilerplater::Hierarchy;
+    require Boilerplater::Binding::Perl;
+    require Boilerplater::Binding::Perl::Class;
+
+    # Compile Boilerplater.
+    my $hierarchy = Boilerplater::Hierarchy->new(
+        source => $CORE_SOURCE_DIR,
+        dest   => $AUTOGEN_DIR,
+    );
+    $hierarchy->build;
+
+    # Process all __BINDING__ blocks.
+    my $pm_filepaths = $self->rscan_dir( 'lib', qr/\.pm$/ );
+    my @pm_filepaths_with_xs;
+    for my $pm_filepath (@$pm_filepaths) {
+        open( my $pm_fh, '<', $pm_filepath )
+            or die "Can't open '$pm_filepath': $!";
+        my $pm_content = do { local $/; <$pm_fh> };
+        my ($autobind_frag)
+            = $pm_content =~ /^__BINDING__\s*(.*?)(?:^__\w+__|\Z)/sm;
+        if ($autobind_frag) {
+            push @pm_filepaths_with_xs, $pm_filepath;
+            eval $autobind_frag;
+            confess("Invalid __BINDING__ from $pm_filepath: $@") if $@;
+        }
+    }
+
+    my $binding = Boilerplater::Binding::Perl->new(
+        parcel      => $self->project_name,
+        hierarchy   => $hierarchy,
+        lib_dir     => 'lib',
+        boot_class  => $self->project_name,
+        header      => $self->autogen_header,
+        footer      => $self->copyfoot,
+    );
+
+    return ( $hierarchy, $binding, \@pm_filepaths_with_xs );
+}
+
+sub ACTION_pod { shift->_write_pod(@_) }
+
+sub _write_pod {
+    my ( $self, $binding ) = @_;
+    if ( !$binding ) {
+        ( undef, $binding ) = $self->_compile_boilerplater;
+    }
+    my $pod_files = $binding->prepare_pod( lib_dir => 'lib' );
+    while ( my ( $filepath, $pod ) = each %$pod_files ) {
+        $self->add_to_cleanup($filepath);
+        unlink $filepath;
+        print "Writing $filepath...\n";
+        sysopen( my $pod_fh, $filepath, O_CREAT | O_EXCL | O_WRONLY )
+            or confess("Can't open '$filepath': $!");
+        print $pod_fh $pod;
+    }
+}
+
+sub ACTION_boilerplater {
+    my $self        = shift;
+    my $xs_filepath = $self->xs_filepath;
+
     $self->dispatch('charmony');
 
-    # collect source files
-    my $source_path = catfile( $base_dir, 'charmonizer', 'charm_test.c' );
-    my $exe_path = "charm_test$Config{_exe}";
-    my $test_source_dir
-        = catdir( $CHARMONIZER_GEN_DIR, qw( Charmonizer Test ) );
-    my $source_files = $self->rscan_dir( $CHARMONIZER_GEN_DIR,
-        sub { $File::Find::name =~ m#Charmonizer/Test.*?\.c$# } );
-    push @$source_files, $source_path;
-
-    # collect include dirs
-    my @include_dirs = ( $CHARMONIZER_GEN_DIR, curdir() );
-
-    # Add Windows supplements.
-    if ( $Config{osname} =~ /mswin/i ) {
-        my $win_compat_dir = catdir( $base_dir, 'c_src', 'compat' );
-        push @include_dirs, $win_compat_dir;
-        my $win_compat_files = $self->rscan_dir( $win_compat_dir,
-            sub { $File::Find::name =~ m#\.c$# } );
-        push @$source_files, @$win_compat_files;
+    # Create destination dir, copy xs helper files.
+    if ( !-d $AUTOGEN_DIR ) {
+        mkdir $AUTOGEN_DIR or die "Can't mkdir '$AUTOGEN_DIR': $!";
+    }
+    $self->add_to_cleanup($AUTOGEN_DIR);
+
+    my $pm_filepaths = $self->rscan_dir( 'lib',            qr/\.pm$/ );
+    my $bp_filepaths = $self->rscan_dir( $CORE_SOURCE_DIR, qr/\.bp$/ );
+
+    # Don't bother parsing Boilerplater files if everything's up to date.
+    return
+        if $self->up_to_date(
+        [ @$bp_filepaths, @$pm_filepaths ],
+        [ $xs_filepath,   $AUTOGEN_DIR, ]
+        );
+
+    # Write out all autogenerated files.
+    my ( $hierarchy, $perl_binding, $pm_filepaths_with_xs )
+        = $self->_compile_boilerplater;
+    require Boilerplater::Binding::Core;
+    my $core_binding = Boilerplater::Binding::Core->new(
+        hierarchy => $hierarchy,
+        dest      => $AUTOGEN_DIR,
+        header    => $self->autogen_header,
+        footer    => $self->copyfoot,
+    );
+    my $modified = $core_binding->write_all_modified(1);
+    if ($modified) {
+        unlink('typemap');
+        print "Writing typemap...\n";
+        $self->add_to_cleanup('typemap');
+        $perl_binding->write_xs_typemap;
+    }
+
+    # Rewrite XS if either any .bp files or relevant .pm files were modified.
+    $modified ||=
+        $self->up_to_date( \@$pm_filepaths_with_xs, $xs_filepath )
+        ? 0
+        : 1;
+
+    if ($modified) {
+        $self->add_to_cleanup($xs_filepath);
+        $self->add_to_cleanup( $self->autobind_pm_path );
+        $perl_binding->write_boot;
+        $perl_binding->write_bindings;
+        $self->_write_pod($perl_binding);
+    }
+
+    # Touch autogenerated files in case the modifications were inconsequential
+    # and didn't trigger a rewrite, so that we won't have to check them again
+    # next pass.
+    if (!$self->up_to_date(
+            [ @$bp_filepaths, @$pm_filepaths_with_xs ], $xs_filepath
+        )
+        )
+    {
+        utime( time, time, $xs_filepath );    # touch
     }
+    if (!$self->up_to_date(
+            [ @$bp_filepaths, @$pm_filepaths_with_xs ], $AUTOGEN_DIR
+        )
+        )
+    {
+        utime( time, time, $AUTOGEN_DIR );    # touch
+    }
+}
 
-    return if $self->up_to_date( $source_files, $exe_path );
+sub ACTION_compile_custom_xs {
+    my $self         = shift;
+    my $project_name = $self->project_name;
+    my $xs_filepath  = $self->xs_filepath;
+
+    require ExtUtils::ParseXS;
 
     my $cbuilder = Lucy::Build::CBuilder->new;
+    my $archdir = catdir( $self->blib, 'arch', 'auto', $project_name );
+    mkpath( $archdir, 0, 0777 ) unless -d $archdir;
+    my @include_dirs = (
+        curdir(), $CORE_SOURCE_DIR, $AUTOGEN_DIR, $XS_SOURCE_DIR,
+        $CHARMONIZER_GEN_DIR,
+    );
+    my @objects;
 
-    # compile and link "charm_test"
-    my @o_files;
-    for (@$source_files) {
-        my $o_file = $cbuilder->compile(
-            source               => $_,
+    # Compile C source files.
+    my $c_files = $self->rscan_dir( $CORE_SOURCE_DIR, qr/\.c$/ );
+    #push @$c_files, @{ $self->rscan_dir( $XS_SOURCE_DIR,       qr/\.c$/ ) };
+    push @$c_files, @{ $self->rscan_dir( $CHARMONIZER_GEN_DIR, qr/\.c$/ ) };
+    push @$c_files, @{ $self->rscan_dir( $AUTOGEN_DIR,         qr/\.c$/ ) };
+    for my $c_file (@$c_files) {
+        my $o_file = $c_file;
+        $o_file =~ s/\.c/$Config{_o}/;
+        push @objects, $o_file;
+        next if $self->up_to_date( $c_file, $o_file );
+        $self->add_to_cleanup($o_file);
+        $cbuilder->compile(
+            source               => $c_file,
             extra_compiler_flags => $self->extra_ccflags,
             include_dirs         => \@include_dirs,
+            object_file          => $o_file,
+        );
+    }
+
+    # .xs => .c
+    my $perl_binding_c_file = "lib/$project_name.c";
+    $self->add_to_cleanup($perl_binding_c_file);
+    if ( !$self->up_to_date( $xs_filepath, $perl_binding_c_file ) ) {
+        ExtUtils::ParseXS::process_file(
+            filename   => $xs_filepath,
+            prototypes => 0,
+            output     => $perl_binding_c_file,
         );
-        push @o_files, $o_file;
     }
-    $cbuilder->link_executable(
-        objects  => \@o_files,
-        exe_file => $exe_path,
-    );
 
-    $self->add_to_cleanup( @o_files, $exe_path );
+    # .c => .o
+    my $version             = $self->dist_version;
+    my $perl_binding_o_file = catfile( 'lib', "$project_name$Config{_o}" );
+    unshift @objects, $perl_binding_o_file;
+    $self->add_to_cleanup($perl_binding_o_file);
+    if ( !$self->up_to_date( $perl_binding_c_file, $perl_binding_o_file ) ) {
+        $cbuilder->compile(
+            source               => $perl_binding_c_file,
+            extra_compiler_flags => $self->extra_ccflags,
+            include_dirs         => \@include_dirs,
+            object_file          => $perl_binding_o_file,
+            # 'defines' is an undocumented parameter to compile(), so we
+            # should officially roll our own variant and generate compiler
+            # flags.  However, that involves writing a bunch of
+            # platform-dependent code, so we'll just take the chance that this
+            # will break.
+            defines => {
+                VERSION    => qq|"$version"|,
+                XS_VERSION => qq|"$version"|,
+            },
+        );
+    }
+
+    # Create .bs bootstrap file, needed by Dynaloader.
+    my $bs_file = catfile( $archdir, "$project_name.bs" );
+    $self->add_to_cleanup($bs_file);
+    if ( !$self->up_to_date( $perl_binding_o_file, $bs_file ) ) {
+        require ExtUtils::Mkbootstrap;
+        ExtUtils::Mkbootstrap::Mkbootstrap($bs_file);
+        if ( !-f $bs_file ) {
+            # Create file in case Mkbootstrap didn't do anything.
+            open( my $fh, '>', $bs_file )
+                or confess "Can't open $bs_file: $!";
+        }
+        utime( (time) x 2, $bs_file );    # touch
+    }
+
+    # .o => .(a|bundle)
+    my $lib_file = catfile( $archdir, "$project_name.$Config{dlext}" );
+    if ( !$self->up_to_date( [ @objects, $AUTOGEN_DIR ], $lib_file ) ) {
+        $cbuilder->link(
+            module_name => $project_name,
+            objects     => \@objects,
+            lib_file    => $lib_file,
+        );
+    }
 }
 
 sub ACTION_code {
     my $self = shift;
-    $self->dispatch('build_charm_test');
-    $self->SUPER::ACTION_code(@_);
+
+    $self->dispatch('boilerplater');
+    $self->dispatch('compile_custom_xs');
+
+    $self->SUPER::ACTION_code;
 }
 
 # Copied from Module::Build::Base.pm, added exclude '#' and follow symlinks.

Modified: lucene/lucy/trunk/perl/lib/Lucy.pm
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/lib/Lucy.pm?rev=812776&r1=812775&r2=812776&view=diff
==============================================================================
--- lucene/lucy/trunk/perl/lib/Lucy.pm (original)
+++ lucene/lucy/trunk/perl/lib/Lucy.pm Wed Sep  9 05:24:16 2009
@@ -2,10 +2,35 @@
 use strict;
 use warnings;
 
-our $VERSION = 0.00_01;
+use 5.008003;
+
+our $VERSION = 0.01;
+$VERSION = eval $VERSION;
+
+use XSLoader;
+BEGIN { XSLoader::load( 'Lucy', '0.01' ) }
 
 1;
 
+__END__
+
+__BINDING__
+
+my $lucy_xs_code = <<'END_XS_CODE';
+MODULE = Lucy    PACKAGE = Lucy 
+
+BOOT:
+    lucy_Lucy_bootstrap();
+END_XS_CODE
+
+Boilerplater::Binding::Perl::Class->register(
+    parcel     => "Lucy",
+    class_name => "Lucy",
+    xs_code    => $lucy_xs_code,
+);
+
+__POD__
+
 =head1 NAME
 
 Lucy - Search engine library.

Added: lucene/lucy/trunk/perl/lib/Lucy/Test.pm
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/lib/Lucy/Test.pm?rev=812776&view=auto
==============================================================================
--- lucene/lucy/trunk/perl/lib/Lucy/Test.pm (added)
+++ lucene/lucy/trunk/perl/lib/Lucy/Test.pm Wed Sep  9 05:24:16 2009
@@ -0,0 +1,73 @@
+use Lucy;
+
+1;
+
+__END__
+
+__BINDING__
+
+my $xs_code = <<'END_XS_CODE';
+MODULE = Lucy   PACKAGE = Lucy::Test::TestCharmonizer
+
+void
+run_tests(which)
+    char *which;
+PPCODE:
+{
+    chaz_TestBatch *batch = NULL;
+    chaz_Test_init();
+
+    if (strcmp(which, "dirmanip") == 0) {
+        batch = chaz_TDirManip_prepare();
+    }
+    else if (strcmp(which, "integers") == 0) {
+        batch = chaz_TIntegers_prepare();
+    }
+    else if (strcmp(which, "func_macro") == 0) {
+        batch = chaz_TFuncMacro_prepare();
+    }
+    else if (strcmp(which, "headers") == 0) {
+        batch = chaz_THeaders_prepare();
+    }
+    else if (strcmp(which, "large_files") == 0) {
+        batch = chaz_TLargeFiles_prepare();
+    }
+    else if (strcmp(which, "unused_vars") == 0) {
+        batch = chaz_TUnusedVars_prepare();
+    }
+    else if (strcmp(which, "variadic_macros") == 0) {
+        batch = chaz_TVariadicMacros_prepare();
+    }
+    else {
+        warn("Unknown test identifier: '%s'", which);
+    }
+
+    batch->run_test(batch);
+    batch->destroy(batch);
+}
+END_XS_CODE
+
+Boilerplater::Binding::Perl::Class->register(
+    parcel            => "Lucy",
+    class_name        => "Lucy::Test::TestCharmonizer",
+    xs_code           => $xs_code,
+);
+
+__COPYRIGHT__
+
+    /**
+     * Copyright 2006 The Apache Software Foundation
+     *
+     * Licensed under the Apache License, Version 2.0 (the "License");
+     * you may not use this file except in compliance with the License.
+     * You may obtain a copy of the License at
+     *
+     *     http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+     * implied.  See the License for the specific language governing
+     * permissions and limitations under the License.
+     */
+

Propchange: lucene/lucy/trunk/perl/lib/Lucy/Test.pm
------------------------------------------------------------------------------
    svn:eol-style = native

Added: lucene/lucy/trunk/perl/t/charmonizer/001-integers.t
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/t/charmonizer/001-integers.t?rev=812776&view=auto
==============================================================================
--- lucene/lucy/trunk/perl/t/charmonizer/001-integers.t (added)
+++ lucene/lucy/trunk/perl/t/charmonizer/001-integers.t Wed Sep  9 05:24:16 2009
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+
+use Lucy::Test;
+Lucy::Test::TestCharmonizer::run_tests("integers");
+

Propchange: lucene/lucy/trunk/perl/t/charmonizer/001-integers.t
------------------------------------------------------------------------------
    svn:eol-style = native

Added: lucene/lucy/trunk/perl/t/charmonizer/002-func_macro.t
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/t/charmonizer/002-func_macro.t?rev=812776&view=auto
==============================================================================
--- lucene/lucy/trunk/perl/t/charmonizer/002-func_macro.t (added)
+++ lucene/lucy/trunk/perl/t/charmonizer/002-func_macro.t Wed Sep  9 05:24:16 2009
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+
+use Lucy::Test;
+Lucy::Test::TestCharmonizer::run_tests("func_macro");
+

Propchange: lucene/lucy/trunk/perl/t/charmonizer/002-func_macro.t
------------------------------------------------------------------------------
    svn:eol-style = native

Added: lucene/lucy/trunk/perl/t/charmonizer/003-headers.t
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/t/charmonizer/003-headers.t?rev=812776&view=auto
==============================================================================
--- lucene/lucy/trunk/perl/t/charmonizer/003-headers.t (added)
+++ lucene/lucy/trunk/perl/t/charmonizer/003-headers.t Wed Sep  9 05:24:16 2009
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+
+use Lucy::Test;
+Lucy::Test::TestCharmonizer::run_tests("headers");
+

Propchange: lucene/lucy/trunk/perl/t/charmonizer/003-headers.t
------------------------------------------------------------------------------
    svn:eol-style = native

Added: lucene/lucy/trunk/perl/t/charmonizer/004-large_files.t
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/t/charmonizer/004-large_files.t?rev=812776&view=auto
==============================================================================
--- lucene/lucy/trunk/perl/t/charmonizer/004-large_files.t (added)
+++ lucene/lucy/trunk/perl/t/charmonizer/004-large_files.t Wed Sep  9 05:24:16 2009
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+
+use Lucy::Test;
+Lucy::Test::TestCharmonizer::run_tests("large_files");
+

Propchange: lucene/lucy/trunk/perl/t/charmonizer/004-large_files.t
------------------------------------------------------------------------------
    svn:eol-style = native

Added: lucene/lucy/trunk/perl/t/charmonizer/005-unused_vars.t
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/t/charmonizer/005-unused_vars.t?rev=812776&view=auto
==============================================================================
--- lucene/lucy/trunk/perl/t/charmonizer/005-unused_vars.t (added)
+++ lucene/lucy/trunk/perl/t/charmonizer/005-unused_vars.t Wed Sep  9 05:24:16 2009
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+
+use Lucy::Test;
+Lucy::Test::TestCharmonizer::run_tests("unused_vars");
+

Propchange: lucene/lucy/trunk/perl/t/charmonizer/005-unused_vars.t
------------------------------------------------------------------------------
    svn:eol-style = native

Added: lucene/lucy/trunk/perl/t/charmonizer/006-variadic_macros.t
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/t/charmonizer/006-variadic_macros.t?rev=812776&view=auto
==============================================================================
--- lucene/lucy/trunk/perl/t/charmonizer/006-variadic_macros.t (added)
+++ lucene/lucy/trunk/perl/t/charmonizer/006-variadic_macros.t Wed Sep  9 05:24:16 2009
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+
+use Lucy::Test;
+Lucy::Test::TestCharmonizer::run_tests("variadic_macros");
+

Propchange: lucene/lucy/trunk/perl/t/charmonizer/006-variadic_macros.t
------------------------------------------------------------------------------
    svn:eol-style = native

Added: lucene/lucy/trunk/perl/t/charmonizer/007-dirmanip.t
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/t/charmonizer/007-dirmanip.t?rev=812776&view=auto
==============================================================================
--- lucene/lucy/trunk/perl/t/charmonizer/007-dirmanip.t (added)
+++ lucene/lucy/trunk/perl/t/charmonizer/007-dirmanip.t Wed Sep  9 05:24:16 2009
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+
+use Lucy::Test;
+Lucy::Test::TestCharmonizer::run_tests("dirmanip");
+

Propchange: lucene/lucy/trunk/perl/t/charmonizer/007-dirmanip.t
------------------------------------------------------------------------------
    svn:eol-style = native