From a5549e4cd28abec43c5d589c33e2cd497f26caee Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 25 Nov 2019 16:34:20 +0000 Subject: Tweak visibility of some libtommath symbols and add --with-system-libtommath configure option (as requested by Pietro Cerutti) --- generic/tclStubInit.c | 10 ++++------ generic/tclTomMathDecls.h | 31 +++++++++++++++++++++++++++---- unix/configure | 24 ++++++++++++++++++------ unix/configure.ac | 20 +++++++++++++------- 4 files changed, 62 insertions(+), 23 deletions(-) diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c index 6bdb1e8..040fb32 100644 --- a/generic/tclStubInit.c +++ b/generic/tclStubInit.c @@ -109,7 +109,6 @@ #define TclBN_mp_tc_div_2d mp_signed_rsh #define TclBN_mp_tc_or TclBN_mp_or #define TclBN_mp_tc_xor TclBN_mp_xor -#define TclBN_mp_toradix_n mp_toradix_n #define TclBN_mp_to_radix mp_to_radix #define TclBN_mp_to_ubin mp_to_ubin #define TclBN_mp_ubin_size mp_ubin_size @@ -142,14 +141,14 @@ static int TclSockMinimumBuffersOld(int sock, int size) mp_err TclBN_mp_set_int(mp_int *a, unsigned long i) { - mp_set_u64(a, i); + TclBN_mp_set_u64(a, i); return MP_OKAY; } static mp_err TclBN_mp_set_long(mp_int *a, unsigned long i) { - mp_set_u64(a, i); - return MP_OKAY; + TclBN_mp_set_u64(a, i); + return MP_OKAY; } #define TclBN_mp_set_ul (void (*)(mp_int *a, unsigned long i))TclBN_mp_set_long @@ -198,7 +197,6 @@ mp_err TclBN_mp_mul_d(const mp_int *a, unsigned int b, mp_int *c) { # define TclBN_mp_expt_d_ex 0 # define TclBN_mp_to_unsigned_bin 0 # define TclBN_mp_to_unsigned_bin_n 0 -# undef TclBN_mp_toradix_n # define TclBN_mp_toradix_n 0 # undef TclBN_mp_sqr # define TclBN_mp_sqr 0 @@ -283,7 +281,7 @@ mp_err TclBN_mp_init_l(mp_int *a, long b) } void TclBN_mp_set(mp_int *a, unsigned int b) { - mp_set_u64(a, b); + TclBN_mp_set_u64(a, b); } mp_err TclBN_mp_toradix_n(const mp_int *a, char *str, int radix, int maxlen) diff --git a/generic/tclTomMathDecls.h b/generic/tclTomMathDecls.h index b2294be..f199a2a 100644 --- a/generic/tclTomMathDecls.h +++ b/generic/tclTomMathDecls.h @@ -56,15 +56,16 @@ # define MODULE_SCOPE extern #endif -MODULE_SCOPE void TclBN_s_mp_reverse(unsigned char *s, size_t len); MODULE_SCOPE mp_err TclBN_s_mp_add_d(const mp_int *a, mp_digit b, mp_int *c); MODULE_SCOPE mp_ord TclBN_s_mp_cmp_d(const mp_int *a, mp_digit b); -MODULE_SCOPE mp_err TclBN_s_mp_sub_d(const mp_int *a, mp_digit b, mp_int *c); MODULE_SCOPE mp_err TclBN_s_mp_div_d(const mp_int *a, mp_digit b, mp_int *c, mp_digit *d); -MODULE_SCOPE mp_err TclBN_s_mp_init_set(mp_int *a, mp_digit b); +MODULE_SCOPE mp_err TclBN_s_mp_div_3(const mp_int *a, mp_int *c, mp_digit *b); +MODULE_SCOPE mp_err TclBN_s_mp_expt_u32(const mp_int *a, uint32_t b, mp_int *c); +MODULE_SCOPE mp_err TclBN_s_mp_init_set(mp_int *a, mp_digit b); MODULE_SCOPE mp_err TclBN_s_mp_mul_d(const mp_int *a, mp_digit b, mp_int *c); +MODULE_SCOPE void TclBN_s_mp_reverse(unsigned char *s, size_t len); MODULE_SCOPE void TclBN_s_mp_set(mp_int *a, mp_digit b); -MODULE_SCOPE mp_err TclBN_s_mp_expt_u32(const mp_int *a, unsigned int b, mp_int *c); +MODULE_SCOPE mp_err TclBN_s_mp_sub_d(const mp_int *a, mp_digit b, mp_int *c); /* Rename the global symbols in libtommath to avoid linkage conflicts */ @@ -72,33 +73,40 @@ MODULE_SCOPE mp_err TclBN_s_mp_expt_u32(const mp_int *a, unsigned int b, mp_int #ifndef TCL_WITH_EXTERNAL_TOMMATH #define bn_reverse TclBN_reverse #define mp_add TclBN_mp_add +#define mp_add_d TclBN_s_mp_add_d #define mp_and TclBN_mp_and #define mp_clamp TclBN_mp_clamp #define mp_clear TclBN_mp_clear #define mp_clear_multi TclBN_mp_clear_multi #define mp_cmp TclBN_mp_cmp +#define mp_cmp_d TclBN_s_mp_cmp_d #define mp_cmp_mag TclBN_mp_cmp_mag #define mp_cnt_lsb TclBN_mp_cnt_lsb #define mp_copy TclBN_mp_copy #define mp_count_bits TclBN_mp_count_bits #define mp_div TclBN_mp_div +#define mp_div_d TclBN_s_mp_div_d #define mp_div_2 TclBN_mp_div_2 +#define mp_div_3 TclBN_s_mp_div_3 #define mp_div_2d TclBN_mp_div_2d #define mp_exch TclBN_mp_exch #define mp_expt_d TclBN_mp_expt_d #define mp_expt_d_ex TclBN_mp_expt_d_ex +#define mp_expt_u32 TclBN_s_mp_expt_u32 #define mp_get_mag_u64 TclBN_mp_get_mag_u64 #define mp_grow TclBN_mp_grow #define mp_init TclBN_mp_init #define mp_init_copy TclBN_mp_init_copy #define mp_init_i64 TclBN_mp_init_i64 #define mp_init_multi TclBN_mp_init_multi +#define mp_init_set TclBN_s_mp_init_set #define mp_init_size TclBN_mp_init_size #define mp_init_u64 TclBN_mp_init_u64 #define mp_lshd TclBN_mp_lshd #define mp_mod TclBN_mp_mod #define mp_mod_2d TclBN_mp_mod_2d #define mp_mul TclBN_mp_mul +#define mp_mul_d TclBN_s_mp_mul_d #define mp_mul_2 TclBN_mp_mul_2 #define mp_mul_2d TclBN_mp_mul_2d #define mp_neg TclBN_mp_neg @@ -106,10 +114,17 @@ MODULE_SCOPE mp_err TclBN_s_mp_expt_u32(const mp_int *a, unsigned int b, mp_int #define mp_radix_size TclBN_mp_radix_size #define mp_read_radix TclBN_mp_read_radix #define mp_rshd TclBN_mp_rshd +#define mp_s_rmap TclBN_mp_s_rmap +#define mp_s_rmap_reverse TclBN_mp_s_rmap_reverse +#define mp_s_rmap_reverse_sz TclBN_mp_s_rmap_reverse_sz +#define mp_set TclBN_s_mp_set #define mp_set_i64 TclBN_mp_set_i64 +#define mp_set_u64 TclBN_mp_set_u64 #define mp_shrink TclBN_mp_shrink +#define mp_sqr TclBN_mp_sqr #define mp_sqrt TclBN_mp_sqrt #define mp_sub TclBN_mp_sub +#define mp_sub_d TclBN_s_mp_sub_d #define mp_signed_rsh TclBN_mp_signed_rsh #define mp_tc_and TclBN_mp_and #define mp_tc_div_2d TclBN_mp_signed_rsh @@ -651,17 +666,25 @@ extern const TclTomMathStubs *tclTomMathStubsPtr; /* !END!: Do not edit above this line. */ #if defined(USE_TCL_STUBS) +#undef mp_add_d #define mp_add_d TclBN_mp_add_d +#undef mp_cmp_d #define mp_cmp_d TclBN_mp_cmp_d +#undef mp_div_d #ifdef MP_64BIT #define mp_div_d TclBN_mp_div_ld #else #define mp_div_d TclBN_mp_div_d #endif +#undef mp_sub_d #define mp_sub_d TclBN_mp_sub_d +#undef mp_init_set #define mp_init_set TclBN_mp_init_set +#undef mp_mul_d #define mp_mul_d TclBN_mp_mul_d +#undef mp_set #define mp_set TclBN_mp_set +#undef mp_expt_u32 #define mp_expt_u32 TclBN_mp_expt_u32 #endif /* USE_TCL_STUBS */ diff --git a/unix/configure b/unix/configure index 2950bf8..0c3da63 100755 --- a/unix/configure +++ b/unix/configure @@ -771,6 +771,7 @@ enable_man_compression enable_man_suffix with_encoding enable_shared +with_system_libtommath enable_64bit enable_64bit_vis enable_rpath @@ -1430,6 +1431,9 @@ Optional Packages: --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-encoding encoding for configuration values (default: iso8859-1) + --with-system-libtommath + use external libtommath (default: true if available, + false otherwise) --with-tzdata install timezone data (default: autodetect) Some influential environment variables: @@ -4659,10 +4663,17 @@ $as_echo "#define HAVE_ZLIB 1" >>confdefs.h # Add stuff for libtommath libtommath_ok=yes -ac_fn_c_check_header_mongrel "$LINENO" "tommath.h" "ac_cv_header_tommath_h" "$ac_includes_default" + +# Check whether --with-system-libtommath was given. +if test "${with_system_libtommath+set}" = set; then : + withval=$with_system_libtommath; libtommath_ok=${withval} +fi + +if test x"${libtommath_ok}" == x -o x"${libtommath_ok}" != xno; then + ac_fn_c_check_header_mongrel "$LINENO" "tommath.h" "ac_cv_header_tommath_h" "$ac_includes_default" if test "x$ac_cv_header_tommath_h" = xyes; then : - ac_fn_c_check_type "$LINENO" "mp_int" "ac_cv_type_mp_int" "#include + ac_fn_c_check_type "$LINENO" "mp_int" "ac_cv_type_mp_int" "#include " if test "x$ac_cv_type_mp_int" = xyes; then : @@ -4672,13 +4683,13 @@ fi else - libtommath_ok=no + libtommath_ok=no fi -if test $libtommath_ok = yes; then : + if test $libtommath_ok = yes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing mp_log_u32" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing mp_log_u32" >&5 $as_echo_n "checking for library containing mp_log_u32... " >&6; } if ${ac_cv_search_mp_log_u32+:} false; then : $as_echo_n "(cached) " >&6 @@ -4734,11 +4745,12 @@ if test "$ac_res" != no; then : else - libtommath_ok=no + libtommath_ok=no fi fi +fi if test $libtommath_ok = yes; then : diff --git a/unix/configure.ac b/unix/configure.ac index e60af9a..e12cfc5 100644 --- a/unix/configure.ac +++ b/unix/configure.ac @@ -171,13 +171,19 @@ AC_DEFINE(HAVE_ZLIB, 1, [Is there an installed zlib?]) # Add stuff for libtommath libtommath_ok=yes -AC_CHECK_HEADER([tommath.h],[ - AC_CHECK_TYPE([mp_int],[],[libtommath_ok=no],[#include ])],[ - libtommath_ok=no]) -AS_IF([test $libtommath_ok = yes], [ - AC_SEARCH_LIBS([mp_log_u32],[tommath],[],[ - libtommath_ok=no - ])]) +AC_ARG_WITH(system-libtommath, +AC_HELP_STRING([--with-system-libtommath], + [use external libtommath (default: true if available, false otherwise)]), + libtommath_ok=${withval}) +if test x"${libtommath_ok}" == x -o x"${libtommath_ok}" != xno; then + AC_CHECK_HEADER([tommath.h],[ + AC_CHECK_TYPE([mp_int],[],[libtommath_ok=no],[#include ])],[ + libtommath_ok=no]) + AS_IF([test $libtommath_ok = yes], [ + AC_SEARCH_LIBS([mp_log_u32],[tommath],[],[ + libtommath_ok=no + ])]) +fi AS_IF([test $libtommath_ok = yes], [ AC_DEFINE(TCL_WITH_EXTERNAL_TOMMATH, 1, [Tcl with external libtommath]) ], [ -- cgit v0.12