Mailing List Archive

r3815 - in trunk/perl: . buildlib/Lucy
Author: creamyg
Date: 2008-09-05 19:29:05 -0700 (Fri, 05 Sep 2008)
New Revision: 3815

Removed:
trunk/perl/charmonizer/
Modified:
trunk/perl/MANIFEST
trunk/perl/buildlib/Lucy/Build.pm
Log:
Dynamically generate the c/h files from Charmonizer at build-time.


Modified: trunk/perl/MANIFEST
===================================================================
--- trunk/perl/MANIFEST 2008-09-06 00:23:22 UTC (rev 3814)
+++ trunk/perl/MANIFEST 2008-09-06 02:29:05 UTC (rev 3815)
@@ -6,49 +6,6 @@
buildlib/Lucy/Build.pm
buildlib/TestSchema.pm
Changes
-charmonizer/charm_test.c
-charmonizer/charmonize.c
-charmonizer/Charmonizer/Core/Compiler.c
-charmonizer/Charmonizer/Core/Compiler.h
-charmonizer/Charmonizer/Core/CompilerSpec.c
-charmonizer/Charmonizer/Core/CompilerSpec.h
-charmonizer/Charmonizer/Core/Defines.h
-charmonizer/Charmonizer/Core/HeadCheck.c
-charmonizer/Charmonizer/Core/HeadCheck.h
-charmonizer/Charmonizer/Core/ModHandler.c
-charmonizer/Charmonizer/Core/ModHandler.h
-charmonizer/Charmonizer/Core/OperSys.c
-charmonizer/Charmonizer/Core/OperSys.h
-charmonizer/Charmonizer/Core/Stat.c
-charmonizer/Charmonizer/Core/Stat.h
-charmonizer/Charmonizer/Core/Util.c
-charmonizer/Charmonizer/Core/Util.h
-charmonizer/Charmonizer/Probe.c
-charmonizer/Charmonizer/Probe.h
-charmonizer/Charmonizer/Probe/DirSep.c
-charmonizer/Charmonizer/Probe/DirSep.h
-charmonizer/Charmonizer/Probe/FuncMacro.c
-charmonizer/Charmonizer/Probe/FuncMacro.h
-charmonizer/Charmonizer/Probe/Headers.c
-charmonizer/Charmonizer/Probe/Headers.h
-charmonizer/Charmonizer/Probe/Integers.c
-charmonizer/Charmonizer/Probe/Integers.h
-charmonizer/Charmonizer/Probe/LargeFiles.c
-charmonizer/Charmonizer/Probe/LargeFiles.h
-charmonizer/Charmonizer/Probe/UnusedVars.c
-charmonizer/Charmonizer/Probe/UnusedVars.h
-charmonizer/Charmonizer/Probe/VariadicMacros.c
-charmonizer/Charmonizer/Probe/VariadicMacros.h
-charmonizer/Charmonizer/Test.c
-charmonizer/Charmonizer/Test.h
-charmonizer/Charmonizer/Test/AllTests.c
-charmonizer/Charmonizer/Test/AllTests.h
-charmonizer/Charmonizer/Test/FuncMacro.c
-charmonizer/Charmonizer/Test/Headers.c
-charmonizer/Charmonizer/Test/Integers.c
-charmonizer/Charmonizer/Test/LargeFiles.c
-charmonizer/Charmonizer/Test/UnusedVars.c
-charmonizer/Charmonizer/Test/VariadicMacros.c
lib/KinoSearch.pm
lib/KinoSearch/Analysis/Analyzer.pm
lib/KinoSearch/Analysis/Inversion.pm

Modified: trunk/perl/buildlib/Lucy/Build.pm
===================================================================
--- trunk/perl/buildlib/Lucy/Build.pm 2008-09-06 00:23:22 UTC (rev 3814)
+++ trunk/perl/buildlib/Lucy/Build.pm 2008-09-06 02:29:05 UTC (rev 3815)
@@ -64,13 +64,14 @@
my $is_distro_not_devel = -e 'c_src';
my $base_dir = $is_distro_not_devel ? curdir() : updir();

-my $CHARMONIZE_EXE_PATH = 'charmonize' . $Config{_exe};
-my $CHARMONIZER_SOURCE_DIR = 'charmonizer';
-my $C_SOURCE_DIR = catdir( $base_dir, 'c_src' );
-my $H_SOURCE_DIR = catdir( $C_SOURCE_DIR, 'h' );
-my $XS_SOURCE_DIR = 'xs';
-my $AUTOBIND_PM_PATH = catfile(qw( lib KinoSearch Autobinding.pm ));
-my $AUTOBIND_XS_PATH = catfile(qw( lib KinoSearch Autobinding.xs ));
+my $CHARMONIZE_EXE_PATH = 'charmonize' . $Config{_exe};
+my $CHARMONIZER_ORIG_DIR = catdir( $base_dir, 'charmonizer' );
+my $CHARMONIZER_GEN_DIR = catdir( $CHARMONIZER_ORIG_DIR, 'gen' );
+my $C_SOURCE_DIR = catdir( $base_dir, 'c_src' );
+my $H_SOURCE_DIR = catdir( $C_SOURCE_DIR, 'h' );
+my $XS_SOURCE_DIR = 'xs';
+my $AUTOBIND_PM_PATH = catfile(qw( lib KinoSearch Autobinding.pm ));
+my $AUTOBIND_XS_PATH = catfile(qw( lib KinoSearch Autobinding.xs ));

my $EXTRA_CCFLAGS = '';
if ( defined $ENV{LUCY_DEBUG} || defined $ENV{KINO_DEBUG} ) {
@@ -112,32 +113,32 @@
$kino_or_lucy = 'kino';
}

-# Collect all relevant Charmonizer files. Can only be run during development.
-sub ACTION_charmgather {
- my $self = shift;
- my $charm_orig_dir = catdir( updir(), 'charmonizer' );
- my $charmonize_c_orig = catfile( $charm_orig_dir, 'charmonize.c' );
- my $charmonize_c = catfile(qw( charmonizer charmonize.c ));
- my $charm_test_c_orig = catfile( $charm_orig_dir, 'charm_test.c' );
- my $charm_test_c = catfile(qw( charmonizer charm_test.c ));
- copy( $charmonize_c_orig, $charmonize_c )
- or die "Copy failed: $!";
- copy( $charm_test_c_orig, $charm_test_c )
- or die "Copy failed: $!";
- my $metaquote = catfile( $charm_orig_dir, qw( bin metaquote ) );
- my $charm_src_dir = catdir( $charm_orig_dir, 'src' );
- my $command = "$^X $metaquote --src=$charm_src_dir --out=charmonizer";
- system($command);
+# Collect all relevant Charmonizer files.
+sub ACTION_metaquote {
+ my $self = shift;
+ my $charm_src_dir = catdir( $CHARMONIZER_ORIG_DIR, 'src' );
+ my $orig_files = $self->rscan_dir( $charm_src_dir, qr/\.c?harm$/ );
+ my $dest_files = $self->rscan_dir( $CHARMONIZER_GEN_DIR, qr/\.[ch]$/ );
+ push @$dest_files, $CHARMONIZER_GEN_DIR;
+ if ( !$self->up_to_date( $orig_files, $dest_files ) ) {
+ mkpath $CHARMONIZER_GEN_DIR unless -d $CHARMONIZER_GEN_DIR;
+ $self->add_to_cleanup($CHARMONIZER_GEN_DIR);
+ my $metaquote = catfile( $CHARMONIZER_ORIG_DIR, qw( bin metaquote ) );
+ my $command = "$^X $metaquote --src=$charm_src_dir "
+ . "--out=$CHARMONIZER_GEN_DIR";
+ system($command);
+ }
}

# Build the charmonize executable.
sub ACTION_charmonizer {
my $self = shift;
+ $self->dispatch('metaquote');

# Gather .c and .h Charmonizer files.
- my $charm_source_files = $self->rscan_dir( $CHARMONIZER_SOURCE_DIR,
- qr/Charmonizer.+\.[ch]$/ );
- my $charmonize_c = catfile( $base_dir, qw( charmonizer charmonize.c ) );
+ my $charm_source_files
+ = $self->rscan_dir( $CHARMONIZER_GEN_DIR, qr/Charmonizer.+\.[ch]$/ );
+ my $charmonize_c = catfile( $CHARMONIZER_ORIG_DIR, 'charmonize.c' );
my @all_source = ( $charmonize_c, @$charm_source_files );

# don't compile if we're up to date
@@ -152,23 +153,23 @@
next unless /\.c$/;
next if m#Charmonizer/Test#;
my $o_file = $cbuilder->object_file($_);
+ $self->add_to_cleanup($o_file);
push @o_files, $o_file;

next if $self->up_to_date( $_, $o_file );

$cbuilder->compile(
source => $_,
- include_dirs => [$CHARMONIZER_SOURCE_DIR],
+ include_dirs => [$CHARMONIZER_GEN_DIR],
extra_compiler_flags => $EXTRA_CCFLAGS,
);
}

+ $self->add_to_cleanup($CHARMONIZE_EXE_PATH);
my $exe_path = $cbuilder->link_executable(
objects => \@o_files,
exe_file => $CHARMONIZE_EXE_PATH,
);
-
- $self->add_to_cleanup( @o_files, $CHARMONIZE_EXE_PATH, );
}

# Run the charmonizer executable, creating the charmony.h file.
@@ -217,16 +218,16 @@
$self->dispatch('charmony');

# collect source files
- my $source_path = catfile( $base_dir, 'charmonizer', 'charm_test.c' );
+ my $source_path = catfile( $CHARMONIZER_ORIG_DIR, 'charm_test.c' );
my $exe_path = "charm_test$Config{_exe}";
my $test_source_dir
- = catdir( $CHARMONIZER_SOURCE_DIR, qw( Charmonizer Test ) );
- my $source_files = $self->rscan_dir( $CHARMONIZER_SOURCE_DIR,
+ = catdir( $CHARMONIZER_GEN_DIR, qw( Charmonizer Test ) );
+ my $source_files = $self->rscan_dir( $CHARMONIZER_GEN_DIR,
qr|Charmonizer/Test.*?\.c$| );
push @$source_files, $source_path;

# collect include dirs
- my @include_dirs = ( $CHARMONIZER_SOURCE_DIR, curdir() );
+ my @include_dirs = ( $CHARMONIZER_GEN_DIR, curdir() );

# add Windows supplements
if ( $Config{osname} =~ /mswin/i ) {
@@ -243,19 +244,20 @@
# compile and link "charm_test"
my @o_files;
for (@$source_files) {
- my $o_file = $cbuilder->compile(
+ my $o_file = $cbuilder->object_file($_);
+ $self->add_to_cleanup($o_file);
+ $cbuilder->compile(
source => $_,
extra_compiler_flags => $EXTRA_CCFLAGS,
include_dirs => \@include_dirs,
);
push @o_files, $o_file;
}
+ $self->add_to_cleanup($exe_path);
$cbuilder->link_executable(
objects => \@o_files,
exe_file => $exe_path,
);
-
- $self->add_to_cleanup( @o_files, $exe_path );
}

sub ACTION_boilerplater {


_______________________________________________
kinosearch-commits mailing list
kinosearch-commits@rectangular.com
http://www.rectangular.com/mailman/listinfo/kinosearch-commits