$NetBSD: patch-aa,v 1.5 2010/03/10 09:24:52 sno Exp $

--- Makefile.PL.orig	2010-03-03 21:26:10.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 = "..";
 
@@ -16,137 +13,16 @@ unless (-t STDOUT) {		# Better reports i
     select $odef;
 }
 
-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\.(?:[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 ($common::parilib) {
-  $pari_version = '2001004';	# 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 $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;
 
-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.
@@ -164,67 +40,40 @@ 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,
-				},
+#	       clean	     => { FILES => 'pari.ps test_eng/ex.t- libPARI.dumb.pod libPARI.pod t/55_*.t ftp-cmd' },
+#	       macro	     => { %patchrc,
+#				  PARI_DIR	  => $paridir,
+#				},
 	      );
 
-
-# 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,
