mirror of https://github.com/python/cpython
gh-115119: Detect _decimal dependencies using pkg-config (#115406)
pkg-config is supported for libmpdec 4.0.0 and newer.
This commit is contained in:
parent
ab6eda0ee5
commit
c7e7bfc4ca
|
@ -389,6 +389,17 @@ Options for third-party dependencies
|
||||||
C compiler and linker flags for ``libffi``, used by :mod:`ctypes` module,
|
C compiler and linker flags for ``libffi``, used by :mod:`ctypes` module,
|
||||||
overriding ``pkg-config``.
|
overriding ``pkg-config``.
|
||||||
|
|
||||||
|
.. option:: LIBMPDEC_CFLAGS
|
||||||
|
.. option:: LIBMPDEC_LIBS
|
||||||
|
|
||||||
|
C compiler and linker flags for ``libmpdec``, used by :mod:`decimal` module,
|
||||||
|
overriding ``pkg-config``.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
These environment variables have no effect unless
|
||||||
|
:option:`--with-system-libmpdec` is specified.
|
||||||
|
|
||||||
.. option:: LIBLZMA_CFLAGS
|
.. option:: LIBLZMA_CFLAGS
|
||||||
.. option:: LIBLZMA_LIBS
|
.. option:: LIBLZMA_LIBS
|
||||||
|
|
||||||
|
@ -798,6 +809,8 @@ Libraries options
|
||||||
|
|
||||||
.. versionadded:: 3.3
|
.. versionadded:: 3.3
|
||||||
|
|
||||||
|
.. seealso:: :option:`LIBMPDEC_CFLAGS` and :option:`LIBMPDEC_LIBS`.
|
||||||
|
|
||||||
.. option:: --with-readline=readline|editline
|
.. option:: --with-readline=readline|editline
|
||||||
|
|
||||||
Designate a backend library for the :mod:`readline` module.
|
Designate a backend library for the :mod:`readline` module.
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
:program:`configure` now uses :program:`pkg-config` to detect :mod:`decimal`
|
||||||
|
dependencies if the :option:`--with-system-libmpdec` option is given.
|
|
@ -34,7 +34,19 @@
|
||||||
#include "pycore_pystate.h" // _PyThreadState_GET()
|
#include "pycore_pystate.h" // _PyThreadState_GET()
|
||||||
#include "pycore_typeobject.h"
|
#include "pycore_typeobject.h"
|
||||||
#include "complexobject.h"
|
#include "complexobject.h"
|
||||||
#include "mpdecimal.h"
|
|
||||||
|
#include <mpdecimal.h>
|
||||||
|
|
||||||
|
// Reuse config from mpdecimal.h if present.
|
||||||
|
#if defined(MPD_CONFIG_64)
|
||||||
|
#ifndef CONFIG_64
|
||||||
|
#define CONFIG_64 MPD_CONFIG_64
|
||||||
|
#endif
|
||||||
|
#elif defined(MPD_CONFIG_32)
|
||||||
|
#ifndef CONFIG_32
|
||||||
|
#define CONFIG_32 MPD_CONFIG_32
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <ctype.h> // isascii()
|
#include <ctype.h> // isascii()
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
|
@ -880,6 +880,7 @@ TCLTK_CFLAGS
|
||||||
LIBSQLITE3_LIBS
|
LIBSQLITE3_LIBS
|
||||||
LIBSQLITE3_CFLAGS
|
LIBSQLITE3_CFLAGS
|
||||||
LIBMPDEC_INTERNAL
|
LIBMPDEC_INTERNAL
|
||||||
|
LIBMPDEC_LIBS
|
||||||
LIBMPDEC_CFLAGS
|
LIBMPDEC_CFLAGS
|
||||||
MODULE__CTYPES_MALLOC_CLOSURE
|
MODULE__CTYPES_MALLOC_CLOSURE
|
||||||
LIBFFI_LIBS
|
LIBFFI_LIBS
|
||||||
|
@ -1148,6 +1149,8 @@ LIBUUID_CFLAGS
|
||||||
LIBUUID_LIBS
|
LIBUUID_LIBS
|
||||||
LIBFFI_CFLAGS
|
LIBFFI_CFLAGS
|
||||||
LIBFFI_LIBS
|
LIBFFI_LIBS
|
||||||
|
LIBMPDEC_CFLAGS
|
||||||
|
LIBMPDEC_LIBS
|
||||||
LIBSQLITE3_CFLAGS
|
LIBSQLITE3_CFLAGS
|
||||||
LIBSQLITE3_LIBS
|
LIBSQLITE3_LIBS
|
||||||
TCLTK_CFLAGS
|
TCLTK_CFLAGS
|
||||||
|
@ -1969,6 +1972,10 @@ Some influential environment variables:
|
||||||
LIBFFI_CFLAGS
|
LIBFFI_CFLAGS
|
||||||
C compiler flags for LIBFFI, overriding pkg-config
|
C compiler flags for LIBFFI, overriding pkg-config
|
||||||
LIBFFI_LIBS linker flags for LIBFFI, overriding pkg-config
|
LIBFFI_LIBS linker flags for LIBFFI, overriding pkg-config
|
||||||
|
LIBMPDEC_CFLAGS
|
||||||
|
C compiler flags for LIBMPDEC, overriding pkg-config
|
||||||
|
LIBMPDEC_LIBS
|
||||||
|
linker flags for LIBMPDEC, overriding pkg-config
|
||||||
LIBSQLITE3_CFLAGS
|
LIBSQLITE3_CFLAGS
|
||||||
C compiler flags for LIBSQLITE3, overriding pkg-config
|
C compiler flags for LIBSQLITE3, overriding pkg-config
|
||||||
LIBSQLITE3_LIBS
|
LIBSQLITE3_LIBS
|
||||||
|
@ -14591,28 +14598,92 @@ printf "%s\n" "$with_system_libmpdec" >&6; }
|
||||||
if test "x$with_system_libmpdec" = xyes
|
if test "x$with_system_libmpdec" = xyes
|
||||||
then :
|
then :
|
||||||
|
|
||||||
|
pkg_failed=no
|
||||||
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libmpdec" >&5
|
||||||
|
printf %s "checking for libmpdec... " >&6; }
|
||||||
|
|
||||||
|
if test -n "$LIBMPDEC_CFLAGS"; then
|
||||||
|
pkg_cv_LIBMPDEC_CFLAGS="$LIBMPDEC_CFLAGS"
|
||||||
|
elif test -n "$PKG_CONFIG"; then
|
||||||
|
if test -n "$PKG_CONFIG" && \
|
||||||
|
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmpdec\""; } >&5
|
||||||
|
($PKG_CONFIG --exists --print-errors "libmpdec") 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||||
|
test $ac_status = 0; }; then
|
||||||
|
pkg_cv_LIBMPDEC_CFLAGS=`$PKG_CONFIG --cflags "libmpdec" 2>/dev/null`
|
||||||
|
test "x$?" != "x0" && pkg_failed=yes
|
||||||
|
else
|
||||||
|
pkg_failed=yes
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
pkg_failed=untried
|
||||||
|
fi
|
||||||
|
if test -n "$LIBMPDEC_LIBS"; then
|
||||||
|
pkg_cv_LIBMPDEC_LIBS="$LIBMPDEC_LIBS"
|
||||||
|
elif test -n "$PKG_CONFIG"; then
|
||||||
|
if test -n "$PKG_CONFIG" && \
|
||||||
|
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmpdec\""; } >&5
|
||||||
|
($PKG_CONFIG --exists --print-errors "libmpdec") 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||||
|
test $ac_status = 0; }; then
|
||||||
|
pkg_cv_LIBMPDEC_LIBS=`$PKG_CONFIG --libs "libmpdec" 2>/dev/null`
|
||||||
|
test "x$?" != "x0" && pkg_failed=yes
|
||||||
|
else
|
||||||
|
pkg_failed=yes
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
pkg_failed=untried
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if test $pkg_failed = yes; then
|
||||||
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||||
|
printf "%s\n" "no" >&6; }
|
||||||
|
|
||||||
|
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
|
||||||
|
_pkg_short_errors_supported=yes
|
||||||
|
else
|
||||||
|
_pkg_short_errors_supported=no
|
||||||
|
fi
|
||||||
|
if test $_pkg_short_errors_supported = yes; then
|
||||||
|
LIBMPDEC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libmpdec" 2>&1`
|
||||||
|
else
|
||||||
|
LIBMPDEC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libmpdec" 2>&1`
|
||||||
|
fi
|
||||||
|
# Put the nasty error message in config.log where it belongs
|
||||||
|
echo "$LIBMPDEC_PKG_ERRORS" >&5
|
||||||
|
|
||||||
LIBMPDEC_CFLAGS=${LIBMPDEC_CFLAGS-""}
|
LIBMPDEC_CFLAGS=${LIBMPDEC_CFLAGS-""}
|
||||||
LIBMPDEC_LDFLAGS=${LIBMPDEC_LDFLAGS-"-lmpdec"}
|
LIBMPDEC_LIBS=${LIBMPDEC_LIBS-"-lmpdec -lm"}
|
||||||
LIBMPDEC_INTERNAL=
|
LIBMPDEC_INTERNAL=
|
||||||
|
elif test $pkg_failed = untried; then
|
||||||
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||||
|
printf "%s\n" "no" >&6; }
|
||||||
|
LIBMPDEC_CFLAGS=${LIBMPDEC_CFLAGS-""}
|
||||||
|
LIBMPDEC_LIBS=${LIBMPDEC_LIBS-"-lmpdec -lm"}
|
||||||
|
LIBMPDEC_INTERNAL=
|
||||||
|
else
|
||||||
|
LIBMPDEC_CFLAGS=$pkg_cv_LIBMPDEC_CFLAGS
|
||||||
|
LIBMPDEC_LIBS=$pkg_cv_LIBMPDEC_LIBS
|
||||||
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||||
|
printf "%s\n" "yes" >&6; }
|
||||||
|
|
||||||
|
fi
|
||||||
else $as_nop
|
else $as_nop
|
||||||
|
|
||||||
LIBMPDEC_CFLAGS="-I\$(srcdir)/Modules/_decimal/libmpdec"
|
LIBMPDEC_CFLAGS="-I\$(srcdir)/Modules/_decimal/libmpdec"
|
||||||
LIBMPDEC_LDFLAGS="-lm \$(LIBMPDEC_A)"
|
LIBMPDEC_LIBS="-lm \$(LIBMPDEC_A)"
|
||||||
LIBMPDEC_INTERNAL="\$(LIBMPDEC_HEADERS) \$(LIBMPDEC_A)"
|
LIBMPDEC_INTERNAL="\$(LIBMPDEC_HEADERS) \$(LIBMPDEC_A)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Disable forced inlining in debug builds, see GH-94847
|
||||||
if test "x$with_pydebug" = xyes
|
if test "x$with_pydebug" = xyes
|
||||||
then :
|
then :
|
||||||
|
|
||||||
as_fn_append LIBMPDEC_CFLAGS " -DTEST_COVERAGE"
|
as_fn_append LIBMPDEC_CFLAGS " -DTEST_COVERAGE"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Check whether _decimal should use a coroutine-local or thread-local context
|
# Check whether _decimal should use a coroutine-local or thread-local context
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-decimal-contextvar" >&5
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for --with-decimal-contextvar" >&5
|
||||||
printf %s "checking for --with-decimal-contextvar... " >&6; }
|
printf %s "checking for --with-decimal-contextvar... " >&6; }
|
||||||
|
@ -14636,6 +14707,8 @@ fi
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_decimal_contextvar" >&5
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_decimal_contextvar" >&5
|
||||||
printf "%s\n" "$with_decimal_contextvar" >&6; }
|
printf "%s\n" "$with_decimal_contextvar" >&6; }
|
||||||
|
|
||||||
|
if test "x$with_system_libmpdec" = xno
|
||||||
|
then :
|
||||||
# Check for libmpdec machine flavor
|
# Check for libmpdec machine flavor
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for decimal libmpdec machine" >&5
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for decimal libmpdec machine" >&5
|
||||||
printf %s "checking for decimal libmpdec machine... " >&6; }
|
printf %s "checking for decimal libmpdec machine... " >&6; }
|
||||||
|
@ -14699,6 +14772,7 @@ case $libmpdec_machine in #(
|
||||||
as_fn_error $? "_decimal: unsupported architecture" "$LINENO" 5
|
as_fn_error $? "_decimal: unsupported architecture" "$LINENO" 5
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$have_ipa_pure_const_bug" = yes; then
|
if test "$have_ipa_pure_const_bug" = yes; then
|
||||||
# Some versions of gcc miscompile inline asm:
|
# Some versions of gcc miscompile inline asm:
|
||||||
|
@ -14717,6 +14791,9 @@ fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if test "$ac_sys_system" = "Emscripten" -a -z "$LIBSQLITE3_CFLAGS" -a -z "$LIBSQLITE3_LIBS"
|
if test "$ac_sys_system" = "Emscripten" -a -z "$LIBSQLITE3_CFLAGS" -a -z "$LIBSQLITE3_LIBS"
|
||||||
then :
|
then :
|
||||||
|
|
||||||
|
@ -30310,7 +30387,7 @@ fi
|
||||||
then :
|
then :
|
||||||
|
|
||||||
as_fn_append MODULE_BLOCK "MODULE__DECIMAL_CFLAGS=$LIBMPDEC_CFLAGS$as_nl"
|
as_fn_append MODULE_BLOCK "MODULE__DECIMAL_CFLAGS=$LIBMPDEC_CFLAGS$as_nl"
|
||||||
as_fn_append MODULE_BLOCK "MODULE__DECIMAL_LDFLAGS=$LIBMPDEC_LDFLAGS$as_nl"
|
as_fn_append MODULE_BLOCK "MODULE__DECIMAL_LDFLAGS=$LIBMPDEC_LIBS$as_nl"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
if test "$py_cv_module__decimal" = yes; then
|
if test "$py_cv_module__decimal" = yes; then
|
||||||
|
|
41
configure.ac
41
configure.ac
|
@ -3961,23 +3961,21 @@ AC_ARG_WITH(
|
||||||
[with_system_libmpdec="no"])
|
[with_system_libmpdec="no"])
|
||||||
AC_MSG_RESULT([$with_system_libmpdec])
|
AC_MSG_RESULT([$with_system_libmpdec])
|
||||||
|
|
||||||
AS_VAR_IF([with_system_libmpdec], [yes], [
|
AS_VAR_IF(
|
||||||
LIBMPDEC_CFLAGS=${LIBMPDEC_CFLAGS-""}
|
[with_system_libmpdec], [yes],
|
||||||
LIBMPDEC_LDFLAGS=${LIBMPDEC_LDFLAGS-"-lmpdec"}
|
[PKG_CHECK_MODULES(
|
||||||
LIBMPDEC_INTERNAL=
|
[LIBMPDEC], [libmpdec], [],
|
||||||
], [
|
[LIBMPDEC_CFLAGS=${LIBMPDEC_CFLAGS-""}
|
||||||
LIBMPDEC_CFLAGS="-I\$(srcdir)/Modules/_decimal/libmpdec"
|
LIBMPDEC_LIBS=${LIBMPDEC_LIBS-"-lmpdec -lm"}
|
||||||
LIBMPDEC_LDFLAGS="-lm \$(LIBMPDEC_A)"
|
LIBMPDEC_INTERNAL=])],
|
||||||
LIBMPDEC_INTERNAL="\$(LIBMPDEC_HEADERS) \$(LIBMPDEC_A)"
|
[LIBMPDEC_CFLAGS="-I\$(srcdir)/Modules/_decimal/libmpdec"
|
||||||
|
LIBMPDEC_LIBS="-lm \$(LIBMPDEC_A)"
|
||||||
|
LIBMPDEC_INTERNAL="\$(LIBMPDEC_HEADERS) \$(LIBMPDEC_A)"])
|
||||||
|
|
||||||
dnl Disable forced inlining in debug builds, see GH-94847
|
# Disable forced inlining in debug builds, see GH-94847
|
||||||
AS_VAR_IF([with_pydebug], [yes], [
|
AS_VAR_IF(
|
||||||
AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DTEST_COVERAGE"])
|
[with_pydebug], [yes],
|
||||||
])
|
[AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DTEST_COVERAGE"])])
|
||||||
])
|
|
||||||
|
|
||||||
AC_SUBST([LIBMPDEC_CFLAGS])
|
|
||||||
AC_SUBST([LIBMPDEC_INTERNAL])
|
|
||||||
|
|
||||||
# Check whether _decimal should use a coroutine-local or thread-local context
|
# Check whether _decimal should use a coroutine-local or thread-local context
|
||||||
AC_MSG_CHECKING([for --with-decimal-contextvar])
|
AC_MSG_CHECKING([for --with-decimal-contextvar])
|
||||||
|
@ -3998,7 +3996,9 @@ fi
|
||||||
|
|
||||||
AC_MSG_RESULT([$with_decimal_contextvar])
|
AC_MSG_RESULT([$with_decimal_contextvar])
|
||||||
|
|
||||||
# Check for libmpdec machine flavor
|
AS_VAR_IF(
|
||||||
|
[with_system_libmpdec], [no],
|
||||||
|
[# Check for libmpdec machine flavor
|
||||||
AC_MSG_CHECKING([for decimal libmpdec machine])
|
AC_MSG_CHECKING([for decimal libmpdec machine])
|
||||||
AS_CASE([$ac_sys_system],
|
AS_CASE([$ac_sys_system],
|
||||||
[Darwin*], [libmpdec_system=Darwin],
|
[Darwin*], [libmpdec_system=Darwin],
|
||||||
|
@ -4041,7 +4041,7 @@ AS_CASE([$libmpdec_machine],
|
||||||
[ansi-legacy], [AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DCONFIG_32=1 -DANSI=1 -DLEGACY_COMPILER=1"])],
|
[ansi-legacy], [AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DCONFIG_32=1 -DANSI=1 -DLEGACY_COMPILER=1"])],
|
||||||
[universal], [AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DUNIVERSAL=1"])],
|
[universal], [AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -DUNIVERSAL=1"])],
|
||||||
[AC_MSG_ERROR([_decimal: unsupported architecture])]
|
[AC_MSG_ERROR([_decimal: unsupported architecture])]
|
||||||
)
|
)])
|
||||||
|
|
||||||
if test "$have_ipa_pure_const_bug" = yes; then
|
if test "$have_ipa_pure_const_bug" = yes; then
|
||||||
# Some versions of gcc miscompile inline asm:
|
# Some versions of gcc miscompile inline asm:
|
||||||
|
@ -4056,6 +4056,9 @@ if test "$have_glibc_memmove_bug" = yes; then
|
||||||
AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -U_FORTIFY_SOURCE"])
|
AS_VAR_APPEND([LIBMPDEC_CFLAGS], [" -U_FORTIFY_SOURCE"])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AC_SUBST([LIBMPDEC_CFLAGS])
|
||||||
|
AC_SUBST([LIBMPDEC_INTERNAL])
|
||||||
|
|
||||||
|
|
||||||
dnl detect sqlite3 from Emscripten emport
|
dnl detect sqlite3 from Emscripten emport
|
||||||
PY_CHECK_EMSCRIPTEN_PORT([LIBSQLITE3], [-sUSE_SQLITE3])
|
PY_CHECK_EMSCRIPTEN_PORT([LIBSQLITE3], [-sUSE_SQLITE3])
|
||||||
|
@ -7643,7 +7646,7 @@ PY_STDLIB_MOD([_curses_panel],
|
||||||
[], [test "$have_panel" != "no"],
|
[], [test "$have_panel" != "no"],
|
||||||
[$PANEL_CFLAGS $CURSES_CFLAGS], [$PANEL_LIBS $CURSES_LIBS]
|
[$PANEL_CFLAGS $CURSES_CFLAGS], [$PANEL_LIBS $CURSES_LIBS]
|
||||||
)
|
)
|
||||||
PY_STDLIB_MOD([_decimal], [], [], [$LIBMPDEC_CFLAGS], [$LIBMPDEC_LDFLAGS])
|
PY_STDLIB_MOD([_decimal], [], [], [$LIBMPDEC_CFLAGS], [$LIBMPDEC_LIBS])
|
||||||
PY_STDLIB_MOD([_dbm],
|
PY_STDLIB_MOD([_dbm],
|
||||||
[test -n "$with_dbmliborder"], [test "$have_dbm" != "no"],
|
[test -n "$with_dbmliborder"], [test "$have_dbm" != "no"],
|
||||||
[$DBM_CFLAGS], [$DBM_LIBS])
|
[$DBM_CFLAGS], [$DBM_LIBS])
|
||||||
|
|
Loading…
Reference in New Issue