= zn_poly =

== Description ==

zn_poly is a C library for polynomial arithmetic in Z/nZ[x], where n is any
modulus that fits into an unsigned long.

Website: http://cims.nyu.edu/~harvey/zn_poly/

== License ==

GPL V2 or V3.  Some of the code has been copied from other projects - see
the file src/COPYING for details.

== Upstream Contact ==

 * David Harvey

== Dependencies ==

 * GMP/MPIR
 * (some) Python (to create the Makefile)
 * GNU patch
 * NTL apparently only if we configured zn_poly differently (same for FLINT)

== Special Update/Build Instructions ==

 * Make sure the patches still apply.
   Especially changes in `makemakefile.py` may also require changes to
   `spkg-install` (and perhaps also `spkg-check`).
 * There's also a `--use-flint` option to `configure`; no idea what it does,
   and we currently don't use it either.
 * TODO:
   - Use `make install` instead of manually "installing" (copying and sym-
     linking) the [shared] libraries and header files.  This requires further
     tweaking of `makemakefile.py`, since it currently only installs a static
     library and the headers.
   - If everything's fine, i.e., no problems arise, some comments and especial-
     ly some code I currently just commented out can certainly be removed.
     (-leif, 04/2012)
 * The version number "0.9.p11" is used as a doctest in the function
   package_versions in sage/misc/packages.py, so if this package gets
   upgraded, that doctest needs to be changed.

=== Patches ===

 * makemakefile.py.patch:
   Improves the Python script creating the Makeefile for better use at least
   within Sage; see patch for details.  (Last modified at #12433, which added
   and changed a lot.)
 * profiler.c.patch, zn_poly.h.patch:
   Fix potential redefinition of `ulong` (in combination with other headers).
 * mpn_mulmid-tune.c.patch, mulmid-tune.c.patch, mul-tune.c.patch:
   Fix "jump into scope of identifier with variably modified type" errors.
   (See #8771).
 * mpn_mulmid-test.c.patch:
   Fix a potential problem when the value of ZNP_mpn_smp_kara_thresh is
   SIZE_MAX, this is usually irrealistic but can happen at least on linux
   on power7 with gcc-4.7.1 (see #14098).
 * fix_fudge_factor_in_nuss-test.c.patch:
   As the name says; fix provided by upstream (David Harvey); see #13947.

== Changelog ==

=== zn_poly-0.9.p11 (Leif Leonhardy, May 24th, 2013) ===
 * #13947: Fix `nuss_mul()` test failing especially if tuning happened
   under "heavy" load (at least on MacOS X and Cygwin)
   Add `fix_fudge_factor_in_nuss-test.c.patch`; fix suggested by David
   Harvey.

=== zn_poly-0.9.p10 ( Francois Bissey, 14 February 2013 ) ===
 * Trac #14098: Fix a potential problem with the tests where values can get out of
   range. The problem occurs only in rare case but the code is more sane that way.
   The fix was gracously provided by the original zn_poly author.

=== zn_poly-0.9.p9 (Jeroen Demeyer, 28 May 2012) ===
 * Trac #12751: remove the gcc-4.7.0 workaround for ia64 since this bug
   has been fixed in gcc-4.7.1 and we will not fully support building
   Sage with gcc-4.7.0 on Itanium.
 * Don't override user-set CFLAGS and CXXFLAGS.

=== zn_poly-0.9.p8 (Leif Leonhardy, April 20th, 2012) ===
 * #12433: Further reviewer changes / additions.
 * Work around GCC 4.7.0 bug on ia64 (by almost completely disabling optimi-
   zation if the compiler is GCC 4.7.x, of course only on that platform); cf.
   #12751, #12765.
 * Add a patch to avoid conflicting definitions (i.e., redundant `typedefs`)
   of `ulong`, by changing `ulong` to a macro.
 * Don't hardcode the zn_poly version number in `spkg-install`; instead read
   it from the file `VERSION`, like the generated `makefile` does.
 * Remove some of the code previously just commented out, as well as some
   obsolete comments.
 * Document patches (and correct ticket reference in an old changelog entry).

=== zn_poly-0.9.p7 (Leif Leonhardy, April 8th, 2012) ===
 * #12433: Reviewer changes.
 * Restore upstream sources. (One file in `src/tune/` was already patched.)
 * Remove the obsolete Debian `dist/` directory.
 * Use `patch` to apply the patches.
 * Remove `patches/` from `.hgignore`! (And remove the prepatched files.)
 * Add Python to the dependencies, since (some) Python is needed to create
   the Makefile during build / `configure`.  (`spkg/standard/deps` already
   reflects this.)
 * Rework (upstream's) `makemakefile.py` to create a proper Makefile,
   respecting `CC`, `CXX`, `CFLAGS`, `CXXFLAGS`, `CPPFLAGS` etc. with their
   *usual* meaning (i.e., not using `CPP` to compile C++!), and using `LDFLAGS`
   consistently, also not hardcoding e.g. `-m64` (which was added by Sage).
 * Do not add `-O3` to `CFLAGS` (in `spkg-install`) without the possibility to
   get overridden by user-provided `CFLAGS`.  Also honor `SAGE_DEBUG=yes` by
   completely disabling optimization in that case.
 * Fix typo in `spkg-check`, which certainly would break building the test
   program when `SAGE64=yes`.  (Although it is actually already built from
   within `spkg-install`.)
 * Clean up `spkg-install` and `spkg-check`; redirect error messages to
   `stderr`, add more error checks, use `$MAKE` in `spkg-check` as well,
   quote more environment variables, use `cp [-f]` instead of `$CP`, don't
   create an absolute symbolic link on Cygwin.

=== zn_poly-0.9.p6 (R. Andrew Ohana, February 4th, 2012) ===
 * #12433: Make spkg respect global CC flag

=== zn_poly-0.9.p5 (David Kirkby, July 14th, 2010) ===
 * #9358 Ensure that spkg-install can handle the case
   of where SAGE64=yes and Solaris with a Sun linker. Previously
   this worked properly if SAGE64 was yes, OR if the operating system
   was Solaris with the sun linker. But spkg-install failed
   to work properly if both SAGE64=yes AND the operating system
   was Solaris with the Sun linker.
 * No longer run 'make check' from spkg-check. Since this was quick to run
   it has already been run from spkg-install, so it was pointless running
   it from spkg-check too. Instead a much more comprehensive test suite is
   run, using
   $ test/test all
 * Change the dependancy from GMP to MPIR in this SPKG.txt file, as Sage no
   longer uses GMP.

=== zn_poly-0.9.p4 (Willem Jan Palenstijn, William Stein, April 26th, 2010) ===
 * Ticket #8771: Fix build error on gcc 4.5, and check if make tune succeeded.
 * Added more checks for errors in spkg-install.

=== zn_poly-0.9.p3 (Jaap Spies, February 21th, 2010) ===
 * Ticket #8178: if SAGE64=yes we set CFLAGS appropriate. In patches/makemakefile.py we add $(LDFLAGS)
   when we build the shared library. This works for Darwin and Open Solaris.


=== zn_poly-0.9.p2 (Mike Hansen, February 15th, 2010) ===
 *  Ticket #8280: cygwin: zn_poly shared library named incorrectly on cygwin

=== zn_poly-0.9.p1 (David Kirkby, June 29th, 2009) ===
 *  Ticket #6443 A GNUism in zn_poly-0.9.p0 causes linking problems with Sun's linker
    This was an easy fix - just substitue -soname for -h in src/makemakefile.py
    I did this with a sed script in spkg-install

=== zn_poly-0.9.p0 (Michael Abshoff, September 26th, 2008) ===
 * remerge OSX 64 bit fixes
 * clean up spkg-install

=== zn_poly-0.9 (David Harvey and Timothy Abbott, September 19th, 2008) ===
 * updated to zn_poly-0.9
 * shared versioning filename issues
 * re-enabled test suite (now only takes ~10 seconds)
 * updated upstream URL

=== zn_poly-0.8.p2 (Michael Abshoff, August 19th, 2008) ===
 * Add 64 bit OSX build support

=== zn_poly-0.8.p1 (Michael Abshoff, June 9th, 2008) ===
 * Do not run the test suite per default any more (#3386)

=== zn_poly-0.8.p0 (David Harvey, April 4th, 2008) ===
 * updated to zn_poly-0.8 (fix minor bugs and memleaks)
 * updated SPKG.txt

=== zn_poly-0.8 (David Harvey, April 2nd, 2008) ===
 * updated to zn_poly-0.8.alpha0
 * updated SPKG.txt
 * changed spkg-install to run tuning program, test suite

=== zn_poly-0.4.1.p0 (Michael Abshoff, March 19th, 2008) ===
 * updated SPKG.txt
 * add hg repo, hg ignore
 * cleaned up spkg-install

=== zn_poly-0.4.1 (David Harvey, Dec. 18th, 2007) ===
 * created spkg from zn_poly-0.4.1
