use 5.010_001; use strict; use warnings; use ExtUtils::MakeMaker; my $dist = 're-engine-Hooks'; (my $name = $dist) =~ s{-}{::}g; (my $file = $dist) =~ s{-}{/}g; $file = "lib/$file.pm"; my %PREREQ_PM = ( 'Carp' => 0, 'DynaLoader' => 0, ); my %BUILD_REQUIRES = ( 'ExtUtils::Depends' => 0, 'ExtUtils::MakeMaker' => 0, 'File::Spec' => 0, 'POSIX' => 0, 'Test::More' => 0, 'blib' => 0, %PREREQ_PM, ); my %META = ( configure_requires => { 'ExtUtils::Depends' => 0, 'ExtUtils::MakeMaker' => 0, 'File::Spec' => 0, }, build_requires => { %BUILD_REQUIRES, }, dynamic_config => 1, resources => { bugtracker => "http://rt.cpan.org/Dist/Display.html?Name=$dist", homepage => "http://search.cpan.org/dist/$dist/", license => 'http://dev.perl.org/licenses/', repository => "http://git.profvince.com/?p=perl%2Fmodules%2F$dist.git", }, ); my $latest_dev_rev = 23; sub is_outdated_dev_perl { my ($rev) = "$]" =~ /^5\.([0-9]{2}[13579])/; return unless defined $rev; return $rev < $latest_dev_rev; } if (is_outdated_dev_perl) { print STDERR < 7) { die "Invalid perl version"; } else { $version .= '0' x (7 - $len); } require File::Spec; my $versioned_file = File::Spec->catfile('src', $version, $file); return -e $versioned_file ? [ $file => $versioned_file ] : undef; } unless (defined versioned_file('regcomp.c')) { print STDERR <; @DEFINES = (DEFINE => join ' ', @DEFINES) if @DEFINES; use ExtUtils::Depends; my $ed = ExtUtils::Depends->new($name); $ed->add_c('regcomp.c'); $ed->add_c('regexec.c'); $ed->add_xs('Hooks.xs'); $ed->add_pm($file => do { local $_ = $file; s/^lib/\$(INST_LIB)/; $_ }); $ed->install('re_engine_hooks.h'); $ed->save_config('Files.pm'); my %ed_vars = $ed->get_makefile_vars; $ed_vars{clean}->{FILES} .= ' ' . join ' ', ( "$dist-*", 'Files.pm', qw<*.gcov *.gcda *.gcno cover_db Debian_CPANTS.txt>, qw, ); WriteMakefile( NAME => $name, AUTHOR => 'Vincent Pit ', LICENSE => 'perl', VERSION_FROM => $file, ABSTRACT_FROM => $file, PL_FILES => {}, BUILD_REQUIRES => \%BUILD_REQUIRES, PREREQ_PM => \%PREREQ_PM, MIN_PERL_VERSION => '5.010001', META_MERGE => \%META, dist => { PREOP => "pod2text -u $file > \$(DISTVNAME)/README", COMPRESS => 'gzip -9f', SUFFIX => 'gz' }, XSPROTOARG => '-noprototypes', @DEFINES, FUNCLIST => [ qw< boot_re__engine__Hooks reh_register > ], %ed_vars, ); { my $args_dat = './args.dat'; open my $fh, '>', $args_dat or die "open(>$args_dat): $!"; for (@ARGV) { my $arg = $_; $arg =~ s{\s*(['"])\s*(.*)\s*\1\s*$}{$2}s; $arg =~ s{([^=/.a-zA-Z0-9-])}{sprintf "[%d]", ord $1}ge; print $fh "$arg\n"; } } package MY; sub postamble { my $regcomp_c = main::versioned_file('regcomp.c'); my $regexec_c = main::versioned_file('regexec.c'); my $dquote_static_c = main::versioned_file('dquote_static.c'); my $inline_invlist_c = main::versioned_file('inline_invlist.c'); my @all_c = ($regcomp_c, $regexec_c); my @regcomp_c_deps = ('regcomp.c'); my @regexec_c_deps = ('regexec.c'); for my $extra_c ($dquote_static_c, $inline_invlist_c) { next unless defined $extra_c; push @all_c, $extra_c; push @regcomp_c_deps, $extra_c->[0]; } my $rules; for my $file_c (@all_c) { my ($target_file, $versioned_file) = @$file_c; $rules .= <<"RULE"; $target_file : $versioned_file - \$(RM_F) $target_file \$(CP) $versioned_file $target_file RULE } $rules .= <<"RULE"; regcomp\$(OBJ_EXT) : @regcomp_c_deps regexec\$(OBJ_EXT) : @regexec_c_deps RULE $rules .= <<'EOF'; configure_test.pl: args.dat t/re-engine-Hooks-TestDist/Makefile: configure_test.pl $(FULLPERLRUN) configure_test.pl all clean:: t/re-engine-Hooks-TestDist/Makefile cd t/re-engine-Hooks-TestDist && $(MAKE) $@ clean:: $(RM_RF) args.dat EOF return $rules; }