use strict; use warnings; use ExtUtils::MakeMaker; my $author = 'Thomas Busch '; my $MIN_CLUCENE_VERSION = '0.9.17'; ## Hash that specifies for each OS all possible directories to look ## for CLucene/clucene-config.h my $rh_include_dirs = { "linux" => ["/usr/include", "/usr/lib"], "freebsd" => ["/usr/local/include", "/usr/local/lib"], "darwin" => ["/usr/local/include", "/usr/local/lib"], }; my $config_file; my $include_dir; foreach my $dir(@{$rh_include_dirs->{$^O}}) { my $file = "$dir/CLucene/clucene-config.h"; if (-e $file) { if (defined $config_file) { die "You appear to have 2 clucene config files.\n". " 1) $config_file\n". " 2) $file\n". "Please remove one of the two.\n"; } $config_file = $file; $include_dir = $dir; } } if (!defined $config_file) { die "couldn't find clucene config file"; } print "Using clucene config file $config_file to build Makefile\n"; my $clucene_version = find_clucene_version($config_file); if (!defined $clucene_version) { print "\nCouldn't find clucene version in $config_file\n"; exit(0); } if ($clucene_version lt $MIN_CLUCENE_VERSION) { print "\nThis CPAN module requires clucene-core-$MIN_CLUCENE_VERSION or above to be installed.\n"; exit(0); } print "Building using clucene-core $clucene_version\n"; my $define = $clucene_version; $define =~ s/-svn//; $define =~ s/[\.]/_/g; $define =~ s/[a-z]//g; $define = "-DCLUCENE_$define"; WriteMakefile( NAME => 'Lucene', AUTHOR => $author, VERSION_FROM => 'lib/Lucene.pm', PL_FILES => {}, PREREQ_PM => { 'Test::More' => 0, }, CC => 'g++', LD => 'g++', LIBS => ['-lstdc++ -lclucene'], DEFINE => $define, ## INC => "-I$include_dir", OBJECT => '$(O_FILES)', OPTIMIZE => ' ', dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, clean => { FILES => 'Lucene-*' }, ); ## find clucene version by looking through C/C++ define statements sub find_clucene_version { my $file = shift; local $/ = undef; open FILE, "<$file"; my $whole_file = ; close FILE; my $version; if ($whole_file =~ m/_CL_VERSION\s+"([^"]+)"/) { $version = $1; } }