Alien-TinyCC
view release on metacpan or search on metacpan
inc/My/Build/Linux.pm view on Meta::CPAN
########################################################################
package My::Build::Linux;
########################################################################
use strict;
use warnings;
use parent 'My::Build';
use File::ShareDir;
# We don't need any extra args for pure Linux builds, but this may be
# overridden by derived classes
sub extra_config_args { '' }
sub make_command { 'make' }
sub install_to_prefix {
my ($self, $prefix) = @_;
return if $self->notes('build_state') eq $prefix;
$self->my_clean;
# Get the system-specific make command
my $make = $self->make_command;
# move into the source directory and perform configure, make, and install
chdir 'src';
# Add -fPIC if it's in our Perl Config's cccdlflags
use Config;
$ENV{CFLAGS} = '' unless $ENV{CFLAGS}; # Avoid undef warnings
$ENV{CFLAGS} .= ' -fPIC'
if $Config{cccdlflags} =~ /-fPIC/ and $ENV{CFLAGS} !~ /-fPIC/;
$ENV{CFLAGS} .= ' -fpic'
if $Config{cccdlflags} =~ /-fpic/ and $ENV{CFLAGS} !~ /-fpic/;
# clean followed by a normal incantation
my $extra_args = $self->extra_config_args;
system("./configure --prefix=$prefix $extra_args")
and die 'tcc build failed at ./configure';
system($make)
and die 'tcc build failed at make';
system($make, 'install')
and die 'tcc build failed at make install';
# Move back to the root directory
chdir '..';
# Record the current build state so we don't build more than necessary.
$self->notes('build_state', $prefix);
}
use Cwd;
sub ACTION_code {
my $self = shift;
$self->notes('build_state', '') unless defined $self->notes('build_state');
# Build an absolute prefix to our (local) sharedir, build and install
my $prefix = File::Spec->catdir(getcwd(), 'share');
$self->install_to_prefix($prefix);
$self->SUPER::ACTION_code;
}
sub my_clean {
my $self = shift;
return unless -f 'src/config.mak';
( run in 1.496 second using v1.01-cache-2.11-cpan-39bf76dae61 )