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 2008/09/06 08:38:18 UTC

svn commit: r692616 - /lucene/lucy/trunk/perl/buildlib/Lucy/Build.pm

Author: marvin
Date: Fri Sep  5 23:38:17 2008
New Revision: 692616

URL: http://svn.apache.org/viewvc?rev=692616&view=rev
Log:
Subclass ExtUtils::CBuilder to accomodate Windows linking and lazy loading.

Modified:
    lucene/lucy/trunk/perl/buildlib/Lucy/Build.pm

Modified: lucene/lucy/trunk/perl/buildlib/Lucy/Build.pm
URL: http://svn.apache.org/viewvc/lucene/lucy/trunk/perl/buildlib/Lucy/Build.pm?rev=692616&r1=692615&r2=692616&view=diff
==============================================================================
--- lucene/lucy/trunk/perl/buildlib/Lucy/Build.pm (original)
+++ lucene/lucy/trunk/perl/buildlib/Lucy/Build.pm Fri Sep  5 23:38:17 2008
@@ -1,12 +1,33 @@
 use strict;
 use warnings;
 
+package Lucy::Build::CBuilder;
+BEGIN { our @ISA = "ExtUtils::CBuilder"; }
+use Config;
+
+sub new {
+    my $class = shift;
+    require ExtUtils::CBuilder;
+    return $class->SUPER::new(@_);
+}
+
+# This method isn't implemented by CBuilder for Windows, so we issue a basic
+# link command that works on at least one system and hope for the best.
+sub link_executable {
+    my ( $self, %args ) = @_;
+    if ( $Config{cc} eq 'cl' ) {
+        my ( $objects, $exe_file ) = @args{qw( objects exe_file )};
+        $self->do_system("link /out:$exe_file @$objects");
+        return $exe_file;
+    }
+    else {
+        return $self->SUPER::link_executable(%args);
+    }
+}
+
 package Lucy::Build;
 use base qw( Module::Build );
 
-# Don't crash Build.PL if CBuilder isn't installed yet
-BEGIN { eval "use ExtUtils::CBuilder;"; }
-
 use File::Spec::Functions
     qw( catdir catfile curdir splitpath updir no_upwards );
 use File::Path qw( mkpath rmtree );
@@ -45,7 +66,7 @@
 
     # compile
     print "\nBuilding $METAQUOTE_EXE_PATH...\n\n";
-    my $cbuilder = ExtUtils::CBuilder->new;
+    my $cbuilder = Lucy::Build::CBuilder->new;
     my $o_file   = $cbuilder->compile(
         source               => $source_path,
         extra_compiler_flags => $EXTRA_CCFLAGS,
@@ -80,7 +101,7 @@
 
     print "Building $CHARMONIZE_EXE_PATH...\n\n";
 
-    my $cbuilder = ExtUtils::CBuilder->new;
+    my $cbuilder = Lucy::Build::CBuilder->new;
 
     my @o_files;
     for (@all_source) {
@@ -214,7 +235,7 @@
 
     return if $self->up_to_date( $source_files, $exe_path );
 
-    my $cbuilder = ExtUtils::CBuilder->new;
+    my $cbuilder = Lucy::Build::CBuilder->new;
 
     # compile and link "charm_test"
     my @o_files;