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"