2 dnl Copyright (C) 1993-2008 Free Software Foundation, Inc.
3 dnl This file is free software, distributed under the terms of the GNU
4 dnl General Public License. As a special exception to the GNU General
5 dnl Public License, this file may be distributed as part of a program
6 dnl that contains a configuration script generated by Autoconf, under
7 dnl the same distribution terms as the rest of that program.
9 dnl From Richard B. Kreckel.
13 dnl Is the gmp header file new enough? (should be implemented with an argument)
14 AC_DEFUN([CL_GMP_H_VERSION],
15 [AC_CACHE_CHECK([for recent enough gmp.h], cl_cv_new_gmp_h, [
16 AC_TRY_CPP([#include <gmp.h>
17 #if !defined(__GNU_MP_VERSION) || (__GNU_MP_VERSION < 3)
18 #error "ancient gmp.h"
20 cl_cv_new_gmp_h="yes", cl_cv_new_gmp_h="no")
23 dnl Does libgmp provide some functionality introduced in version 3.0?
24 AC_DEFUN([CL_GMP_CHECK],
25 [AC_CACHE_CHECK([for working libgmp], cl_cv_new_libgmp, [
28 AC_TRY_LINK([#include <gmp.h>],[mpn_divexact_by3(0,0,0)],
29 cl_cv_new_libgmp="yes", cl_cv_new_libgmp="no")
31 if test "$cl_cv_new_libgmp" = yes; then
36 dnl What is sizeof(mp_limb_t)? (It has to match sizeof(uintD) later.)
37 AC_DEFUN([CL_GMP_SET_UINTD],
38 [AC_CACHE_CHECK([how large gmp demands uintD to be], cl_cv_gmp_set_uintd, [
39 dnl Note: we don't run any of compiled programs here, so this method
40 dnl both works for native and cross compilation
41 cl_gmp_demands="UNKNOWN"
43 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gmp.h>
44 template<bool COND> struct Static_Assert;
45 template<> struct Static_Assert<true> { };
46 #if defined(__GMP_BITS_PER_MP_LIMB)
47 Static_Assert<8*sizeof(mp_limb_t) == __GMP_BITS_PER_MP_LIMB> check;
48 #endif]], [[]])], [], [cl_gmp_has_nails="yes"])
49 if test "x$cl_gmp_has_nails" = "xyes"; then
50 AC_MSG_ERROR([nails in MP libms are unsupported.])
52 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gmp.h>
53 template<bool COND> struct Static_Assert;
54 template<> struct Static_Assert<true> { };
55 Static_Assert<(sizeof(mp_limb_t) > sizeof(long))> check;]], [[]])],
56 [cl_gmp_demands='GMP_DEMANDS_UINTD_LONG_LONG'], [])
57 if test "x$cl_gmp_demands" = "xUNKNOWN"; then
58 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <gmp.h>
59 template<bool COND> struct Static_Assert;
60 template<> struct Static_Assert<true> { };
61 Static_Assert<sizeof(mp_limb_t) == sizeof(long)> check;]], [[]])],
62 [cl_gmp_demands='GMP_DEMANDS_UINTD_LONG'], [])
64 if test "x$cl_gmp_demands" = "xUNKNOWN"; then
65 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
67 template<bool COND> struct Static_Assert;
68 template<> struct Static_Assert<true> { };
69 Static_Assert<sizeof(mp_limb_t) == sizeof(int)> check;]], [[]])],
70 [cl_gmp_demands='GMP_DEMANDS_UINTD_INT'], [])
72 if test "x$cl_gmp_demands" = "xUNKNOWN"; then
73 AC_MSG_ERROR([Don't know which C-type has sizeof(mp_limb_t)])
75 cl_cv_gmp_set_uintd="$cl_gmp_demands"
78 AC_DEFINE_UNQUOTED($cl_cv_gmp_set_uintd)
81 dnl Whether or not to use GMP. Sets CL_USE_GMP.
82 dnl Also sets CPPFLAGS, LDFLAGS if --with-gmp=DIR was specified.
84 [AC_ARG_WITH(gmp, AS_HELP_STRING([--with-gmp@<:@=DIR@:>@],
85 [use external low-level functions from GNU MP (installed in prefix DIR) @<:@default=yes@:>@.]),[
93 if test "$cl_cv_new_gmp_h" = yes; then
95 if test "$cl_cv_new_libgmp" = yes; then
97 AC_DEFINE(CL_USE_GMP, 1, [Define if GNU MP library is available])
99 AC_MSG_WARN([The GNU MP library is too old to be used.])
102 AC_MSG_WARN([The header file <gmp.h> is too old to be used.])
111 [[\\/$]]* | ?:[[\\/]]* )
113 *) AC_MSG_ERROR([expected an absolute directory name for --with-gmp: $withval])
116 saved_CPPFLAGS="$CPPFLAGS"
117 CPPFLAGS="$CPPFLAGS -I${withval}/include"
118 saved_LDFLAGS="$LDFLAGS"
119 LDFLAGS="$LDFLAGS -L${withval}/lib"
120 AC_LIB_LINKFLAGS_FROM_LIBS([GMP_RPATH_CFG], [$LDFLAGS])
121 LDFLAGS="$GMP_RPATH_CFG $LDFLAGS"
122 AC_MSG_NOTICE([Using "\"$LDFLAGS\"" rpath to link with GMP])
124 if test "$cl_cv_new_gmp_h" = yes; then
126 if test "$cl_cv_new_libgmp" = yes; then
128 AC_DEFINE(CL_USE_GMP)
130 AC_MSG_WARN([The GNU MP library is too old to be used.])
131 CPPFLAGS="$saved_CPPFLAGS"
132 LDFLAGS="$saved_LDFLAGS"
135 AC_MSG_WARN([The header file <gmp.h> is too old to be used.])
136 CPPFLAGS="$saved_CPPFLAGS"
137 LDFLAGS="$saved_LDFLAGS"