diff --git a/m4/Makefile.am b/m4/Makefile.am
index 577b171abb4e0413751311f2ea180fec85fe605d..350cd5fee52f73e1637a12c367edc3f8a8860dfa 100644
--- a/m4/Makefile.am
+++ b/m4/Makefile.am
@@ -12,6 +12,7 @@ ALLM4S = acx_blas.m4 acx_lapack.m4 acx_mpi.m4 acx_pthread.m4 \
 	 dune.m4 \
          dune_mpi.m4 dune_streams.m4 \
          f5.m4 fortran_overwrite.m4 hdf5.m4 \
+	 gmp.m4							\
          immdx_lib_metis.m4 inkscape.m4 mpi-config.m4 opengl.m4 \
          pardiso.m4 parmetis.m4 static_assert.m4 shared_ptr.m4 superlu-dist.m4 \
 	 superlu.m4 xdr.m4
diff --git a/m4/gmp.m4 b/m4/gmp.m4
new file mode 100644
index 0000000000000000000000000000000000000000..7dafaacdc9a094eec126bc283e826a9770fbb5be
--- /dev/null
+++ b/m4/gmp.m4
@@ -0,0 +1,43 @@
+AC_DEFUN([DUNE_PATH_GMP],[
+  AC_REQUIRE([AC_PROG_CXX])
+
+  AC_ARG_WITH(gmp,
+    AS_HELP_STRING([--with-gmp=PATH],
+                   [directory to GMP (GNU MP Bignum Library)]))
+  AS_IF([test x$with_gmp = x],[with_gmp=/usr])
+
+  HAVE_GMP=no
+  GMP_CPPFLAGS="-I$with_gmp/include -DENABLE_GMP=1"
+  GMP_LIBS="-L$with_gmp/libs -lgmpxx -lgmp"
+
+  AC_LANG_PUSH([C++])
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  ac_save_LIBS="$LIBS"
+
+  CPPFLAGS="$CPPFLAGS $GMP_CPPFLAGS"
+  LIBS="$LIBS $GMP_LIBS"
+
+  AC_CHECK_HEADER([gmpxx.h], [HAVE_GMP=yes],
+    AC_MSG_WARN([gmpxx.h not found in $with_gmp]))
+
+  AS_IF([test $HAVE_GMP = yes],[
+    AC_CHECK_LIB(gmp,[__gmpz_abs],[],[
+      HAVE_GMP=no
+      AC_MSG_WARN(libgmp not found)])
+  ])
+
+  CPPFLAGS="$ac_save_CPPFLAGS"
+  LIBS="$ac_save_LIBS"
+  AC_LANG_POP([C++])
+
+  AS_IF([test $HAVE_GMP = yes],[
+    AC_DEFINE([HAVE_GMP],[ENABLE_GMP],[Was GMP found and GMP_CPPFLAGS used?])
+    AC_SUBST([GMP_CPPFLAGS],[$GMP_CPPFLAGS])
+    AC_SUBST([GMP_LIBS],[$GMP_LIBS])
+    DUNE_PKG_CPPFLAGS="$DUNE_PKG_CPPFLAGS $GMP_CPPFLAGS"
+    DUNE_PKG_LIBS="$DUNE_PKG_LIBS $GMP_LIBS"
+  ])
+
+  AM_CONDITIONAL(GMP,[test $HAVE_GMP = yes])
+  DUNE_ADD_SUMMARY_ENTRY([GMP],[$HAVE_GMP])
+])