Skip to content

Commit 9eb3b14

Browse files
skirpichevAA-Turnerzware
authored
gh-115119: Removed bundled copy of the libmpdec (GH-133964)
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com> Co-authored-by: Zachary Ware <zach@python.org>
1 parent e667d62 commit 9eb3b14

71 files changed

Lines changed: 103 additions & 21957 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/posix-deps-apt.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ apt-get -yq --no-install-recommends install \
2727
zlib1g-dev
2828

2929
# Workaround missing libmpdec-dev on ubuntu 24.04 by building mpdecimal
30-
# from source. ppa:ondrej/php (launchpad.net) are unreliable
30+
# from source. ppa:ondrej/php (launchpad.net) are unreliable
3131
# (https://status.canonical.com) so fetch the tarball directly
3232
# from the upstream host.
3333
# https://www.bytereef.org/mpdecimal/

Doc/tools/removed-ids.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ c-api/file.html: deprecated-api
66

77
library/asyncio-task.html: terminating-a-task-group
88

9+
# Removed libmpdec
10+
using/configure.html: cmdoption-with-system-libmpdec
11+
912
# Removed APIs
1013
library/symtable.html: symtable.Class.get_methods
11-
library/sys.html: sys._enablelegacywindowsfsencoding
14+
library/sys.html: sys._enablelegacywindowsfsencoding

Doc/using/configure.rst

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ Dependencies to build optional modules are:
112112

113113
.. [1] If *libmpdec* is not available, the :mod:`decimal` module will use
114114
a pure-Python implementation.
115-
See :option:`--with-system-libmpdec` for details.
116115
.. [2] See :option:`--with-readline` for choosing the backend for the
117116
:mod:`readline` module.
118117
.. [3] The :mod:`uuid` module uses ``_uuid`` to generate "safe" UUIDs.
@@ -553,11 +552,6 @@ Options for third-party dependencies
553552
C compiler and linker flags for ``libmpdec``, used by :mod:`decimal` module,
554553
overriding ``pkg-config``.
555554

556-
.. note::
557-
558-
These environment variables have no effect unless
559-
:option:`--with-system-libmpdec` is specified.
560-
561555
.. option:: LIBLZMA_CFLAGS
562556
.. option:: LIBLZMA_LIBS
563557

@@ -1067,29 +1061,6 @@ Libraries options
10671061
Build the :mod:`!pyexpat` module using an installed ``expat`` library
10681062
(default is no).
10691063

1070-
.. option:: --with-system-libmpdec
1071-
1072-
Build the ``_decimal`` extension module using an installed ``mpdecimal``
1073-
library, see the :mod:`decimal` module (default is yes).
1074-
1075-
.. versionadded:: 3.3
1076-
1077-
.. versionchanged:: 3.13
1078-
Default to using the installed ``mpdecimal`` library.
1079-
1080-
.. versionchanged:: 3.15
1081-
1082-
A bundled copy of the library will no longer be selected
1083-
implicitly if an installed ``mpdecimal`` library is not found.
1084-
In Python 3.15 only, it can still be selected explicitly using
1085-
``--with-system-libmpdec=no`` or ``--without-system-libmpdec``.
1086-
1087-
.. deprecated-removed:: 3.13 3.16
1088-
A copy of the ``mpdecimal`` library sources will no longer be distributed
1089-
with Python 3.16.
1090-
1091-
.. seealso:: :option:`LIBMPDEC_CFLAGS` and :option:`LIBMPDEC_LIBS`.
1092-
10931064
.. option:: --with-readline=readline|editline
10941065

10951066
Designate a backend library for the :mod:`readline` module.

Doc/whatsnew/3.13.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2597,7 +2597,7 @@ Build Changes
25972597

25982598
.. _mimalloc library: https://github.com/microsoft/mimalloc/
25992599

2600-
* The :file:`configure` option :option:`--with-system-libmpdec`
2600+
* The :file:`configure` option :option:`!--with-system-libmpdec`
26012601
now defaults to ``yes``.
26022602
The bundled copy of ``libmpdec`` will be removed in Python 3.16.
26032603

Doc/whatsnew/3.15.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2626,7 +2626,7 @@ Build changes
26262626
=============
26272627

26282628
* Removed implicit fallback to the bundled copy of the ``libmpdec`` library.
2629-
Now this should be explicitly enabled with :option:`--with-system-libmpdec`
2629+
Now this should be explicitly enabled with :option:`!--with-system-libmpdec`
26302630
set to ``no`` or with :option:`!--without-system-libmpdec`.
26312631
(Contributed by Sergey B Kirpichev in :gh:`115119`.)
26322632

Doc/whatsnew/3.16.rst

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,17 @@ that may require changes to your code.
191191
Build changes
192192
=============
193193

194+
* Remove the bundled copy of the libmpdec_ decimal library from the CPython source tree
195+
to simplify maintenence and updates. The :mod:`decimal` module will now
196+
unconditionally use the system's libmpdec decimal library. Also remove the
197+
now unused :option:`!--with-system-libmpdec` :program:`configure` flag.
198+
This change has no impact on binary releases of Python, which have been
199+
built against a separate copy of libmpdec for the past several releases.
200+
201+
(Contributed by Sergey B Kirpichev in :gh:`115119`.)
202+
203+
.. _libmpdec: https://www.bytereef.org/mpdecimal/
204+
194205

195206
C API changes
196207
=============

Mac/BuildScript/build-installer.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1158,7 +1158,6 @@ def buildPython():
11581158
print(" NOTE: --with-mimalloc=no pending resolution of weak linking issues")
11591159
runCommand("%s -C --enable-framework --enable-universalsdk=/ "
11601160
"--with-mimalloc=no "
1161-
"--with-system-libmpdec "
11621161
"--with-universal-archs=%s "
11631162
"%s "
11641163
"%s "

Makefile.pre.in

Lines changed: 0 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,6 @@ RUNSHARED= @RUNSHARED@
231231
ENSUREPIP= @ENSUREPIP@
232232

233233
# Internal static libraries
234-
LIBMPDEC_A= Modules/_decimal/libmpdec/libmpdec.a
235234
LIBEXPAT_A= Modules/expat/libexpat.a
236235

237236
# HACL* build configuration
@@ -606,45 +605,6 @@ LINK_PYTHON_OBJS=@LINK_PYTHON_OBJS@
606605
DTRACE_DEPS = \
607606
Python/ceval.o Python/gc.o Python/import.o Python/sysmodule.o
608607

609-
##########################################################################
610-
# decimal's libmpdec
611-
612-
LIBMPDEC_OBJS= \
613-
Modules/_decimal/libmpdec/basearith.o \
614-
Modules/_decimal/libmpdec/constants.o \
615-
Modules/_decimal/libmpdec/context.o \
616-
Modules/_decimal/libmpdec/convolute.o \
617-
Modules/_decimal/libmpdec/crt.o \
618-
Modules/_decimal/libmpdec/difradix2.o \
619-
Modules/_decimal/libmpdec/fnt.o \
620-
Modules/_decimal/libmpdec/fourstep.o \
621-
Modules/_decimal/libmpdec/io.o \
622-
Modules/_decimal/libmpdec/mpalloc.o \
623-
Modules/_decimal/libmpdec/mpdecimal.o \
624-
Modules/_decimal/libmpdec/numbertheory.o \
625-
Modules/_decimal/libmpdec/sixstep.o \
626-
Modules/_decimal/libmpdec/transpose.o
627-
# _decimal does not use signaling API
628-
# Modules/_decimal/libmpdec/mpsignal.o
629-
630-
LIBMPDEC_HEADERS= \
631-
$(srcdir)/Modules/_decimal/libmpdec/basearith.h \
632-
$(srcdir)/Modules/_decimal/libmpdec/bits.h \
633-
$(srcdir)/Modules/_decimal/libmpdec/constants.h \
634-
$(srcdir)/Modules/_decimal/libmpdec/convolute.h \
635-
$(srcdir)/Modules/_decimal/libmpdec/crt.h \
636-
$(srcdir)/Modules/_decimal/libmpdec/difradix2.h \
637-
$(srcdir)/Modules/_decimal/libmpdec/fnt.h \
638-
$(srcdir)/Modules/_decimal/libmpdec/fourstep.h \
639-
$(srcdir)/Modules/_decimal/libmpdec/io.h \
640-
$(srcdir)/Modules/_decimal/libmpdec/mpalloc.h \
641-
$(srcdir)/Modules/_decimal/libmpdec/mpdecimal.h \
642-
$(srcdir)/Modules/_decimal/libmpdec/numbertheory.h \
643-
$(srcdir)/Modules/_decimal/libmpdec/sixstep.h \
644-
$(srcdir)/Modules/_decimal/libmpdec/transpose.h \
645-
$(srcdir)/Modules/_decimal/libmpdec/typearith.h \
646-
$(srcdir)/Modules/_decimal/libmpdec/umodarith.h
647-
648608
##########################################################################
649609
# pyexpat's expat library
650610

@@ -962,7 +922,6 @@ coverage-lcov:
962922
@lcov $(COVERAGE_LCOV_OPTIONS) --remove $(COVERAGE_INFO) \
963923
'*/Modules/_hacl/*' \
964924
'*/Modules/_ctypes/libffi*/*' \
965-
'*/Modules/_decimal/libmpdec/*' \
966925
'*/Modules/expat/*' \
967926
'*/Modules/xx*.c' \
968927
'*/Python/pyfpe.c' \
@@ -1471,60 +1430,6 @@ PYTHON_HEADERS= \
14711430
\
14721431
$(srcdir)/Python/stdlib_module_names.h
14731432

1474-
##########################################################################
1475-
# Build static libmpdec.a
1476-
LIBMPDEC_CFLAGS=@LIBMPDEC_CFLAGS@ $(PY_STDMODULE_CFLAGS) $(CCSHARED)
1477-
1478-
# "%.o: %c" is not portable
1479-
Modules/_decimal/libmpdec/basearith.o: $(srcdir)/Modules/_decimal/libmpdec/basearith.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1480-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/basearith.c
1481-
1482-
Modules/_decimal/libmpdec/constants.o: $(srcdir)/Modules/_decimal/libmpdec/constants.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1483-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/constants.c
1484-
1485-
Modules/_decimal/libmpdec/context.o: $(srcdir)/Modules/_decimal/libmpdec/context.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1486-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/context.c
1487-
1488-
Modules/_decimal/libmpdec/convolute.o: $(srcdir)/Modules/_decimal/libmpdec/convolute.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1489-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/convolute.c
1490-
1491-
Modules/_decimal/libmpdec/crt.o: $(srcdir)/Modules/_decimal/libmpdec/crt.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1492-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/crt.c
1493-
1494-
Modules/_decimal/libmpdec/difradix2.o: $(srcdir)/Modules/_decimal/libmpdec/difradix2.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1495-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/difradix2.c
1496-
1497-
Modules/_decimal/libmpdec/fnt.o: $(srcdir)/Modules/_decimal/libmpdec/fnt.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1498-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/fnt.c
1499-
1500-
Modules/_decimal/libmpdec/fourstep.o: $(srcdir)/Modules/_decimal/libmpdec/fourstep.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1501-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/fourstep.c
1502-
1503-
Modules/_decimal/libmpdec/io.o: $(srcdir)/Modules/_decimal/libmpdec/io.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1504-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/io.c
1505-
1506-
Modules/_decimal/libmpdec/mpalloc.o: $(srcdir)/Modules/_decimal/libmpdec/mpalloc.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1507-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/mpalloc.c
1508-
1509-
Modules/_decimal/libmpdec/mpdecimal.o: $(srcdir)/Modules/_decimal/libmpdec/mpdecimal.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1510-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/mpdecimal.c
1511-
1512-
Modules/_decimal/libmpdec/mpsignal.o: $(srcdir)/Modules/_decimal/libmpdec/mpsignal.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1513-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/mpsignal.c
1514-
1515-
Modules/_decimal/libmpdec/numbertheory.o: $(srcdir)/Modules/_decimal/libmpdec/numbertheory.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1516-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/numbertheory.c
1517-
1518-
Modules/_decimal/libmpdec/sixstep.o: $(srcdir)/Modules/_decimal/libmpdec/sixstep.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1519-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/sixstep.c
1520-
1521-
Modules/_decimal/libmpdec/transpose.o: $(srcdir)/Modules/_decimal/libmpdec/transpose.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
1522-
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/transpose.c
1523-
1524-
$(LIBMPDEC_A): $(LIBMPDEC_OBJS)
1525-
-rm -f $@
1526-
$(AR) $(ARFLAGS) $@ $(LIBMPDEC_OBJS)
1527-
15281433
##########################################################################
15291434
# Build static libexpat.a
15301435
LIBEXPAT_CFLAGS=@LIBEXPAT_CFLAGS@ $(PY_STDMODULE_CFLAGS) $(CCSHARED)
@@ -3501,7 +3406,6 @@ MODULE_UNICODEDATA_DEPS=$(srcdir)/Modules/unicodedata_db.h $(srcdir)/Modules/uni
35013406
MODULE__CTYPES_DEPS=$(srcdir)/Modules/_ctypes/ctypes.h
35023407
MODULE__CTYPES_TEST_DEPS=$(srcdir)/Modules/_ctypes/_ctypes_test_generated.c.h
35033408
MODULE__CTYPES_MALLOC_CLOSURE=@MODULE__CTYPES_MALLOC_CLOSURE@
3504-
MODULE__DECIMAL_DEPS=@LIBMPDEC_INTERNAL@
35053409
MODULE__ELEMENTTREE_DEPS=$(srcdir)/Modules/pyexpat.c @LIBEXPAT_INTERNAL@
35063410
MODULE__HASHLIB_DEPS=$(srcdir)/Modules/hashlib.h
35073411
MODULE__IO_DEPS=$(srcdir)/Modules/_io/_iomodule.h

Misc/NEWS.d/3.12.0a2.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -957,7 +957,7 @@ Fix ``make regen-test-levenshtein`` for out-of-tree builds.
957957
.. nonce: eVXGEx
958958
.. section: Build
959959
960-
Don't use vendored ``libmpdec`` headers if :option:`--with-system-libmpdec`
960+
Don't use vendored ``libmpdec`` headers if :option:`!--with-system-libmpdec`
961961
is passed to :program:`configure`. Don't use vendored ``libexpat`` headers
962962
if :option:`--with-system-expat` is passed to :program:`configure`.
963963

Misc/NEWS.d/3.13.0b1.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,7 +1429,7 @@ script) without specifying a value for ``UseTIER2``.
14291429
.. nonce: LT27pF
14301430
.. section: Build
14311431
1432-
The :file:`configure` option :option:`--with-system-libmpdec` now defaults
1432+
The :file:`configure` option :option:`!--with-system-libmpdec` now defaults
14331433
to ``yes``. The bundled copy of ``libmpdecimal`` will be removed in Python
14341434
3.15.
14351435

@@ -1470,7 +1470,7 @@ Increase WASI stack size from 512 KiB to 8 MiB and the initial memory from
14701470
.. section: Build
14711471
14721472
:program:`configure` now uses :program:`pkg-config` to detect :mod:`decimal`
1473-
dependencies if the :option:`--with-system-libmpdec` option is given.
1473+
dependencies if the :option:`!--with-system-libmpdec` option is given.
14741474

14751475
..
14761476

0 commit comments

Comments
 (0)