[m4rie] Initial import.

Jerry James jjames at fedoraproject.org
Sat Apr 28 16:01:08 UTC 2012


commit 591f26c7a3c946ed09870c5c3cbe9a281f17eda6
Author: Jerry James <loganjerry at gmail.com>
Date:   Sat Apr 28 10:00:52 2012 -0600

    Initial import.

 .gitignore         |    1 +
 m4rie-givaro.patch |  356 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 m4rie.spec         |   89 +++++++++++++
 sources            |    1 +
 4 files changed, 447 insertions(+), 0 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index e69de29..da47983 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/m4rie-20120415.tar.gz
diff --git a/m4rie-givaro.patch b/m4rie-givaro.patch
new file mode 100644
index 0000000..352fbfa
--- /dev/null
+++ b/m4rie-givaro.patch
@@ -0,0 +1,356 @@
+--- ./src/permutation.h.orig	2012-04-14 07:58:21.000000000 -0600
++++ ./src/permutation.h	2012-04-25 15:19:05.630000524 -0600
+@@ -103,7 +103,7 @@ static inline void mzed_apply_p_right_tr
+  */
+ 
+ static inline void mzd_slice_apply_p_left(mzd_slice_t *A, mzp_t const *P) {
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     mzd_apply_p_left(A->x[i], P);
+   }
+ }
+@@ -118,7 +118,7 @@ static inline void mzd_slice_apply_p_lef
+  */
+ 
+ static inline void mzd_slice_apply_p_left_trans(mzd_slice_t *A, mzp_t const *P) {
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     mzd_apply_p_left_trans(A->x[i], P);
+   }
+ }
+@@ -133,7 +133,7 @@ static inline void mzd_slice_apply_p_lef
+  */
+ 
+ static inline void mzd_slice_apply_p_right(mzd_slice_t *A, mzp_t const *P) {
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     mzd_apply_p_right(A->x[i], P);
+   }
+ }
+@@ -148,7 +148,7 @@ static inline void mzd_slice_apply_p_rig
+  */
+ 
+ static inline void mzd_slice_apply_p_right_trans(mzd_slice_t *A, mzp_t const *P) {
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     mzd_apply_p_right_trans(A->x[i], P);
+   }
+ }
+@@ -165,7 +165,7 @@ static inline void mzd_slice_apply_p_rig
+  */
+ 
+ static inline void mzd_slice_apply_p_right_trans_tri(mzd_slice_t *A, mzp_t const *P) {
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     mzd_apply_p_right_trans_tri(A->x[i], P);
+   }
+ }
+--- ./src/mzd_slice.h.orig	2012-04-14 07:58:21.000000000 -0600
++++ ./src/mzd_slice.h	2012-04-25 15:18:00.759000842 -0600
+@@ -89,7 +89,7 @@ static inline mzd_slice_t *mzd_slice_ini
+   A->ncols = n;
+   A->depth = ff->degree;
+ 
+-  for(int i=0; i<A->depth; i++)
++  for(unsigned int i=0; i<A->depth; i++)
+     A->x[i] = mzd_init(m,n);
+   return A;
+ }
+@@ -149,7 +149,7 @@ static inline mzd_slice_t *_mzd_slice_ad
+  */
+ 
+ static inline void mzd_slice_free(mzd_slice_t *A) {
+-  for(int i=0; i<A->depth; i++)
++  for(unsigned int i=0; i<A->depth; i++)
+    mzd_free(A->x[i]);
+ #if __M4RI_USE_MM_MALLOC
+   _mm_free(A);
+@@ -180,7 +180,7 @@ static inline mzd_slice_t *mzd_slice_con
+   if(C == NULL)
+     C = mzd_slice_init(A->finite_field, A->nrows, A->ncols + B->ncols);
+ 
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     mzd_concat(C->x[i], A->x[i], B->x[i]);
+   }
+   return C;
+@@ -207,7 +207,7 @@ static inline mzd_slice_t *mzd_slice_sta
+   if(C == NULL)
+     C = mzd_slice_init(A->finite_field, A->nrows + B->nrows, A->ncols);
+ 
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     mzd_stack(C->x[i], A->x[i], B->x[i]);
+   }
+   return C;
+@@ -231,7 +231,7 @@ static inline mzd_slice_t *mzd_slice_sub
+   if(S==NULL)
+     S = mzd_slice_init(A->finite_field, highr - lowr, highc - lowc);
+ 
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     mzd_submatrix(S->x[i], A->x[i], lowr, lowc, highr, highc);
+   }
+   return S;
+@@ -267,7 +267,7 @@ static inline mzd_slice_t *mzd_slice_ini
+   B->depth = A->depth;
+   B->nrows = highr - lowr;
+   B->ncols = highc - lowc;
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     B->x[i] = mzd_init_window(A->x[i], lowr, lowc, highr, highc);
+   }
+   return B;
+@@ -282,7 +282,7 @@ static inline mzd_slice_t *mzd_slice_ini
+  */
+ 
+ static inline void mzd_slice_free_window(mzd_slice_t *A) {
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     mzd_free_window(A->x[i]);
+   }
+   m4ri_mm_free(A);
+@@ -674,7 +674,7 @@ static inline mzd_slice_t *mzd_slice_cop
+   if(B == NULL)
+     B = mzd_slice_init(A->finite_field, A->nrows, A->ncols);
+ 
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     mzd_copy(B->x[i],A->x[i]);
+   }
+   return B;
+@@ -694,7 +694,7 @@ static inline mzd_slice_t *mzd_slice_cop
+ 
+ static inline word mzd_slice_read_elem(const mzd_slice_t *A, const rci_t row, const rci_t col) {
+   word ret = 0;
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     ret |= mzd_read_bit(A->x[i], row, col)<<i;
+   }
+   return ret;
+@@ -714,7 +714,7 @@ static inline word mzd_slice_read_elem(c
+  */
+ 
+ static inline void mzd_slice_add_elem(mzd_slice_t *A, const rci_t row, const rci_t col, word elem) {
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     __mzd_xor_bits(A->x[i], row, col, 1, elem&1);
+     elem=elem>>1;
+   }
+@@ -734,7 +734,7 @@ static inline void mzd_slice_add_elem(mz
+  */
+ 
+ static inline void mzd_slice_write_elem(mzd_slice_t *A, const rci_t row, const rci_t col, word elem) {
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     mzd_write_bit(A->x[i], row, col, elem&1);
+     elem=elem>>1;
+   }
+@@ -757,7 +757,7 @@ static inline int mzd_slice_cmp(mzd_slic
+   int r = 0;
+   if ((A->finite_field != B->finite_field) | (A->depth != B->depth) )
+     return -1;
+-  for(int i=0; i<A->depth; i++)
++  for(unsigned int i=0; i<A->depth; i++)
+     r |= mzd_cmp(A->x[i],B->x[i]);
+   return r;
+ }
+@@ -771,7 +771,7 @@ static inline int mzd_slice_cmp(mzd_slic
+  */
+ 
+ static inline int mzd_slice_is_zero(const mzd_slice_t *A) {
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     if (!mzd_is_zero(A->x[i]))
+       return 0;
+   }
+@@ -789,7 +789,7 @@ static inline int mzd_slice_is_zero(cons
+  */
+ 
+ static inline void mzd_slice_row_swap(mzd_slice_t *A, const rci_t rowa, const rci_t rowb) {
+-  for(int i=0; i<A->depth; i++) {
++  for(unsigned int i=0; i<A->depth; i++) {
+     mzd_row_swap(A->x[i], rowa, rowb);
+   }
+ }
+@@ -809,7 +809,7 @@ static inline void mzd_slice_row_swap(mz
+  */
+ 
+ static inline void mzd_slice_copy_row(mzd_slice_t* B, size_t i, const mzd_slice_t* A, size_t j) {
+-  for(int ii=0; ii<A->depth; ii++)
++  for(unsigned int ii=0; ii<A->depth; ii++)
+     mzd_copy_row(B->x[ii], i, A->x[ii], j);
+ }
+ 
+@@ -824,7 +824,7 @@ static inline void mzd_slice_copy_row(mz
+  */
+ 
+ static inline void mzd_slice_col_swap(mzd_slice_t *A, const rci_t cola, const rci_t colb) {
+-  for(int i=0; i<A->depth; i++)
++  for(unsigned int i=0; i<A->depth; i++)
+     mzd_col_swap(A->x[i], cola, colb);
+ }
+ 
+@@ -858,7 +858,7 @@ static inline void mzd_slice_col_swap_in
+  */
+ 
+ static inline void mzd_slice_row_add(mzd_slice_t *A, const rci_t sourcerow, const rci_t destrow) {
+-  for(int i=0; i<A->depth; i++)
++  for(unsigned int i=0; i<A->depth; i++)
+     mzd_row_add(A->x[i], sourcerow, destrow);
+ }
+ 
+@@ -873,7 +873,7 @@ static inline void mzd_slice_row_add(mzd
+  */
+ 
+ static inline void mzd_slice_row_clear_offset(mzd_slice_t *A, const rci_t row, const rci_t coloffset) {
+-  for(int i=0; i<A->depth; i++)
++  for(unsigned int i=0; i<A->depth; i++)
+     mzd_row_clear_offset(A->x[i], row, coloffset);
+ }
+ 
+--- ./src/mzd_poly.h.orig	2012-04-14 07:58:21.000000000 -0600
++++ ./src/mzd_poly.h	2012-04-25 15:15:50.508000002 -0600
+@@ -48,7 +48,7 @@ static inline void _poly_add(mzd_t **c,
+   case  0:
+     break;
+   default:
+-    for(int i=0; i<length; i++)
++    for(unsigned int i=0; i<length; i++)
+       mzd_add(c[ i], a[ i], b[ i]);
+   }
+ }
+--- ./tests/testing.h.orig	2012-04-14 07:58:21.000000000 -0600
++++ ./tests/testing.h	2012-04-25 15:19:36.133999969 -0600
+@@ -120,7 +120,7 @@ static inline void mzd_slice_clear_canar
+   const word mask_end   = __M4RI_LEFT_BITMASK((A->x[0]->offset + A->ncols)%m4ri_radix);
+   const rci_t n = A->x[0]->width-1;
+ 
+-  for(int e=0; e<A->finite_field->degree; e++) {
++  for(unsigned int e=0; e<A->finite_field->degree; e++) {
+     for(rci_t i=0; i<A->nrows; i++) {
+       A->x[e]->rows[i][0] &=mask_begin;
+       A->x[e]->rows[i][n] &=mask_end;
+@@ -142,9 +142,9 @@ static inline int mzd_slice_canary_is_al
+         return 0;
+       }
+     }
+-    return 1;
+   }
+-};
++  return 1;
++}
+ 
+ static inline mzed_t *random_mzed_t(gf2e *ff, int m, int n) {
+   mzed_t *A  = mzed_init(ff,m,n);
+--- ./tests/test_elimination.cc.orig	2012-04-14 07:58:21.000000000 -0600
++++ ./tests/test_elimination.cc	2012-04-25 15:15:50.513000003 -0600
+@@ -1,3 +1,4 @@
++#define __STDC_LIMIT_MACROS
+ #include "testing.h"
+ #include <gf2e_cxx/finite_field_givaro.h>
+ 
+@@ -77,7 +78,7 @@ int main(int argc, char **argv) {
+   int fail_ret = 0;
+ 
+   for(int k=2; k<=10; k++) {
+-    GFqDom<int> GF = GFqDom<int>(2,k);
++    Givaro::GFqDom<int> GF = Givaro::GFqDom<int>(2,k);
+     FiniteField *F = (FiniteField*)&GF;
+     ff[k] = gf2e_init_givgfq(F);
+   }
+--- ./tests/test_ple.cc.orig	2012-04-14 07:58:21.000000000 -0600
++++ ./tests/test_ple.cc	2012-04-25 15:15:50.516000003 -0600
+@@ -1,3 +1,4 @@
++#define __STDC_LIMIT_MACROS
+ #include "testing.h"
+ #include <gf2e_cxx/finite_field_givaro.h>
+ 
+@@ -188,7 +189,7 @@ int main(int argc, char **argv) {
+   int fail_ret = 0;
+ 
+   for(int k=2; k<=10; k++) {
+-    GFqDom<int> GF = GFqDom<int>(2,k);
++    Givaro::GFqDom<int> GF = Givaro::GFqDom<int>(2,k);
+     FiniteField *F = (FiniteField*)&GF;
+     ff[k] = gf2e_init_givgfq(F);
+   }
+--- ./tests/test_multiplication.cc.orig	2012-04-14 07:58:21.000000000 -0600
++++ ./tests/test_multiplication.cc	2012-04-25 15:15:50.518000003 -0600
+@@ -25,6 +25,7 @@
+ ******************************************************************************/
+ 
+ 
++#define __STDC_LIMIT_MACROS
+ #include "testing.h"
+ #include <gf2e_cxx/finite_field_givaro.h>
+ 
+@@ -225,7 +226,7 @@ int main(int argc, char **argv) {
+   int fail_ret = 0;
+ 
+   for(int k=2; k<=10; k++) {
+-    GFqDom<int> GF = GFqDom<int>(2,k);
++    Givaro::GFqDom<int> GF = Givaro::GFqDom<int>(2,k);
+     FiniteField *F = (FiniteField*)&GF;
+     ff[k] = gf2e_init_givgfq(F);
+   }
+--- ./tests/test_trsm.cc.orig	2012-04-14 07:58:21.000000000 -0600
++++ ./tests/test_trsm.cc	2012-04-25 15:15:50.520000003 -0600
+@@ -24,6 +24,7 @@
+ *                  http://www.gnu.org/licenses/
+ ******************************************************************************/
+ 
++#define __STDC_LIMIT_MACROS
+ #include "testing.h"
+ #include <gf2e_cxx/finite_field_givaro.h>
+ 
+@@ -476,7 +477,7 @@ int main(int argc, char **argv) {
+   int fail_ret = 0;
+ 
+   for(int k=2; k<=10; k++) {
+-    GFqDom<int> GF = GFqDom<int>(2,k);
++    Givaro::GFqDom<int> GF = Givaro::GFqDom<int>(2,k);
+     FiniteField *F = (FiniteField*)&GF;
+     ff[k] = gf2e_init_givgfq(F);
+   }
+--- ./tests/test_smallops.cc.orig	2012-04-14 07:58:21.000000000 -0600
++++ ./tests/test_smallops.cc	2012-04-25 15:15:50.522000003 -0600
+@@ -1,3 +1,4 @@
++#define __STDC_LIMIT_MACROS
+ #include "testing.h"
+ 
+ #include <gf2e_cxx/finite_field_givaro.h>
+@@ -45,11 +46,11 @@ int test_slice_known_answers(gf2e *ff, i
+   mzd_t *one = mzd_init(m,n);
+   mzd_set_ui(one, 1);
+ 
+-  for(int j=0; j<ff->degree; j++) {
++  for(unsigned int j=0; j<ff->degree; j++) {
+     mzed_set_ui(A, 1<<j);
+     mzd_slice_t *a = mzed_slice(NULL, A);
+ 
+-    for(int i=0; i<a->depth; i++) {
++    for(unsigned int i=0; i<(unsigned int)a->depth; i++) {
+       if (i!=j) {
+         m4rie_check( mzd_is_zero(a->x[i]) );
+       } else {
+@@ -161,7 +162,7 @@ int main(int argc, char **argv) {
+   int fail_ret = 0;
+ 
+   for(int k=2; k<=10; k++) {
+-    GFqDom<int> GF = GFqDom<int>(2,k);
++    Givaro::GFqDom<int> GF = Givaro::GFqDom<int>(2,k);
+     FiniteField *F = (FiniteField*)&GF;
+     ff[k] = gf2e_init_givgfq(F);
+   }
+--- ./gf2e_cxx/finite_field_givaro.h.orig	2012-04-14 07:58:21.000000000 -0600
++++ ./gf2e_cxx/finite_field_givaro.h	2012-04-25 15:15:50.524000003 -0600
+@@ -22,7 +22,7 @@
+ 
+ namespace M4RIE {
+ 
+-  class FiniteField: public GFqDom<int> {
++  class FiniteField: public Givaro::GFqDom<int> {
+   public: 
+     unsigned int  log2pol(int x) { return _log2pol[x]; };
+     unsigned int  pol2log(int x) { return _pol2log[x]; };
diff --git a/m4rie.spec b/m4rie.spec
new file mode 100644
index 0000000..62e66de
--- /dev/null
+++ b/m4rie.spec
@@ -0,0 +1,89 @@
+Name:           m4rie
+Version:        20120415
+Release:        2%{?dist}
+Summary:        Linear Algebra over F_2^e
+Group:          Development/Libraries
+License:        GPLv2+
+URL:            http://m4ri.sagemath.org/
+Source0:        http://m4ri.sagemath.org/downloads/%{name}-%{version}.tar.gz
+# Patch sent upstream 25 April 2012.  Adapt to changes in givaro 3.5.0.
+Patch0:         %{name}-givaro.patch
+
+BuildRequires:  doxygen
+BuildRequires:  givaro-devel
+BuildRequires:  gmp-devel
+BuildRequires:  m4ri-devel
+BuildRequires:  tex(latex)
+
+%description
+M4RIE is a library for fast arithmetic with dense matrices over F_2^e.
+It is an add-on to the M4RI library, which implements fast arithmetic
+with dense matrices over F_2.  M4RIE is used by the Sage mathematics
+software.
+
+%package        devel
+Summary:        Development files for %{name}
+Group:          Development/Libraries
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+
+%description    devel
+The %{name}-devel package contains libraries and header files for
+developing applications that use %{name}.
+
+%package        static
+Summary:        Static library files for %{name}
+Group:          Development/Libraries
+Requires:       %{name}-devel%{?_isa} = %{version}-%{release}
+
+%description    static
+The %{name}-static package contains the static %{name} library.
+
+%prep
+%setup -q
+%patch0
+
+# Fix the version number in the doxygen documentation
+sed -ri "s/^(PROJECT_NUMBER[[:blank:]]+= 0\.).*/\1%{version}/" src/Doxyfile
+
+%build
+%configure
+
+# The configure step picks up -fopenmp from the m4ri CFLAGS.  However, m4rie
+# does not contain any OpenMP-using code.  The end result is that libm4rie is
+# unnecessarily linked with libgomp, leading to rpmlint complaints.
+sed -i "s/M4RI_CFLAGS =.*/M4RI_CFLAGS =/" Makefile bench/Makefile
+
+make %{?_smp_mflags}
+cd src
+doxygen
+
+%install
+make install DESTDIR=$RPM_BUILD_ROOT
+rm -f $RPM_BUILD_ROOT%{_libdir}/lib%{name}.la
+rm -f doc/html/installdox
+
+%check
+make check
+
+%post -p /sbin/ldconfig
+
+%postun -p /sbin/ldconfig
+
+%files
+%doc COPYING
+%{_libdir}/lib%{name}-*.so
+
+%files devel
+%doc doc/html
+%{_includedir}/%{name}/
+%{_libdir}/lib%{name}.so
+
+%files static
+%{_libdir}/lib%{name}.a
+
+%changelog
+* Fri Apr 27 2012 Jerry James <loganjerry at gmail.com> - 20120417-1
+- Fix -static Requires
+
+* Wed Apr 25 2012 Jerry James <loganjerry at gmail.com> - 20120415-1
+- Initial RPM
diff --git a/sources b/sources
index e69de29..a2d9b52 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+1135a21acae7a1e1eb30d3ad062b4237  m4rie-20120415.tar.gz


More information about the scm-commits mailing list