From cf9cd8958bbf294c30b82c2d5e9ea64ef14f37b9 Mon Sep 17 00:00:00 2001 From: Pádraig Brady Date: Mon, 8 Oct 2012 11:38:41 +0100 Subject: build: support older GMP versions The new factor code introduced usage of mpz_inits() and mpz_clears(), which are only available since GMP >= 5, and will result in a compile error when missing. * m4/gmp.m4 (cu_GMP): Define HAVE_DECL_MPZ_INITS appropriately. * src/factor (mpz_inits): New function, defined where missing. (mpz_clears): Likewise. --- src/factor.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src') diff --git a/src/factor.c b/src/factor.c index 5bfbfdcd4..d5f248a6a 100644 --- a/src/factor.c +++ b/src/factor.c @@ -89,6 +89,9 @@ #include #if HAVE_GMP # include +# if !HAVE_DECL_MPZ_INITS +# include +# endif #endif #include @@ -526,6 +529,27 @@ factor_insert_large (struct factors *factors, } #if HAVE_GMP + +# if !HAVE_DECL_MPZ_INITS + +# define mpz_inits(...) mpz_va_init (mpz_init, __VA_ARGS__) +# define mpz_clears(...) mpz_va_init (mpz_clear, __VA_ARGS__) + +static void +mpz_va_init (void (*mpz_single_init)(mpz_t), ...) +{ + va_list ap; + + va_start (ap, mpz_single_init); + + mpz_t *mpz; + while ((mpz = va_arg (ap, mpz_t *))) + mpz_single_init (*mpz); + + va_end (ap); +} +# endif + static void mp_factor (mpz_t, struct mp_factors *); static void -- cgit v1.2.3-54-g00ecf