Skip to content

Instantly share code, notes, and snippets.

@rbuels
Created August 17, 2009 18:15
Show Gist options
  • Save rbuels/169285 to your computer and use it in GitHub Desktop.
Save rbuels/169285 to your computer and use it in GitHub Desktop.
use Module::Build;
my @compiler_flags;
if ($] < 5.006 and Module::Build->y_n("Does your system define the getcwd() C library function?", 'y')) {
@compiler_flags = ('-DHAS_GETCWD');
}
my $class = Module::Build->subclass(code => <<'EOF');
# See http://rt.cpan.org/NoAuth/Bug.html?id=4681 for why we add
# this to the Makefile.PL:
sub do_create_makefile_pl {
my $self = shift;
my $fh = IO::File->new('> Makefile.PL') or die $!;
print $fh "\nBEGIN { \@INC = grep {!/blib/} \@INC }\n\n";
$self->SUPER::do_create_makefile_pl(fh => $fh);
}
# To keep MakeMaker happy, we have .pm files in the top-level
# directory as well as in lib/.
sub find_pm_files {
my $self = shift;
my $files = $self->SUPER::find_pm_files(@_); # Finds in lib/
$files->{'Cwd.pm'} = 'lib/Cwd.pm';
return $files;
}
# If we're building the Makefile.PL, don't note the dependence on Module::Build.
sub build_requires {
my $self = shift;
my $in_create_makefile_pl = 0;
my $i = 0;
while (defined( my $subr = (caller $i++)[3] )) {
$in_create_makefile_pl = 1 if $subr =~ /::create_makefile_pl$/;
}
my $prereqs = $self->SUPER::build_requires(@_);
return $prereqs unless $in_create_makefile_pl;
return { map {$_, $prereqs->{$_}} grep !/^Module::Build$/, keys %$prereqs };
}
# Copy the ppport.h file to where it will be expected under Module::Build
sub ACTION_code {
my $self = shift;
my $ppp = 'ppport.h';
my $lib_ppp = File::Spec->catfile('lib', $ppp);
$self->copy_if_modified(from => $ppp, to => $lib_ppp);
$self->add_to_cleanup($lib_ppp);
$self->SUPER::ACTION_code(@_);
}
# Make sure the two main $VERSION numbers agree. This is just a
# simple way of making sure both VERSIONs get updated with every release.
sub ACTION_distdir {
my $self = shift;
my $v1 = $self->version_from_file('Cwd.pm');
my $v2 = $self->version_from_file('lib/File/Spec.pm');
die "Version $v1 from Cwd.pm doesn't match version $v2 from lib/File/Spec.pm"
unless $v1 eq $v2;
return $self->SUPER::ACTION_distdir(@_);
}
EOF
my $build = $class->new
(
dist_name => 'PathTools',
dist_abstract => 'Tools for working with paths and file specs across platforms',
dist_version_from => 'Cwd.pm',
license => 'perl',
installdirs => 'core',
# create_makefile_pl => 'traditional',
requires => {
'perl' => 5.005,
'Carp' => 0,
'File::Basename' => 0,
},
build_requires => {
'File::Path' => 0,
'Test' => 0,
'Scalar::Util' => 0,
'Module::Build' => '0.19',
'ExtUtils::CBuilder' => 0,
($^O =~ /^(dos|MSWin32)$/ ? ('ExtUtils::Install' => 1.39) : ()),
},
xs_files => { 'Cwd.xs' => 'lib/Cwd.xs' },
extra_compiler_flags => \@compiler_flags,
dynamic_config => 1, # Because of the $^O checking above
sign => 1,
);
$build->create_build_script;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment