From 0517681bc5a89dc7d251c691780a3df8f8c45da7 Mon Sep 17 00:00:00 2001 From: vlefevre Date: Fri, 23 Sep 2016 13:57:32 +0000 Subject: [examples/version.c] Update from the trunk (with svn merge on changesets r8034,8036,8128,10885-10886). git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/branches/3.1@10887 280ebfd0-de03-0410-8827-d642c229c3f4 --- examples/version.c | 150 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 139 insertions(+), 11 deletions(-) diff --git a/examples/version.c b/examples/version.c index 03f048e13..f1b708360 100644 --- a/examples/version.c +++ b/examples/version.c @@ -46,37 +46,152 @@ static void failure_test (void) mpfr_clear (x); } +static void patches (void) +{ + const char *p = mpfr_get_patches (); + printf ("MPFR patches: %s\n", p[0] ? p : "[none]"); +} + +#define STRINGIZE(S) #S +#define MAKE_STR(S) STRINGIZE(S) + +#define SIGNED_STR(V) ((V) < 0 ? "signed" : "unsigned") +#define SIGNED(I) SIGNED_STR((I) - (I) - 1) + int main (void) { unsigned long c; - mp_limb_t t[4] = { -1, -1, -1, -1 }; + mp_limb_t t[4]; + int i; + /* Casts are for C++ compilers. */ + for (i = 0; i < (int) (sizeof (t) / sizeof (mp_limb_t)); i++) + t[i] = (mp_limb_t) -1; + + /**************** Information about the C implementation ****************/ + + /* This is useful, as this can affect the behavior of MPFR. */ + +#define COMP "Compiler: " +#ifdef __INTEL_COMPILER +# ifdef __VERSION__ +# define ICCV " [" __VERSION__ "]" +# else +# define ICCV "" +# endif + printf (COMP "ICC %d.%d.%d" ICCV "\n", __INTEL_COMPILER / 100, + __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE); +#elif (defined(__GNUC__) || defined(__clang__)) && defined(__VERSION__) +# ifdef __clang__ +# define COMP2 COMP +# else +# define COMP2 COMP "GCC " +# endif + printf (COMP2 "%s\n", __VERSION__); +#endif + +#if defined(__STDC__) || defined(__STDC_VERSION__) + printf ("C/C++: __STDC__ = " +#if defined(__STDC__) + MAKE_STR(__STDC__) +#else + "undef" +#endif + ", __STDC_VERSION__ = " +#if defined(__STDC_VERSION__) + MAKE_STR(__STDC_VERSION__) +#else + "undef" +#endif #if defined(__cplusplus) - printf ("A C++ compiler is used.\n"); + ", C++" +#endif + "\n"); +#endif + +#if defined(__GNUC__) + printf ("__GNUC__ = " MAKE_STR(__GNUC__) ", __GNUC_MINOR__ = " +#if defined(__GNUC_MINOR__) + MAKE_STR(__GNUC_MINOR__) +#else + "undef" +#endif + "\n"); +#endif + +#if defined(__ICC) || defined(__INTEL_COMPILER) + printf ("Intel compiler: __ICC = " +#if defined(__ICC) + MAKE_STR(__ICC) +#else + "undef" +#endif + ", __INTEL_COMPILER = " +#if defined(__INTEL_COMPILER) + MAKE_STR(__INTEL_COMPILER) +#else + "undef" +#endif + "\n"); +#endif + +#if defined(_WIN32) || defined(_MSC_VER) + printf ("MS Windows: _WIN32 = " +#if defined(_WIN32) + MAKE_STR(_WIN32) +#else + "undef" +#endif + ", _MSC_VER = " +#if defined(_MSC_VER) + MAKE_STR(_MSC_VER) +#else + "undef" +#endif + "\n"); +#endif + +#if defined(__GLIBC__) + printf ("__GLIBC__ = " MAKE_STR(__GLIBC__) ", __GLIBC_MINOR__ = " +#if defined(__GLIBC_MINOR__) + MAKE_STR(__GLIBC_MINOR__) +#else + "undef" +#endif + "\n"); #endif + printf ("\n"); + + /************************************************************************/ + +#if defined(__MPIR_VERSION) + printf ("MPIR .... Library: %-12s Header: %d.%d.%d\n", + mpir_version, __MPIR_VERSION, __MPIR_VERSION_MINOR, + __MPIR_VERSION_PATCHLEVEL); +#else printf ("GMP ..... Library: %-12s Header: %d.%d.%d\n", gmp_version, __GNU_MP_VERSION, __GNU_MP_VERSION_MINOR, __GNU_MP_VERSION_PATCHLEVEL); +#endif printf ("MPFR .... Library: %-12s Header: %s (based on %d.%d.%d)\n", mpfr_get_version (), MPFR_VERSION_STRING, MPFR_VERSION_MAJOR, MPFR_VERSION_MINOR, MPFR_VERSION_PATCHLEVEL); -#if MPFR_VERSION_MAJOR >= 3 printf ("MPFR features: TLS = %s, decimal = %s", mpfr_buildopt_tls_p () ? "yes" : "no", mpfr_buildopt_decimal_p () ? "yes" : "no"); -# if MPFR_VERSION_MAJOR > 3 || MPFR_VERSION_MINOR >= 1 +#if MPFR_VERSION_MAJOR > 3 || MPFR_VERSION_MINOR >= 1 printf (", GMP internals = %s\nMPFR tuning: %s", mpfr_buildopt_gmpinternals_p () ? "yes" : "no", mpfr_buildopt_tune_case ()); -# endif +#endif /* 3.1 */ printf ("\n"); -#endif - printf ("MPFR patches: %s\n\n", mpfr_get_patches ()); + patches (); + printf ("\n"); #ifdef __GMP_CC printf ("__GMP_CC = \"%s\"\n", __GMP_CC); #endif @@ -99,12 +214,25 @@ int main (void) printf ("Warning! This is different from GMP_LIMB_BITS!\n" "Different ABI caused by a GMP library upgrade?\n"); -#if MPFR_VERSION_MAJOR >= 3 printf ("\n"); - printf ("sizeof(mpfr_prec_t) = %d\n", (int) sizeof(mpfr_prec_t)); - printf ("sizeof(mpfr_exp_t) = %d\n", (int) sizeof(mpfr_exp_t)); + printf ("sizeof(mpfr_prec_t) = %d (%s type)\n", (int) sizeof(mpfr_prec_t), + SIGNED_STR((mpfr_prec_t) -1)); + printf ("sizeof(mpfr_exp_t) = %d (%s type)\n", (int) sizeof(mpfr_exp_t), + SIGNED_STR((mpfr_exp_t) -1)); +#ifdef _MPFR_PREC_FORMAT + printf ("_MPFR_PREC_FORMAT = %d\n", (int) _MPFR_PREC_FORMAT); #endif - + /* Note: "long" is sufficient for all current _MPFR_PREC_FORMAT values + (1, 2, 3). Thus we do not need to depend on ISO C99 or later. */ + printf ("MPFR_PREC_MIN = %ld (%s)\n", (long) MPFR_PREC_MIN, + SIGNED (MPFR_PREC_MIN)); + printf ("MPFR_PREC_MAX = %ld (%s)\n", (long) MPFR_PREC_MAX, + SIGNED (MPFR_PREC_MAX)); +#ifdef _MPFR_EXP_FORMAT + printf ("_MPFR_EXP_FORMAT = %d\n", (int) _MPFR_EXP_FORMAT); +#endif + printf ("sizeof(mpfr_t) = %d\n", (int) sizeof(mpfr_t)); + printf ("sizeof(mpfr_ptr) = %d\n", (int) sizeof(mpfr_ptr)); failure_test (); return 0; -- cgit v1.2.1