Math-Pari
view release on metacpan or search on metacpan
libPARI/Makefile.PL view on Meta::CPAN
use ExtUtils::MakeMaker;
use Config '%Config';
#BEGIN {unshift @INC, 'utils'}
use Math::PariBuild;
use strict;
ExtUtils::MakeMaker::WriteEmptyMakefile(), return 1 if $common::parilib;
*MY::top_targets = \&xMY::top_targets; # will break WriteEmptyMakefile
*MY::const_config = \&xMY::const_config;
my $main_paridir = $common::main_paridir;
die "Please start Makefile.PL at toplevel, not in libPARI"
unless $main_paridir;
if ($main_paridir =~ m,^([a-z]:)?[/\\],i) {
$main_paridir = $common::main_paridir;
} else {
$main_paridir = "../$common::main_paridir";
}
my $pari_version = $common::pari_version;
my $machine = $common::machine;
if (defined $machine) {
print "...Via command-line: processor family `$machine'\n";
} else {
$machine = find_machine_architecture;
}
if ( $machine eq 'port' # Set by find_machine_architecture()
and defined($Config{longsize}) and $Config{longsize} == 8 ) {
#$mycflags .= " -DLONG_IS_64BIT"; # Moved to BuildPari...
}
# Choose which assembler files to use
my $asmarch = choose_and_report_assembler($machine, $pari_version);
# $machine used as a coarse-grain factor below, $asmarch as a fine-grain
$machine = 'port' if $asmarch eq 'none';
# This part is based on analysing Makefile.SH in */kernel/* subdirectories.
my $asscmd;
if ($machine =~ /sparc|alpha|hppa/) {
$asscmd = '$(AS) $(ASFLAGS)'; # $(CCCDLFLAGS)? sparc is non-relocatable...
} else {
$asscmd = '$(CCCMD) $(CCCDLFLAGS)';
}
my $as_message = not_gnu_as();
my $Using_gnu_as = not $as_message;
print STDERR
"...Assembler is " . ($Using_gnu_as ? "" : "not ") . "GNU assembler\n";
my $asmcpp_define = '';
if ($Using_gnu_as and $^O eq 'solaris' and $asmarch =~ /^sparc/) {
$asmcpp_define = '-DNO_UNDERSCORE';
$asmcpp_define .= ' -D__GNUC__' if $Config{gcc};
}
# Which files to compile and how to build levels1/2 kernel
my $kernels = kernel_files($asmarch, $pari_version, $Using_gnu_as, $main_paridir);
kernel_fill_data($kernels, \ my %kernel);
if ($common::src eq 'src64') {{ # 64-bit Win32 is tricky
warn(<<EOD), last if -d "$main_paridir/src64";
Directory $main_paridir/src64 present.
I assume it was correctly generated.
EOD
die <<EOD . " Remove this dir to generate it again!" if -d "$main_paridir/src64a";
Directory $main_paridir/src64a present.
I assume there was an error generating $main_paridir/src64!
EOD
Math::PariBuild::filter_for_ll_all($main_paridir, 'src64a');
rename("$main_paridir/src64a", "$main_paridir/src64") or die "Error renaming `$main_paridir/src64a' to `$main_paridir/src64'!";
}}
# remaining kernel C files
my $kernel_dir = '$(PARI_DIR_SRC)/kernel';
my $mp = "$kernel_dir/none/mp.c";
my $mpinl = "$kernel_dir/none/level1.c"; # Non-inlined versions of inlines
my $mpinlh = "$kernel_dir/none/level1.h"; # Put as a dependence
if ($pari_version >= 2003000) {
$mpinl = "$kernel_dir/none/mpinl.c";
$mpinlh = '';
}
my $thread_engine = $common::thread_engine;
(my $ARCH = $^O) =~ s/^MSWin32$/mingw/;
my @cfiles = # Remaining C files
grep !m(/ ( plot (?!port|gnuplot)
| ix86 | version | mpin | dummy | mt/(?!(mt|$thread_engine)\.)
| gp_(rl|init) | kerntest | whatnow | gp\. )
)x, <$main_paridir/src/*/*.c>, # kernel C files deeper in the tree
<$main_paridir/src/systems/$ARCH/*.c>;
push @cfiles, grep -f, map "$main_paridir/src/graph/$_.c", qw(plottty plotps)
if $pari_version >= 2009000; # exist and work at 2.9.0, fail on 2.7.6
push @cfiles, "$main_paridir/src/graph/plotnull.c"
unless grep m(/graph/(plotgnuplot|plotps)\.c), @cfiles;
my @cat_cfiles = # Remaining kernel C files
grep !m(/ ( level \d+ | mp ) )x, <$main_paridir/src/kernel/none/*.c>;
@cfiles = grep ! m(/test/[^/]+\.c$), @cfiles;
map s/^\Q$main_paridir\/src/\$(PARI_DIR_SRC)/, @cfiles;
( run in 0.890 second using v1.01-cache-2.11-cpan-71847e10f99 )