summaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorJames Youngman <jay@gnu.org>2008-07-31 09:58:10 +0200
committerJim Meyering <meyering@redhat.com>2008-08-01 11:15:05 +0200
commit00c6aacf318a6ef0db4895b08d572d924eab90d0 (patch)
treee53d30cb5bd35e02b7d26401da670e75b691f070 /m4
parent8d974b00fbbc2025de63e1e6d54827648fefa1c4 (diff)
downloadcoreutils-00c6aacf318a6ef0db4895b08d572d924eab90d0.tar.xz
factor arbitrarily large numbers
* m4/gmp.m4: New file; adds cu_GMP, which detects GNU MP. * configure.ac: Use cu_GMP. * src/Makefile.am: Link factor against libgmp if available. * src/factor.c: Use GNU MP if it is available. (emit_factor, emit_ul_factor, factor_using_division, factor_using_pollard_rho, extract_factors_multi, sort_and_print_factors, free_factors): new functions for the arbitrary-precision implementation, taken from an example in GNU MP. (factor_wheel): Renamed; was called factor. (print_factors_single): Renamed; was called print_factors. (print_factors): New function, chooses between the single- and arbitrary-precision algorithms according to availability of GNU MP and the length of the number to be factored. (usage, main): New options --bignum and --no-bignum. * coreutils.texi (factor invocation): Document new command-line options for the MP implementation and update the performance numbers to take into account the asymptotically faster algorithm. * TODO: Remove item about factoring large primes (it's done). * m4/gmp.m4: Add support for --without-gmp. * NEWS: Mention the new feature.
Diffstat (limited to 'm4')
-rw-r--r--m4/gmp.m436
1 files changed, 36 insertions, 0 deletions
diff --git a/m4/gmp.m4 b/m4/gmp.m4
new file mode 100644
index 000000000..3e6033d47
--- /dev/null
+++ b/m4/gmp.m4
@@ -0,0 +1,36 @@
+# Tests for GNU GMP (or any compatible replacement).
+
+dnl Copyright (C) 2008 Free Software Foundation, Inc.
+
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by James Youngman.
+
+dnl Check for libgmp. We avoid use of AC_CHECK_LIBS because we don't want to
+dnl add this to $LIBS for all targets.
+AC_DEFUN([cu_GMP],
+[
+ LIB_GMP=
+ AC_SUBST([LIB_GMP])
+
+ AC_ARG_WITH([gmp],
+ AS_HELP_STRING([--without-gmp],
+ [do not use the GNU MP library for arbitrary precision
+ calculation (default: use it if available)]),
+ [cu_use_gmp=$withval],
+ [cu_use_gmp=auto])
+
+ if test $cu_use_gmp != no; then
+ cu_saved_libs=$LIBS
+ AC_SEARCH_LIBS([__gmpz_init], [gmp],
+ [test "$ac_cv_search___gmpz_init" = "none required" ||
+ {
+ LIB_GMP=$ac_cv_search___gmpz_init
+ AC_DEFINE([HAVE_GMP], 1,
+ [Define if you have GNU libgmp (or replacement)])
+ }])
+ LIBS=$cu_saved_libs
+ fi
+])