X Tutup
Skip to content

Commit 0486570

Browse files
authored
bpo-45798: Move _decimal build setup into configure (pythonGH-29541)
Settings for :mod:`decimal` internal C extension are now detected by :program:`configure`. The bundled `libmpdec` library is built in ``Makefile``. Signed-off-by: Christian Heimes <christian@python.org>
1 parent 4c792f3 commit 0486570

File tree

7 files changed

+313
-112
lines changed

7 files changed

+313
-112
lines changed

Makefile.pre.in

Lines changed: 100 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,47 @@ LIBRARY_OBJS= \
496496
DTRACE_DEPS = \
497497
Python/ceval.o Python/import.o Python/sysmodule.o Modules/gcmodule.o
498498

499+
##########################################################################
500+
# decimal's libmpdec
501+
502+
LIBMPDEC_OBJS= \
503+
Modules/_decimal/libmpdec/basearith.o \
504+
Modules/_decimal/libmpdec/constants.o \
505+
Modules/_decimal/libmpdec/context.o \
506+
Modules/_decimal/libmpdec/convolute.o \
507+
Modules/_decimal/libmpdec/crt.o \
508+
Modules/_decimal/libmpdec/difradix2.o \
509+
Modules/_decimal/libmpdec/fnt.o \
510+
Modules/_decimal/libmpdec/fourstep.o \
511+
Modules/_decimal/libmpdec/io.o \
512+
Modules/_decimal/libmpdec/mpalloc.o \
513+
Modules/_decimal/libmpdec/mpdecimal.o \
514+
Modules/_decimal/libmpdec/numbertheory.o \
515+
Modules/_decimal/libmpdec/sixstep.o \
516+
Modules/_decimal/libmpdec/transpose.o
517+
# _decimal does not use signaling API
518+
# Modules/_decimal/libmpdec/mpsignal.o
519+
520+
LIBMPDEC_HEADERS= \
521+
$(srcdir)/Modules/_decimal/libmpdec/basearith.h \
522+
$(srcdir)/Modules/_decimal/libmpdec/bits.h \
523+
$(srcdir)/Modules/_decimal/libmpdec/constants.h \
524+
$(srcdir)/Modules/_decimal/libmpdec/convolute.h \
525+
$(srcdir)/Modules/_decimal/libmpdec/crt.h \
526+
$(srcdir)/Modules/_decimal/libmpdec/difradix2.h \
527+
$(srcdir)/Modules/_decimal/libmpdec/fnt.h \
528+
$(srcdir)/Modules/_decimal/libmpdec/fourstep.h \
529+
$(srcdir)/Modules/_decimal/libmpdec/io.h \
530+
$(srcdir)/Modules/_decimal/libmpdec/mpalloc.h \
531+
$(srcdir)/Modules/_decimal/libmpdec/mpdecimal.h \
532+
$(srcdir)/Modules/_decimal/libmpdec/numbertheory.h \
533+
$(srcdir)/Modules/_decimal/libmpdec/sixstep.h \
534+
$(srcdir)/Modules/_decimal/libmpdec/transpose.h \
535+
$(srcdir)/Modules/_decimal/libmpdec/typearith.h \
536+
$(srcdir)/Modules/_decimal/libmpdec/umodarith.h
537+
538+
LIBMPDEC_A= Modules/_decimal/libmpdec/libmpdec.a
539+
499540
#########################################################################
500541
# Rules
501542

@@ -647,7 +688,7 @@ $(srcdir)/Modules/_blake2/blake2s_impl.c: $(srcdir)/Modules/_blake2/blake2b_impl
647688
# -s, --silent or --quiet is always the first char.
648689
# Under BSD make, MAKEFLAGS might be " -s -v x=y".
649690
# Ignore macros passed by GNU make, passed after --
650-
sharedmods: $(BUILDPYTHON) pybuilddir.txt
691+
sharedmods: $(BUILDPYTHON) pybuilddir.txt @LIBMPDEC_INTERNAL@
651692
@case "`echo X $$MAKEFLAGS | sed 's/^X //;s/ -- .*//'`" in \
652693
*\ -s*|s*) quiet="-q";; \
653694
*) quiet="";; \
@@ -729,6 +770,63 @@ $(DLLLIBRARY) libpython$(LDVERSION).dll.a: $(LIBRARY_OBJS)
729770
else true; \
730771
fi
731772

773+
##########################################################################
774+
# Build static libmpdec.a
775+
LIBMPDEC_CFLAGS=$(PY_STDMODULE_CFLAGS) $(CCSHARED) @LIBMPDEC_CFLAGS@
776+
777+
# for setup.py
778+
DECIMAL_CFLAGS=@LIBMPDEC_CFLAGS@
779+
DECIMAL_LDFLAGS=@LIBMPDEC_LDFLAGS@
780+
781+
# "%.o: %c" is not portable
782+
Modules/_decimal/libmpdec/basearith.o: $(srcdir)/Modules/_decimal/libmpdec/basearith.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
783+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/basearith.c
784+
785+
Modules/_decimal/libmpdec/constants.o: $(srcdir)/Modules/_decimal/libmpdec/constants.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
786+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/constants.c
787+
788+
Modules/_decimal/libmpdec/context.o: $(srcdir)/Modules/_decimal/libmpdec/context.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
789+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/context.c
790+
791+
Modules/_decimal/libmpdec/convolute.o: $(srcdir)/Modules/_decimal/libmpdec/convolute.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
792+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/convolute.c
793+
794+
Modules/_decimal/libmpdec/crt.o: $(srcdir)/Modules/_decimal/libmpdec/crt.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
795+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/crt.c
796+
797+
Modules/_decimal/libmpdec/difradix2.o: $(srcdir)/Modules/_decimal/libmpdec/difradix2.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
798+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/difradix2.c
799+
800+
Modules/_decimal/libmpdec/fnt.o: $(srcdir)/Modules/_decimal/libmpdec/fnt.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
801+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/fnt.c
802+
803+
Modules/_decimal/libmpdec/fourstep.o: $(srcdir)/Modules/_decimal/libmpdec/fourstep.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
804+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/fourstep.c
805+
806+
Modules/_decimal/libmpdec/io.o: $(srcdir)/Modules/_decimal/libmpdec/io.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
807+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/io.c
808+
809+
Modules/_decimal/libmpdec/mpalloc.o: $(srcdir)/Modules/_decimal/libmpdec/mpalloc.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
810+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/mpalloc.c
811+
812+
Modules/_decimal/libmpdec/mpdecimal.o: $(srcdir)/Modules/_decimal/libmpdec/mpdecimal.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
813+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/mpdecimal.c
814+
815+
Modules/_decimal/libmpdec/mpsignal.o: $(srcdir)/Modules/_decimal/libmpdec/mpsignal.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
816+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/mpsignal.c
817+
818+
Modules/_decimal/libmpdec/numbertheory.o: $(srcdir)/Modules/_decimal/libmpdec/numbertheory.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
819+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/numbertheory.c
820+
821+
Modules/_decimal/libmpdec/sixstep.o: $(srcdir)/Modules/_decimal/libmpdec/sixstep.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
822+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/sixstep.c
823+
824+
Modules/_decimal/libmpdec/transpose.o: $(srcdir)/Modules/_decimal/libmpdec/transpose.c $(LIBMPDEC_HEADERS) $(PYTHON_HEADERS)
825+
$(CC) -c $(LIBMPDEC_CFLAGS) -o $@ $(srcdir)/Modules/_decimal/libmpdec/transpose.c
826+
827+
$(LIBMPDEC_A): $(LIBMPDEC_OBJS)
828+
-rm -f $@
829+
$(AR) $(ARFLAGS) $@ $(LIBMPDEC_OBJS)
732830

733831
# create relative links from build/lib.platform/egg.so to Modules/egg.so
734832
# pybuilddir.txt is created too late. We cannot use it in Makefile
@@ -2313,7 +2411,7 @@ MODULE_PYEXPAT_DEPS=$(srcdir)/Modules/expat/ascii.h $(srcdir)/Modules/expat/asci
23132411
MODULE_UNICODEDATA_DEPS=$(srcdir)/Modules/unicodedata_db.h $(srcdir)/Modules/unicodename_db.h
23142412
MODULE__BLAKE2_DEPS=$(srcdir)/Modules/_blake2/impl/blake2-config.h $(srcdir)/Modules/_blake2/impl/blake2-dispatch.c $(srcdir)/Modules/_blake2/impl/blake2-impl.h $(srcdir)/Modules/_blake2/impl/blake2-kat.h $(srcdir)/Modules/_blake2/impl/blake2.h $(srcdir)/Modules/_blake2/impl/blake2b-load-sse2.h $(srcdir)/Modules/_blake2/impl/blake2b-load-sse41.h $(srcdir)/Modules/_blake2/impl/blake2b-ref.c $(srcdir)/Modules/_blake2/impl/blake2b-round.h $(srcdir)/Modules/_blake2/impl/blake2b-test.c $(srcdir)/Modules/_blake2/impl/blake2b.c $(srcdir)/Modules/_blake2/impl/blake2bp-test.c $(srcdir)/Modules/_blake2/impl/blake2bp.c $(srcdir)/Modules/_blake2/impl/blake2s-load-sse2.h $(srcdir)/Modules/_blake2/impl/blake2s-load-sse41.h $(srcdir)/Modules/_blake2/impl/blake2s-load-xop.h $(srcdir)/Modules/_blake2/impl/blake2s-ref.c $(srcdir)/Modules/_blake2/impl/blake2s-round.h $(srcdir)/Modules/_blake2/impl/blake2s-test.c $(srcdir)/Modules/_blake2/impl/blake2s.c $(srcdir)/Modules/_blake2/impl/blake2sp-test.c $(srcdir)/Modules/_blake2/impl/blake2sp.c $(srcdir)/Modules/hashlib.h
23152413
MODULE__CTYPES_DEPS=$(srcdir)/Modules/_ctypes/ctypes.h
2316-
MODULE__DECIMAL_DEPS=$(srcdir)/Modules/_decimal/docstrings.h $(srcdir)/Modules/_decimal/libmpdec/basearith.h $(srcdir)/Modules/_decimal/libmpdec/bits.h $(srcdir)/Modules/_decimal/libmpdec/constants.h $(srcdir)/Modules/_decimal/libmpdec/convolute.h $(srcdir)/Modules/_decimal/libmpdec/crt.h $(srcdir)/Modules/_decimal/libmpdec/difradix2.h $(srcdir)/Modules/_decimal/libmpdec/fnt.h $(srcdir)/Modules/_decimal/libmpdec/fourstep.h $(srcdir)/Modules/_decimal/libmpdec/io.h $(srcdir)/Modules/_decimal/libmpdec/mpalloc.h $(srcdir)/Modules/_decimal/libmpdec/mpdecimal.h $(srcdir)/Modules/_decimal/libmpdec/numbertheory.h $(srcdir)/Modules/_decimal/libmpdec/sixstep.h $(srcdir)/Modules/_decimal/libmpdec/transpose.h $(srcdir)/Modules/_decimal/libmpdec/typearith.h $(srcdir)/Modules/_decimal/libmpdec/umodarith.h
2414+
MODULE__DECIMAL_DEPS=$(srcdir)/Modules/_decimal/docstrings.h $(LIBMPDEC_HEADERS) @LIBMPDEC_INTERNAL@
23172415
MODULE__ELEMENTTREE_DEPS=$(srcdir)/Modules/expat/ascii.h $(srcdir)/Modules/expat/asciitab.h $(srcdir)/Modules/expat/expat.h $(srcdir)/Modules/expat/expat_config.h $(srcdir)/Modules/expat/expat_external.h $(srcdir)/Modules/expat/internal.h $(srcdir)/Modules/expat/latin1tab.h $(srcdir)/Modules/expat/utf8tab.h $(srcdir)/Modules/expat/xmlparse.c $(srcdir)/Modules/expat/xmlrole.c $(srcdir)/Modules/expat/xmlrole.h $(srcdir)/Modules/expat/xmltok.c $(srcdir)/Modules/expat/xmltok.h $(srcdir)/Modules/expat/xmltok_impl.h $(srcdir)/Modules/pyexpat.c
23182416
MODULE__HASHLIB_DEPS=$(srcdir)/Modules/hashlib.h
23192417
MODULE__IO_DEPS=$(srcdir)/Modules/_io/_iomodule.h
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Settings for :mod:`decimal` internal C extension are now detected by
2+
``configure``. The bundled ``libmpdec`` library is built in ``Makefile``.

Modules/Setup

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,7 @@ time timemodule.c
149149
#_contextvars _contextvarsmodule.c
150150
#_csv _csv.c
151151
#_datetime _datetimemodule.c
152-
# UNIVERSAL: let mpdecimal.h detect settings
153-
#_decimal -DUNIVERSAL -I$(srcdir)/Modules/_decimal/libmpdec _decimal/_decimal.c _decimal/libmpdec/basearith.c _decimal/libmpdec/constants.c _decimal/libmpdec/context.c _decimal/libmpdec/convolute.c _decimal/libmpdec/crt.c _decimal/libmpdec/difradix2.c _decimal/libmpdec/fnt.c _decimal/libmpdec/fourstep.c _decimal/libmpdec/io.c _decimal/libmpdec/mpalloc.c _decimal/libmpdec/mpdecimal.c _decimal/libmpdec/numbertheory.c _decimal/libmpdec/sixstep.c _decimal/libmpdec/transpose.c
152+
#_decimal _decimal/_decimal.c $(DECIMAL_CFLAGS) $(DECIMAL_LDFLAGS)
154153
#_heapq _heapqmodule.c
155154
#_json _json.c
156155
#_lsprof _lsprof.c rotatingtree.c

Modules/makesetup

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,11 @@ sed -e 's/[ ]*#.*//' -e '/^[ ]*$/d' |
184184
*.c++) srcs="$srcs $arg";;
185185
*.cxx) srcs="$srcs $arg";;
186186
*.cpp) srcs="$srcs $arg";;
187+
\$\(*_CFLAGS\)) cpps="$cpps $arg";;
188+
\$\(*_INCLUDES\)) cpps="$cpps $arg";;
189+
\$\(*_LIBS\)) libs="$libs $arg";;
190+
\$\(*_LDFLAGS\)) libs="$libs $arg";;
191+
\$\(*_RPATH\)) libs="$libs $arg";;
187192
\$*) libs="$libs $arg"
188193
cpps="$cpps $arg";;
189194
*.*) echo 1>&2 "bad word $arg in $line"

configure

Lines changed: 112 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,9 @@ DFLAGS
660660
DTRACE
661661
TCLTK_LIBS
662662
TCLTK_INCLUDES
663+
LIBMPDEC_INTERNAL
664+
LIBMPDEC_LDFLAGS
665+
LIBMPDEC_CFLAGS
663666
LIBFFI_INCLUDEDIR
664667
TZPATH
665668
SHLIBS
@@ -1533,7 +1536,8 @@ Optional Features:
15331536
Optional Packages:
15341537
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
15351538
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
1536-
--with-pkg-config use pkg-config to detect build options (default is
1539+
--with-pkg-config=[yes|no|check]
1540+
use pkg-config to detect build options (default is
15371541
check)
15381542
--with-universal-archs=ARCH
15391543
specify the kind of macOS universal binary that
@@ -10764,10 +10768,27 @@ else
1076410768
with_system_libmpdec="no"
1076510769
fi
1076610770

10767-
1076810771
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_system_libmpdec" >&5
1076910772
$as_echo "$with_system_libmpdec" >&6; }
1077010773

10774+
if test "x$with_system_libmpdec" = xyes; then :
10775+
10776+
LIBMPDEC_CFLAGS=""
10777+
LIBMPDEC_LDFLAGS="-lmpdec"
10778+
LIBMPDEC_INTERNAL=
10779+
10780+
else
10781+
10782+
LIBMPDEC_CFLAGS="-I\$(srcdir)/Modules/_decimal/libmpdec"
10783+
LIBMPDEC_LDFLAGS="-lm \$(LIBMPDEC_A)"
10784+
LIBMPDEC_INTERNAL="\$(LIBMPDEC_A)"
10785+
10786+
fi
10787+
10788+
10789+
10790+
10791+
1077110792
# Check whether _decimal should use a coroutine-local or thread-local context
1077210793
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-decimal-contextvar" >&5
1077310794
$as_echo_n "checking for --with-decimal-contextvar... " >&6; }
@@ -10790,6 +10811,95 @@ fi
1079010811
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_decimal_contextvar" >&5
1079110812
$as_echo "$with_decimal_contextvar" >&6; }
1079210813

10814+
# Check for libmpdec machine flavor
10815+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for decimal libmpdec machine" >&5
10816+
$as_echo_n "checking for decimal libmpdec machine... " >&6; }
10817+
case $ac_sys_system in #(
10818+
Darwin*) :
10819+
libmpdec_system=Darwin ;; #(
10820+
SunOS*) :
10821+
libmpdec_system=sunos ;; #(
10822+
*) :
10823+
libmpdec_system=other
10824+
;;
10825+
esac
10826+
10827+
libmpdec_machine=unknown
10828+
if test "$libmpdec_system" = Darwin; then
10829+
case $MACOSX_DEFAULT_ARCH in #(
10830+
i386) :
10831+
libmpdec_machine=ansi32 ;; #(
10832+
ppc) :
10833+
libmpdec_machine=ansi32 ;; #(
10834+
x86_64) :
10835+
libmpdec_machine=x64 ;; #(
10836+
ppc64) :
10837+
libmpdec_machine=ansi64 ;; #(
10838+
arm64) :
10839+
libmpdec_machine=ansi64 ;; #(
10840+
*) :
10841+
libmpdec_machine=universal
10842+
;;
10843+
esac
10844+
elif test $ac_cv_sizeof_size_t -eq 8; then
10845+
if test "$ac_cv_gcc_asm_for_x64" = yes; then
10846+
libmpdec_machine=x64
10847+
elif test "$ac_cv_type___uint128_t" = yes; then
10848+
libmpdec_machine=uint128
10849+
else
10850+
libmpdec_machine=ansi64
10851+
fi
10852+
elif test $ac_cv_sizeof_size_t -eq 4; then
10853+
if test "$ac_cv_gcc_asm_for_x87" = yes -a "$libmpdec_system" != sunos; then
10854+
case $CC in #(
10855+
*gcc*) :
10856+
libmpdec_machine=ppro ;; #(
10857+
*clang*) :
10858+
libmpdec_machine=ppro ;; #(
10859+
*) :
10860+
libmpdec_machine=ansi32
10861+
;;
10862+
esac
10863+
else
10864+
libmpdec_machine=ansi32
10865+
fi
10866+
fi
10867+
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libmpdec_machine" >&5
10868+
$as_echo "$libmpdec_machine" >&6; }
10869+
10870+
case $libmpdec_machine in #(
10871+
x64) :
10872+
as_fn_append LIBMPDEC_CFLAGS " -DCONFIG_64=1 -DASM=1" ;; #(
10873+
uint128) :
10874+
as_fn_append LIBMPDEC_CFLAGS " -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1" ;; #(
10875+
ansi64) :
10876+
as_fn_append LIBMPDEC_CFLAGS " -DCONFIG_64=1 -DANSI=1" ;; #(
10877+
ppro) :
10878+
as_fn_append LIBMPDEC_CFLAGS " -DCONFIG_32=1 -DANSI=1 -DASM=1 -Wno-unknown-pragmas" ;; #(
10879+
ansi32) :
10880+
as_fn_append LIBMPDEC_CFLAGS " -DCONFIG_32=1 -DANSI=1" ;; #(
10881+
ansi-legacy) :
10882+
as_fn_append LIBMPDEC_CFLAGS " -DCONFIG_32=1 -DANSI=1 -DLEGACY_COMPILER=1" ;; #(
10883+
universal) :
10884+
as_fn_append LIBMPDEC_CFLAGS " -DUNIVERSAL=1" ;; #(
10885+
*) :
10886+
as_fn_error $? "_decimal: unsupported architecture" "$LINENO" 5
10887+
;;
10888+
esac
10889+
10890+
if test "$have_ipa_pure_const_bug" = yes; then
10891+
# Some versions of gcc miscompile inline asm:
10892+
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=46491
10893+
# https://gcc.gnu.org/ml/gcc/2010-11/msg00366.html
10894+
as_fn_append LIBMPDEC_CFLAGS " -fno-ipa-pure-const"
10895+
fi
10896+
10897+
if test "$have_glibc_memmove_bug" = yes; then
10898+
# _FORTIFY_SOURCE wrappers for memmove and bcopy are incorrect:
10899+
# https://sourceware.org/ml/libc-alpha/2010-12/msg00009.html
10900+
as_fn_append LIBMPDEC_CFLAGS " -U_FORTIFY_SOURCE"
10901+
fi
10902+
1079310903
# Check for support for loadable sqlite extensions
1079410904
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-loadable-sqlite-extensions" >&5
1079510905
$as_echo_n "checking for --enable-loadable-sqlite-extensions... " >&6; }

configure.ac

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3057,9 +3057,22 @@ AC_ARG_WITH(system_libmpdec,
30573057
AS_HELP_STRING([--with-system-libmpdec], [build _decimal module using an installed libmpdec library, see Doc/library/decimal.rst (default is no)]),
30583058
[],
30593059
[with_system_libmpdec="no"])
3060-
30613060
AC_MSG_RESULT($with_system_libmpdec)
30623061

3062+
AS_VAR_IF([with_system_libmpdec], [yes], [
3063+
LIBMPDEC_CFLAGS=""
3064+
LIBMPDEC_LDFLAGS="-lmpdec"
3065+
LIBMPDEC_INTERNAL=
3066+
], [
3067+
LIBMPDEC_CFLAGS="-I\$(srcdir)/Modules/_decimal/libmpdec"
3068+
LIBMPDEC_LDFLAGS="-lm \$(LIBMPDEC_A)"
3069+
LIBMPDEC_INTERNAL="\$(LIBMPDEC_A)"
3070+
])
3071+
3072+
AC_SUBST([LIBMPDEC_CFLAGS])
3073+
AC_SUBST([LIBMPDEC_LDFLAGS])
3074+
AC_SUBST([LIBMPDEC_INTERNAL])
3075+
30633076
# Check whether _decimal should use a coroutine-local or thread-local context
30643077
AC_MSG_CHECKING(for --with-decimal-contextvar)
30653078
AC_ARG_WITH(decimal_contextvar,
@@ -3075,6 +3088,69 @@ fi
30753088

30763089
AC_MSG_RESULT($with_decimal_contextvar)
30773090

3091+
# Check for libmpdec machine flavor
3092+
AC_MSG_CHECKING(for decimal libmpdec machine)
3093+
AS_CASE([$ac_sys_system],
3094+
[Darwin*], [libmpdec_system=Darwin],
3095+
[SunOS*], [libmpdec_system=sunos],
3096+
[libmpdec_system=other]
3097+
)
3098+
3099+
libmpdec_machine=unknown
3100+
if test "$libmpdec_system" = Darwin; then
3101+
AS_CASE([$MACOSX_DEFAULT_ARCH],
3102+
[i386], [libmpdec_machine=ansi32],
3103+
[ppc], [libmpdec_machine=ansi32],
3104+
[x86_64], [libmpdec_machine=x64],
3105+
[ppc64], [libmpdec_machine=ansi64],
3106+
[arm64], [libmpdec_machine=ansi64],
3107+
[libmpdec_machine=universal]
3108+
)
3109+
elif test $ac_cv_sizeof_size_t -eq 8; then
3110+
if test "$ac_cv_gcc_asm_for_x64" = yes; then
3111+
libmpdec_machine=x64
3112+
elif test "$ac_cv_type___uint128_t" = yes; then
3113+
libmpdec_machine=uint128
3114+
else
3115+
libmpdec_machine=ansi64
3116+
fi
3117+
elif test $ac_cv_sizeof_size_t -eq 4; then
3118+
if test "$ac_cv_gcc_asm_for_x87" = yes -a "$libmpdec_system" != sunos; then
3119+
AS_CASE([$CC],
3120+
[*gcc*], [libmpdec_machine=ppro],
3121+
[*clang*], [libmpdec_machine=ppro],
3122+
[libmpdec_machine=ansi32]
3123+
)
3124+
else
3125+
libmpdec_machine=ansi32
3126+
fi
3127+
fi
3128+
AC_MSG_RESULT([$libmpdec_machine])
3129+
3130+
AS_CASE([$libmpdec_machine],
3131+
[x64], [AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DCONFIG_64=1 -DASM=1"])],
3132+
[uint128], [AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DCONFIG_64=1 -DANSI=1 -DHAVE_UINT128_T=1"])],
3133+
[ansi64], [AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DCONFIG_64=1 -DANSI=1"])],
3134+
[ppro], [AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DCONFIG_32=1 -DANSI=1 -DASM=1 -Wno-unknown-pragmas"])],
3135+
[ansi32], [AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DCONFIG_32=1 -DANSI=1"])],
3136+
[ansi-legacy], [AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DCONFIG_32=1 -DANSI=1 -DLEGACY_COMPILER=1"])],
3137+
[universal], [AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DUNIVERSAL=1"])],
3138+
[AC_MSG_ERROR([_decimal: unsupported architecture])]
3139+
)
3140+
3141+
if test "$have_ipa_pure_const_bug" = yes; then
3142+
# Some versions of gcc miscompile inline asm:
3143+
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=46491
3144+
# https://gcc.gnu.org/ml/gcc/2010-11/msg00366.html
3145+
AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -fno-ipa-pure-const"])
3146+
fi
3147+
3148+
if test "$have_glibc_memmove_bug" = yes; then
3149+
# _FORTIFY_SOURCE wrappers for memmove and bcopy are incorrect:
3150+
# https://sourceware.org/ml/libc-alpha/2010-12/msg00009.html
3151+
AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -U_FORTIFY_SOURCE"])
3152+
fi
3153+
30783154
# Check for support for loadable sqlite extensions
30793155
AC_MSG_CHECKING(for --enable-loadable-sqlite-extensions)
30803156
AC_ARG_ENABLE(loadable-sqlite-extensions,

0 commit comments

Comments
 (0)
X Tutup