diff --git a/gap-stat.patch b/gap-stat.patch index 7abf3aa..b311d1c 100644 --- a/gap-stat.patch +++ b/gap-stat.patch @@ -1,3 +1,155 @@ +--- ./src/integer.h.orig 2013-05-04 10:45:21.000000000 -0600 ++++ ./src/integer.h 2013-05-22 11:18:27.468094940 -0600 +@@ -59,6 +59,20 @@ Obj ObjInt_Int(Int i); + Obj ObjInt_UInt(UInt i); + + ++/************************************************************************** ++** The following two functions convert a C long long or unsigned long long ++** respectively into a GAP integer, either an immediate, small integer if ++** possible or otherwise a new GAP bag with TNUM T_INTPOS or T_INTNEG. ++** ++*F ObjInt_LongLong(long long i) ++*F ObjInt_ULongLong(unsigned long long i) ++** ++****************************************************************************/ ++ ++Obj ObjInt_LongLong(long long i); ++Obj ObjInt_ULongLong(unsigned long long i); ++ ++ + /**************************************************************************** + ** + *F PrintInt( ) . . . . . . . . . . . . . . . print an integer constant +--- ./src/integer.c.orig 2013-05-04 10:45:21.000000000 -0600 ++++ ./src/integer.c 2013-05-22 11:32:58.815893606 -0600 +@@ -237,6 +237,58 @@ Obj ObjInt_UInt(UInt i) + } + + ++/************************************************************************** ++** The following two functions convert a C long long or unsigned long long ++** respectively into a GAP integer, either an immediate, small integer if ++** possible or otherwise a new GAP bag with TNUM T_INTPOS or T_INTNEG. ++** ++*F ObjInt_LongLong(long long i) ++*F ObjInt_ULongLong(unsigned long long i) ++** ++****************************************************************************/ ++ ++#define NDIGITS_RAW (sizeof (long long) / sizeof (TypDigit)) ++#define NDIGITS (NDIGITS_RAW >= 4U ? NDIGITS_RAW : 4U) ++ ++Obj ObjInt_LongLong(long long i) ++{ ++ Obj n; ++ long long bound = 1LL << NR_SMALL_INT_BITS; ++ if (i >= bound) { ++ /* We have to make a big integer */ ++ size_t j; ++ n = NewBag(T_INTPOS, NDIGITS); ++ for ( j = 0U; j < NDIGITS; j++ ) ++ ADDR_INT(n)[j] = (TypDigit) (i >> (j * NR_DIGIT_BITS)); ++ return n; ++ } else if (-i > bound) { ++ size_t j; ++ n = NewBag(T_INTNEG, NDIGITS); ++ for ( j = 0U; j < NDIGITS; j++ ) ++ ADDR_INT(n)[j] = (TypDigit) ((-i) >> (j * NR_DIGIT_BITS)); ++ return n; ++ } else { ++ return INTOBJ_INT((Int) i); ++ } ++} ++ ++Obj ObjInt_ULongLong(unsigned long long i) ++{ ++ Obj n; ++ unsigned long long bound = 1ULL << NR_SMALL_INT_BITS; ++ if (i >= bound) { ++ /* We have to make a big integer */ ++ size_t j; ++ n = NewBag(T_INTPOS, NDIGITS); ++ for ( j = 0U; j < NDIGITS; j++ ) ++ ADDR_INT(n)[j] = (TypDigit) (i >> (j * NR_DIGIT_BITS)); ++ return n; ++ } else { ++ return INTOBJ_INT((Int) i); ++ } ++} ++ ++ + + /**************************************************************************** + ** +--- ./src/gmpints.h.orig 2013-05-04 10:45:21.000000000 -0600 ++++ ./src/gmpints.h 2013-05-22 11:18:27.469094938 -0600 +@@ -79,6 +79,21 @@ typedef UInt2 TypDigit; + Obj ObjInt_Int(Int i); + Obj ObjInt_UInt(UInt i); + ++ ++/************************************************************************** ++** The following two functions convert a C long long or unsigned long long ++** respectively into* a GAP integer, either an immediate, small integer if ++** possible or otherwise a new GAP bag with TNUM T_INTPOS or T_INTNEG. ++** ++*F ObjInt_LongLong(long long i) ++*F ObjInt_ULongLong(unsigned long long i) ++** ++****************************************************************************/ ++ ++Obj ObjInt_LongLong(long long i); ++Obj ObjInt_ULongLong(unsigned long long i); ++ ++ + /**************************************************************************** + ** + */ +--- ./src/gmpints.c.orig 2013-05-04 10:45:21.000000000 -0600 ++++ ./src/gmpints.c 2013-05-22 11:19:35.728935667 -0600 +@@ -358,6 +358,41 @@ Obj ObjInt_UInt( UInt i ) + } + } + ++Obj ObjInt_LongLong( long long i ) ++{ ++ Obj gmp; ++ unsigned long long ull; ++ size_t j; ++ ++ if ( (-(1LL<= 0LL ) { ++ gmp = NewBag( T_INTPOS, sizeof(i) ); ++ ull = (unsigned long long) i; ++ } ++ else { ++ gmp = NewBag( T_INTNEG, sizeof(i) ); ++ ull = (unsigned long long) -i; ++ } ++ for ( j = 0U; j < sizeof(i) / sizeof(TypLimb); j++ ) ++ ((TypLimb *)ADDR_OBJ( gmp ))[j] = ull >> (j * sizeof(TypLimb)); ++ return GMP_NORMALIZE( gmp ); ++} ++ ++Obj ObjInt_ULongLong( unsigned long long i ) ++{ ++ Obj gmp; ++ size_t j; ++ ++ if ( i < 1ULL<> (j * sizeof(TypLimb)); ++ return GMP_NORMALIZE( gmp ); ++} ++ + + /**************************************************************************** + ** --- ./src/streams.c.orig 2013-02-01 18:09:31.000000000 -0700 +++ ./src/streams.c 2013-02-20 09:32:40.123439294 -0700 @@ -2134,13 +2134,13 @@ Obj FuncREAD_STRING_FILE ( diff --git a/gap.spec b/gap.spec index f37a9c9..de75284 100644 --- a/gap.spec +++ b/gap.spec @@ -6,7 +6,7 @@ Name: gap Version: %(sed -r "s/r|p/./g" <<<%upstreamver) -Release: 1%{?dist} +Release: 2%{?dist} Summary: Computational discrete algebra Group: Applications/Engineering @@ -48,7 +48,6 @@ BuildRequires: xemacs Requires: %{name}-libs = %{version}-%{release} Requires: %{name}-core%{?_isa} = %{version}-%{release} Requires: %{name}-online-help = %{version}-%{release} -Requires: meataxe %description GAP is a system for computational discrete algebra, with particular @@ -398,6 +397,10 @@ make testinstall %{_xemacs_sitelispdir}/gap*.el %changelog +* Wed May 22 2013 Jerry James - 4.6.4-2 +- Update -stat patch to provide large integer conversion (for, e.g., loff_t) +- Drop meataxe Requirement as it has been replaced with internal routines + * Thu May 16 2013 Jerry James - 4.6.4-1 - New upstream release