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 )