id	summary	reporter	owner	description	type	status	priority	milestone	component	resolution	keywords	cc	work_issues	upstream	reviewer	author	merged	dependencies	stopgaps
11616	Upgrade MPIR to a more recent upstream release	leif	leif	"This is a follow-up to #8664 (and a couple of other tickets).

[[BR]]

The following '''new spkg''' is based on the latest MPIR 2.1.3 spkg, the p9 from #12131:

'''New spkg:''' [http://boxen.math.washington.edu/home/jdemeyer/spkg/mpir-2.4.0.p3.spkg]

=== mpir-2.4.0.p3 (Jeroen Demeyer, April 26th, 2012) ===
 Trac #11616, reviewer fixes:
 * When the first configure run (with CFLAGS unset) of MPIR fails, bail
   out with an error.  I am not aware of any system where MPIR fails
   to configure with CFLAGS unset but succeeds with CFLAGS set.
   This implies the following simplifications:
   - We no longer read CC and CFLAGS from /usr/include/gmp.h or
     /usr/local/include/gmp.h
   - We no longer try to add -march=native, we simply use MPIR's flags.
 * Extract $CC and $CFLAGS from Makefile instead of mpir.h, which is
   simpler and more reliable.
 * Added `quote_asm.patch` to add proper quoting to the m4 in .asm files.
 * Use `patch` to patch gmp-h.in instead of copying the file.
 * In get_processor_specific_cflags() in spkg-install, also check for
   -mpower* and -mno-power* flags, as MPIR adds -mpower on 32-bit
   PowerPC systems.

=== mpir-2.4.0.p2 (Leif Leonhardy, April 4th, 2012) ===
 #11616 (upgrading MPIR), further fixes:
 * Before enabling `-march=native`, minimalistically check whether the
   system's assembler also understands the instructions the compiler emits
   with that option.  (Work-around for e.g. GCC 4.6.3 on MacOS X 10.x and
   Intel Core i7-family CPUs with AVX.)
 * Do not unconditionally unset `PYTHON`, since Sage (>=5.0.beta10) no longer
   pollutes the environment with its package version variables, which previous-
   ly confused yasm's `configure`.
 * Fix extraction of `__GMP_CC` and `__GMP_CFLAGS` from `gmp.h`, since MPIR
   meanwhile defines these to preprocessor variables (rather than literals).
   Also don't use `\+` in `sed` patterns, as this is less portable.
 * Work around GCC 4.7.0 bug (compilation error) on Linux ia64 (Itanium) by
   almost completely disabling optimization on that platform if GCC 4.7.x
   is detected.  This doesn't hurt much if we later rebuild MPIR with a (non-
   broken) GCC from the new GCC spkg.  Cf. #12765.
 * Do not build the C++ interface and static libraries when bootstrapping the
   GCC spkg, i.e. if `SAGE_BUILD_TOOLCHAIN=yes`.  (GMP/MPIR is a prerequisite
   for it, and MPIR will later get rebuilt with both enabled, with the newly
   built GCC.)  Cf. #12782.
 * Fix a potential race condition in yasm's build by patching the re2c source.
   Cf. #11844.
 * Add ""`patch` loop"" to apply any patches (`*.patch`) located in `patches/`.
   Currently only the re2c patch matches that; the prepatched header to support
   Sun's C compiler is still copied over (and only on SunOS, although it doesn't
   do any harm on other platforms).
 * Minor clean-up; e.g. redirect error messages and warnings to `stderr`,
   quote parameter to `--libdir`, add some comments and messages, also save
   user's setting of `LDFLAGS` and `ABI`.

=== mpir-2.4.0.p1 (Leif Leonhardy, March 21st, 2012) ===
 * Upstream upgrade to MPIR 2.4.0 (#11616).
   The 2.4.0.p0 spkg isn't in this history, as it was based
   on the 2.1.3.p4 spkg, i.e., is ""on another branch"",
   and never got merged into Sage.
 * Remove forcing a sequential `make install` again, since
   the potential race condition was fixed in MPIR 2.1.4.
 * Fix `.hgtags`, which contained duplicate entries, and
   was missing others.

----

This fixes also:

 1. #11844: a potential race condition due to yasm when building MPIR in parallel.  We've never run into this [before] though.  The MPIR 2.4.0.'''p2''' spkg now includes a patch to upstream fixing that.

 2. #12782: when building MPIR to bootstrap GCC (i.e. when `SAGE_BUILD_TOOLCHAIN=yes`), do not build the C++ interface (and not the static library).  This would allow to build Sage on systems which have a C compiler but not a C++ compiler, and also saves time.

----

The list of changes between MPIR 2.1.3 (more precisely, 2.1.1) and MPIR 2.4.0 is fairly long, so I haven't put them into the description, but [attachment:MPIR_upstream_changes_between_2.1.1_and_2.4.0.txt attached them] in a plain text file.

----

To install / test the spkg, it is sufficient to just

 1. Download the new spkg and copy it into `$SAGE_ROOT/spkg/standard/`.

 2. Install the MPIR spkg:
{{{
#!sh
$ ./sage -f spkg/standard/mpir-<version>.spkg
}}}

 3. Re-install all packages depending on MPIR:
{{{
#!sh
$ env SAGE_UPGRADING=yes make build
}}}
   (or omit `build` to also rebuild the documentation in the same `make` run).

To run just MPIR's test suite, you can reinstall the spkg with `SAGE_CHECK=yes`:
{{{
#!sh
$ env SAGE_CHECK=yes ./sage -f spkg/standard/mpir-<version>.spkg
}}}
Or, if you haven't yet installed the spkg (but copied it into `$SAGE_ROOT/spkg/standard/` as mentioned above), do:
{{{
#!sh
$ env SAGE_CHECK=yes ./sage -i spkg/standard/mpir-<version>.spkg
$ env SAGE_UPGRADING=yes make build # rebuilds all dependent packages
}}}
Afterwards you can run `make doc` to (re)build the documentation, and / or `make ptestlong` to run Sage's full test suite in parallel."	enhancement	closed	blocker	sage-5.0	packages: standard	fixed	sd32, GMP, SandyBridge, Westmere, yasm re2c race condition, Linux ia64 Itanium GCC 4.7.0 bug	justin wbhart jpflori		N/A	Jeroen Demeyer, Leif Leonhardy, Volker Braun	Leif Leonhardy, Jeroen Demeyer	sage-5.0.rc0		
