Astro-Nova
view release on metacpan or search on metacpan
inc/Module/Build/AstroNova.pm view on Meta::CPAN
package Module::Build::AstroNova;
use 5.006;
use warnings;
use strict;
use Module::Build;
our @ISA = 'Module::Build';
use File::Spec;
use Config;
our $NovaDir = 'libnova-0.15.0';
our $NovaDirStaticLib = File::Spec->catfile($NovaDir, 'src', '.libs', 'libnova'.$Config::Config{lib_ext});
sub ACTION_code {
my $self = shift;
$self->depends_on("libnova");
$self->depends_on("structs");
return $self->SUPER::ACTION_code(@_);
}
sub ACTION_patchlibnova {
my $self = shift;
if ($^O =~ /bsd/i or $^O =~ /solaris/i) {
if (not -e File::Spec->catfile($NovaDir, '.cosl_patched')) {
$self->log_info("Patching libnova with cosl patch...\n");
system($^X, File::Spec->catdir("buildtools", "cosl_patch.pl"), $NovaDir)
and die "Failed to patch libnova";
}
else {
$self->log_info("libnova cosl patch already applied\n");
}
}
else {
$self->log_info("Not patching libnova with cosl patch: Likely not necessary on this OS\n");
}
}
sub ACTION_libnova {
my $self = shift;
if (-f $NovaDirStaticLib) {
$self->log_info("libnova already built, skipping re-build.\n");
return 1;
}
$self->log_info("Building libnova for static linking...\n");
$self->depends_on("patchlibnova");
my $oldcwd = Cwd::cwd();
chdir($NovaDir) or die "Failed to chdir to '$NovaDir'";
system("./configure", "--with-pic") and die "Failed to configure libnova";
system("make") and die "Failed to compile libnova";
chdir $oldcwd;
if (-f $NovaDirStaticLib) {
$self->log_info("Built libnova and found static library. All is well.\n");
}
else {
die "Tried to build libnova, but the static library isn't where I expected it ($NovaDirStaticLib)";
}
return 1;
}
sub ACTION_structs {
my $self = shift;
$self->depends_on("libnova");
$self->log_info("Generating XS/Structs.xs...\n");
system($^X, File::Spec->catfile("buildtools", "makeNovaClass.pl"))
and die "Failed to build XS/Structs.xs";
return 1;
}
1;
( run in 3.218 seconds using v1.01-cache-2.11-cpan-98e64b0badf )