-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
Description
_tkinter.c currently uses the functions mp_to_unsigned_bin_n() and mp_unsigned_bin_size(), which were deprecated in libtommath 1.2.0 and replaced by new functions mp_to_ubin() and mp_ubin_size().
The deprecated functions are removed from future libtommath and Tcl 9.0, leaving _tkinter.c unable to build:
./Modules/_tkinter.c:1089:16: error: call to undeclared function 'mp_unsigned_bin_size'; ISO C99 and later do not support implicit function declarations [-Werror,-Wimplicit-function-declaration]
numBytes = mp_unsigned_bin_size(&bigValue);
^
./Modules/_tkinter.c:1095:9: error: call to undeclared function 'TclBN_mp_to_unsigned_bin_n'; ISO C99 and later do not support implicit function declarations [-Werror,-Wimplicit-function-declaration]
if (mp_to_unsigned_bin_n(&bigValue, bytes,
^
/Users/user/tcl90p/include/tclTomMathDecls.h:153:30: note: expanded from macro 'mp_to_unsigned_bin_n'
#define mp_to_unsigned_bin_n TclBN_mp_to_unsigned_bin_n
^
TIP 538 says that Tcl 8.7/9.0 can build against external libtommath 1.2.0 or later. So if TCL_WITH_EXTERNAL_TOMMATH is defined, or if TCL_MAJOR_VERSION >= 9, then mp_to_ubin() and mp_ubin_size() should be available.
Even though mp_to_ubin() and mp_ubin_size() have been available since Tcl 8.6.10 (the first release to bundle libtommath 1.2.0), mp_to_ubin() was added as a new ABI, unlike mp_ubin_size() which was added by having the existing ABI for mp_unsigned_bin_size() return size_t instead of int. So Tkinter presumably could use the new functions when built with Tcl 8.6.10 through 8.7 only if there is no expectation for that build to work with Tcl 8.5.12 through 8.6.9; otherwise the deprecated functions can continue to be used for Tcl < 9.
Note that Tcl 8.7 with bundled libtommath currently only warns about mp_to_unsigned_bin_n() being deprecated:
./Modules/_tkinter.c:1099:9: warning: 'TclBN_mp_to_unsigned_bin_n' is deprecated [-Wdeprecated-declarations]
if (mp_to_unsigned_bin_n(&bigValue, bytes,
^
/Users/user/tcl87p/include/tclTomMathDecls.h:150:30: note: expanded from macro 'mp_to_unsigned_bin_n'
#define mp_to_unsigned_bin_n TclBN_mp_to_unsigned_bin_n
^
/Users/user/tcl87p/include/tclTomMathDecls.h:316:1: note: 'TclBN_mp_to_unsigned_bin_n' has been explicitly marked deprecated here
TCL_DEPRECATED("Use mp_to_ubin")
^
/Users/user/tcl87p/include/tclDecls.h:33:37: note: expanded from macro 'TCL_DEPRECATED'
# define TCL_DEPRECATED(msg) EXTERN TCL_DEPRECATED_API(msg)
^
/Users/user/tcl87p/include/tcl.h:181:50: note: expanded from macro 'TCL_DEPRECATED_API'
# define TCL_DEPRECATED_API(msg) __attribute__ ((__deprecated__))
^