a302c21f8f
2.010809 MakeMaker of 5.22 (and, maybe, 5.20) started to call test_dynamic target in the daughter Makefile. Correct "{" in RExes of libPARI/gphelp. Attempt to workaround a broken config of gcc on vendor's Perl on Solaris. 2.01080900 Repackage as zip
275 lines
11 KiB
Text
275 lines
11 KiB
Text
$NetBSD: patch-aa,v 1.8 2016/05/22 17:50:57 wiz Exp $
|
|
|
|
--- Makefile.PL.orig 2016-05-07 03:14:29.000000000 +0000
|
|
+++ Makefile.PL
|
|
@@ -2,9 +2,6 @@
|
|
use ExtUtils::MakeMaker;
|
|
use Config '%Config';
|
|
|
|
-BEGIN {unshift @INC, 'utils'}
|
|
-use Math::PariBuild;
|
|
-
|
|
# Uncomment and change this line if I fail to find it
|
|
# $paridir = "..";
|
|
|
|
@@ -18,151 +15,16 @@ unless (-t STDOUT) { # Better reports i
|
|
|
|
chmod 0400, 'typemap' if $^O =~ /cygwin/ and -f 'typemap' and not -r 'typemap'; # bug in some installations of cygwin???
|
|
|
|
-my $ok23 = 0;
|
|
-grep {/^machine=(.*)$/i and $common::machine = $1} @ARGV;
|
|
-grep {/^configure$/i and $common::do_configure = 1} @ARGV;
|
|
-grep {/^paridir=(.*?)[\/\\]?$/i and $paridir = $1} @ARGV;
|
|
-grep {/^pari_tgz=(.*?)[\/\\]?$/i and $parisrc = $1} @ARGV;
|
|
-grep {/^force_download$/i and $force_download = 1} @ARGV;
|
|
-grep {/^parilib=(.*)$/i and $common::parilib = $1} @ARGV;
|
|
-grep {/^version23_ok=(.*)$/i and $ok23 = $1} @ARGV;
|
|
-
|
|
-# The REx should anchored-match versions to skip
|
|
-$common::skip_versions = $ok23 ? '2\.(?:[4-9]|\d\d+)\.' : '2\.(?:[3-9]|\d\d+)\.';
|
|
-
|
|
-@ARGV = grep !/^((machine|paridir|pari_tgz|parilib|version23_ok)=.*|configure|force_download)$/i, @ARGV;
|
|
-
|
|
-$paridir = find_pari_dir() unless defined $paridir or $parisrc or $force_download;
|
|
-($paridir, my @patch_rc) = download_and_patch_pari($parisrc, $force_download)
|
|
- if !$paridir or $force_download;
|
|
-my %patchrc = (patchrc => $patch_rc[0]) if @patch_rc;
|
|
-
|
|
-die <<EOD unless $paridir;
|
|
-Could not find GP/PARI build directory, please run Makefile.PL
|
|
-with paridir=/directory option.
|
|
-EOD
|
|
-
|
|
-my $gcc_version
|
|
- = defined($Config{gccversion}) ? ", gccversion=$Config{gccversion}" : "";
|
|
-print <<EOP;
|
|
-Setting up Math::Pari with Perl $] on $^O version $Config{osvers};
|
|
- cc=$Config{cc}$gcc_version, cccdlflags='$Config{cccdlflags}',
|
|
- ccflags='$Config{ccflags}',
|
|
- optimize='$Config{optimize}',
|
|
- ld=$Config{ld}, ldflags='$Config{ldflags}'.
|
|
-EOP
|
|
-
|
|
-if ($^O eq 'solaris' and $Config{cc} eq 'gcc'
|
|
- and ( $Config{optimize} =~ s/(?<!\S)(-xarch=386|-xildoff)(?!\S)//g
|
|
- or $Config{cccdlflags} =~ s/(?<!\S)-KPIC(?!\S)/-fPIC/ )) {
|
|
- # Vendor's Perl has major problems with building extensions; try to fix this
|
|
- # One way is to use perlgcc; but it does not work with 5.8.4
|
|
- # See http://prefetch.net/blog/index.php/2006/07/29/building-perl-modules-for-solaris/
|
|
- print <<EOP;
|
|
-
|
|
-... Broken config of gcc-on-Solaris detected! I would try to work around this.
|
|
-... Reset: cccdlflags --> '$Config{cccdlflags}', optimize -> '$Config{optimize}'.
|
|
+my $pariprefix;
|
|
+my $addlibs;
|
|
+my $libpari = "pari";
|
|
+
|
|
+grep {/^pariprefix=(.*)$/i and $pariprefix = $1} @ARGV;
|
|
+grep {/^addlibs=(.*)$/i and $addlibs = $1} @ARGV;
|
|
+grep {/^libpari=(.*)$/i and $libpari = $1} @ARGV;
|
|
|
|
-EOP
|
|
-}
|
|
-
|
|
-if ($common::parilib) {
|
|
- $pari_version = '2001007'; # XXXX How to get a correct one?
|
|
- $define = '-DNO_HIGHLEVEL_PARI';
|
|
- print <<EOP;
|
|
-Trying to use existing PARI library (at $common::parilib)
|
|
- (FAKE integer-formatted version $pari_version).
|
|
-EOP
|
|
-} else {
|
|
- $define = '';
|
|
- $pari_version = pari_formatted_version($paridir);
|
|
- print <<EOP;
|
|
-Found GP/PARI build directory in $paridir
|
|
- (integer-formatted version $pari_version).
|
|
-EOP
|
|
- print <<EOP if $pari_version =~ /^2003/;
|
|
-
|
|
- ### Math::Pari support of GP/PARI library version 2.3.* is not fully
|
|
- ### finished. For non-PS plotting functions, one must downgrade to 2.1.7.
|
|
-
|
|
- ### Moreover, the test t/55_intnum.t takes significant time to complete.
|
|
-
|
|
-EOP
|
|
- print <<EOP if $pari_version =~ /^2001/;
|
|
-
|
|
- ### GP/PARI library version 2.1.* has many problems fixed in versions 2.3.*.
|
|
-
|
|
- ### Especially important are the problems with symbols `hiremainder' and
|
|
- ### `overflow' - if your build fails and error messages contain these
|
|
- ### words, updating to 2.3.* might allow your use of fast processor-specific
|
|
- ### assembler code.)
|
|
-
|
|
- ### Switching to 2.3.* should be as simple as giving Makefile.PL an option
|
|
- ### version23_ok=1
|
|
- ### (if you or Makefile.PL already downloaded-and-extracted version-2.1.*
|
|
- ### distribution, give an extra option, force_download).
|
|
- ### Alternatively, give option
|
|
- ### paridir=DIRECTORY-of-extracted-distribution
|
|
-
|
|
- ### However, keep in mind: v.2.3.* supports only plotting to PostScript.
|
|
-
|
|
-EOP
|
|
- $common::pari_version = $pari_version;
|
|
- $common::main_paridir = $paridir;
|
|
- *MY::postamble = \&xMY::postamble;
|
|
-}
|
|
-
|
|
-$os = $Config{osname};
|
|
-
|
|
-$define .= " -DPARI_VERSION_EXP=$pari_version -DDEBUG_PARI";
|
|
-$define .= " -DUSE_SLOW_ARRAY_ACCESS -DUSE_SLOW_NARGS_ACCESS" if $] >= 5.009;
|
|
-$libs = "-lm";
|
|
-$libs .= " $common::parilib" if $common::parilib;
|
|
-$noexp2 = ''; # Should be used for generation of paricfg.h
|
|
-
|
|
-if ($os eq "solaris") {
|
|
- # Some older versions needed -lsunmath to import exp2(). This is
|
|
- # probably not needed anymore (though can speed things up).
|
|
-
|
|
- # Below -R specifies the path to search for this file when the
|
|
- # program will run, -L the path to search when the program is linked
|
|
-# @sc_dirs = '/opt/SUNWspro/lib' if -d '/opt/SUNWspro/lib';
|
|
-# @sc_dirs = </opt/SUNWspro/SC*/lib> unless @sc_dirs;
|
|
-# if (@sc_dirs) {
|
|
-# $libs .= " -R$sc_dirs[-1] -L$sc_dirs[-1] -lsunmath -lm";
|
|
-# } else {
|
|
-# #warn "Cannot find SUNWspro dirs, needed for -lsunmath, using NOEXP2.\n";
|
|
- $noexp2 = 1;
|
|
-# }
|
|
-} elsif ($os eq "os2") {
|
|
- $noexp2 = 1;
|
|
- $define .= " -DMALLOC_PROCS";
|
|
-} elsif ($os eq 'linux') {
|
|
- $noexp2 = 1;
|
|
-}
|
|
-
|
|
-my %opts;
|
|
-unless ($common::parilib) {
|
|
- build_tests $paridir; # Convert the test suite
|
|
- make_pod 'libPARI.pod', '-to_pod', $paridir; # Now the docs
|
|
- make_pod 'libPARI.dumb.pod', '-to_dumb_pod', $paridir;
|
|
- # ... and paricfg.h
|
|
- %opts = build_paricfg($paridir, $common::do_configure, $pari_version);
|
|
-
|
|
- if ($ENV{MATH_PARI_REPORT_CODES}) {
|
|
- # Check the correspondence between string interfaces and numeric interfaces
|
|
- my %codes;
|
|
- my %names;
|
|
- ep_in_version($pari_version);
|
|
- ep_codes_from_file("$paridir/src/language/init.c", %codes, %names);
|
|
- ep_codes_from_file("$paridir/src/gp/highlvl.c", %codes, %names);
|
|
- # EpValence reworked in 2.2.7; when exactly was it redone??? XXXX
|
|
- unless ($pari_version > 2002006 or ep_hash_report(%codes)) {
|
|
- print STDERR "Problems with numeric interface codes noted:\n";
|
|
- ep_hash_report(%codes, %names, \*STDERR);
|
|
- }
|
|
- }
|
|
-}
|
|
+@ARGV = grep !/^((pariprefix|addlibs|libpari)=.*)$/i, @ARGV;
|
|
+my $define = "-DPARI_VERSION_EXP=" . get_pari_formatted_version();
|
|
|
|
# We want to find the offset of the least significant byte
|
|
# of SV.flags inside an SV.
|
|
@@ -180,74 +42,36 @@ my $perl_int_size = $Config{'ivsize'} ||
|
|
$define .= ' -DLONG_SHORTER_THAN_IV' if $perl_int_size > $longsize;
|
|
|
|
$define .= ' -Derr=pari_err'; # On linux it can get a wrong dynamic loading
|
|
-$define .= ' -DHAVE_LADD' if $opts{have_ladd};
|
|
$define .= ' -DGCC_INLINE' if $Config{gccversion} and not $Config{optimize} =~ /-g\b/;
|
|
-$define .= ' -DHAVE_PARIPRIV' if -f "$paridir/src/headers/paripriv.h";
|
|
-#$define .= ' -DNO_GRAPHICS_PARI' unless -f "$paridir/src/graph/plotgnuplot.c";
|
|
-
|
|
-# XXXX otherwise segfaults trying to install highlevel functions???
|
|
-# XXXX because functions_hash = NULL???
|
|
-# $define .= ' -DNO_HIGHLEVEL_PARI' if $pari_version >= 2003000;
|
|
-$define .= ' -DNO_GRAPHICS_PARI' if $pari_version >= 2003000;
|
|
|
|
-# This is done in Makefile in GP/PARI, and in paricfg.h without do_configure
|
|
-$define .= ' -DDL_DFLT_NAME=NULL' if $common::do_configure;
|
|
-
|
|
-my $extra_inc = extra_includes($paridir);
|
|
+$define .= " -DNO_HIGHLEVEL_PARI";
|
|
|
|
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
|
|
# the contents of the Makefile being created.
|
|
&WriteMakefile(
|
|
- LIBS => $libs,
|
|
- INC => $extra_inc . ' -I $(PARI_DIR)/src/headers -I $(PARI_DIR)/src -I ./libPARI',
|
|
+ LIBS => join( " ", "-L${pariprefix}/lib -l${libpari}", $addlibs ),
|
|
+ INC => $extra_inc . " -I ${pariprefix}/include -I ${pariprefix}/src",
|
|
NAME => 'Math::Pari',
|
|
- ($common::parilib ? () :
|
|
- (MYEXTLIB => 'libPARI/libPARI$(LIB_EXT)')),
|
|
VERSION_FROM => 'Pari.pm',
|
|
($] >= 5.005 ? ## Add these new keywords supported since 5.005
|
|
(ABSTRACT_FROM => 'Pari.pm', # retrieve abstract from module
|
|
AUTHOR => 'Ilya Zakharevich <ilyaz@cpan.org>') : ()),
|
|
DEFINE => $define,
|
|
dist => {COMPRESS=>'gzip -9f', SUFFIX=>'gz'},
|
|
- clean => { FILES => 'pari.ps test_eng/ex.t- libPARI.dumb.pod libPARI.pod t/55_*.t ftp-cmd' },
|
|
- macro => { %patchrc,
|
|
- PARI_DIR => $paridir,
|
|
- },
|
|
);
|
|
|
|
-if (not $common::patches_run or @common::patches_fail) {
|
|
- my @patches_needed = patches_for($pari_version);
|
|
- my $msg = $common::patches_run ? "failed when applied" : "were not applied";
|
|
- push @common::patches_fail, @patches_needed unless $common::patches_run;
|
|
- warn "\nThe following patches were judged to be beneficial, but $msg:\n\t@common::patches_fail\n";
|
|
-}
|
|
-
|
|
-
|
|
-# Remake POD if the source changed.
|
|
-# Go to a subdirectory to build the headers and the library.
|
|
-# XXX With -j4 goes twice to a subdir in parallel, both times without -j4...
|
|
-sub xMY::postamble {
|
|
- '
|
|
-AUTOGEN_HEADERS = libPARI/pariinl.h
|
|
-
|
|
-Pari$(OBJ_EXT) : $(AUTOGEN_HEADERS)
|
|
-
|
|
-$(AUTOGEN_HEADERS): $(MYEXTLIB)
|
|
-
|
|
-$(MYEXTLIB): libPARI/Makefile FORCE
|
|
- cd libPARI && $(MAKE) $(PASTHRU)
|
|
-
|
|
-libPARI.pod: $(PARI_DIR)/doc/usersch3.tex libPARI/gphelp
|
|
- $(PERL) libPARI/gphelp -to_pod $(PARI_DIR)/doc/usersch3.tex > pod_tmp && mv pod_tmp $@
|
|
-
|
|
-libPARI.dumb.pod: $(PARI_DIR)/doc/usersch3.tex libPARI/gphelp
|
|
- $(PERL) libPARI/gphelp -to_dumb_pod $(PARI_DIR)/doc/usersch3.tex > pod_tmp && mv pod_tmp $@
|
|
-
|
|
-build_tests:
|
|
- -$(RM_F) test_eng/ex.t-
|
|
- $(FULLPERL) -Iutils -MMath::PariBuild -e "build_tests shift" $(PARI_DIR)
|
|
-
|
|
-';
|
|
+sub get_pari_formatted_version()
|
|
+{
|
|
+ my $fh;
|
|
+ my $formatted_version;
|
|
+ open( $fh, "<", "${pariprefix}/include/pari/paricfg.h" ) or die $!;
|
|
+ while( my $line = <$fh> )
|
|
+ {
|
|
+ next unless ( $line =~ m/^#define\s+PARIVERSION.*(\d+)\.(\d+)\.(\d+)/ );
|
|
+ $formatted_version = sprintf( "%d%03d%03d", $1, $2, $3 );
|
|
+ }
|
|
+ close($fh);
|
|
+ return $formatted_version;
|
|
}
|
|
|
|
# Rewrite pic option to PIC in CCCDLFLAGS,
|
|
@@ -257,7 +81,8 @@ sub MY::const_config
|
|
my $self = shift;
|
|
my $flags = $self->{'CCCDLFLAGS'}; # Tmp var needed with Perl4 !
|
|
$flags =~ s/(-[fK]?\s*)pic\b/${1}PIC/;
|
|
- $flags =~ s/-KPIC/-K PIC/; # Apparently (was?) needed on Solaris...
|
|
+ # Nowadays breaks build; see PR 45271
|
|
+ #$flags =~ s/-KPIC/-K PIC/; # Apparently (was?) needed on Solaris...
|
|
$self->{'CCCDLFLAGS'} = $flags;
|
|
if ($^O eq 'MSWin32' && $Config{'ccflags'} =~ /-DPERL_OBJECT/)
|
|
{
|