GnuCOBOL currently only works with mpir if gmpcompat is used. Because of
some items in our central header file libcob.h being mpz_t we had gmp.h
included - the definitions needed for mpz_t are the only reason including
it there.
There are four possible ways I can think of to change that:
1) create libob.h from libcob.h.in during configure, placing either gmp.h
or mpir.h in - biggest disadvantage is that you'd always need to create
libcob.h if you use a source/svn tarball and add the creation of libcob.h
to the vc-builds
2) use gmp.h or mpir.h depending on a define which is set during configure
#ifdef HAVE_GMP_H
#include <gmp.h>
#elif defined (HAVE_MPIR_H)
#include <mpir.h>
/* maybe add something here like
#else
#pragma error "either HAVE_GMP_H or HAVE_MPIR_H have to be defined"
*/
#endif
Biggest disadvantage: external programs would have to add the define and
therefore may be broken with the changed version
3) use mpir.h depending on a define which is set during configure, use
gmp.h in all other cases
#ifndef HAVE_MPIR_H
#include <gmp.h>
#else
#include <mpir.h>
#endif
Biggest disadvantage: if GnuCOBOL was build with mpir while gmp.h (version
4.1 or version 6+) is available there may occur compatibility problems - at
worst during runtime only (Is there any knowledge about that?)
4) use gmp.h or mpir.h depending on a define which is set during configure,
if both defines are not set add the definition for mpz_t.
#ifdef HAVE_GMP_H
#include <gmp.h>
#elif defined (HAVE_MPIR_H)
#include <mpir.h>
#else
/* Definition of mpz_t (used in common.h)
borrowed from MPIR 2.6.0
*/
#ifndef __GNU_MP__
typedef struct
{
int _mp_alloc; /* Number of *limbs* allocated and pointed
to by the _mp_d field. */
int _mp_size; /* abs(_mp_size) is the number of limbs the
last field points to. If _mp_size is
negative this is a negative number. */
unsigned int *_mp_d; /* Pointer to the limbs. */
} __mpz_struct;
#endif /* __GNU_MP__ */
typedef __mpz_struct mpz_t[1];
#endif
Biggest disadvantage: The definition of mpz_t may (???) not be correct on
all systems with all versions of gmp.h / mpir.h. Same possible
compatibility problems as with 3)
I'd like to read about your thoughts and good-practices from other projects.
Thank you for your time to answer.
Simon
--
You received this message because you are subscribed to the Google Groups
"mpir-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/mpir-devel.
For more options, visit https://groups.google.com/d/optout.