You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2012/11/02 22:24:31 UTC

[lucy-commits] [2/2] git commit: refs/heads/cfc_charmony - Split off Charmonizer build ACTIONs

Split off Charmonizer build ACTIONs

Charmonizer build ACTIONs are split off into
Clownfish::CFC::Perl::Build::Charmonic. Now, the hierarchy of the Build
classes is:

* Module::Build
  * Clownfish::CFC::Perl::Build::Charmonic
    * Clownfish::CFC::Perl::Build
      * Clownfish::Build
      * Lucy::Build

Clownfish::CFC::Perl::Build::Charmonic adds a Module::Build hashref
property named 'charmonizer_params'. For now, its only entry is
'source_dir' which specifies the Charmonizer source directory.


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/68bbc8b4
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/68bbc8b4
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/68bbc8b4

Branch: refs/heads/cfc_charmony
Commit: 68bbc8b4fc3557aee3999583c10978a3f49bb44a
Parents: c123ce0
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Fri Nov 2 19:17:12 2012 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Fri Nov 2 21:44:30 2012 +0100

----------------------------------------------------------------------
 .../compiler/perl/lib/Clownfish/CFC/Perl/Build.pm  |    2 +-
 .../perl/lib/Clownfish/CFC/Perl/Build/Charmonic.pm |  155 +++++++++++++++
 clownfish/runtime/perl/buildlib/Clownfish/Build.pm |   86 +--------
 perl/buildlib/Lucy/Build.pm                        |   88 +--------
 4 files changed, 161 insertions(+), 170 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/68bbc8b4/clownfish/compiler/perl/lib/Clownfish/CFC/Perl/Build.pm
----------------------------------------------------------------------
diff --git a/clownfish/compiler/perl/lib/Clownfish/CFC/Perl/Build.pm b/clownfish/compiler/perl/lib/Clownfish/CFC/Perl/Build.pm
index d53519c..45fb38c 100644
--- a/clownfish/compiler/perl/lib/Clownfish/CFC/Perl/Build.pm
+++ b/clownfish/compiler/perl/lib/Clownfish/CFC/Perl/Build.pm
@@ -17,7 +17,7 @@ use strict;
 use warnings;
 
 package Clownfish::CFC::Perl::Build;
-use base qw( Module::Build );
+use base qw( Clownfish::CFC::Perl::Build::Charmonic );
 our $VERSION = '0.01';
 
 use File::Spec::Functions qw( catdir catfile curdir updir abs2rel rel2abs );

http://git-wip-us.apache.org/repos/asf/lucy/blob/68bbc8b4/clownfish/compiler/perl/lib/Clownfish/CFC/Perl/Build/Charmonic.pm
----------------------------------------------------------------------
diff --git a/clownfish/compiler/perl/lib/Clownfish/CFC/Perl/Build/Charmonic.pm b/clownfish/compiler/perl/lib/Clownfish/CFC/Perl/Build/Charmonic.pm
new file mode 100644
index 0000000..09eeb5b
--- /dev/null
+++ b/clownfish/compiler/perl/lib/Clownfish/CFC/Perl/Build/Charmonic.pm
@@ -0,0 +1,155 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+use strict;
+use warnings;
+
+package Clownfish::CFC::Perl::Build::Charmonic;
+
+use base qw( Module::Build );
+
+our $VERSION = '0.003000';
+$VERSION = eval $VERSION;
+
+use Carp;
+use Config;
+use Cwd qw( getcwd );
+use Env qw( @PATH );
+use File::Spec::Functions qw( rel2abs );
+
+BEGIN { unshift @PATH, rel2abs( getcwd() ) }
+
+# Add a custom Module::Build hashref property to pass the following build
+# parameters.
+# source_dir: Charmonizer source directory, required
+if ( $Module::Build::VERSION <= 0.30 ) {
+    __PACKAGE__->add_property( charmonizer_params => {} );
+}
+else {
+    __PACKAGE__->add_property(
+        'charmonizer_params',
+        default => {},
+    );
+}
+
+my $CHARMONIZE_EXE_PATH = "charmonize$Config{_exe}";
+my $CHARMONY_H_PATH     = 'charmony.h';
+my $CHARMONY_PM_PATH    = 'Charmony.pm';
+
+sub _charmonizer_run_make {
+    my ( $self, %params ) = @_;
+    my @command           = @{ $params{args} };
+    my $dir               = $self->charmonizer_params('source_dir');
+    my $cc                = $self->config('cc');
+    my $current_directory = getcwd();
+    chdir $dir;
+    unshift @command, "CC=$cc";
+    if ( $cc =~ /^cl\b/ ) {
+        unshift @command, "-f", "Makefile.MSVC";
+    }
+    elsif ( $^O =~ /mswin/i ) {
+        unshift @command, "-f", "Makefile.MinGW";
+    }
+    unshift @command, "$Config{make}";
+    system(@command) and confess("$Config{make} failed");
+    chdir $current_directory;
+}
+
+# Build the charmonize executable.
+sub ACTION_build_charmonize {
+    my $self = shift;
+    print "Building $CHARMONIZE_EXE_PATH...\n\n";
+    my $meld_c = rel2abs("charmonize.c");
+    $self->add_to_cleanup($meld_c);
+    $self->add_to_cleanup($CHARMONIZE_EXE_PATH);
+    my $charmonize_main = 'charmonize.c';
+    $self->_charmonizer_run_make(
+        args => [ "meld", "PERL=$^X", "FILES=$charmonize_main", "OUT=$meld_c" ],
+    );
+    if ( !$self->up_to_date( $meld_c, $CHARMONIZE_EXE_PATH ) ) {
+        my $cc = $Config{cc};
+        my $outflag = $cc =~ /cl\b/ ? "/Fe" : "-o ";
+        system("$cc $meld_c $outflag$CHARMONIZE_EXE_PATH")
+            and die "Failed to compile $CHARMONIZE_EXE_PATH";
+    }
+}
+
+# Run the charmonize executable, creating the charmony.h and Charmony.pm
+# files.
+sub ACTION_run_charmonize {
+    my $self = shift;
+    $self->dispatch('build_charmonize');
+    return if $self->up_to_date( $CHARMONIZE_EXE_PATH, [
+        $CHARMONY_H_PATH, $CHARMONY_PM_PATH,
+    ] );
+    print "\nRunning $CHARMONIZE_EXE_PATH...\n\n";
+
+    $self->add_to_cleanup($CHARMONY_H_PATH);
+    $self->add_to_cleanup($CHARMONY_PM_PATH);
+    # Clean up after charmonize if it doesn't succeed on its own.
+    $self->add_to_cleanup("_charm*");
+
+    # Prepare arguments to charmonize.
+    my @command = (
+        $CHARMONIZE_EXE_PATH,
+        '--cc=' . _quotify( $self->config('cc') ),
+        '--enable-c',
+        '--enable-perl',
+        '--',
+        $self->config('ccflags'),
+        @{ $self->extra_compiler_flags },
+    );
+    if ( $ENV{CHARM_VALGRIND} ) {
+        unshift @command, "valgrind", "--leak-check=yes";
+    }
+    print join( " ", @command ), $/;
+
+    system(@command) and die "Failed to run $CHARMONIZE_EXE_PATH: $!";
+}
+
+sub _quotify {
+    my $string = shift;
+    $string =~ s/\\/\\\\/g;
+    $string =~ s/"/\\"/g;
+    return qq|"$string"|;
+}
+
+# Build the charmonizer tests.
+sub ACTION_charmonizer_tests {
+    my $self = shift;
+    $self->dispatch('run_charmonize');
+    print "Building Charmonizer Tests...\n\n";
+    my $flags = join( " ",
+        $self->config('ccflags'),
+        @{ $self->extra_compiler_flags },
+        '-I' . rel2abs( getcwd() ),
+    );
+    $flags =~ s/"/\\"/g;
+    $self->_charmonizer_run_make(
+        args => [ "DEFS=$flags", "tests" ],
+    );
+}
+
+sub ACTION_clean {
+    my $self = shift;
+    $self->_charmonizer_run_make(
+        args => ['clean']
+    );
+    $self->SUPER::ACTION_clean;
+}
+
+1;
+
+__END__

http://git-wip-us.apache.org/repos/asf/lucy/blob/68bbc8b4/clownfish/runtime/perl/buildlib/Clownfish/Build.pm
----------------------------------------------------------------------
diff --git a/clownfish/runtime/perl/buildlib/Clownfish/Build.pm b/clownfish/runtime/perl/buildlib/Clownfish/Build.pm
index bf374d4..0593dff 100644
--- a/clownfish/runtime/perl/buildlib/Clownfish/Build.pm
+++ b/clownfish/runtime/perl/buildlib/Clownfish/Build.pm
@@ -35,19 +35,13 @@ use File::Spec::Functions qw( catdir catfile updir rel2abs );
 use File::Path qw( rmtree );
 use File::Copy qw( move );
 use Config;
-use Env qw( @PATH );
 use Carp;
 use Cwd qw( getcwd );
 
-BEGIN { unshift @PATH, rel2abs( getcwd() ) }
-
 my @BASE_PATH = __PACKAGE__->cf_base_path;
 
 my $CHARMONIZER_ORIG_DIR
     = rel2abs( catdir( @BASE_PATH, updir(), updir(), 'charmonizer' ) );
-my $CHARMONIZE_EXE_PATH  = "charmonize$Config{_exe}";
-my $CHARMONY_H_PATH      = 'charmony.h';
-my $CHARMONY_PM_PATH     = 'Charmony.pm';
 my $CORE_SOURCE_DIR = catdir( @BASE_PATH, 'core' );
 my $CFC_DIR = catdir( @BASE_PATH, updir(), 'compiler', 'perl' );
 my $CFC_BUILD  = catfile( $CFC_DIR, 'Build' );
@@ -78,6 +72,8 @@ sub new {
     }
     $self->extra_compiler_flags(@$extra_ccflags);
 
+    $self->charmonizer_params( source_dir => $CHARMONIZER_ORIG_DIR );
+
     $self->clownfish_params( autogen_header => $self->autogen_header );
 
     return $self;
@@ -101,83 +97,6 @@ sub _run_make {
     chdir $current_directory if $dir;
 }
 
-# Build the charmonize executable.
-sub ACTION_build_charmonize {
-    my $self = shift;
-    print "Building $CHARMONIZE_EXE_PATH...\n\n";
-    my $meld_c = rel2abs("charmonize.c");
-    $self->add_to_cleanup($meld_c);
-    $self->add_to_cleanup($CHARMONIZE_EXE_PATH);
-    my $charmonize_main = catfile( $CHARMONIZER_ORIG_DIR, 'charmonize.c' );
-    $self->_run_make(
-        dir  => $CHARMONIZER_ORIG_DIR,
-        args => [ "meld", "PERL=$^X", "FILES=$charmonize_main", "OUT=$meld_c" ],
-    );
-    if ( !$self->up_to_date( $meld_c, $CHARMONIZE_EXE_PATH ) ) {
-        my $cc = $Config{cc};
-        my $outflag = $cc =~ /cl\b/ ? "/Fe" : "-o ";
-        system("$cc $meld_c $outflag$CHARMONIZE_EXE_PATH")
-            and die "Failed to compile $CHARMONIZE_EXE_PATH";
-    }
-}
-
-# Run the charmonize executable, creating the charmony.h and Charmony.pm
-# files.
-sub ACTION_run_charmonize {
-    my $self = shift;
-    $self->dispatch('build_charmonize');
-    return if $self->up_to_date( $CHARMONIZE_EXE_PATH, [
-        $CHARMONY_H_PATH, $CHARMONY_PM_PATH,
-    ] );
-    print "\nRunning $CHARMONIZE_EXE_PATH...\n\n";
-
-    $self->add_to_cleanup($CHARMONY_H_PATH);
-    $self->add_to_cleanup($CHARMONY_PM_PATH);
-    # Clean up after charmonize if it doesn't succeed on its own.
-    $self->add_to_cleanup("_charm*");
-
-    # Prepare arguments to charmonize.
-    my @command = (
-        $CHARMONIZE_EXE_PATH,
-        '--cc=' . _quotify( $self->config('cc') ),
-        '--enable-c',
-        '--enable-perl',
-        '--',
-        $self->config('ccflags'),
-        @{ $self->extra_compiler_flags },
-    );
-    if ( $ENV{CHARM_VALGRIND} ) {
-        unshift @command, "valgrind", "--leak-check=yes";
-    }
-    print join( " ", @command ), $/;
-
-    system(@command) and die "Failed to run $CHARMONIZE_EXE_PATH: $!";
-}
-
-sub _quotify {
-    my $string = shift;
-    $string =~ s/\\/\\\\/g;
-    $string =~ s/"/\\"/g;
-    return qq|"$string"|;
-}
-
-# Build the charmonizer tests.
-sub ACTION_charmonizer_tests {
-    my $self = shift;
-    $self->dispatch('run_charmonize');
-    print "Building Charmonizer Tests...\n\n";
-    my $flags = join( " ",
-        $self->config('ccflags'),
-        @{ $self->extra_compiler_flags },
-        '-I' . rel2abs( getcwd() ),
-    );
-    $flags =~ s/"/\\"/g;
-    $self->_run_make(
-        dir  => $CHARMONIZER_ORIG_DIR,
-        args => [ "DEFS=$flags", "tests" ],
-    );
-}
-
 sub ACTION_cfc {
     my $self    = shift;
     my $old_dir = getcwd();
@@ -366,7 +285,6 @@ sub _clean_prereq_builds {
             and die "Clownfish clean failed";
         chdir $old_dir;
     }
-    $self->_run_make( dir => $CHARMONIZER_ORIG_DIR, args => ['clean'] );
 }
 
 sub ACTION_clean {

http://git-wip-us.apache.org/repos/asf/lucy/blob/68bbc8b4/perl/buildlib/Lucy/Build.pm
----------------------------------------------------------------------
diff --git a/perl/buildlib/Lucy/Build.pm b/perl/buildlib/Lucy/Build.pm
index abcdae2..7a674cd 100644
--- a/perl/buildlib/Lucy/Build.pm
+++ b/perl/buildlib/Lucy/Build.pm
@@ -35,22 +35,16 @@ no lib 'clownfish/compiler/perl/lib';
 our $VERSION = '0.003000';
 $VERSION = eval $VERSION;
 
-use File::Spec::Functions qw( catdir catfile updir rel2abs );
+use File::Spec::Functions qw( catdir catfile );
 use File::Path qw( rmtree );
 use File::Copy qw( move );
 use Config;
-use Env qw( @PATH );
 use Carp;
 use Cwd qw( getcwd );
 
-BEGIN { unshift @PATH, rel2abs( getcwd() ) }
-
 my @BASE_PATH = __PACKAGE__->cf_base_path;
 
 my $CHARMONIZER_ORIG_DIR = catdir( @BASE_PATH, 'charmonizer' );
-my $CHARMONIZE_EXE_PATH  = "charmonize$Config{_exe}";
-my $CHARMONY_H_PATH      = 'charmony.h';
-my $CHARMONY_PM_PATH     = 'Charmony.pm';
 my $LEMON_DIR      = catdir( @BASE_PATH, 'lemon' );
 my $LEMON_EXE_PATH = catfile( $LEMON_DIR, "lemon$Config{_exe}" );
 my $CORE_SOURCE_DIR = catdir( @BASE_PATH, 'core' );
@@ -83,6 +77,8 @@ sub new {
     }
     $self->extra_compiler_flags(@$extra_ccflags);
 
+    $self->charmonizer_params( source_dir => $CHARMONIZER_ORIG_DIR );
+
     $self->clownfish_params( autogen_header => $self->autogen_header );
 
     return $self;
@@ -106,83 +102,6 @@ sub _run_make {
     chdir $current_directory if $dir;
 }
 
-# Build the charmonize executable.
-sub ACTION_build_charmonize {
-    my $self = shift;
-    print "Building $CHARMONIZE_EXE_PATH...\n\n";
-    my $meld_c = rel2abs("charmonize.c");
-    $self->add_to_cleanup($meld_c);
-    $self->add_to_cleanup($CHARMONIZE_EXE_PATH);
-    my $charmonize_main = catfile( $CHARMONIZER_ORIG_DIR, 'charmonize.c' );
-    $self->_run_make(
-        dir  => $CHARMONIZER_ORIG_DIR,
-        args => [ "meld", "PERL=$^X", "FILES=$charmonize_main", "OUT=$meld_c" ],
-    );
-    if ( !$self->up_to_date( $meld_c, $CHARMONIZE_EXE_PATH ) ) {
-        my $cc = $Config{cc};
-        my $outflag = $cc =~ /cl\b/ ? "/Fe" : "-o ";
-        system("$cc $meld_c $outflag$CHARMONIZE_EXE_PATH")
-            and die "Failed to compile $CHARMONIZE_EXE_PATH";
-    }
-}
-
-# Run the charmonize executable, creating the charmony.h and Charmony.pm
-# files.
-sub ACTION_run_charmonize {
-    my $self = shift;
-    $self->dispatch('build_charmonize');
-    return if $self->up_to_date( $CHARMONIZE_EXE_PATH, [
-        $CHARMONY_H_PATH, $CHARMONY_PM_PATH,
-    ] );
-    print "\nRunning $CHARMONIZE_EXE_PATH...\n\n";
-
-    $self->add_to_cleanup($CHARMONY_H_PATH);
-    $self->add_to_cleanup($CHARMONY_PM_PATH);
-    # Clean up after charmonize if it doesn't succeed on its own.
-    $self->add_to_cleanup("_charm*");
-
-    # Prepare arguments to charmonize.
-    my @command = (
-        $CHARMONIZE_EXE_PATH,
-        '--cc=' . _quotify( $self->config('cc') ),
-        '--enable-c',
-        '--enable-perl',
-        '--',
-        $self->config('ccflags'),
-        @{ $self->extra_compiler_flags },
-    );
-    if ( $ENV{CHARM_VALGRIND} ) {
-        unshift @command, "valgrind", "--leak-check=yes";
-    }
-    print join( " ", @command ), $/;
-
-    system(@command) and die "Failed to run $CHARMONIZE_EXE_PATH: $!";
-}
-
-sub _quotify {
-    my $string = shift;
-    $string =~ s/\\/\\\\/g;
-    $string =~ s/"/\\"/g;
-    return qq|"$string"|;
-}
-
-# Build the charmonizer tests.
-sub ACTION_charmonizer_tests {
-    my $self = shift;
-    $self->dispatch('run_charmonize');
-    print "Building Charmonizer Tests...\n\n";
-    my $flags = join( " ",
-        $self->config('ccflags'),
-        @{ $self->extra_compiler_flags },
-        '-I' . rel2abs( getcwd() ),
-    );
-    $flags =~ s/"/\\"/g;
-    $self->_run_make(
-        dir  => $CHARMONIZER_ORIG_DIR,
-        args => [ "DEFS=$flags", "tests" ],
-    );
-}
-
 # Build the Lemon parser generator.
 sub ACTION_lemon {
     my $self = shift;
@@ -535,7 +454,6 @@ sub _clean_prereq_builds {
             and die "Clownfish clean failed";
         chdir $old_dir;
     }
-    $self->_run_make( dir => $CHARMONIZER_ORIG_DIR, args => ['clean'] );
     $self->_run_make( dir => $LEMON_DIR,            args => ['clean'] );
 }