SMOP
view release on metacpan or search on metacpan
inc/MyBuilder.pm view on Meta::CPAN
my $ldopts = ldopts . '-lrt';
use v5.10;
my @MODULES = qw(s0native dump nagc util capture interpreter mold yeast native lost s1p p6opaque s1p-oo mold-message profile p5 main);
my $BUILDDIR = 'build';
sub new {
my ($self,@args) = @_;
for (@MODULES) {
mkdir(catdir($_,'include'));
}
$self->SUPER::new(@args,'share_dir'=>[catdir('build','lib'),map {catdir($_,'include')} ('base','util',@MODULES)]);
}
sub ACTION_install {
my $self = shift;
$self->SUPER::ACTION_install;
if ($^O =~ /linux/) {
my $linux = Config::AutoConf->check_prog("ldconfig");
system $linux if (-x $linux);
}
}
sub ACTION_code {
my $self = shift;
# $self->dispatch("create_manpages");
$self->dispatch("create_objects");
$self->dispatch("create_library");
# $self->dispatch("create_binaries");
$self->dispatch("create_tests");
$self->dispatch("compile_xscode");
$self->SUPER::ACTION_code;
}
sub ACTION_create_objects {
my $self = shift;
my $cbuilder = $self->cbuilder;
#
print STDERR "\n** Compiling C files\n";
my %extra_flags = (p5=>ccopts);
my @INCLUDE = (catdir("base","include"),catdir("util","include"));
for my $module (@MODULES) {
make_path(catdir($BUILDDIR,$module,"src"),catdir($BUILDDIR,$module,"t"));
# copy headers so that they can be used when compiling generated files
for my $header (@{$self->rscan_dir(catdir($module,"src"),qr/\.h$/)}) {
my $dest = $header;
$dest =~ s/^/$BUILDDIR\//;
$self->copy_if_modified( from => $header, to => $dest);
}
push(@INCLUDE,"$module/include");
my @c_files = @{$self->rscan_dir(catdir($module,"src"),qr/\.c$/)};
for my $file (@c_files) {
my $object = $file;
$object =~ s/\.c/.o/;
$object =~ s/^/$BUILDDIR\//;
next if $self->up_to_date($file, $object);
my $extra_flags = $extra_flags{$module} ? ' '.$extra_flags{$module} : '';
$cbuilder->compile(object_file => $object,
source => $file,
extra_compiler_flags => $extra_flags,
include_dirs => [@INCLUDE])
}
my @ri_files = @{$self->rscan_dir(catdir($module,"src"),qr/\.ri$/)};
for my $file (@ri_files) {
say "RI file $file";
my $object = $file;
$object =~ s/\.ri/.o/;
$object =~ s/^/$BUILDDIR\//;
my $c_file = $file;
$c_file =~ s/\.ri/.c/;
$c_file =~ s/^/$BUILDDIR\//;
if (!$self->up_to_date($file, $c_file)) {
SMOP::RI::Writer::process_ri($file,$c_file);
}
if (!$self->up_to_date($c_file, $object)) {
$cbuilder->compile(object_file => $object,
source => $c_file,
extra_compiler_flags => "-g",
include_dirs => [@INCLUDE]);
}
}
}
for my $module (@MODULES) {
my @c_files = @{$self->rscan_dir(catdir($module,"t"), qr/\.c$/)};
for my $file (@c_files) {
my $object = $file;
$object =~ s/\.c/.o/;
$object =~ s/^/$BUILDDIR\//;
next if $self->up_to_date($file, $object);
$cbuilder->compile(object_file => $object,
source => $file,
extra_compiler_flags => "-g",
include_dirs => [@INCLUDE]);
}
}
}
sub smop_lib_flags {
my @LIBS;
( run in 0.423 second using v1.01-cache-2.11-cpan-524268b4103 )