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 2016/07/15 11:12:12 UTC

[20/22] lucy git commit: Build separate Perl binaries with make

Build separate Perl binaries with make


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

Branch: refs/heads/master
Commit: bb7ae3b6669e8b00ae6a337df5f43044eca5e9b9
Parents: b57bd0a
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Fri Jul 8 19:04:44 2016 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon Jul 11 15:07:59 2016 +0200

----------------------------------------------------------------------
 common/charmonizer.c                     | 32 ++++++++++---
 common/charmonizer.main                  | 32 ++++++++++---
 devel/bin/travis-test.sh                 |  6 ++-
 perl/.gitignore                          |  3 ++
 perl/Build.PL                            | 50 ++++++--------------
 perl/buildlib/Lucy/Build.pm              | 67 +++------------------------
 perl/buildlib/Lucy/Build/Binding/Misc.pm |  2 +-
 perl/lib/Lucy/Test.pm                    |  8 ++++
 perl/xs/Lucy/Analysis/RegexTokenizer.c   |  1 +
 perl/xs/Lucy/Document/Doc.c              |  1 +
 perl/xs/Lucy/Index/DocReader.c           |  1 +
 perl/xs/Lucy/Index/Inverter.c            |  1 +
 12 files changed, 93 insertions(+), 111 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/bb7ae3b6/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/common/charmonizer.c b/common/charmonizer.c
index 3bcf930..04778e2 100644
--- a/common/charmonizer.c
+++ b/common/charmonizer.c
@@ -8771,6 +8771,7 @@ S_add_compiler_flags(struct chaz_CLI *cli) {
 static lucy_MakeFile*
 lucy_MakeFile_new(chaz_CLI *cli) {
     const char *dir_sep      = chaz_OS_dir_sep();
+    const char *host         = chaz_CLI_strval(cli, "host");
     const char *cfish_prefix = chaz_CLI_strval(cli, "clownfish-prefix");
     char *cfcore_filename = chaz_Util_join(dir_sep, "cfcore", "Lucy.cfp",
                                            NULL);
@@ -8792,15 +8793,15 @@ lucy_MakeFile_new(chaz_CLI *cli) {
         self->core_dir = chaz_Util_join(dir_sep, self->base_dir, "core", NULL);
         self->test_dir = chaz_Util_join(dir_sep, self->base_dir, "test", NULL);
     }
-    if (chaz_CLI_defined(cli, "enable-perl")) {
-        self->host_src_dir = "xs";
-    }
-    else if (chaz_CLI_defined(cli, "enable-go")) {
+    if (strcmp(host, "go") == 0) {
         self->host_src_dir = "cfext";
     }
-    else {
+    else if (strcmp(host, "c") == 0) {
         self->host_src_dir = "src";
     }
+    else {
+        self->host_src_dir = NULL;
+    }
     self->autogen_src_dir = chaz_Util_join(dir_sep, "autogen", "source", NULL);
     self->autogen_inc_dir
         = chaz_Util_join(dir_sep, "autogen", "include", NULL);
@@ -8973,7 +8974,9 @@ lucy_MakeFile_write(lucy_MakeFile *self) {
         }
     }
 
-    chaz_MakeBinary_add_src_dir(self->lib, self->host_src_dir);
+    if (self->host_src_dir != NULL) {
+        chaz_MakeBinary_add_src_dir(self->lib, self->host_src_dir);
+    }
     chaz_MakeBinary_add_src_dir(self->lib, self->core_dir);
     chaz_MakeBinary_add_src_dir(self->lib, self->snowstem_dir);
     chaz_MakeBinary_add_src_dir(self->lib, self->snowstop_dir);
@@ -9059,6 +9062,23 @@ lucy_MakeFile_write(lucy_MakeFile *self) {
         lucy_MakeFile_write_c_test_rules(self);
     }
 
+    /* Targets to compile object files for Perl. */
+    if (strcmp(host, "perl") == 0) {
+        char *objects;
+
+        chaz_MakeFile_add_rule(self->makefile, "core_objects",
+                               "$(LUCY_SHARED_LIB_OBJS)");
+        objects = chaz_MakeBinary_obj_string(self->lib);
+        chaz_ConfWriter_add_def("CORE_OBJECTS", objects);
+        free(objects);
+
+        chaz_MakeFile_add_rule(self->makefile, "test_objects",
+                               "$(TESTLUCY_SHARED_LIB_OBJS)");
+        objects = chaz_MakeBinary_obj_string(self->test_lib);
+        chaz_ConfWriter_add_def("TEST_OBJECTS", objects);
+        free(objects);
+    }
+
     chaz_MakeFile_write(self->makefile);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/bb7ae3b6/common/charmonizer.main
----------------------------------------------------------------------
diff --git a/common/charmonizer.main b/common/charmonizer.main
index f6bab2f..ccf9d4d 100644
--- a/common/charmonizer.main
+++ b/common/charmonizer.main
@@ -223,6 +223,7 @@ S_add_compiler_flags(struct chaz_CLI *cli) {
 static lucy_MakeFile*
 lucy_MakeFile_new(chaz_CLI *cli) {
     const char *dir_sep      = chaz_OS_dir_sep();
+    const char *host         = chaz_CLI_strval(cli, "host");
     const char *cfish_prefix = chaz_CLI_strval(cli, "clownfish-prefix");
     char *cfcore_filename = chaz_Util_join(dir_sep, "cfcore", "Lucy.cfp",
                                            NULL);
@@ -244,15 +245,15 @@ lucy_MakeFile_new(chaz_CLI *cli) {
         self->core_dir = chaz_Util_join(dir_sep, self->base_dir, "core", NULL);
         self->test_dir = chaz_Util_join(dir_sep, self->base_dir, "test", NULL);
     }
-    if (chaz_CLI_defined(cli, "enable-perl")) {
-        self->host_src_dir = "xs";
-    }
-    else if (chaz_CLI_defined(cli, "enable-go")) {
+    if (strcmp(host, "go") == 0) {
         self->host_src_dir = "cfext";
     }
-    else {
+    else if (strcmp(host, "c") == 0) {
         self->host_src_dir = "src";
     }
+    else {
+        self->host_src_dir = NULL;
+    }
     self->autogen_src_dir = chaz_Util_join(dir_sep, "autogen", "source", NULL);
     self->autogen_inc_dir
         = chaz_Util_join(dir_sep, "autogen", "include", NULL);
@@ -425,7 +426,9 @@ lucy_MakeFile_write(lucy_MakeFile *self) {
         }
     }
 
-    chaz_MakeBinary_add_src_dir(self->lib, self->host_src_dir);
+    if (self->host_src_dir != NULL) {
+        chaz_MakeBinary_add_src_dir(self->lib, self->host_src_dir);
+    }
     chaz_MakeBinary_add_src_dir(self->lib, self->core_dir);
     chaz_MakeBinary_add_src_dir(self->lib, self->snowstem_dir);
     chaz_MakeBinary_add_src_dir(self->lib, self->snowstop_dir);
@@ -511,6 +514,23 @@ lucy_MakeFile_write(lucy_MakeFile *self) {
         lucy_MakeFile_write_c_test_rules(self);
     }
 
+    /* Targets to compile object files for Perl. */
+    if (strcmp(host, "perl") == 0) {
+        char *objects;
+
+        chaz_MakeFile_add_rule(self->makefile, "core_objects",
+                               "$(LUCY_SHARED_LIB_OBJS)");
+        objects = chaz_MakeBinary_obj_string(self->lib);
+        chaz_ConfWriter_add_def("CORE_OBJECTS", objects);
+        free(objects);
+
+        chaz_MakeFile_add_rule(self->makefile, "test_objects",
+                               "$(TESTLUCY_SHARED_LIB_OBJS)");
+        objects = chaz_MakeBinary_obj_string(self->test_lib);
+        chaz_ConfWriter_add_def("TEST_OBJECTS", objects);
+        free(objects);
+    }
+
     chaz_MakeFile_write(self->makefile);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/bb7ae3b6/devel/bin/travis-test.sh
----------------------------------------------------------------------
diff --git a/devel/bin/travis-test.sh b/devel/bin/travis-test.sh
index 6f245d8..4e07247 100755
--- a/devel/bin/travis-test.sh
+++ b/devel/bin/travis-test.sh
@@ -49,10 +49,12 @@ test_perl() {
     export PERL5LIB="$install_dir/lib/perl5"
 
     # Install Clownfish.
-    cd lucy-clownfish/runtime/perl
+    cd lucy-clownfish/compiler/perl
+    cpanm --quiet --installdeps --notest .
     perl Build.PL
     ./Build install --install-base "$install_dir"
-    cd ../../compiler/perl
+    cd ../../runtime/perl
+    perl Build.PL
     ./Build install --install-base "$install_dir"
 
     cd ../../../perl

http://git-wip-us.apache.org/repos/asf/lucy/blob/bb7ae3b6/perl/.gitignore
----------------------------------------------------------------------
diff --git a/perl/.gitignore b/perl/.gitignore
index bcd7739..83fd141 100644
--- a/perl/.gitignore
+++ b/perl/.gitignore
@@ -4,6 +4,7 @@
 /Charmony.pm
 /MYMETA.json
 /MYMETA.yml
+/Makefile
 /_build/
 /autogen/
 /blib/
@@ -13,6 +14,8 @@
 /charmony.h
 /lib/Lucy.c
 /lib/Lucy.xs
+/lib/Lucy/Test.c
+/lib/Lucy/Test.xs
 /ppport.h
 /typemap
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/bb7ae3b6/perl/Build.PL
----------------------------------------------------------------------
diff --git a/perl/Build.PL b/perl/Build.PL
index a057f9b..d9d93a5 100644
--- a/perl/Build.PL
+++ b/perl/Build.PL
@@ -17,34 +17,20 @@ use 5.008003;
 use strict;
 use warnings;
 use lib 'buildlib';
-use File::Spec::Functions qw( catdir );
+use File::Spec::Functions qw( catdir updir );
 use Lucy::Build;
 
 my $IS_CPAN_DIST = -e 'cfcore';
-my @BASE_PATH    = Lucy::Build->cf_base_path;
 my $CORE_SOURCE_DIR;
 my $TEST_SOURCE_DIR;
-my $MODULES_DIR;
 if ($IS_CPAN_DIST) {
     $CORE_SOURCE_DIR = 'cfcore';
     $TEST_SOURCE_DIR = 'cftest';
-    $MODULES_DIR     = 'modules';
 }
 else {
-    $CORE_SOURCE_DIR = catdir( @BASE_PATH, 'core' );
-    $TEST_SOURCE_DIR = catdir( @BASE_PATH, 'test' );
-    $MODULES_DIR     = catdir( @BASE_PATH, 'modules' );
+    $CORE_SOURCE_DIR = catdir( updir(), 'core' );
+    $TEST_SOURCE_DIR = catdir( updir(), 'test' );
 }
-my $SNOWSTEM_SRC_DIR = catdir( $MODULES_DIR, qw( analysis snowstem source ) );
-my $SNOWSTEM_INC_DIR = catdir( $SNOWSTEM_SRC_DIR, 'include' );
-my $SNOWSTOP_SRC_DIR = catdir( $MODULES_DIR, qw( analysis snowstop source ) );
-my $UCD_INC_DIR      = catdir( $MODULES_DIR, qw( unicode ucd ) );
-my $UTF8PROC_SRC_DIR = catdir( $MODULES_DIR, qw( unicode utf8proc ) );
-my $XS_SOURCE_DIR    = 'xs';
-
-my @cf_linker_flags = Clownfish::CFC::Perl::Build->cf_linker_flags(
-    'Clownfish',
-);
 
 my $builder = Lucy::Build->new(
     module_name => 'Lucy',
@@ -64,7 +50,7 @@ my $builder = Lucy::Build->new(
     build_requires     => {
         'Module::Build'      => 0.280801,
         'ExtUtils::CBuilder' => 0.21,
-        'ExtUtils::ParseXS'  => 2.18,
+        'ExtUtils::ParseXS'  => 3.00,
         'Devel::PPPort'      => 3.14,
         'Clownfish'          => 0.005000,
         'Clownfish::CFC'     => 0.005000,
@@ -77,31 +63,25 @@ my $builder = Lucy::Build->new(
             bugtracker => 'https://issues.apache.org/jira/browse/LUCY',
         },
     },
-    include_dirs => [
-        $CORE_SOURCE_DIR,
-        $XS_SOURCE_DIR,
-        $SNOWSTEM_INC_DIR,
-        $UCD_INC_DIR,
-        $UTF8PROC_SRC_DIR,
-    ],
+    include_dirs => [ $CORE_SOURCE_DIR ],
     clownfish_params => {
         source => [ $CORE_SOURCE_DIR, $TEST_SOURCE_DIR ],
         modules => [
             {
                 name          => 'Lucy',
-                parcels       => [ 'Lucy', 'TestLucy' ],
-                c_source_dirs => [
-                    $CORE_SOURCE_DIR,
-                    $TEST_SOURCE_DIR,
-                    $XS_SOURCE_DIR,
-                    $SNOWSTEM_SRC_DIR,
-                    $SNOWSTOP_SRC_DIR,
-                    $UTF8PROC_SRC_DIR,
-                ],
+                parcels       => [ 'Lucy' ],
+                make_target   => 'core_objects',
+                c_source_dirs => [ 'xs' ],
+                xs_prereqs    => [ 'Clownfish' ],
+            },
+            {
+                name        => 'Lucy::Test',
+                parcels     => [ 'TestLucy' ],
+                make_target => 'test_objects',
+                xs_prereqs  => [ 'Lucy', 'Clownfish' ],
             },
         ],
     },
-    extra_linker_flags => [ @cf_linker_flags ],
     add_to_cleanup => [
         qw(
             Lucy-*

http://git-wip-us.apache.org/repos/asf/lucy/blob/bb7ae3b6/perl/buildlib/Lucy/Build.pm
----------------------------------------------------------------------
diff --git a/perl/buildlib/Lucy/Build.pm b/perl/buildlib/Lucy/Build.pm
index f128145..8ddc912 100644
--- a/perl/buildlib/Lucy/Build.pm
+++ b/perl/buildlib/Lucy/Build.pm
@@ -25,27 +25,21 @@ use base qw(
 our $VERSION = '0.005000';
 $VERSION = eval $VERSION;
 
-use File::Spec::Functions qw( catdir catfile rel2abs );
+use File::Spec::Functions qw( catdir catfile rel2abs updir );
 use File::Path qw( rmtree );
 use File::Copy qw( move );
 use Config;
 use Carp;
 use Cwd qw( getcwd );
 
-my @BASE_PATH = __PACKAGE__->cf_base_path;
-
-my $COMMON_SOURCE_DIR = catdir( @BASE_PATH, 'common' );
-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' );
-my $LIB_DIR         = 'lib';
-my $IS_CPAN_DIST    = !@BASE_PATH;
+my $LIB_DIR      = 'lib';
+my $IS_CPAN_DIST = -e 'cfcore';
 my $CHARMONIZER_C;
 if ($IS_CPAN_DIST) {
     $CHARMONIZER_C = 'charmonizer.c';
 }
 else {
-    $CHARMONIZER_C = catfile( $COMMON_SOURCE_DIR, 'charmonizer.c' );
+    $CHARMONIZER_C = catfile( updir(), 'common', 'charmonizer.c' );
 }
 
 sub new {
@@ -68,6 +62,7 @@ sub new {
         $self->config( optimize => $optimize );
     }
 
+    $self->charmonizer_params( create_makefile => 1 );
     $self->charmonizer_params( charmonizer_c => $CHARMONIZER_C );
 
     $self->clownfish_params( autogen_header => $self->autogen_header );
@@ -75,34 +70,6 @@ sub new {
     return $self;
 }
 
-sub _run_make {
-    my ( $self, %params ) = @_;
-    my @command           = @{ $params{args} };
-    my $dir               = $params{dir};
-    my $current_directory = getcwd();
-    chdir $dir if $dir;
-    unshift @command, 'CC=' . $self->config('cc');
-    if ( $self->config('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 if $dir;
-}
-
-# Build the Lemon parser generator.
-sub ACTION_lemon {
-    my $self = shift;
-    print "Building the Lemon parser generator...\n\n";
-    $self->_run_make(
-        dir  => $LEMON_DIR,
-        args => [],
-    );
-}
-
 sub ACTION_copy_clownfish_includes {
     my $self = shift;
 
@@ -191,22 +158,6 @@ sub ACTION_test_valgrind {
     }
 }
 
-# Run all .y files through lemon.
-sub ACTION_parsers {
-    my $self = shift;
-    $self->depends_on('lemon');
-    my $y_files = $self->rscan_dir( $CORE_SOURCE_DIR, qr/\.y$/ );
-    for my $y_file (@$y_files) {
-        my $c_file = $y_file;
-        my $h_file = $y_file;
-        $c_file =~ s/\.y$/.c/ or die "no match";
-        $h_file =~ s/\.y$/.h/ or die "no match";
-        next if $self->up_to_date( $y_file, [ $c_file, $h_file ] );
-        $self->add_to_cleanup( $c_file, $h_file );
-        system( $LEMON_EXE_PATH, '-q', $y_file ) and die "lemon failed";
-    }
-}
-
 sub ACTION_clownfish {
     my $self = shift;
 
@@ -219,7 +170,7 @@ sub ACTION_clownfish {
 sub ACTION_compile_custom_xs {
     my $self = shift;
 
-    $self->depends_on(qw( parsers charmony ));
+    $self->depends_on(qw( charmony ));
 
     # Add extra compiler flags from Charmonizer.
     my $charm_cflags = $self->charmony('EXTRA_CFLAGS');
@@ -396,12 +347,6 @@ sub ACTION_semiclean {
     }
 }
 
-sub ACTION_clean {
-    my $self = shift;
-    $self->_run_make( dir => $LEMON_DIR, args => ['clean'] );
-    $self->SUPER::ACTION_clean;
-}
-
 1;
 
 __END__

http://git-wip-us.apache.org/repos/asf/lucy/blob/bb7ae3b6/perl/buildlib/Lucy/Build/Binding/Misc.pm
----------------------------------------------------------------------
diff --git a/perl/buildlib/Lucy/Build/Binding/Misc.pm b/perl/buildlib/Lucy/Build/Binding/Misc.pm
index 11b14a6..b4bb516 100644
--- a/perl/buildlib/Lucy/Build/Binding/Misc.pm
+++ b/perl/buildlib/Lucy/Build/Binding/Misc.pm
@@ -232,7 +232,7 @@ END_XS_CODE
 
 sub bind_test {
     my $xs_code = <<'END_XS_CODE';
-MODULE = Lucy   PACKAGE = Lucy::Test
+MODULE = Lucy::Test   PACKAGE = Lucy::Test
 
 #include "Clownfish/TestHarness/TestFormatter.h"
 #include "Clownfish/TestHarness/TestSuite.h"

http://git-wip-us.apache.org/repos/asf/lucy/blob/bb7ae3b6/perl/lib/Lucy/Test.pm
----------------------------------------------------------------------
diff --git a/perl/lib/Lucy/Test.pm b/perl/lib/Lucy/Test.pm
index ab06d11..e84161f 100644
--- a/perl/lib/Lucy/Test.pm
+++ b/perl/lib/Lucy/Test.pm
@@ -18,6 +18,14 @@ use Lucy;
 our $VERSION = '0.005000';
 $VERSION = eval $VERSION;
 
+sub dl_load_flags { 1 }
+
+BEGIN {
+    require DynaLoader;
+    our @ISA = qw( DynaLoader );
+    bootstrap Lucy::Test '0.5.0';
+}
+
 # Set the default memory threshold for PostingListWriter to a low number so
 # that we simulate large indexes by performing a lot of PostingPool flushes.
 Lucy::Index::PostingListWriter::set_default_mem_thresh(0x1000);

http://git-wip-us.apache.org/repos/asf/lucy/blob/bb7ae3b6/perl/xs/Lucy/Analysis/RegexTokenizer.c
----------------------------------------------------------------------
diff --git a/perl/xs/Lucy/Analysis/RegexTokenizer.c b/perl/xs/Lucy/Analysis/RegexTokenizer.c
index 9a3fcc6..408acf1 100644
--- a/perl/xs/Lucy/Analysis/RegexTokenizer.c
+++ b/perl/xs/Lucy/Analysis/RegexTokenizer.c
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#define CFP_LUCY
 #define C_LUCY_REGEXTOKENIZER
 #define C_LUCY_TOKEN
 #include "XSBind.h"

http://git-wip-us.apache.org/repos/asf/lucy/blob/bb7ae3b6/perl/xs/Lucy/Document/Doc.c
----------------------------------------------------------------------
diff --git a/perl/xs/Lucy/Document/Doc.c b/perl/xs/Lucy/Document/Doc.c
index a923e25..6bbc326 100644
--- a/perl/xs/Lucy/Document/Doc.c
+++ b/perl/xs/Lucy/Document/Doc.c
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#define CFP_LUCY
 #define C_LUCY_DOC
 #include "XSBind.h"
 #include "Lucy/Document/Doc.h"

http://git-wip-us.apache.org/repos/asf/lucy/blob/bb7ae3b6/perl/xs/Lucy/Index/DocReader.c
----------------------------------------------------------------------
diff --git a/perl/xs/Lucy/Index/DocReader.c b/perl/xs/Lucy/Index/DocReader.c
index 7daf909..15130ac 100644
--- a/perl/xs/Lucy/Index/DocReader.c
+++ b/perl/xs/Lucy/Index/DocReader.c
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#define CFP_LUCY
 #define C_LUCY_DOCREADER
 #define C_LUCY_DEFAULTDOCREADER
 #include "XSBind.h"

http://git-wip-us.apache.org/repos/asf/lucy/blob/bb7ae3b6/perl/xs/Lucy/Index/Inverter.c
----------------------------------------------------------------------
diff --git a/perl/xs/Lucy/Index/Inverter.c b/perl/xs/Lucy/Index/Inverter.c
index eed3a66..28c8e90 100644
--- a/perl/xs/Lucy/Index/Inverter.c
+++ b/perl/xs/Lucy/Index/Inverter.c
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#define CFP_LUCY
 #define C_LUCY_INVERTER
 #define C_LUCY_INVERTERENTRY
 #include "XSBind.h"