diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..79a24c6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/numpy-1.7.1.tar.gz diff --git a/.numpy.metadata b/.numpy.metadata new file mode 100644 index 0000000..047bd69 --- /dev/null +++ b/.numpy.metadata @@ -0,0 +1 @@ +11d878214d11a25e05a24f6b27e2b838815a2588 SOURCES/numpy-1.7.1.tar.gz diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/CVE-2014-1858-CVE-2014-1859.patch b/SOURCES/CVE-2014-1858-CVE-2014-1859.patch new file mode 100644 index 0000000..f9b15a1 --- /dev/null +++ b/SOURCES/CVE-2014-1858-CVE-2014-1859.patch @@ -0,0 +1,156 @@ +diff --git a/numpy/core/tests/test_memmap.py b/numpy/core/tests/test_memmap.py +index ea9d061..a1fba95 100644 +--- a/numpy/core/tests/test_memmap.py ++++ b/numpy/core/tests/test_memmap.py +@@ -1,5 +1,5 @@ + import sys +-from tempfile import NamedTemporaryFile, mktemp ++from tempfile import NamedTemporaryFile + import os + + from numpy import memmap +@@ -31,12 +31,11 @@ class TestMemmap(TestCase): + assert_array_equal(self.data, newfp) + + def test_open_with_filename(self): +- tmpname = mktemp('','mmap') +- fp = memmap(tmpname, dtype=self.dtype, mode='w+', +- shape=self.shape) +- fp[:] = self.data[:] +- del fp +- os.unlink(tmpname) ++ with NamedTemporaryFile() as tmp: ++ fp = memmap(tmp.name, dtype=self.dtype, mode='w+', ++ shape=self.shape) ++ fp[:] = self.data[:] ++ del fp + + def test_attributes(self): + offset = 1 +@@ -48,17 +47,16 @@ class TestMemmap(TestCase): + del fp + + def test_filename(self): +- tmpname = mktemp('','mmap') +- fp = memmap(tmpname, dtype=self.dtype, mode='w+', +- shape=self.shape) +- abspath = os.path.abspath(tmpname) +- fp[:] = self.data[:] +- self.assertEqual(abspath, fp.filename) +- b = fp[:1] +- self.assertEqual(abspath, b.filename) +- del b +- del fp +- os.unlink(tmpname) ++ with NamedTemporaryFile() as tmp: ++ fp = memmap(tmp.name, dtype=self.dtype, mode='w+', ++ shape=self.shape) ++ abspath = os.path.abspath(tmp.name) ++ fp[:] = self.data[:] ++ self.assertEqual(abspath, fp.filename) ++ b = fp[:1] ++ self.assertEqual(abspath, b.filename) ++ del b ++ del fp + + def test_filename_fileobj(self): + fp = memmap(self.tmpfp, dtype=self.dtype, mode="w+", +diff --git a/numpy/core/tests/test_multiarray.py b/numpy/core/tests/test_multiarray.py +index db220ec..e845c07 100644 +--- a/numpy/core/tests/test_multiarray.py ++++ b/numpy/core/tests/test_multiarray.py +@@ -1587,12 +1587,11 @@ class TestIO(object): + self.x = rand(shape) + rand(shape).astype(np.complex)*1j + self.x[0,:,1] = [nan, inf, -inf, nan] + self.dtype = self.x.dtype +- self.filename = tempfile.mktemp() ++ self.file = tempfile.NamedTemporaryFile() ++ self.filename = self.file.name + + def tearDown(self): +- if os.path.isfile(self.filename): +- os.unlink(self.filename) +- #tmp_file.close() ++ self.file.close() + + def test_bool_fromstring(self): + v = np.array([True,False,True,False], dtype=np.bool_) +@@ -1620,7 +1619,6 @@ class TestIO(object): + y = np.fromfile(f, dtype=self.dtype) + f.close() + assert_array_equal(y, self.x.flat) +- os.unlink(self.filename) + + def test_roundtrip_filename(self): + self.x.tofile(self.filename) +@@ -1753,7 +1751,6 @@ class TestIO(object): + s = f.read() + f.close() + assert_equal(s, '1.51,2.0,3.51,4.0') +- os.unlink(self.filename) + + def test_tofile_format(self): + x = np.array([1.51, 2, 3.51, 4], dtype=float) +diff --git a/numpy/f2py/__init__.py b/numpy/f2py/__init__.py +index 220cb3d..d580332 100644 +--- a/numpy/f2py/__init__.py ++++ b/numpy/f2py/__init__.py +@@ -27,20 +27,20 @@ def compile(source, + from numpy.distutils.exec_command import exec_command + import tempfile + if source_fn is None: +- fname = os.path.join(tempfile.mktemp()+'.f') ++ f = tempfile.NamedTemporaryFile(suffix='.f') + else: +- fname = source_fn +- +- f = open(fname,'w') +- f.write(source) +- f.close() +- +- args = ' -c -m %s %s %s'%(modulename,fname,extra_args) +- c = '%s -c "import numpy.f2py as f2py2e;f2py2e.main()" %s' %(sys.executable,args) +- s,o = exec_command(c) +- if source_fn is None: +- try: os.remove(fname) +- except OSError: pass ++ f = open(source_fn, 'w') ++ ++ try: ++ f.write(source) ++ f.flush() ++ ++ args = ' -c -m %s %s %s'%(modulename, f.name, extra_args) ++ c = '%s -c "import numpy.f2py as f2py2e;f2py2e.main()" %s' % \ ++ (sys.executable, args) ++ s, o = exec_command(c) ++ finally: ++ f.close() + return s + + from numpy.testing import Tester +diff --git a/numpy/f2py/f2py2e.py b/numpy/f2py/f2py2e.py +index 4e6d258..b9b955a 100755 +--- a/numpy/f2py/f2py2e.py ++++ b/numpy/f2py/f2py2e.py +@@ -91,7 +91,7 @@ Options: + --lower is assumed with -h key, and --no-lower without -h key. + + --build-dir All f2py generated files are created in . +- Default is tempfile.mktemp(). ++ Default is tempfile.mkstemp(). + + --overwrite-signature Overwrite existing signature file. + +@@ -428,7 +428,7 @@ def run_compile(): + del sys.argv[i] + else: + remove_build_dir = 1 +- build_dir = os.path.join(tempfile.mktemp()) ++ build_dir = tempfile.mkdtemp() + + sysinfo_flags = filter(re.compile(r'[-][-]link[-]').match,sys.argv[1:]) + sys.argv = filter(lambda a,flags=sysinfo_flags:a not in flags,sys.argv) +-- +1.8.5.3 + diff --git a/SOURCES/numpy-1.7.1-override-LAPACK-XERBLA.patch b/SOURCES/numpy-1.7.1-override-LAPACK-XERBLA.patch new file mode 100644 index 0000000..bc276f9 --- /dev/null +++ b/SOURCES/numpy-1.7.1-override-LAPACK-XERBLA.patch @@ -0,0 +1,278 @@ +From 34d4897596edd2c517ab57c68d55a55fde1bbcd8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Nikola=20Forr=C3=B3?= +Date: Wed, 4 Jan 2017 16:59:54 +0100 +Subject: [PATCH] Override LAPACK XERBLA + +Backported upstream commits: +374e0b4d2c6f44fdccccfefe0546b607e5291e64 +f0b2dd7d5151878f2b4b3ea20ff551b27243f27d +--- + numpy/core/blasdot/python_xerbla.c | 51 +++++++++++++++++++++++++++++++++++ + numpy/core/setup.py | 3 ++- + numpy/linalg/lapack_litemodule.c | 54 ++++++++++++++++++++++++++++++++++++++ + 3 files changed, 107 insertions(+), 1 deletion(-) + create mode 100644 numpy/core/blasdot/python_xerbla.c + +diff --git a/numpy/core/blasdot/python_xerbla.c b/numpy/core/blasdot/python_xerbla.c +new file mode 100644 +index 0000000..bdf0b90 +--- /dev/null ++++ b/numpy/core/blasdot/python_xerbla.c +@@ -0,0 +1,51 @@ ++#include "Python.h" ++ ++/* ++ * From f2c.h, this should be safe unless fortran is set to use 64 ++ * bit integers. We don't seem to have any good way to detect that. ++ */ ++typedef int integer; ++ ++/* ++ From the original manpage: ++ -------------------------- ++ XERBLA is an error handler for the LAPACK routines. ++ It is called by an LAPACK routine if an input parameter has an invalid value. ++ A message is printed and execution stops. ++ ++ Instead of printing a message and stopping the execution, a ++ ValueError is raised with the message. ++ ++ Parameters: ++ ----------- ++ srname: Subroutine name to use in error message, maximum six characters. ++ Spaces at the end are skipped. ++ info: Number of the invalid parameter. ++*/ ++ ++int xerbla_(char *srname, integer *info) ++{ ++ static const char format[] = "On entry to %.*s" \ ++ " parameter number %d had an illegal value"; ++ char buf[sizeof(format) + 6 + 4]; /* 6 for name, 4 for param. num. */ ++ ++ int len = 0; /* length of subroutine name*/ ++#ifdef WITH_THREAD ++ PyGILState_STATE save; ++#endif ++ ++ while( len<6 && srname[len]!='\0' ) ++ len++; ++ while( len && srname[len-1]==' ' ) ++ len--; ++#ifdef WITH_THREAD ++ save = PyGILState_Ensure(); ++#endif ++ PyOS_snprintf(buf, sizeof(buf), format, len, srname, *info); ++ PyErr_SetString(PyExc_ValueError, buf); ++#ifdef WITH_THREAD ++ PyGILState_Release(save); ++#endif ++ ++ return 0; ++} +diff --git a/numpy/core/setup.py b/numpy/core/setup.py +index a1000ae..495e163 100644 +--- a/numpy/core/setup.py ++++ b/numpy/core/setup.py +@@ -899,12 +899,13 @@ def configuration(parent_package='',top_path=None): + if blas_info: + if ('NO_ATLAS_INFO',1) in blas_info.get('define_macros',[]): + return None # dotblas needs ATLAS, Fortran compiled blas will not be sufficient. +- return ext.depends[:1] ++ return ext.depends[:2] + return None # no extension module will be built + + config.add_extension('_dotblas', + sources = [get_dotblas_sources], + depends = [join('blasdot','_dotblas.c'), ++ join('blasdot', 'python_xerbla.c'), + join('blasdot','cblas.h'), + ], + include_dirs = ['blasdot'], +diff --git a/numpy/linalg/lapack_litemodule.c b/numpy/linalg/lapack_litemodule.c +index cc62382..4f8cab9 100644 +--- a/numpy/linalg/lapack_litemodule.c ++++ b/numpy/linalg/lapack_litemodule.c +@@ -171,6 +171,9 @@ lapack_lite_dgeev(PyObject *NPY_UNUSED(self), PyObject *args) + FNAME(dgeev)(&jobvl,&jobvr,&n,DDATA(a),&lda,DDATA(wr),DDATA(wi), + DDATA(vl),&ldvl,DDATA(vr),&ldvr,DDATA(work),&lwork, + &info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:c,s:c,s:i,s:i,s:i,s:i,s:i,s:i}","dgeev_", + lapack_lite_status__,"jobvl",jobvl,"jobvr",jobvr, +@@ -254,6 +257,9 @@ lapack_lite_dsyevd(PyObject *NPY_UNUSED(self), PyObject *args) + lapack_lite_status__ = \ + FNAME(dsyevd)(&jobz,&uplo,&n,DDATA(a),&lda,DDATA(w),DDATA(work), + &lwork,IDATA(iwork),&liwork,&info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:c,s:c,s:i,s:i,s:i,s:i,s:i}","dsyevd_", + lapack_lite_status__,"jobz",jobz,"uplo",uplo, +@@ -341,6 +347,9 @@ lapack_lite_zheevd(PyObject *NPY_UNUSED(self), PyObject *args) + lapack_lite_status__ = \ + FNAME(zheevd)(&jobz,&uplo,&n,ZDATA(a),&lda,DDATA(w),ZDATA(work), + &lwork,DDATA(rwork),&lrwork,IDATA(iwork),&liwork,&info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:c,s:c,s:i,s:i,s:i,s:i,s:i,s:i}","zheevd_", + lapack_lite_status__,"jobz",jobz,"uplo",uplo,"n",n, +@@ -380,6 +389,9 @@ lapack_lite_dgelsd(PyObject *NPY_UNUSED(self), PyObject *args) + FNAME(dgelsd)(&m,&n,&nrhs,DDATA(a),&lda,DDATA(b),&ldb, + DDATA(s),&rcond,&rank,DDATA(work),&lwork, + IDATA(iwork),&info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i,s:d,s:i,s:i,s:i}","dgelsd_", + lapack_lite_status__,"m",m,"n",n,"nrhs",nrhs, +@@ -407,6 +419,9 @@ lapack_lite_dgesv(PyObject *NPY_UNUSED(self), PyObject *args) + + lapack_lite_status__ = \ + FNAME(dgesv)(&n,&nrhs,DDATA(a),&lda,IDATA(ipiv),DDATA(b),&ldb,&info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i}","dgesv_", + lapack_lite_status__,"n",n,"nrhs",nrhs,"lda",lda, +@@ -446,6 +461,9 @@ lapack_lite_dgesdd(PyObject *NPY_UNUSED(self), PyObject *args) + FNAME(dgesdd)(&jobz,&m,&n,DDATA(a),&lda,DDATA(s),DDATA(u),&ldu, + DDATA(vt),&ldvt,DDATA(work),&lwork,IDATA(iwork), + &info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + if (info == 0 && lwork == -1) { + /* We need to check the result because +@@ -496,6 +514,9 @@ lapack_lite_dgetrf(PyObject *NPY_UNUSED(self), PyObject *args) + + lapack_lite_status__ = \ + FNAME(dgetrf)(&m,&n,DDATA(a),&lda,IDATA(ipiv),&info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i}","dgetrf_",lapack_lite_status__, + "m",m,"n",n,"lda",lda,"info",info); +@@ -516,6 +537,9 @@ lapack_lite_dpotrf(PyObject *NPY_UNUSED(self), PyObject *args) + + lapack_lite_status__ = \ + FNAME(dpotrf)(&uplo,&n,DDATA(a),&lda,&info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:i,s:i,s:i}","dpotrf_",lapack_lite_status__, + "n",n,"lda",lda,"info",info); +@@ -540,6 +564,9 @@ lapack_lite_dgeqrf(PyObject *NPY_UNUSED(self), PyObject *args) + lapack_lite_status__ = \ + FNAME(dgeqrf)(&m, &n, DDATA(a), &lda, DDATA(tau), + DDATA(work), &lwork, &info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i}","dgeqrf_", + lapack_lite_status__,"m",m,"n",n,"lda",lda, +@@ -562,6 +589,9 @@ lapack_lite_dorgqr(PyObject *NPY_UNUSED(self), PyObject *args) + TRY(check_object(work,NPY_DOUBLE,"work","NPY_DOUBLE","dorgqr")); + lapack_lite_status__ = \ + FNAME(dorgqr)(&m, &n, &k, DDATA(a), &lda, DDATA(tau), DDATA(work), &lwork, &info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:i}","dorgqr_",lapack_lite_status__, + "info",info); +@@ -601,6 +631,9 @@ lapack_lite_zgeev(PyObject *NPY_UNUSED(self), PyObject *args) + FNAME(zgeev)(&jobvl,&jobvr,&n,ZDATA(a),&lda,ZDATA(w),ZDATA(vl), + &ldvl,ZDATA(vr),&ldvr,ZDATA(work),&lwork, + DDATA(rwork),&info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:c,s:c,s:i,s:i,s:i,s:i,s:i,s:i}","zgeev_", + lapack_lite_status__,"jobvl",jobvl,"jobvr",jobvr, +@@ -641,6 +674,9 @@ lapack_lite_zgelsd(PyObject *NPY_UNUSED(self), PyObject *args) + lapack_lite_status__ = \ + FNAME(zgelsd)(&m,&n,&nrhs,ZDATA(a),&lda,ZDATA(b),&ldb,DDATA(s),&rcond, + &rank,ZDATA(work),&lwork,DDATA(rwork),IDATA(iwork),&info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i,s:i}","zgelsd_", + lapack_lite_status__,"m",m,"n",n,"nrhs",nrhs,"lda",lda, +@@ -667,6 +703,9 @@ lapack_lite_zgesv(PyObject *NPY_UNUSED(self), PyObject *args) + + lapack_lite_status__ = \ + FNAME(zgesv)(&n,&nrhs,ZDATA(a),&lda,IDATA(ipiv),ZDATA(b),&ldb,&info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i}","zgesv_", + lapack_lite_status__,"n",n,"nrhs",nrhs,"lda",lda, +@@ -708,6 +747,9 @@ lapack_lite_zgesdd(PyObject *NPY_UNUSED(self), PyObject *args) + FNAME(zgesdd)(&jobz,&m,&n,ZDATA(a),&lda,DDATA(s),ZDATA(u),&ldu, + ZDATA(vt),&ldvt,ZDATA(work),&lwork,DDATA(rwork), + IDATA(iwork),&info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:c,s:i,s:i,s:i,s:i,s:i,s:i,s:i}","zgesdd_", + lapack_lite_status__,"jobz",jobz,"m",m,"n",n, +@@ -732,6 +774,9 @@ lapack_lite_zgetrf(PyObject *NPY_UNUSED(self), PyObject *args) + + lapack_lite_status__ = \ + FNAME(zgetrf)(&m,&n,ZDATA(a),&lda,IDATA(ipiv),&info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i}","zgetrf_", + lapack_lite_status__,"m",m,"n",n,"lda",lda,"info",info); +@@ -751,6 +796,9 @@ lapack_lite_zpotrf(PyObject *NPY_UNUSED(self), PyObject *args) + TRY(check_object(a,NPY_CDOUBLE,"a","NPY_CDOUBLE","zpotrf")); + lapack_lite_status__ = \ + FNAME(zpotrf)(&uplo,&n,ZDATA(a),&lda,&info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:i,s:i,s:i}","zpotrf_", + lapack_lite_status__,"n",n,"lda",lda,"info",info); +@@ -774,6 +822,9 @@ lapack_lite_zgeqrf(PyObject *NPY_UNUSED(self), PyObject *args) + + lapack_lite_status__ = \ + FNAME(zgeqrf)(&m, &n, ZDATA(a), &lda, ZDATA(tau), ZDATA(work), &lwork, &info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:i,s:i,s:i,s:i,s:i}","zgeqrf_",lapack_lite_status__,"m",m,"n",n,"lda",lda,"lwork",lwork,"info",info); + } +@@ -797,6 +848,9 @@ lapack_lite_zungqr(PyObject *NPY_UNUSED(self), PyObject *args) + lapack_lite_status__ = \ + FNAME(zungqr)(&m, &n, &k, ZDATA(a), &lda, ZDATA(tau), ZDATA(work), + &lwork, &info); ++ if (PyErr_Occurred()) { ++ return NULL; ++ } + + return Py_BuildValue("{s:i,s:i}","zungqr_",lapack_lite_status__, + "info",info); +-- +2.7.4 + diff --git a/SOURCES/numpy-1.7.1.f2py.patch b/SOURCES/numpy-1.7.1.f2py.patch new file mode 100644 index 0000000..d8e6ef7 --- /dev/null +++ b/SOURCES/numpy-1.7.1.f2py.patch @@ -0,0 +1,35 @@ +From 64f64b517153a6b3de48c5b911920239b3eb1e18 Mon Sep 17 00:00:00 2001 +From: "Bradley M. Froehle" +Date: Sun, 24 Feb 2013 21:31:28 -0800 +Subject: [PATCH] BUG: Choose a more unique PY_ARRAY_UNIQUE_SYMBOL in f2py. + +In a few exceptional cases where symbols are shared between different +Python modules the use of `PyArray_API` in f2py (fortranobject.h) +conflicts with the regular use of the same symbol in the multiarray +module. Generally the symptom of this conflicting use is a segfault +when importing a f2py'ed module. This occurs because the module init +code somehow overwrites the first element of `PyArray_API` with the +location of `PyArray_API`, causing a crash when +`PyArray_GetNDArrayCVersion` is called. + +Closes gh-2521. +--- + numpy/f2py/src/fortranobject.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/numpy/f2py/src/fortranobject.h b/numpy/f2py/src/fortranobject.h +index 283021a..07e810f 100644 +--- a/numpy/f2py/src/fortranobject.h ++++ b/numpy/f2py/src/fortranobject.h +@@ -9,7 +9,7 @@ extern "C" { + #ifdef FORTRANOBJECT_C + #define NO_IMPORT_ARRAY + #endif +-#define PY_ARRAY_UNIQUE_SYMBOL PyArray_API ++#define PY_ARRAY_UNIQUE_SYMBOL _npy_f2py_ARRAY_API + #include "numpy/arrayobject.h" + + /* +-- +2.7.4 + diff --git a/SOURCES/numpy-1.8.1.ppc64le.patch b/SOURCES/numpy-1.8.1.ppc64le.patch new file mode 100644 index 0000000..8cc266e --- /dev/null +++ b/SOURCES/numpy-1.8.1.ppc64le.patch @@ -0,0 +1,134 @@ +--- + numpy/core/include/numpy/npy_cpu.h | 3 +++ + numpy/core/include/numpy/npy_endian.h | 3 ++- + numpy/core/setup.py | 2 +- + numpy/core/setup_common.py | 4 ++++ + numpy/core/src/npymath/ieee754.c.src | 3 ++- + numpy/core/src/npymath/npy_math_private.h | 3 ++- + numpy/core/src/private/npy_fpmath.h | 5 ++++- + 7 files changed, 18 insertions(+), 5 deletions(-) + +diff --git a/numpy/core/include/numpy/npy_cpu.h b/numpy/core/include/numpy/npy_cpu.h +index 9707a7a..321cc04 100644 +--- a/numpy/core/include/numpy/npy_cpu.h ++++ b/numpy/core/include/numpy/npy_cpu.h +@@ -5,6 +5,7 @@ + * NPY_CPU_AMD64 + * NPY_CPU_PPC + * NPY_CPU_PPC64 ++ * NPY_CPU_PPC64LE + * NPY_CPU_SPARC + * NPY_CPU_S390 + * NPY_CPU_IA64 +@@ -41,6 +42,8 @@ + * _ARCH_PPC is used by at least gcc on AIX + */ + #define NPY_CPU_PPC ++#elif defined(__ppc64le__) ++ #define NPY_CPU_PPC64LE + #elif defined(__ppc64__) + #define NPY_CPU_PPC64 + #elif defined(__sparc__) || defined(__sparc) +diff --git a/numpy/core/include/numpy/npy_endian.h b/numpy/core/include/numpy/npy_endian.h +index 4e3349f..d8af8b3 100644 +--- a/numpy/core/include/numpy/npy_endian.h ++++ b/numpy/core/include/numpy/npy_endian.h +@@ -27,7 +27,8 @@ + || defined(NPY_CPU_ARMEL) \ + || defined(NPY_CPU_AARCH64) \ + || defined(NPY_CPU_SH_LE) \ +- || defined(NPY_CPU_MIPSEL) ++ || defined(NPY_CPU_MIPSEL) \ ++ || defined(NPY_CPU_PPC64LE) + #define NPY_BYTE_ORDER NPY_LITTLE_ENDIAN + #elif defined(NPY_CPU_PPC) \ + || defined(NPY_CPU_SPARC) \ +diff --git a/numpy/core/setup.py b/numpy/core/setup.py +index a1000ae..36cec26 100644 +--- a/numpy/core/setup.py ++++ b/numpy/core/setup.py +@@ -444,7 +444,7 @@ def configuration(parent_package='',top_path=None): + 'INTEL_EXTENDED_16_BYTES_LE', + 'IEEE_QUAD_LE', 'IEEE_QUAD_BE', + 'IEEE_DOUBLE_LE', 'IEEE_DOUBLE_BE', +- 'DOUBLE_DOUBLE_BE']: ++ 'DOUBLE_DOUBLE_BE', 'DOUBLE_DOUBLE_LE']: + moredefs.append(('HAVE_LDOUBLE_%s' % rep, 1)) + else: + raise ValueError("Unrecognized long double format: %s" % rep) +diff --git a/numpy/core/setup_common.py b/numpy/core/setup_common.py +index 58876a8..3289afe 100644 +--- a/numpy/core/setup_common.py ++++ b/numpy/core/setup_common.py +@@ -221,6 +221,8 @@ _IEEE_QUAD_PREC_BE = ['300', '031', '326', '363', '105', '100', '000', '000', + _IEEE_QUAD_PREC_LE = _IEEE_QUAD_PREC_BE[::-1] + _DOUBLE_DOUBLE_BE = ['301', '235', '157', '064', '124', '000', '000', '000'] + \ + ['000'] * 8 ++_DOUBLE_DOUBLE_LE = ['000', '000', '000', '124', '064', '157', '235', '301'] + \ ++ ['000'] * 8 + + def long_double_representation(lines): + """Given a binary dump as given by GNU od -b, look for long double +@@ -258,6 +260,8 @@ def long_double_representation(lines): + return 'IEEE_QUAD_LE' + elif read[8:-8] == _DOUBLE_DOUBLE_BE: + return 'DOUBLE_DOUBLE_BE' ++ elif read[8:-8] == _DOUBLE_DOUBLE_LE: ++ return 'DOUBLE_DOUBLE_LE' + elif read[:16] == _BEFORE_SEQ: + if read[16:-8] == _IEEE_DOUBLE_LE: + return 'IEEE_DOUBLE_LE' +diff --git a/numpy/core/src/npymath/ieee754.c.src b/numpy/core/src/npymath/ieee754.c.src +index 90bbf5f..bccb3c8 100644 +--- a/numpy/core/src/npymath/ieee754.c.src ++++ b/numpy/core/src/npymath/ieee754.c.src +@@ -133,7 +133,8 @@ float _nextf(float x, int p) + return x; + } + +-#ifdef HAVE_LDOUBLE_DOUBLE_DOUBLE_BE ++#if defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_BE) || \ ++ defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_LE) + + /* + * FIXME: this is ugly and untested. The asm part only works with gcc, and we +diff --git a/numpy/core/src/npymath/npy_math_private.h b/numpy/core/src/npymath/npy_math_private.h +index 722d03f..b0ede48 100644 +--- a/numpy/core/src/npymath/npy_math_private.h ++++ b/numpy/core/src/npymath/npy_math_private.h +@@ -398,7 +398,8 @@ do { \ + typedef npy_uint32 ldouble_sign_t; + #endif + +-#ifndef HAVE_LDOUBLE_DOUBLE_DOUBLE_BE ++#if !defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_BE) && \ ++ !defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_LE) + /* Get the sign bit of x. x should be of type IEEEl2bitsrep */ + #define GET_LDOUBLE_SIGN(x) \ + (((x).a[LDBL_SIGN_INDEX] & LDBL_SIGN_MASK) >> LDBL_SIGN_SHIFT) +diff --git a/numpy/core/src/private/npy_fpmath.h b/numpy/core/src/private/npy_fpmath.h +index 92338e4..f709d39 100644 +--- a/numpy/core/src/private/npy_fpmath.h ++++ b/numpy/core/src/private/npy_fpmath.h +@@ -29,6 +29,8 @@ + #define HAVE_LDOUBLE_INTEL_EXTENDED_16_BYTES_LE + #elif defined(NPY_CPU_PPC) || defined(NPY_CPU_PPC64) + #define HAVE_LDOUBLE_IEEE_DOUBLE_16_BYTES_BE ++ #elif defined(NPY_CPU_PPC64LE) ++ #define HAVE_LDOUBLE_IEEE_DOUBLE_16_BYTES_LE + #endif + #endif + #endif +@@ -40,7 +42,8 @@ + defined(HAVE_LDOUBLE_IEEE_DOUBLE_16_BYTES_BE) || \ + defined(HAVE_LDOUBLE_INTEL_EXTENDED_16_BYTES_LE) || \ + defined(HAVE_LDOUBLE_INTEL_EXTENDED_12_BYTES_LE) || \ +- defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_BE)) ++ defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_BE) || \ ++ defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_LE)) + #error No long double representation defined + #endif + +-- +1.9.3 + diff --git a/SPECS/numpy.spec b/SPECS/numpy.spec new file mode 100644 index 0000000..6cc2b8b --- /dev/null +++ b/SPECS/numpy.spec @@ -0,0 +1,546 @@ +%global with_python3 0 +%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")} + +#uncomment next line for a release candidate or a beta +#global relc rc1 + +Name: numpy +Version: 1.7.1 +Release: 13%{?dist} +Epoch: 1 +Summary: A fast multidimensional array facility for Python + +Group: Development/Languages +# Everything is BSD except for class SafeEval in numpy/lib/utils.py which is Python +License: BSD and Python +URL: http://www.numpy.org/ +Source0: http://downloads.sourceforge.net/numpy/%{name}-%{version}%{?relc}.tar.gz + +# Fix of CVE-2014-1858, CVE-2014-1859: #1062009 +# Modified version of 3 upstream commits, so they apply to current version: +# - 8296aa0b911c036c984e23665ee0f7ddca579b91 +# - 524b9eaa33ec67e34eb31a208e02bb934f778096 +# - 0bb46c1448b0d3f5453d5182a17ea7ac5854ee15 +Patch0: CVE-2014-1858-CVE-2014-1859.patch +# bz1125621 +Patch1: numpy-1.8.1.ppc64le.patch +# bz1167156 +Patch2: numpy-1.7.1.f2py.patch +# bz1179055 +Patch3: numpy-1.7.1-override-LAPACK-XERBLA.patch + +BuildRequires: python2-devel lapack-devel python-setuptools gcc-gfortran atlas-devel python-nose +Requires: python-nose +%if 0%{?with_python3} +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-nose +%endif +BuildRequires: Cython + +%description +NumPy is a general-purpose array-processing package designed to +efficiently manipulate large multi-dimensional arrays of arbitrary +records without sacrificing too much speed for small multi-dimensional +arrays. NumPy is built on the Numeric code base and adds features +introduced by numarray as well as an extended C-API and the ability to +create arrays of arbitrary type. + +There are also basic facilities for discrete fourier transform, +basic linear algebra and random number generation. Also included in +this package is a version of f2py that works properly with NumPy. + +%package f2py +Summary: f2py for numpy +Group: Development/Libraries +Requires: %{name} = %{epoch}:%{version}-%{release} +Requires: python-devel +Provides: f2py = %{version}-%{release} +Obsoletes: f2py <= 2.45.241_1927 + +%description f2py +This package includes a version of f2py that works properly with NumPy. + +%if 0%{?with_python3} +%package -n python3-numpy +Summary: A fast multidimensional array facility for Python + +Group: Development/Languages +License: BSD +%description -n python3-numpy +NumPy is a general-purpose array-processing package designed to +efficiently manipulate large multi-dimensional arrays of arbitrary +records without sacrificing too much speed for small multi-dimensional +arrays. NumPy is built on the Numeric code base and adds features +introduced by numarray as well as an extended C-API and the ability to +create arrays of arbitrary type. + +There are also basic facilities for discrete fourier transform, +basic linear algebra and random number generation. Also included in +this package is a version of f2py that works properly with NumPy. + +%package -n python3-numpy-f2py +Summary: f2py for numpy +Group: Development/Libraries +Requires: python3-numpy = %{epoch}:%{version}-%{release} +Requires: python3-devel +Provides: python3-f2py = %{version}-%{release} +Obsoletes: python3-f2py <= 2.45.241_1927 + +%description -n python3-numpy-f2py +This package includes a version of f2py that works properly with NumPy. +%endif # with_python3 + +%prep +%setup -q -n %{name}-%{version}%{?relc} +%patch0 -p1 + +%ifarch ppc64le +%patch1 -p1 +%endif + +%patch2 -p1 +%patch3 -p1 + +# workaround for rhbz#849713 +# http://mail.scipy.org/pipermail/numpy-discussion/2012-July/063530.html +rm numpy/distutils/command/__init__.py && touch numpy/distutils/command/__init__.py + +%if 0%{?with_python3} +rm -rf %{py3dir} +cp -a . %{py3dir} +%endif + +cat >> site.cfg < /dev/null +popd &> /dev/null + +# Remove doc files. They should in in %%doc +rm -f %{buildroot}%{python3_sitearch}/%{name}/COMPATIBILITY +rm -f %{buildroot}%{python3_sitearch}/%{name}/DEV_README.txt +rm -f %{buildroot}%{python3_sitearch}/%{name}/INSTALL.txt +rm -f %{buildroot}%{python3_sitearch}/%{name}/LICENSE.txt +rm -f %{buildroot}%{python3_sitearch}/%{name}/README.txt +rm -f %{buildroot}%{python3_sitearch}/%{name}/THANKS.txt +rm -f %{buildroot}%{python3_sitearch}/%{name}/site.cfg.example + +popd +%endif # with_python3 + +#%%{__python} setup.py install -O1 --skip-build --root %%{buildroot} +# skip-build currently broken, this works around it for now +env ATLAS=%{_libdir} FFTW=%{_libdir} BLAS=%{_libdir} \ + LAPACK=%{_libdir} CFLAGS="%{optflags}" \ + %{__python} setup.py install --root %{buildroot} +rm -rf docs-f2py ; mv %{buildroot}%{python_sitearch}/%{name}/f2py/docs docs-f2py +mv -f %{buildroot}%{python_sitearch}/%{name}/f2py/f2py.1 f2py.1 +# remove sphinx docs, save dir for tests +rm -rf doc/* +install -D -p -m 0644 f2py.1 %{buildroot}%{_mandir}/man1/f2py.1 +pushd %{buildroot}%{_bindir} &> /dev/null + +# resolves rhbz#987032 +sed -i 's@#!/usr/bin/env python@#!/usr/bin/python@' f2py + +# symlink for anyone who was using f2py.numpy +ln -s f2py f2py.numpy +popd &> /dev/null + +#symlink for includes, BZ 185079 +mkdir -p %{buildroot}/usr/include +ln -s %{python_sitearch}/%{name}/core/include/numpy/ %{buildroot}/usr/include/numpy + +# Remove doc files. They should in in %%doc +rm -f %{buildroot}%{python_sitearch}/%{name}/COMPATIBILITY +rm -f %{buildroot}%{python_sitearch}/%{name}/DEV_README.txt +rm -f %{buildroot}%{python_sitearch}/%{name}/INSTALL.txt +rm -f %{buildroot}%{python_sitearch}/%{name}/LICENSE.txt +rm -f %{buildroot}%{python_sitearch}/%{name}/README.txt +rm -f %{buildroot}%{python_sitearch}/%{name}/THANKS.txt +rm -f %{buildroot}%{python_sitearch}/%{name}/site.cfg.example + +%check +pushd doc &> /dev/null +PYTHONPATH="%{buildroot}%{python_sitearch}" %{__python} -c "import pkg_resources, numpy ; numpy.test(verbose=3)" \ +%ifarch s390 s390x +|| : +%endif +# don't remove this comment +popd &> /dev/null + +%if 0%{?with_python3} +pushd doc &> /dev/null +# there is no python3-nose yet +PYTHONPATH="%{buildroot}%{python3_sitearch}" %{__python3} -c "import pkg_resources, numpy ; numpy.test()" \ +%ifarch s390 s390x +|| : +%endif +# don't remove this comment +popd &> /dev/null + +%endif # with_python3 + + +%files +%doc docs-f2py LICENSE.txt README.txt THANKS.txt DEV_README.txt COMPATIBILITY site.cfg.example +%dir %{python_sitearch}/%{name} +%{python_sitearch}/%{name}/*.py* +%{python_sitearch}/%{name}/core +%{python_sitearch}/%{name}/distutils +%{python_sitearch}/%{name}/doc +%{python_sitearch}/%{name}/fft +%{python_sitearch}/%{name}/lib +%{python_sitearch}/%{name}/linalg +%{python_sitearch}/%{name}/ma +%{python_sitearch}/%{name}/numarray +%{python_sitearch}/%{name}/oldnumeric +%{python_sitearch}/%{name}/random +%{python_sitearch}/%{name}/testing +%{python_sitearch}/%{name}/tests +%{python_sitearch}/%{name}/compat +%{python_sitearch}/%{name}/matrixlib +%{python_sitearch}/%{name}/polynomial +%{python_sitearch}/%{name}-*.egg-info +%{_includedir}/numpy + +%files f2py +%{_mandir}/man*/* +%{_bindir}/f2py +%{_bindir}/f2py.numpy +%{python_sitearch}/%{name}/f2py + +%if 0%{?with_python3} +%files -n python3-numpy +%doc docs-f2py doc/* LICENSE.txt README.txt THANKS.txt DEV_README.txt COMPATIBILITY site.cfg.example +%{python3_sitearch}/%{name}/__pycache__/* +%dir %{python3_sitearch}/%{name} +%{python3_sitearch}/%{name}/*.py* +%{python3_sitearch}/%{name}/core +%{python3_sitearch}/%{name}/distutils +%{python3_sitearch}/%{name}/fft +%{python3_sitearch}/%{name}/lib +%{python3_sitearch}/%{name}/linalg +%{python3_sitearch}/%{name}/ma +%{python3_sitearch}/%{name}/numarray +%{python3_sitearch}/%{name}/oldnumeric +%{python3_sitearch}/%{name}/random +%{python3_sitearch}/%{name}/testing +%{python3_sitearch}/%{name}/tests +%{python3_sitearch}/%{name}/compat +%{python3_sitearch}/%{name}/matrixlib +%{python3_sitearch}/%{name}/polynomial +%{python3_sitearch}/%{name}-*.egg-info + +%files -n python3-numpy-f2py +%{_bindir}/f2py3 +%{python3_sitearch}/%{name}/f2py +%endif # with_python3 + + +%changelog +* Tue Jan 03 2017 nforro@redhat.com - 1:1.7.1-13 +- resolves: #1179055 + override LAPACK XERBLA + +* Thu Dec 22 2016 nforro@redhat.com - 1:1.7.1-12 +- resolves: #1167156 + fix bug in f2py leading to segfault in modules with shared symbols + +* Thu Aug 07 2014 jchaloup - 1:1.7.1-11 +- resolves: #1125621 + support for ppc64le, taken from private-rhel-7.0-ppc64le branch + +* Tue Mar 18 2014 Tomas Tomecek - 1:1.7.1-10 +- fix changelog entry below + +* Mon Feb 10 2014 Tomas Tomecek - 1:1.7.1-9 +- Fix CVE-2014-1858, CVE-2014-1859: #1062009 + +* Fri Jan 24 2014 Daniel Mach - 1:1.7.1-8 +- Mass rebuild 2014-01-24 + +* Fri Dec 27 2013 Daniel Mach - 1:1.7.1-7 +- Mass rebuild 2013-12-27 + +* Mon Nov 25 2013 Tomas Tomecek - 1:1.7.1-6 +- keep numpy.doc in site_arch + +* Wed Sep 25 2013 Tomas Tomecek - 1:1.7.1-5 +- rebuilt with atlas 3.10, rhbz#1009069 + +* Wed Aug 28 2013 Tomas Tomecek - 1:1.7.1-4 +- URL Fix, rhbz#1001337 + +* Tue Jul 23 2013 Tomas Tomecek - 1:1.7.1-3 +- Update License +- Fix rpmlint warnings +- Increase verbosity level of tests +- Disable python 3 build +- Fix rhbz#987032 (SCL related: wrong shebang) + +* Sun Jun 2 2013 Orion Poplawski - 1:1.7.1-2 +- Specfile cleanup (bug #969854) + +* Wed Apr 10 2013 Orion Poplawski - 1:1.7.1-1 +- Update to 1.7.1 + +* Sat Feb 9 2013 Orion Poplawski - 1:1.7.0-1 +- Update to 1.7.0 final + +* Sun Dec 30 2012 Orion Poplawski - 1:1.7.0-0.5.rc1 +- Update to 1.7.0rc1 + +* Thu Sep 20 2012 Orion Poplawski - 1:1.7.0-0.4.b2 +- Update to 1.7.0b2 +- Drop patches applied upstream + +* Wed Aug 22 2012 Orion Poplawski - 1:1.7.0-0.3.b1 +- Add patch from github pull 371 to fix python 3.3 pickle issue +- Remove cython .c source regeneration - fails now + +* Wed Aug 22 2012 Orion Poplawski - 1:1.7.0-0.2.b1 +- add workaround for rhbz#849713 (fixes FTBFS) + +* Tue Aug 21 2012 Orion Poplawski - 1:1.7.0-0.1.b1 +- Update to 1.7.0b1 +- Rebase python 3.3 patchs to current git master +- Drop patches applied upstream + +* Sun Aug 5 2012 David Malcolm - 1:1.6.2-5 +- rework patches for 3.3 to more directly reflect upstream's commits +- re-enable test suite on python 3 +- forcibly regenerate Cython .c source to avoid import issues on Python 3.3 + +* Sun Aug 5 2012 Thomas Spura - 1:1.6.2-4 +- rebuild for https://fedoraproject.org/wiki/Features/Python_3.3 +- needs unicode patch + +* Fri Aug 3 2012 David Malcolm - 1:1.6.2-3 +- remove rhel logic from with_python3 conditional + +* Fri Jul 20 2012 Fedora Release Engineering - 1:1.6.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Sun May 20 2012 Orion Poplawski - 1:1.6.2-1 +- Update to 1.6.2 final + +* Sat May 12 2012 Orion Poplawski - 1:1.6.2rc1-0.1 +- Update to 1.6.2rc1 + +* Fri Jan 13 2012 Fedora Release Engineering - 1:1.6.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Mon Nov 7 2011 Orion Poplawski - 1:1.6.1-1 +- Update to 1.6.1 + +* Fri Jun 17 2011 Jon Ciesla - 1:1.6.0-2 +- Bump and rebuild for BZ 712251. + +* Mon May 16 2011 Orion Poplawski - 1:1.6.0-1 +- Update to 1.6.0 final + +* Mon Apr 4 2011 Orion Poplawski - 1:1.6.0-0.2.b2 +- Update to 1.6.0b2 +- Drop import patch fixed upstream + +* Thu Mar 31 2011 Orion Poplawski - 1:1.6.0-0.1.b1 +- Update to 1.6.0b1 +- Build python3 module with python3 +- Add patch from upstream to fix build time import error + +* Wed Mar 30 2011 Orion Poplawski - 1:1.5.1-1 +- Update to 1.5.1 final + +* Tue Feb 08 2011 Fedora Release Engineering - 1:1.5.1-0.4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Thu Jan 13 2011 Dan Horák - 1:1.5.1-0.3 +- fix the AttributeError during tests +- fix build on s390(x) + +* Wed Dec 29 2010 David Malcolm - 1:1.5.1-0.2 +- rebuild for newer python3 + +* Wed Oct 27 2010 Thomas Spura - 1:1.5.1-0.1 +- update to 1.5.1rc1 +- add python3 subpackage +- some spec-cleanups + +* Thu Jul 22 2010 David Malcolm - 1:1.4.1-6 +- actually add the patch this time + +* Thu Jul 22 2010 David Malcolm - 1:1.4.1-5 +- fix segfault within %%check on 2.7 (patch 2) + +* Wed Jul 21 2010 David Malcolm - 1:1.4.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild + +* Sun Jul 18 2010 Dan Horák 1.4.1-3 +- ignore the "Ticket #1299 second test" failure on s390(x) + +* Thu Jun 24 2010 Jef Spaleta 1.4.1-2 +- source commit fix + +* Thu Jun 24 2010 Jef Spaleta 1.4.1-1 +- New upstream release. Include backported doublefree patch + +* Mon Apr 26 2010 Jon Ciesla 1.3.0-8 +- Moved distutils back to the main package, BZ 572820. + +* Thu Apr 08 2010 Jon Ciesla 1.3.0-7 +- Reverted to 1.3.0 after upstream pulled 1.4.0, BZ 579065. + +* Tue Mar 02 2010 Jon Ciesla 1.4.0-5 +- Linking /usr/include/numpy to .h files, BZ 185079. + +* Tue Feb 16 2010 Jon Ciesla 1.4.0-4 +- Re-enabling atlas BR, dropping lapack Requires. + +* Wed Feb 10 2010 Jon Ciesla 1.4.0-3 +- Since the previous didn't work, Requiring lapack. + +* Tue Feb 09 2010 Jon Ciesla 1.4.0-2 +- Temporarily dropping atlas BR to work around 562577. + +* Fri Jan 22 2010 Jon Ciesla 1.4.0-1 +- 1.4.0. +- Dropped ARM patch, ARM support added upstream. + +* Tue Nov 17 2009 Jitesh Shah - 1.3.0-6.fa1 +- Add ARM support + +* Sat Jul 25 2009 Fedora Release Engineering - 1.3.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu Jun 11 2009 Jon Ciesla 1.3.0-5 +- Fixed atlas BR, BZ 505376. + +* Fri Apr 17 2009 Jon Ciesla 1.3.0-4 +- EVR bump for pygame chainbuild. + +* Fri Apr 17 2009 Jon Ciesla 1.3.0-3 +- Moved linalg, fft back to main package. + +* Tue Apr 14 2009 Jon Ciesla 1.3.0-2 +- Split out f2py into subpackage, thanks Peter Robinson pbrobinson@gmail.com. + +* Tue Apr 07 2009 Jon Ciesla 1.3.0-1 +- Update to latest upstream. +- Fixed Source0 URL. + +* Thu Apr 02 2009 Jon Ciesla 1.3.0-0.rc1 +- Update to latest upstream. + +* Thu Mar 05 2009 Jon Ciesla 1.2.1-3 +- Require python-devel, BZ 488464. + +* Wed Feb 25 2009 Fedora Release Engineering - 1.2.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Fri Dec 19 2008 Jon Ciesla 1.2.1-1 +- Update to 1.2.1. + +* Sat Nov 29 2008 Ignacio Vazquez-Abrams - 1.2.0-2 +- Rebuild for Python 2.6 + +* Tue Oct 07 2008 Jon Ciesla 1.2.0-1 +- New upstream release, added python-nose BR. BZ 465999. +- Using atlas blas, not blas-devel. BZ 461472. + +* Wed Aug 06 2008 Jon Ciesla 1.1.1-1 +- New upstream release + +* Thu May 29 2008 Jarod Wilson 1.1.0-1 +- New upstream release + +* Tue May 06 2008 Jarod Wilson 1.0.4-1 +- New upstream release + +* Mon Feb 11 2008 Jarod Wilson 1.0.3.1-2 +- Add python egg to %%files on f9+ + +* Wed Aug 22 2007 Jarod Wilson 1.0.3.1-1 +- New upstream release + +* Wed Jun 06 2007 Jarod Wilson 1.0.3-1 +- New upstream release + +* Mon May 14 2007 Jarod Wilson 1.0.2-2 +- Drop BR: atlas-devel, since it just provides binary-compat + blas and lapack libs. Atlas can still be optionally used + at runtime. (Note: this is all per the atlas maintainer). + +* Mon May 14 2007 Jarod Wilson 1.0.2-1 +- New upstream release + +* Tue Apr 17 2007 Jarod Wilson 1.0.1-4 +- Update gfortran patch to recognize latest gfortran f95 support +- Resolves rhbz#236444 + +* Fri Feb 23 2007 Jarod Wilson 1.0.1-3 +- Fix up cpuinfo bug (#229753). Upstream bug/change: + http://projects.scipy.org/scipy/scipy/ticket/349 + +* Thu Jan 04 2007 Jarod Wilson 1.0.1-2 +- Per discussion w/Jose Matos, Obsolete/Provide f2py, as the + stand-alone one is no longer supported/maintained upstream + +* Wed Dec 13 2006 Jarod Wilson 1.0.1-1 +- New upstream release + +* Tue Dec 12 2006 Jarod Wilson 1.0-2 +- Rebuild for python 2.5 + +* Wed Oct 25 2006 Jarod Wilson 1.0-1 +- New upstream release + +* Wed Sep 06 2006 Jarod Wilson 0.9.8-1 +- New upstream release + +* Wed Apr 26 2006 Ignacio Vazquez-Abrams 0.9.6-1 +- Upstream update + +* Thu Feb 16 2006 Ignacio Vazquez-Abrams 0.9.5-1 +- Upstream update + +* Mon Feb 13 2006 Ignacio Vazquez-Abrams 0.9.4-2 +- Rebuild for Fedora Extras 5 + +* Thu Feb 2 2006 Ignacio Vazquez-Abrams 0.9.4-1 +- Initial RPM release +- Added gfortran patch from Neal Becker