summaryrefslogtreecommitdiffstats
path: root/configure
diff options
context:
space:
mode:
authorSergey B Kirpichev <skirpichev@gmail.com>2024-07-01 08:54:33 (GMT)
committerGitHub <noreply@github.com>2024-07-01 08:54:33 (GMT)
commit6988ff02a5741bcd04a8f46b7dd845e849557be0 (patch)
tree1aaf8f531cf9f648ec1358b53e2c5d6ff001e410 /configure
parenta0b8b342c5d0b4722ad9cfe82f2630025d445f00 (diff)
downloadcpython-6988ff02a5741bcd04a8f46b7dd845e849557be0.zip
cpython-6988ff02a5741bcd04a8f46b7dd845e849557be0.tar.gz
cpython-6988ff02a5741bcd04a8f46b7dd845e849557be0.tar.bz2
gh-61103: Support double complex (_Complex) type in ctypes (#120894)
Example: ```pycon >>> import ctypes >>> ctypes.__STDC_IEC_559_COMPLEX__ 1 >>> libm = ctypes.CDLL('libm.so.6') >>> libm.clog.argtypes = [ctypes.c_double_complex] >>> libm.clog.restype = ctypes.c_double_complex >>> libm.clog(1+1j) (0.34657359027997264+0.7853981633974483j) ``` Co-authored-by: Nice Zombies <nineteendo19d0@gmail.com> Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com> Co-authored-by: Victor Stinner <vstinner@python.org>
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure49
1 files changed, 47 insertions, 2 deletions
diff --git a/configure b/configure
index 963ceb9..922d33e 100755
--- a/configure
+++ b/configure
@@ -13999,6 +13999,51 @@ printf "%s\n" "$AIX_BUILDDATE" >&6; }
*) ;;
esac
+# check for _Complex C type
+#
+# Note that despite most compilers define __STDC_IEC_559_COMPLEX__ - almost
+# none properly support C11+ Annex G (where pure imaginary types
+# represented by _Imaginary are mandatory). This is a bug (see e.g.
+# llvm/llvm-project#60269), so we don't rely on presence
+# of __STDC_IEC_559_COMPLEX__.
+if test "$cross_compiling" = yes
+then :
+ ac_cv_c_complex_supported=no
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <complex.h>
+#define test(type, out) \
+{ \
+ type complex z = 1 + 2*I; z = z*z; \
+ (out) = (out) || creal(z) != -3 || cimag(z) != 4; \
+}
+int main(void)
+{
+ int res = 0;
+ test(float, res);
+ test(double, res);
+ test(long double, res);
+ return res;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_c_complex_supported=yes
+else $as_nop
+ ac_cv_c_complex_supported=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+if test "$ac_cv_c_complex_supported" = "yes"; then
+
+printf "%s\n" "#define Py_HAVE_C_COMPLEX 1" >>confdefs.h
+
+fi
+
# check for systems that require aligned memory access
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking aligned memory access is required" >&5
printf %s "checking aligned memory access is required... " >&6; }
@@ -31487,8 +31532,8 @@ fi
if test "x$py_cv_module__ctypes_test" = xyes
then :
-
- as_fn_append MODULE_BLOCK "MODULE__CTYPES_TEST_LDFLAGS=$LIBM$as_nl"
+ as_fn_append MODULE_BLOCK "MODULE__CTYPES_TEST_CFLAGS=$LIBFFI_CFLAGS$as_nl"
+ as_fn_append MODULE_BLOCK "MODULE__CTYPES_TEST_LDFLAGS=$LIBFFI_LIBS $LIBM$as_nl"
fi
if test "$py_cv_module__ctypes_test" = yes; then