Xacobeo
view release on metacpan or search on metacpan
inc/MyBuilder.pm view on Meta::CPAN
$LIBS = "$config{LIBS} $libxml{libs}";
$TYPEMAPS = $config{TYPEMAPS};
# Make sure that the XS-C file doesn't exist otherwise it will be linked twice
$C_FILE = catfile('lib', 'Xacobeo', 'XS.c');
unlink($C_FILE);
$XS_FILE = catfile('lib', 'Xacobeo', 'XS.xs');
}
sub new {
my $class = shift;
my (%args) = @_;
$args{extra_compiler_flags} = $CFLAGS;
$args{extra_linker_flags} = $LIBS;
$args{c_source} = 'xs';
$class->SUPER::new(%args);
}
sub ACTION_install {
my $self = shift;
# If we have more than one install base then take the last entry, otherwise
# we will install the application in ARRAY(0x1c577f8)/
my $install_base = $self->install_base;
$self->install_base($install_base->[-1]) if ref $install_base eq 'ARRAY';
# Make sure that 'share/' has an installation path
my $p = $self->{properties};
if (! exists $p->{install_path}{share}) {
my $script_dir = $self->install_destination('script');
my @dirs = File::Spec->splitdir($script_dir);
$dirs[-1] = 'share';
$p->{install_path}{share} = File::Spec->catdir(@dirs);
}
# Proceed normally
$self->SUPER::ACTION_install(@_);
}
sub ACTION_post_install {
my $self = shift;
print "Updating desktop database\n";
system('update-desktop-database');
}
sub ACTION_build {
my $self = shift;
# Copy the files in share/
foreach my $entry (@{ $self->rscan_dir('share') }) {
# Skip hidden entries or folders
next if $entry =~ m,(^|/)\., or -d $entry;
$self->copy_if_modified(
from => $entry,
to => catfile($self->blib, $entry)
);
}
# Translate the PO files into .mo files
foreach my $entry (@{ $self->rscan_dir('po') }) {
next unless $entry =~ /([a-zA-Z_]+)\.po$/;
my $lang = $1;
# The .mo files go into their own folder, each language has it's own folder
my $dir = catdir($self->blib, 'share', 'locale', $lang, 'LC_MESSAGES');
mkpath($dir);
my $mo_file = catfile($dir, 'xacobeo.mo');
print "Translating $entry -> $mo_file\n";
system('msgfmt', '-o', $mo_file, $entry);
}
# Copy the XS.xs and the typemap file to the lib folder. This way
# Module::Build will handle the compilation and installation of the XS
# library.
foreach my $file ('XS.xs', 'libxml2-perl.typemap') {
$self->copy_if_modified(
from => catfile('xs', $file),
to => catfile('lib', 'Xacobeo', $file),
);
}
# Proceed normally
$self->SUPER::ACTION_build(@_);
}
# Transform the XS into a C file to our liking
sub process_xs_files {
my $self = shift;
ExtUtils::ParseXS::process_file(
filename => $XS_FILE,
prototypes => 0,
typemap => $TYPEMAPS,
output => $C_FILE,
);
# Proceed normally
$self->SUPER::process_xs_files(@_);
}
# Return a true value
1;
( run in 1.208 second using v1.01-cache-2.11-cpan-0b58ddf2af1 )