summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2016-09-23 13:57:32 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2016-09-23 13:57:32 +0000
commit0517681bc5a89dc7d251c691780a3df8f8c45da7 (patch)
treedd2a9d7e5ca0dcc3d8703618002ef1cc61be11bb
parent896a86d0599c02dd094c566d0db719e3465afc1a (diff)
downloadmpfr-0517681bc5a89dc7d251c691780a3df8f8c45da7.tar.gz
[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
-rw-r--r--examples/version.c150
1 files 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;