mirror of https://github.com/python/cpython
gh-90005: Port _ctypes to PY_STDLIB_MOD (GH-32229)
Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@innova.no> Automerge-Triggered-By: GH:tiran
This commit is contained in:
parent
cc0d5e568e
commit
bb8b931385
|
@ -340,10 +340,6 @@ IO_OBJS= \
|
||||||
Modules/_io/bytesio.o \
|
Modules/_io/bytesio.o \
|
||||||
Modules/_io/stringio.o
|
Modules/_io/stringio.o
|
||||||
|
|
||||||
##########################################################################
|
|
||||||
|
|
||||||
LIBFFI_INCLUDEDIR= @LIBFFI_INCLUDEDIR@
|
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
# Parser
|
# Parser
|
||||||
|
|
||||||
|
@ -2519,14 +2515,15 @@ Python/thread.o: @THREADHEADERS@ $(srcdir)/Python/condvar.h
|
||||||
.PHONY: gdbhooks
|
.PHONY: gdbhooks
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
# Module dependencies
|
# Module dependencies and platform-specific files
|
||||||
|
|
||||||
MODULE_CMATH_DEPS=$(srcdir)/Modules/_math.h
|
MODULE_CMATH_DEPS=$(srcdir)/Modules/_math.h
|
||||||
MODULE_MATH_DEPS=$(srcdir)/Modules/_math.h
|
MODULE_MATH_DEPS=$(srcdir)/Modules/_math.h
|
||||||
MODULE_PYEXPAT_DEPS=$(LIBEXPAT_HEADERS) @LIBEXPAT_INTERNAL@
|
MODULE_PYEXPAT_DEPS=$(LIBEXPAT_HEADERS) @LIBEXPAT_INTERNAL@
|
||||||
MODULE_UNICODEDATA_DEPS=$(srcdir)/Modules/unicodedata_db.h $(srcdir)/Modules/unicodename_db.h
|
MODULE_UNICODEDATA_DEPS=$(srcdir)/Modules/unicodedata_db.h $(srcdir)/Modules/unicodename_db.h
|
||||||
MODULE__BLAKE2_DEPS=$(srcdir)/Modules/_blake2/impl/blake2-config.h $(srcdir)/Modules/_blake2/impl/blake2-impl.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.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.c $(srcdir)/Modules/_blake2/blake2module.h $(srcdir)/Modules/hashlib.h
|
MODULE__BLAKE2_DEPS=$(srcdir)/Modules/_blake2/impl/blake2-config.h $(srcdir)/Modules/_blake2/impl/blake2-impl.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.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.c $(srcdir)/Modules/_blake2/blake2module.h $(srcdir)/Modules/hashlib.h
|
||||||
MODULE__CTYPES_DEPS=$(srcdir)/Modules/_ctypes/ctypes.h
|
MODULE__CTYPES_DEPS=$(srcdir)/Modules/_ctypes/ctypes.h $(srcdir)/Modules/_ctypes/darwin/dlfcn.h
|
||||||
|
MODULE__CTYPES_MALLOC_CLOSURE=@MODULE__CTYPES_MALLOC_CLOSURE@
|
||||||
MODULE__DECIMAL_DEPS=$(srcdir)/Modules/_decimal/docstrings.h $(LIBMPDEC_HEADERS) @LIBMPDEC_INTERNAL@
|
MODULE__DECIMAL_DEPS=$(srcdir)/Modules/_decimal/docstrings.h $(LIBMPDEC_HEADERS) @LIBMPDEC_INTERNAL@
|
||||||
MODULE__ELEMENTTREE_DEPS=$(srcdir)/Modules/pyexpat.c $(LIBEXPAT_HEADERS) @LIBEXPAT_INTERNAL@
|
MODULE__ELEMENTTREE_DEPS=$(srcdir)/Modules/pyexpat.c $(LIBEXPAT_HEADERS) @LIBEXPAT_INTERNAL@
|
||||||
MODULE__HASHLIB_DEPS=$(srcdir)/Modules/hashlib.h
|
MODULE__HASHLIB_DEPS=$(srcdir)/Modules/hashlib.h
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
:mod:`ctypes` dependency ``libffi`` is now detected with ``pkg-config``.
|
|
@ -136,7 +136,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
# needs -lffi and -ldl
|
# needs -lffi and -ldl
|
||||||
#@MODULE__CTYPES_TRUE@_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c
|
@MODULE__CTYPES_TRUE@_ctypes _ctypes/_ctypes.c _ctypes/callbacks.c _ctypes/callproc.c _ctypes/stgdict.c _ctypes/cfield.c @MODULE__CTYPES_MALLOC_CLOSURE@
|
||||||
|
|
||||||
# needs -lncurses, -lncursesw or -lcurses, sometimes -ltermcap
|
# needs -lncurses, -lncursesw or -lcurses, sometimes -ltermcap
|
||||||
#@MODULE__CURSES_TRUE@_curses _cursesmodule.c
|
#@MODULE__CURSES_TRUE@_curses _cursesmodule.c
|
||||||
|
|
|
@ -54,6 +54,9 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef Py_BUILD_CORE_BUILTIN
|
||||||
|
# define Py_BUILD_CORE_MODULE 1
|
||||||
|
#endif
|
||||||
#define NEEDS_PY_IDENTIFIER
|
#define NEEDS_PY_IDENTIFIER
|
||||||
|
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
#ifndef Py_BUILD_CORE_BUILTIN
|
||||||
|
# define Py_BUILD_CORE_MODULE 1
|
||||||
|
#endif
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
#include <ffi.h>
|
#include <ffi.h>
|
||||||
#ifdef MS_WIN32
|
#ifdef MS_WIN32
|
||||||
|
|
|
@ -666,6 +666,8 @@ MODULE__GDBM_FALSE
|
||||||
MODULE__GDBM_TRUE
|
MODULE__GDBM_TRUE
|
||||||
MODULE__DECIMAL_FALSE
|
MODULE__DECIMAL_FALSE
|
||||||
MODULE__DECIMAL_TRUE
|
MODULE__DECIMAL_TRUE
|
||||||
|
MODULE__CTYPES_FALSE
|
||||||
|
MODULE__CTYPES_TRUE
|
||||||
MODULE__CRYPT_FALSE
|
MODULE__CRYPT_FALSE
|
||||||
MODULE__CRYPT_TRUE
|
MODULE__CRYPT_TRUE
|
||||||
MODULE__BLAKE2_FALSE
|
MODULE__BLAKE2_FALSE
|
||||||
|
@ -836,7 +838,9 @@ LIBNSL_CFLAGS
|
||||||
LIBMPDEC_INTERNAL
|
LIBMPDEC_INTERNAL
|
||||||
LIBMPDEC_LDFLAGS
|
LIBMPDEC_LDFLAGS
|
||||||
LIBMPDEC_CFLAGS
|
LIBMPDEC_CFLAGS
|
||||||
LIBFFI_INCLUDEDIR
|
MODULE__CTYPES_MALLOC_CLOSURE
|
||||||
|
LIBFFI_LIBS
|
||||||
|
LIBFFI_CFLAGS
|
||||||
LIBEXPAT_INTERNAL
|
LIBEXPAT_INTERNAL
|
||||||
LIBEXPAT_LDFLAGS
|
LIBEXPAT_LDFLAGS
|
||||||
LIBEXPAT_CFLAGS
|
LIBEXPAT_CFLAGS
|
||||||
|
@ -922,6 +926,7 @@ CPPFLAGS
|
||||||
LDFLAGS
|
LDFLAGS
|
||||||
CFLAGS
|
CFLAGS
|
||||||
CC
|
CC
|
||||||
|
HAS_XCRUN
|
||||||
EXPORT_MACOSX_DEPLOYMENT_TARGET
|
EXPORT_MACOSX_DEPLOYMENT_TARGET
|
||||||
CONFIGURE_MACOSX_DEPLOYMENT_TARGET
|
CONFIGURE_MACOSX_DEPLOYMENT_TARGET
|
||||||
_PYTHON_HOST_PLATFORM
|
_PYTHON_HOST_PLATFORM
|
||||||
|
@ -1081,6 +1086,8 @@ HOSTRUNNER
|
||||||
PROFILE_TASK
|
PROFILE_TASK
|
||||||
LIBUUID_CFLAGS
|
LIBUUID_CFLAGS
|
||||||
LIBUUID_LIBS
|
LIBUUID_LIBS
|
||||||
|
LIBFFI_CFLAGS
|
||||||
|
LIBFFI_LIBS
|
||||||
LIBNSL_CFLAGS
|
LIBNSL_CFLAGS
|
||||||
LIBNSL_LIBS
|
LIBNSL_LIBS
|
||||||
LIBSQLITE3_CFLAGS
|
LIBSQLITE3_CFLAGS
|
||||||
|
@ -1884,6 +1891,9 @@ Some influential environment variables:
|
||||||
C compiler flags for LIBUUID, overriding pkg-config
|
C compiler flags for LIBUUID, overriding pkg-config
|
||||||
LIBUUID_LIBS
|
LIBUUID_LIBS
|
||||||
linker flags for LIBUUID, overriding pkg-config
|
linker flags for LIBUUID, overriding pkg-config
|
||||||
|
LIBFFI_CFLAGS
|
||||||
|
C compiler flags for LIBFFI, overriding pkg-config
|
||||||
|
LIBFFI_LIBS linker flags for LIBFFI, overriding pkg-config
|
||||||
LIBNSL_CFLAGS
|
LIBNSL_CFLAGS
|
||||||
C compiler flags for LIBNSL, overriding pkg-config
|
C compiler flags for LIBNSL, overriding pkg-config
|
||||||
LIBNSL_LIBS linker flags for LIBNSL, overriding pkg-config
|
LIBNSL_LIBS linker flags for LIBNSL, overriding pkg-config
|
||||||
|
@ -3042,6 +3052,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if test "$srcdir" != . -a "$srcdir" != "$(pwd)"; then
|
if test "$srcdir" != . -a "$srcdir" != "$(pwd)"; then
|
||||||
# If we're building out-of-tree, we need to make sure the following
|
# If we're building out-of-tree, we need to make sure the following
|
||||||
# resources get picked up before their $srcdir counterparts.
|
# resources get picked up before their $srcdir counterparts.
|
||||||
|
@ -4034,6 +4046,56 @@ fi
|
||||||
|
|
||||||
if test "$ac_sys_system" = "Darwin"
|
if test "$ac_sys_system" = "Darwin"
|
||||||
then
|
then
|
||||||
|
# Extract the first word of "xcrun", so it can be a program name with args.
|
||||||
|
set dummy xcrun; ac_word=$2
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
|
||||||
|
$as_echo_n "checking for $ac_word... " >&6; }
|
||||||
|
if ${ac_cv_prog_HAS_XCRUN+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
if test -n "$HAS_XCRUN"; then
|
||||||
|
ac_cv_prog_HAS_XCRUN="$HAS_XCRUN" # Let the user override the test.
|
||||||
|
else
|
||||||
|
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||||
|
for as_dir in $PATH
|
||||||
|
do
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
test -z "$as_dir" && as_dir=.
|
||||||
|
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||||
|
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
||||||
|
ac_cv_prog_HAS_XCRUN="yes"
|
||||||
|
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||||
|
break 2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
|
||||||
|
test -z "$ac_cv_prog_HAS_XCRUN" && ac_cv_prog_HAS_XCRUN="missing"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
HAS_XCRUN=$ac_cv_prog_HAS_XCRUN
|
||||||
|
if test -n "$HAS_XCRUN"; then
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAS_XCRUN" >&5
|
||||||
|
$as_echo "$HAS_XCRUN" >&6; }
|
||||||
|
else
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||||
|
$as_echo "no" >&6; }
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking macOS SDKROOT" >&5
|
||||||
|
$as_echo_n "checking macOS SDKROOT... " >&6; }
|
||||||
|
if test -z "$SDKROOT"; then
|
||||||
|
if test "$HAS_XCRUN" = "yes"; then
|
||||||
|
SDKROOT=$(xcrun --show-sdk-path)
|
||||||
|
else
|
||||||
|
SDKROOT="/"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SDKROOT" >&5
|
||||||
|
$as_echo "$SDKROOT" >&6; }
|
||||||
|
|
||||||
# Compiler selection on MacOSX is more complicated than
|
# Compiler selection on MacOSX is more complicated than
|
||||||
# AC_PROG_CC can handle, see Mac/README for more
|
# AC_PROG_CC can handle, see Mac/README for more
|
||||||
# information
|
# information
|
||||||
|
@ -6276,7 +6338,7 @@ if ${ac_cv_wl_no_as_needed+:} false; then :
|
||||||
else
|
else
|
||||||
|
|
||||||
save_LDFLAGS="$LDFLAGS"
|
save_LDFLAGS="$LDFLAGS"
|
||||||
as_fn_append LDFLAGS -Wl,--no-as-needed
|
as_fn_append LDFLAGS " -Wl,--no-as-needed"
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
@ -11962,13 +12024,437 @@ $as_echo "$as_me: WARNING: --with(out)-system-ffi is ignored on this platform" >
|
||||||
with_system_ffi="yes"
|
with_system_ffi="yes"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$with_system_ffi" = "yes" && test -n "$PKG_CONFIG"; then
|
have_libffi=missing
|
||||||
LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`"
|
if test "x$with_system_ffi" = xyes; then :
|
||||||
|
|
||||||
|
|
||||||
|
pkg_failed=no
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBFFI" >&5
|
||||||
|
$as_echo_n "checking for LIBFFI... " >&6; }
|
||||||
|
|
||||||
|
if test -n "$LIBFFI_CFLAGS"; then
|
||||||
|
pkg_cv_LIBFFI_CFLAGS="$LIBFFI_CFLAGS"
|
||||||
|
elif test -n "$PKG_CONFIG"; then
|
||||||
|
if test -n "$PKG_CONFIG" && \
|
||||||
|
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libffi\""; } >&5
|
||||||
|
($PKG_CONFIG --exists --print-errors "libffi") 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||||
|
test $ac_status = 0; }; then
|
||||||
|
pkg_cv_LIBFFI_CFLAGS=`$PKG_CONFIG --cflags "libffi" 2>/dev/null`
|
||||||
|
test "x$?" != "x0" && pkg_failed=yes
|
||||||
else
|
else
|
||||||
LIBFFI_INCLUDEDIR=""
|
pkg_failed=yes
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
pkg_failed=untried
|
||||||
|
fi
|
||||||
|
if test -n "$LIBFFI_LIBS"; then
|
||||||
|
pkg_cv_LIBFFI_LIBS="$LIBFFI_LIBS"
|
||||||
|
elif test -n "$PKG_CONFIG"; then
|
||||||
|
if test -n "$PKG_CONFIG" && \
|
||||||
|
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libffi\""; } >&5
|
||||||
|
($PKG_CONFIG --exists --print-errors "libffi") 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||||
|
test $ac_status = 0; }; then
|
||||||
|
pkg_cv_LIBFFI_LIBS=`$PKG_CONFIG --libs "libffi" 2>/dev/null`
|
||||||
|
test "x$?" != "x0" && pkg_failed=yes
|
||||||
|
else
|
||||||
|
pkg_failed=yes
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
pkg_failed=untried
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if test $pkg_failed = yes; then
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||||
|
$as_echo "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
|
||||||
|
LIBFFI_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libffi" 2>&1`
|
||||||
|
else
|
||||||
|
LIBFFI_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libffi" 2>&1`
|
||||||
|
fi
|
||||||
|
# Put the nasty error message in config.log where it belongs
|
||||||
|
echo "$LIBFFI_PKG_ERRORS" >&5
|
||||||
|
|
||||||
|
|
||||||
|
ac_fn_c_check_header_mongrel "$LINENO" "ffi.h" "ac_cv_header_ffi_h" "$ac_includes_default"
|
||||||
|
if test "x$ac_cv_header_ffi_h" = xyes; then :
|
||||||
|
|
||||||
|
save_CFLAGS=$CFLAGS
|
||||||
|
save_CPPFLAGS=$CPPFLAGS
|
||||||
|
save_LDFLAGS=$LDFLAGS
|
||||||
|
save_LIBS=$LIBS
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ffi_call in -lffi" >&5
|
||||||
|
$as_echo_n "checking for ffi_call in -lffi... " >&6; }
|
||||||
|
if ${ac_cv_lib_ffi_ffi_call+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
ac_check_lib_save_LIBS=$LIBS
|
||||||
|
LIBS="-lffi $LIBS"
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
/* Override any GCC internal prototype to avoid an error.
|
||||||
|
Use char because int might match the return type of a GCC
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
char ffi_call ();
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
return ffi_call ();
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_link "$LINENO"; then :
|
||||||
|
ac_cv_lib_ffi_ffi_call=yes
|
||||||
|
else
|
||||||
|
ac_cv_lib_ffi_ffi_call=no
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
|
LIBS=$ac_check_lib_save_LIBS
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ffi_ffi_call" >&5
|
||||||
|
$as_echo "$ac_cv_lib_ffi_ffi_call" >&6; }
|
||||||
|
if test "x$ac_cv_lib_ffi_ffi_call" = xyes; then :
|
||||||
|
have_libffi=yes
|
||||||
|
else
|
||||||
|
have_libffi=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
CFLAGS=$save_CFLAGS
|
||||||
|
CPPFLAGS=$save_CPPFLAGS
|
||||||
|
LDFLAGS=$save_LDFLAGS
|
||||||
|
LIBS=$save_LIBS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
elif test $pkg_failed = untried; then
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||||
|
$as_echo "no" >&6; }
|
||||||
|
|
||||||
|
ac_fn_c_check_header_mongrel "$LINENO" "ffi.h" "ac_cv_header_ffi_h" "$ac_includes_default"
|
||||||
|
if test "x$ac_cv_header_ffi_h" = xyes; then :
|
||||||
|
|
||||||
|
save_CFLAGS=$CFLAGS
|
||||||
|
save_CPPFLAGS=$CPPFLAGS
|
||||||
|
save_LDFLAGS=$LDFLAGS
|
||||||
|
save_LIBS=$LIBS
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ffi_call in -lffi" >&5
|
||||||
|
$as_echo_n "checking for ffi_call in -lffi... " >&6; }
|
||||||
|
if ${ac_cv_lib_ffi_ffi_call+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
ac_check_lib_save_LIBS=$LIBS
|
||||||
|
LIBS="-lffi $LIBS"
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
/* Override any GCC internal prototype to avoid an error.
|
||||||
|
Use char because int might match the return type of a GCC
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
char ffi_call ();
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
return ffi_call ();
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_link "$LINENO"; then :
|
||||||
|
ac_cv_lib_ffi_ffi_call=yes
|
||||||
|
else
|
||||||
|
ac_cv_lib_ffi_ffi_call=no
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
|
LIBS=$ac_check_lib_save_LIBS
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ffi_ffi_call" >&5
|
||||||
|
$as_echo "$ac_cv_lib_ffi_ffi_call" >&6; }
|
||||||
|
if test "x$ac_cv_lib_ffi_ffi_call" = xyes; then :
|
||||||
|
have_libffi=yes
|
||||||
|
else
|
||||||
|
have_libffi=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
CFLAGS=$save_CFLAGS
|
||||||
|
CPPFLAGS=$save_CPPFLAGS
|
||||||
|
LDFLAGS=$save_LDFLAGS
|
||||||
|
LIBS=$save_LIBS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
else
|
||||||
|
LIBFFI_CFLAGS=$pkg_cv_LIBFFI_CFLAGS
|
||||||
|
LIBFFI_LIBS=$pkg_cv_LIBFFI_LIBS
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
|
||||||
|
$as_echo "yes" >&6; }
|
||||||
|
have_libffi=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
if test "x$ac_sys_system" = xDarwin; then :
|
||||||
|
|
||||||
|
save_CFLAGS=$CFLAGS
|
||||||
|
save_CPPFLAGS=$CPPFLAGS
|
||||||
|
save_LDFLAGS=$LDFLAGS
|
||||||
|
save_LIBS=$LIBS
|
||||||
|
|
||||||
|
|
||||||
|
CFLAGS="-I${SDKROOT}/usr/include/ffi $CFLAGS"
|
||||||
|
ac_fn_c_check_header_mongrel "$LINENO" "ffi.h" "ac_cv_header_ffi_h" "$ac_includes_default"
|
||||||
|
if test "x$ac_cv_header_ffi_h" = xyes; then :
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ffi_call in -lffi" >&5
|
||||||
|
$as_echo_n "checking for ffi_call in -lffi... " >&6; }
|
||||||
|
if ${ac_cv_lib_ffi_ffi_call+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
ac_check_lib_save_LIBS=$LIBS
|
||||||
|
LIBS="-lffi $LIBS"
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
/* Override any GCC internal prototype to avoid an error.
|
||||||
|
Use char because int might match the return type of a GCC
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
char ffi_call ();
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
return ffi_call ();
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_link "$LINENO"; then :
|
||||||
|
ac_cv_lib_ffi_ffi_call=yes
|
||||||
|
else
|
||||||
|
ac_cv_lib_ffi_ffi_call=no
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
|
LIBS=$ac_check_lib_save_LIBS
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ffi_ffi_call" >&5
|
||||||
|
$as_echo "$ac_cv_lib_ffi_ffi_call" >&6; }
|
||||||
|
if test "x$ac_cv_lib_ffi_ffi_call" = xyes; then :
|
||||||
|
|
||||||
|
have_libffi=yes
|
||||||
|
LIBFFI_CFLAGS="-I${SDKROOT}/usr/include/ffi -DUSING_APPLE_OS_LIBFFI=1"
|
||||||
|
LIBFFI_LIBS="-lffi"
|
||||||
|
|
||||||
|
else
|
||||||
|
have_libffi=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CFLAGS=$save_CFLAGS
|
||||||
|
CPPFLAGS=$save_CPPFLAGS
|
||||||
|
LDFLAGS=$save_LDFLAGS
|
||||||
|
LIBS=$save_LIBS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$have_libffi" = xyes; then :
|
||||||
|
|
||||||
|
ctypes_malloc_closure=no
|
||||||
|
case $ac_sys_system in #(
|
||||||
|
Darwin) :
|
||||||
|
|
||||||
|
as_fn_append LIBFFI_CFLAGS " -I\$(srcdir)/Modules/_ctypes/darwin -DMACOSX"
|
||||||
|
ctypes_malloc_closure=yes
|
||||||
|
;; #(
|
||||||
|
sunos5) :
|
||||||
|
as_fn_append LIBFFI_LIBS " -mimpure-text"
|
||||||
|
;; #(
|
||||||
|
*) :
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if test "x$ctypes_malloc_closure" = xyes; then :
|
||||||
|
|
||||||
|
MODULE__CTYPES_MALLOC_CLOSURE=_ctypes/malloc_closure.c
|
||||||
|
as_fn_append LIBFFI_CFLAGS " -DUSING_MALLOC_CLOSURE_DOT_C=1"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
|
||||||
|
as_fn_append LIBFFI_LIBS " -ldl"
|
||||||
|
fi
|
||||||
|
|
||||||
|
save_CFLAGS=$CFLAGS
|
||||||
|
save_CPPFLAGS=$CPPFLAGS
|
||||||
|
save_LDFLAGS=$LDFLAGS
|
||||||
|
save_LIBS=$LIBS
|
||||||
|
|
||||||
|
|
||||||
|
CFLAGS="$LIBFFI_CFLAGS $CFLAGS"
|
||||||
|
LDFLAGS="$LIBFFI_LIBS $LDFLAGS"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ffi_prep_cif_var" >&5
|
||||||
|
$as_echo_n "checking for ffi_prep_cif_var... " >&6; }
|
||||||
|
if ${ac_cv_func_ffi_prep_cif_var+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#include <ffi.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
void *x=ffi_prep_cif_var
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_compile "$LINENO"; then :
|
||||||
|
ac_cv_func_ffi_prep_cif_var=yes
|
||||||
|
else
|
||||||
|
ac_cv_func_ffi_prep_cif_var=no
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_ffi_prep_cif_var" >&5
|
||||||
|
$as_echo "$ac_cv_func_ffi_prep_cif_var" >&6; }
|
||||||
|
if test "x$ac_cv_func_ffi_prep_cif_var" = xyes; then :
|
||||||
|
|
||||||
|
$as_echo "#define HAVE_FFI_PREP_CIF_VAR 1" >>confdefs.h
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ffi_prep_closure_loc" >&5
|
||||||
|
$as_echo_n "checking for ffi_prep_closure_loc... " >&6; }
|
||||||
|
if ${ac_cv_func_ffi_prep_closure_loc+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#include <ffi.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
void *x=ffi_prep_closure_loc
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_compile "$LINENO"; then :
|
||||||
|
ac_cv_func_ffi_prep_closure_loc=yes
|
||||||
|
else
|
||||||
|
ac_cv_func_ffi_prep_closure_loc=no
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_ffi_prep_closure_loc" >&5
|
||||||
|
$as_echo "$ac_cv_func_ffi_prep_closure_loc" >&6; }
|
||||||
|
if test "x$ac_cv_func_ffi_prep_closure_loc" = xyes; then :
|
||||||
|
|
||||||
|
$as_echo "#define HAVE_FFI_PREP_CLOSURE_LOC 1" >>confdefs.h
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ffi_closure_alloc" >&5
|
||||||
|
$as_echo_n "checking for ffi_closure_alloc... " >&6; }
|
||||||
|
if ${ac_cv_func_ffi_closure_alloc+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#include <ffi.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
void *x=ffi_closure_alloc
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_compile "$LINENO"; then :
|
||||||
|
ac_cv_func_ffi_closure_alloc=yes
|
||||||
|
else
|
||||||
|
ac_cv_func_ffi_closure_alloc=no
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_ffi_closure_alloc" >&5
|
||||||
|
$as_echo "$ac_cv_func_ffi_closure_alloc" >&6; }
|
||||||
|
if test "x$ac_cv_func_ffi_closure_alloc" = xyes; then :
|
||||||
|
|
||||||
|
$as_echo "#define HAVE_FFI_CLOSURE_ALLOC 1" >>confdefs.h
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CFLAGS=$save_CFLAGS
|
||||||
|
CPPFLAGS=$save_CPPFLAGS
|
||||||
|
LDFLAGS=$save_LDFLAGS
|
||||||
|
LIBS=$save_LIBS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
# Check for use of the system libmpdec library
|
# Check for use of the system libmpdec library
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-system-libmpdec" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-system-libmpdec" >&5
|
||||||
$as_echo_n "checking for --with-system-libmpdec... " >&6; }
|
$as_echo_n "checking for --with-system-libmpdec... " >&6; }
|
||||||
|
@ -14998,8 +15484,6 @@ $as_echo "#define HAVE_DIRFD 1" >>confdefs.h
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# For some functions, having a definition is not sufficient, since
|
# For some functions, having a definition is not sufficient, since
|
||||||
# we want to take their address.
|
# we want to take their address.
|
||||||
|
|
||||||
|
@ -24046,6 +24530,40 @@ fi
|
||||||
$as_echo "$py_cv_module__crypt" >&6; }
|
$as_echo "$py_cv_module__crypt" >&6; }
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdlib extension module _ctypes" >&5
|
||||||
|
$as_echo_n "checking for stdlib extension module _ctypes... " >&6; }
|
||||||
|
if test "$py_cv_module__ctypes" != "n/a"; then :
|
||||||
|
|
||||||
|
if true; then :
|
||||||
|
if test "$have_libffi" = yes; then :
|
||||||
|
py_cv_module__ctypes=yes
|
||||||
|
else
|
||||||
|
py_cv_module__ctypes=missing
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
py_cv_module__ctypes=disabled
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
as_fn_append MODULE_BLOCK "MODULE__CTYPES=$py_cv_module__ctypes$as_nl"
|
||||||
|
if test "x$py_cv_module__ctypes" = xyes; then :
|
||||||
|
|
||||||
|
as_fn_append MODULE_BLOCK "MODULE__CTYPES_CFLAGS=$LIBFFI_CFLAGS$as_nl"
|
||||||
|
as_fn_append MODULE_BLOCK "MODULE__CTYPES_LDFLAGS=$LIBFFI_LIBS$as_nl"
|
||||||
|
|
||||||
|
fi
|
||||||
|
if test "$py_cv_module__ctypes" = yes; then
|
||||||
|
MODULE__CTYPES_TRUE=
|
||||||
|
MODULE__CTYPES_FALSE='#'
|
||||||
|
else
|
||||||
|
MODULE__CTYPES_TRUE='#'
|
||||||
|
MODULE__CTYPES_FALSE=
|
||||||
|
fi
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $py_cv_module__ctypes" >&5
|
||||||
|
$as_echo "$py_cv_module__ctypes" >&6; }
|
||||||
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdlib extension module _decimal" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdlib extension module _decimal" >&5
|
||||||
$as_echo_n "checking for stdlib extension module _decimal... " >&6; }
|
$as_echo_n "checking for stdlib extension module _decimal... " >&6; }
|
||||||
if test "$py_cv_module__decimal" != "n/a"; then :
|
if test "$py_cv_module__decimal" != "n/a"; then :
|
||||||
|
@ -24652,7 +25170,7 @@ $as_echo_n "checking for stdlib extension module _ctypes_test... " >&6; }
|
||||||
if test "$py_cv_module__ctypes_test" != "n/a"; then :
|
if test "$py_cv_module__ctypes_test" != "n/a"; then :
|
||||||
|
|
||||||
if test "$TEST_MODULES" = yes; then :
|
if test "$TEST_MODULES" = yes; then :
|
||||||
if test "$ac_cv_func_dlopen" = yes; then :
|
if test "$have_libffi" = yes -a "$ac_cv_func_dlopen" = yes; then :
|
||||||
py_cv_module__ctypes_test=yes
|
py_cv_module__ctypes_test=yes
|
||||||
else
|
else
|
||||||
py_cv_module__ctypes_test=missing
|
py_cv_module__ctypes_test=missing
|
||||||
|
@ -24666,7 +25184,7 @@ fi
|
||||||
if test "x$py_cv_module__ctypes_test" = xyes; then :
|
if test "x$py_cv_module__ctypes_test" = xyes; then :
|
||||||
|
|
||||||
|
|
||||||
as_fn_append MODULE_BLOCK "MODULE__CTYPES_TEST_LDFLAGS=-lm$as_nl"
|
as_fn_append MODULE_BLOCK "MODULE__CTYPES_TEST_LDFLAGS=$LIBM$as_nl"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
if test "$py_cv_module__ctypes_test" = yes; then
|
if test "$py_cv_module__ctypes_test" = yes; then
|
||||||
|
@ -25090,6 +25608,10 @@ if test -z "${MODULE__CRYPT_TRUE}" && test -z "${MODULE__CRYPT_FALSE}"; then
|
||||||
as_fn_error $? "conditional \"MODULE__CRYPT\" was never defined.
|
as_fn_error $? "conditional \"MODULE__CRYPT\" was never defined.
|
||||||
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
||||||
fi
|
fi
|
||||||
|
if test -z "${MODULE__CTYPES_TRUE}" && test -z "${MODULE__CTYPES_FALSE}"; then
|
||||||
|
as_fn_error $? "conditional \"MODULE__CTYPES\" was never defined.
|
||||||
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
||||||
|
fi
|
||||||
if test -z "${MODULE__DECIMAL_TRUE}" && test -z "${MODULE__DECIMAL_FALSE}"; then
|
if test -z "${MODULE__DECIMAL_TRUE}" && test -z "${MODULE__DECIMAL_FALSE}"; then
|
||||||
as_fn_error $? "conditional \"MODULE__DECIMAL\" was never defined.
|
as_fn_error $? "conditional \"MODULE__DECIMAL\" was never defined.
|
||||||
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
Usually this means the macro was only invoked conditionally." "$LINENO" 5
|
||||||
|
|
125
configure.ac
125
configure.ac
|
@ -49,6 +49,26 @@ AC_DEFUN([WITH_SAVE_ENV],
|
||||||
[RESTORE_ENV]
|
[RESTORE_ENV]
|
||||||
)dnl
|
)dnl
|
||||||
|
|
||||||
|
dnl PY_CHECK_FUNC(FUNCTION, [INCLUDES], [AC_DEFINE-VAR])
|
||||||
|
AC_DEFUN([PY_CHECK_FUNC],
|
||||||
|
[ AS_VAR_PUSHDEF([py_var], [ac_cv_func_$1])
|
||||||
|
AS_VAR_PUSHDEF([py_define], m4_ifblank([$3], [[HAVE_]m4_toupper($1)], [$3]))
|
||||||
|
AC_CACHE_CHECK(
|
||||||
|
[for $1],
|
||||||
|
[py_var],
|
||||||
|
[AC_COMPILE_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM([$2], [void *x=$1])],
|
||||||
|
[AS_VAR_SET([py_var], [yes])],
|
||||||
|
[AS_VAR_SET([py_var], [no])])]
|
||||||
|
)
|
||||||
|
AS_VAR_IF(
|
||||||
|
[py_var],
|
||||||
|
[yes],
|
||||||
|
[AC_DEFINE([py_define], [1], [Define if you have the '$1' function.])])
|
||||||
|
AS_VAR_POPDEF([py_var])
|
||||||
|
AS_VAR_POPDEF([py_define])
|
||||||
|
])
|
||||||
|
|
||||||
AC_SUBST(BASECPPFLAGS)
|
AC_SUBST(BASECPPFLAGS)
|
||||||
if test "$srcdir" != . -a "$srcdir" != "$(pwd)"; then
|
if test "$srcdir" != . -a "$srcdir" != "$(pwd)"; then
|
||||||
# If we're building out-of-tree, we need to make sure the following
|
# If we're building out-of-tree, we need to make sure the following
|
||||||
|
@ -713,6 +733,21 @@ fi
|
||||||
|
|
||||||
if test "$ac_sys_system" = "Darwin"
|
if test "$ac_sys_system" = "Darwin"
|
||||||
then
|
then
|
||||||
|
dnl look for SDKROOT
|
||||||
|
AC_CHECK_PROG([HAS_XCRUN], [xcrun], [yes], [missing])
|
||||||
|
AC_MSG_CHECKING([macOS SDKROOT])
|
||||||
|
if test -z "$SDKROOT"; then
|
||||||
|
dnl SDKROOT not set
|
||||||
|
if test "$HAS_XCRUN" = "yes"; then
|
||||||
|
dnl detect with Xcode
|
||||||
|
SDKROOT=$(xcrun --show-sdk-path)
|
||||||
|
else
|
||||||
|
dnl default to root
|
||||||
|
SDKROOT="/"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT([$SDKROOT])
|
||||||
|
|
||||||
# Compiler selection on MacOSX is more complicated than
|
# Compiler selection on MacOSX is more complicated than
|
||||||
# AC_PROG_CC can handle, see Mac/README for more
|
# AC_PROG_CC can handle, see Mac/README for more
|
||||||
# information
|
# information
|
||||||
|
@ -1101,7 +1136,7 @@ AC_DEFINE_UNQUOTED([PY_SUPPORT_TIER], [$PY_SUPPORT_TIER], [PEP 11 Support tier (
|
||||||
|
|
||||||
AC_CACHE_CHECK([for -Wl,--no-as-needed], [ac_cv_wl_no_as_needed], [
|
AC_CACHE_CHECK([for -Wl,--no-as-needed], [ac_cv_wl_no_as_needed], [
|
||||||
save_LDFLAGS="$LDFLAGS"
|
save_LDFLAGS="$LDFLAGS"
|
||||||
AS_VAR_APPEND([LDFLAGS], [-Wl,--no-as-needed])
|
AS_VAR_APPEND([LDFLAGS], [" -Wl,--no-as-needed"])
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
[NO_AS_NEEDED="-Wl,--no-as-needed"
|
[NO_AS_NEEDED="-Wl,--no-as-needed"
|
||||||
ac_cv_wl_no_as_needed=yes],
|
ac_cv_wl_no_as_needed=yes],
|
||||||
|
@ -3564,12 +3599,60 @@ else
|
||||||
with_system_ffi="yes"
|
with_system_ffi="yes"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$with_system_ffi" = "yes" && test -n "$PKG_CONFIG"; then
|
dnl detect libffi
|
||||||
LIBFFI_INCLUDEDIR="`"$PKG_CONFIG" libffi --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`"
|
have_libffi=missing
|
||||||
else
|
AS_VAR_IF([with_system_ffi], [yes], [
|
||||||
LIBFFI_INCLUDEDIR=""
|
PKG_CHECK_MODULES([LIBFFI], [libffi], [have_libffi=yes], [
|
||||||
fi
|
AC_CHECK_HEADER([ffi.h], [
|
||||||
AC_SUBST(LIBFFI_INCLUDEDIR)
|
WITH_SAVE_ENV([
|
||||||
|
AC_CHECK_LIB([ffi], [ffi_call], [have_libffi=yes], [have_libffi=no])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
], [
|
||||||
|
AS_VAR_IF([ac_sys_system], [Darwin], [
|
||||||
|
WITH_SAVE_ENV([
|
||||||
|
CFLAGS="-I${SDKROOT}/usr/include/ffi $CFLAGS"
|
||||||
|
AC_CHECK_HEADER([ffi.h], [
|
||||||
|
AC_CHECK_LIB([ffi], [ffi_call], [
|
||||||
|
dnl use ffi from SDK root
|
||||||
|
have_libffi=yes
|
||||||
|
LIBFFI_CFLAGS="-I${SDKROOT}/usr/include/ffi -DUSING_APPLE_OS_LIBFFI=1"
|
||||||
|
LIBFFI_LIBS="-lffi"
|
||||||
|
], [have_libffi=no])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
AS_VAR_IF([have_libffi], [yes], [
|
||||||
|
ctypes_malloc_closure=no
|
||||||
|
AS_CASE([$ac_sys_system],
|
||||||
|
[Darwin], [
|
||||||
|
dnl when do we need USING_APPLE_OS_LIBFFI?
|
||||||
|
AS_VAR_APPEND([LIBFFI_CFLAGS], [" -I\$(srcdir)/Modules/_ctypes/darwin -DMACOSX"])
|
||||||
|
ctypes_malloc_closure=yes
|
||||||
|
],
|
||||||
|
[sunos5], [AS_VAR_APPEND([LIBFFI_LIBS], [" -mimpure-text"])]
|
||||||
|
)
|
||||||
|
AS_VAR_IF([ctypes_malloc_closure], [yes], [
|
||||||
|
MODULE__CTYPES_MALLOC_CLOSURE=_ctypes/malloc_closure.c
|
||||||
|
AS_VAR_APPEND([LIBFFI_CFLAGS], [" -DUSING_MALLOC_CLOSURE_DOT_C=1"])
|
||||||
|
])
|
||||||
|
AC_SUBST([MODULE__CTYPES_MALLOC_CLOSURE])
|
||||||
|
|
||||||
|
dnl HAVE_LIBDL: for dlopen, see gh-76828
|
||||||
|
AS_VAR_IF([ac_cv_lib_dl_dlopen], [yes], [AS_VAR_APPEND([LIBFFI_LIBS], [" -ldl"])])
|
||||||
|
|
||||||
|
WITH_SAVE_ENV([
|
||||||
|
CFLAGS="$LIBFFI_CFLAGS $CFLAGS"
|
||||||
|
LDFLAGS="$LIBFFI_LIBS $LDFLAGS"
|
||||||
|
|
||||||
|
PY_CHECK_FUNC([ffi_prep_cif_var], [#include <ffi.h>])
|
||||||
|
PY_CHECK_FUNC([ffi_prep_closure_loc], [#include <ffi.h>])
|
||||||
|
PY_CHECK_FUNC([ffi_closure_alloc], [#include <ffi.h>])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
# Check for use of the system libmpdec library
|
# Check for use of the system libmpdec library
|
||||||
AC_MSG_CHECKING(for --with-system-libmpdec)
|
AC_MSG_CHECKING(for --with-system-libmpdec)
|
||||||
|
@ -4526,26 +4609,6 @@ AC_CHECK_DECL(dirfd,
|
||||||
[#include <sys/types.h>
|
[#include <sys/types.h>
|
||||||
#include <dirent.h>])
|
#include <dirent.h>])
|
||||||
|
|
||||||
dnl PY_CHECK_FUNC(FUNCTION, [INCLUDES], [AC_DEFINE-VAR])
|
|
||||||
AC_DEFUN([PY_CHECK_FUNC],
|
|
||||||
[ AS_VAR_PUSHDEF([py_var], [ac_cv_func_$1])
|
|
||||||
AS_VAR_PUSHDEF([py_define], m4_ifblank([$3], [[HAVE_]m4_toupper($1)], [$3]))
|
|
||||||
AC_CACHE_CHECK(
|
|
||||||
[for $1],
|
|
||||||
[py_var],
|
|
||||||
[AC_COMPILE_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([$2], [void *x=$1])],
|
|
||||||
[AS_VAR_SET([py_var], [yes])],
|
|
||||||
[AS_VAR_SET([py_var], [no])])]
|
|
||||||
)
|
|
||||||
AS_VAR_IF(
|
|
||||||
[py_var],
|
|
||||||
[yes],
|
|
||||||
[AC_DEFINE([py_define], [1], [Define if you have the '$1' function.])])
|
|
||||||
AS_VAR_POPDEF([py_var])
|
|
||||||
AS_VAR_POPDEF([py_define])
|
|
||||||
])
|
|
||||||
|
|
||||||
# For some functions, having a definition is not sufficient, since
|
# For some functions, having a definition is not sufficient, since
|
||||||
# we want to take their address.
|
# we want to take their address.
|
||||||
PY_CHECK_FUNC([chroot], [#include <unistd.h>])
|
PY_CHECK_FUNC([chroot], [#include <unistd.h>])
|
||||||
|
@ -6868,7 +6931,9 @@ PY_STDLIB_MOD([_blake2],
|
||||||
PY_STDLIB_MOD([_crypt],
|
PY_STDLIB_MOD([_crypt],
|
||||||
[], [test "$ac_cv_crypt_crypt" = yes],
|
[], [test "$ac_cv_crypt_crypt" = yes],
|
||||||
[$LIBCRYPT_CFLAGS], [$LIBCRYPT_LIBS])
|
[$LIBCRYPT_CFLAGS], [$LIBCRYPT_LIBS])
|
||||||
dnl PY_STDLIB_MOD([_ctypes], [], [], [], [])
|
PY_STDLIB_MOD([_ctypes],
|
||||||
|
[], [test "$have_libffi" = yes],
|
||||||
|
[$LIBFFI_CFLAGS], [$LIBFFI_LIBS])
|
||||||
dnl PY_STDLIB_MOD([_curses], [], [], [], [])
|
dnl PY_STDLIB_MOD([_curses], [], [], [], [])
|
||||||
dnl PY_STDLIB_MOD([_curses_panel], [], [], [], [])
|
dnl PY_STDLIB_MOD([_curses_panel], [], [], [], [])
|
||||||
PY_STDLIB_MOD([_decimal], [], [], [$LIBMPDEC_CFLAGS], [$LIBMPDEC_LDFLAGS])
|
PY_STDLIB_MOD([_decimal], [], [], [$LIBMPDEC_CFLAGS], [$LIBMPDEC_LDFLAGS])
|
||||||
|
@ -6914,7 +6979,9 @@ PY_STDLIB_MOD([_testbuffer], [test "$TEST_MODULES" = yes])
|
||||||
PY_STDLIB_MOD([_testimportmultiple], [test "$TEST_MODULES" = yes], [test "$ac_cv_func_dlopen" = yes])
|
PY_STDLIB_MOD([_testimportmultiple], [test "$TEST_MODULES" = yes], [test "$ac_cv_func_dlopen" = yes])
|
||||||
PY_STDLIB_MOD([_testmultiphase], [test "$TEST_MODULES" = yes], [test "$ac_cv_func_dlopen" = yes])
|
PY_STDLIB_MOD([_testmultiphase], [test "$TEST_MODULES" = yes], [test "$ac_cv_func_dlopen" = yes])
|
||||||
PY_STDLIB_MOD([_xxtestfuzz], [test "$TEST_MODULES" = yes])
|
PY_STDLIB_MOD([_xxtestfuzz], [test "$TEST_MODULES" = yes])
|
||||||
PY_STDLIB_MOD([_ctypes_test], [test "$TEST_MODULES" = yes], [test "$ac_cv_func_dlopen" = yes], [], [-lm])
|
PY_STDLIB_MOD([_ctypes_test],
|
||||||
|
[test "$TEST_MODULES" = yes], [test "$have_libffi" = yes -a "$ac_cv_func_dlopen" = yes],
|
||||||
|
[], [$LIBM])
|
||||||
|
|
||||||
dnl Limited API template modules.
|
dnl Limited API template modules.
|
||||||
dnl The limited C API is not compatible with the Py_TRACE_REFS macro.
|
dnl The limited C API is not compatible with the Py_TRACE_REFS macro.
|
||||||
|
|
|
@ -356,6 +356,15 @@
|
||||||
/* Define to 1 if you have the `fexecve' function. */
|
/* Define to 1 if you have the `fexecve' function. */
|
||||||
#undef HAVE_FEXECVE
|
#undef HAVE_FEXECVE
|
||||||
|
|
||||||
|
/* Define if you have the 'ffi_closure_alloc' function. */
|
||||||
|
#undef HAVE_FFI_CLOSURE_ALLOC
|
||||||
|
|
||||||
|
/* Define if you have the 'ffi_prep_cif_var' function. */
|
||||||
|
#undef HAVE_FFI_PREP_CIF_VAR
|
||||||
|
|
||||||
|
/* Define if you have the 'ffi_prep_closure_loc' function. */
|
||||||
|
#undef HAVE_FFI_PREP_CLOSURE_LOC
|
||||||
|
|
||||||
/* Define to 1 if you have the `flock' function. */
|
/* Define to 1 if you have the `flock' function. */
|
||||||
#undef HAVE_FLOCK
|
#undef HAVE_FLOCK
|
||||||
|
|
||||||
|
|
115
setup.py
115
setup.py
|
@ -395,11 +395,6 @@ class PyBuildExt(build_ext):
|
||||||
# Remove modules that are present on the disabled list
|
# Remove modules that are present on the disabled list
|
||||||
extensions = [ext for ext in self.extensions
|
extensions = [ext for ext in self.extensions
|
||||||
if ext.name not in DISABLED_MODULE_LIST]
|
if ext.name not in DISABLED_MODULE_LIST]
|
||||||
# move ctypes to the end, it depends on other modules
|
|
||||||
ext_map = dict((ext.name, i) for i, ext in enumerate(extensions))
|
|
||||||
if "_ctypes" in ext_map:
|
|
||||||
ctypes = extensions.pop(ext_map["_ctypes"])
|
|
||||||
extensions.append(ctypes)
|
|
||||||
self.extensions = extensions
|
self.extensions = extensions
|
||||||
|
|
||||||
def update_sources_depends(self):
|
def update_sources_depends(self):
|
||||||
|
@ -600,12 +595,6 @@ class PyBuildExt(build_ext):
|
||||||
raise RuntimeError("Failed to build some stdlib modules")
|
raise RuntimeError("Failed to build some stdlib modules")
|
||||||
|
|
||||||
def build_extension(self, ext):
|
def build_extension(self, ext):
|
||||||
|
|
||||||
if ext.name == '_ctypes':
|
|
||||||
if not self.configure_ctypes(ext):
|
|
||||||
self.failed.append(ext.name)
|
|
||||||
return
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
build_ext.build_extension(self, ext)
|
build_ext.build_extension(self, ext)
|
||||||
except (CCompilerError, DistutilsError) as why:
|
except (CCompilerError, DistutilsError) as why:
|
||||||
|
@ -1370,102 +1359,24 @@ class PyBuildExt(build_ext):
|
||||||
def detect_tkinter(self):
|
def detect_tkinter(self):
|
||||||
self.addext(Extension('_tkinter', ['_tkinter.c', 'tkappinit.c']))
|
self.addext(Extension('_tkinter', ['_tkinter.c', 'tkappinit.c']))
|
||||||
|
|
||||||
def configure_ctypes(self, ext):
|
|
||||||
return True
|
|
||||||
|
|
||||||
def detect_ctypes(self):
|
def detect_ctypes(self):
|
||||||
# Thomas Heller's _ctypes module
|
# Thomas Heller's _ctypes module
|
||||||
|
src = [
|
||||||
|
'_ctypes/_ctypes.c',
|
||||||
|
'_ctypes/callbacks.c',
|
||||||
|
'_ctypes/callproc.c',
|
||||||
|
'_ctypes/stgdict.c',
|
||||||
|
'_ctypes/cfield.c',
|
||||||
|
]
|
||||||
|
malloc_closure = sysconfig.get_config_var(
|
||||||
|
"MODULE__CTYPES_MALLOC_CLOSURE"
|
||||||
|
)
|
||||||
|
if malloc_closure:
|
||||||
|
src.append(malloc_closure)
|
||||||
|
|
||||||
if (not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and MACOS):
|
self.addext(Extension('_ctypes', src))
|
||||||
self.use_system_libffi = True
|
|
||||||
else:
|
|
||||||
self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS")
|
|
||||||
|
|
||||||
include_dirs = []
|
|
||||||
extra_compile_args = []
|
|
||||||
extra_link_args = []
|
|
||||||
sources = ['_ctypes/_ctypes.c',
|
|
||||||
'_ctypes/callbacks.c',
|
|
||||||
'_ctypes/callproc.c',
|
|
||||||
'_ctypes/stgdict.c',
|
|
||||||
'_ctypes/cfield.c']
|
|
||||||
|
|
||||||
if MACOS:
|
|
||||||
sources.append('_ctypes/malloc_closure.c')
|
|
||||||
extra_compile_args.append('-DUSING_MALLOC_CLOSURE_DOT_C=1')
|
|
||||||
extra_compile_args.append('-DMACOSX')
|
|
||||||
include_dirs.append('_ctypes/darwin')
|
|
||||||
|
|
||||||
elif HOST_PLATFORM == 'sunos5':
|
|
||||||
# XXX This shouldn't be necessary; it appears that some
|
|
||||||
# of the assembler code is non-PIC (i.e. it has relocations
|
|
||||||
# when it shouldn't. The proper fix would be to rewrite
|
|
||||||
# the assembler code to be PIC.
|
|
||||||
# This only works with GCC; the Sun compiler likely refuses
|
|
||||||
# this option. If you want to compile ctypes with the Sun
|
|
||||||
# compiler, please research a proper solution, instead of
|
|
||||||
# finding some -z option for the Sun compiler.
|
|
||||||
extra_link_args.append('-mimpure-text')
|
|
||||||
|
|
||||||
ext = Extension('_ctypes',
|
|
||||||
include_dirs=include_dirs,
|
|
||||||
extra_compile_args=extra_compile_args,
|
|
||||||
extra_link_args=extra_link_args,
|
|
||||||
libraries=[],
|
|
||||||
sources=sources)
|
|
||||||
self.add(ext)
|
|
||||||
# function my_sqrt() needs libm for sqrt()
|
|
||||||
self.addext(Extension('_ctypes_test', ['_ctypes/_ctypes_test.c']))
|
self.addext(Extension('_ctypes_test', ['_ctypes/_ctypes_test.c']))
|
||||||
|
|
||||||
ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR")
|
|
||||||
ffi_lib = None
|
|
||||||
|
|
||||||
ffi_inc_dirs = self.inc_dirs.copy()
|
|
||||||
if MACOS:
|
|
||||||
ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi")
|
|
||||||
|
|
||||||
if not ffi_inc:
|
|
||||||
if os.path.exists(ffi_in_sdk):
|
|
||||||
ext.extra_compile_args.append("-DUSING_APPLE_OS_LIBFFI=1")
|
|
||||||
ffi_inc = ffi_in_sdk
|
|
||||||
ffi_lib = 'ffi'
|
|
||||||
else:
|
|
||||||
# OS X 10.5 comes with libffi.dylib; the include files are
|
|
||||||
# in /usr/include/ffi
|
|
||||||
ffi_inc_dirs.append('/usr/include/ffi')
|
|
||||||
|
|
||||||
if not ffi_inc:
|
|
||||||
found = find_file('ffi.h', [], ffi_inc_dirs)
|
|
||||||
if found:
|
|
||||||
ffi_inc = found[0]
|
|
||||||
if ffi_inc:
|
|
||||||
ffi_h = ffi_inc + '/ffi.h'
|
|
||||||
if not os.path.exists(ffi_h):
|
|
||||||
ffi_inc = None
|
|
||||||
print('Header file {} does not exist'.format(ffi_h))
|
|
||||||
if ffi_lib is None and ffi_inc:
|
|
||||||
for lib_name in ('ffi', 'ffi_pic'):
|
|
||||||
if (self.compiler.find_library_file(self.lib_dirs, lib_name)):
|
|
||||||
ffi_lib = lib_name
|
|
||||||
break
|
|
||||||
|
|
||||||
if ffi_inc and ffi_lib:
|
|
||||||
ffi_headers = glob(os.path.join(ffi_inc, '*.h'))
|
|
||||||
if grep_headers_for('ffi_prep_cif_var', ffi_headers):
|
|
||||||
ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1")
|
|
||||||
if grep_headers_for('ffi_prep_closure_loc', ffi_headers):
|
|
||||||
ext.extra_compile_args.append("-DHAVE_FFI_PREP_CLOSURE_LOC=1")
|
|
||||||
if grep_headers_for('ffi_closure_alloc', ffi_headers):
|
|
||||||
ext.extra_compile_args.append("-DHAVE_FFI_CLOSURE_ALLOC=1")
|
|
||||||
|
|
||||||
ext.include_dirs.append(ffi_inc)
|
|
||||||
ext.libraries.append(ffi_lib)
|
|
||||||
self.use_system_libffi = True
|
|
||||||
|
|
||||||
if sysconfig.get_config_var('HAVE_LIBDL'):
|
|
||||||
# for dlopen, see bpo-32647
|
|
||||||
ext.libraries.append('dl')
|
|
||||||
|
|
||||||
def detect_decimal(self):
|
def detect_decimal(self):
|
||||||
# Stefan Krah's _decimal module
|
# Stefan Krah's _decimal module
|
||||||
self.addext(
|
self.addext(
|
||||||
|
|
Loading…
Reference in New Issue