]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-93491: Add support tier detection to configure (GH-93492)
authorChristian Heimes <christian@python.org>
Fri, 10 Jun 2022 13:25:33 +0000 (15:25 +0200)
committerGitHub <noreply@github.com>
Fri, 10 Jun 2022 13:25:33 +0000 (15:25 +0200)
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
Co-authored-by: Steve Dower <steve.dower@microsoft.com>
Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@protonmail.com>
Misc/NEWS.d/next/Build/2022-06-04-12-53-53.gh-issue-93491.ehM211.rst [new file with mode: 0644]
PC/pyconfig.h
configure
configure.ac
pyconfig.h.in

diff --git a/Misc/NEWS.d/next/Build/2022-06-04-12-53-53.gh-issue-93491.ehM211.rst b/Misc/NEWS.d/next/Build/2022-06-04-12-53-53.gh-issue-93491.ehM211.rst
new file mode 100644 (file)
index 0000000..b3560fa
--- /dev/null
@@ -0,0 +1 @@
+``configure`` now detects and reports :pep:`11` support tiers.
index 2ddd5847f9c8a760f1062161eaa29f557646d47b..87d55fa07e51e380d0710937834f2653b0e0ba02 100644 (file)
@@ -113,20 +113,30 @@ WIN32 is still required for the locale module.
 #define MS_WIN64
 #endif
 
-/* set the COMPILER */
+/* set the COMPILER and support tier
+ *
+ * win_amd64 MSVC (x86_64-pc-windows-msvc): 1
+ * win32 MSVC (i686-pc-windows-msvc): 1
+ * win_arm64 MSVC (aarch64-pc-windows-msvc): 3
+ * other archs and ICC: 0
+ */
 #ifdef MS_WIN64
 #if defined(_M_X64) || defined(_M_AMD64)
 #if defined(__INTEL_COMPILER)
 #define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 64 bit (amd64) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]")
+#define PY_SUPPORT_TIER 0
 #else
 #define COMPILER _Py_PASTE_VERSION("64 bit (AMD64)")
+#define PY_SUPPORT_TIER 1
 #endif /* __INTEL_COMPILER */
 #define PYD_PLATFORM_TAG "win_amd64"
 #elif defined(_M_ARM64)
 #define COMPILER _Py_PASTE_VERSION("64 bit (ARM64)")
+#define PY_SUPPORT_TIER 3
 #define PYD_PLATFORM_TAG "win_arm64"
 #else
 #define COMPILER _Py_PASTE_VERSION("64 bit (Unknown)")
+#define PY_SUPPORT_TIER 0
 #endif
 #endif /* MS_WIN64 */
 
@@ -173,15 +183,19 @@ typedef _W64 int Py_ssize_t;
 #if defined(_M_IX86)
 #if defined(__INTEL_COMPILER)
 #define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 32 bit (Intel) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]")
+#define PY_SUPPORT_TIER 0
 #else
 #define COMPILER _Py_PASTE_VERSION("32 bit (Intel)")
+#define PY_SUPPORT_TIER 1
 #endif /* __INTEL_COMPILER */
 #define PYD_PLATFORM_TAG "win32"
 #elif defined(_M_ARM)
 #define COMPILER _Py_PASTE_VERSION("32 bit (ARM)")
 #define PYD_PLATFORM_TAG "win_arm32"
+#define PY_SUPPORT_TIER 0
 #else
 #define COMPILER _Py_PASTE_VERSION("32 bit (Unknown)")
+#define PY_SUPPORT_TIER 0
 #endif
 #endif /* MS_WIN32 && !MS_WIN64 */
 
index 601089cd44c204b7713b29d243b4222018706d45..677de64741128bf0be87d4d2b227a5fab8127045 100755 (executable)
--- a/configure
+++ b/configure
@@ -5213,6 +5213,39 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CC compiler name" >&5
+$as_echo_n "checking for CC compiler name... " >&6; }
+if ${ac_cv_cc_name+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+cat > conftest.c <<EOF
+#if defined(__INTEL_COMPILER) || defined(__ICC)
+  icc
+#elif defined(__ibmxl__) || defined(__xlc__) || defined(__xlC__)
+  xlc
+#elif defined(_MSC_VER)
+  msvc
+#elif defined(__clang__)
+  clang
+#elif defined(__GNUC__)
+  gcc
+#else
+#  error unknown compiler
+#endif
+EOF
+
+if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then
+  ac_cv_cc_name=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d '  '`
+else
+  ac_cv_cc_name="unknown"
+fi
+rm -f conftest.c conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cc_name" >&5
+$as_echo "$ac_cv_cc_name" >&6; }
+
 # checks for UNIX variants that set C preprocessor variables
 # may set _GNU_SOURCE, __EXTENSIONS__, _POSIX_PTHREAD_SEMANTICS,
 # _POSIX_SOURCE, _POSIX_1_SOURCE, and more
@@ -6172,6 +6205,66 @@ if test x$MULTIARCH != x; then
 fi
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PEP 11 support tier" >&5
+$as_echo_n "checking for PEP 11 support tier... " >&6; }
+case $host/$ac_cv_cc_name in #(
+  x86_64-*-linux-gnu/gcc) :
+    PY_SUPPORT_TIER=1 ;; #(
+    x86_64-apple-darwin*/clang) :
+    PY_SUPPORT_TIER=1 ;; #(
+    i686-pc-windows-msvc/msvc) :
+    PY_SUPPORT_TIER=1 ;; #(
+    x86_64-pc-windows-msvc/msvc) :
+    PY_SUPPORT_TIER=1 ;; #(
+
+  aarch64-apple-darwin*/clang) :
+    PY_SUPPORT_TIER=2 ;; #(
+    aarch64-*-linux-gnu/gcc) :
+    PY_SUPPORT_TIER=2 ;; #(
+    aarch64-*-linux-gnu/clang) :
+    PY_SUPPORT_TIER=2 ;; #(
+  powerpc64le-*-linux-gnu/gcc) :
+    PY_SUPPORT_TIER=2 ;; #(
+    x86_64-*-linux-gnu/clang) :
+    PY_SUPPORT_TIER=2 ;; #(
+
+  aarch64-pc-windows-msvc/msvc) :
+    PY_SUPPORT_TIER=3 ;; #(
+    armv7l-*-linux-gnueabihf/gcc) :
+    PY_SUPPORT_TIER=3 ;; #(
+    powerpc64le-*-linux-gnu/clang) :
+    PY_SUPPORT_TIER=3 ;; #(
+    s390x-*-linux-gnu/gcc) :
+    PY_SUPPORT_TIER=3 ;; #(
+        x86_64-*-freebsd/clang) :
+    PY_SUPPORT_TIER=3 ;; #(
+  *) :
+      PY_SUPPORT_TIER=0
+ ;;
+esac
+
+case $PY_SUPPORT_TIER in #(
+  1) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $host/$ac_cv_cc_name has tier 1 (supported)" >&5
+$as_echo "$host/$ac_cv_cc_name has tier 1 (supported)" >&6; } ;; #(
+  2) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $host/$ac_cv_cc_name has tier 2 (supported)" >&5
+$as_echo "$host/$ac_cv_cc_name has tier 2 (supported)" >&6; } ;; #(
+  3) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $host/$ac_cv_cc_name has tier 3 (partially supported)" >&5
+$as_echo "$host/$ac_cv_cc_name has tier 3 (partially supported)" >&6; } ;; #(
+  *) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $host/$ac_cv_cc_name is not supported" >&5
+$as_echo "$as_me: WARNING: $host/$ac_cv_cc_name is not supported" >&2;}
+ ;;
+esac
+
+
+cat >>confdefs.h <<_ACEOF
+#define PY_SUPPORT_TIER $PY_SUPPORT_TIER
+_ACEOF
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Wl,--no-as-needed" >&5
 $as_echo_n "checking for -Wl,--no-as-needed... " >&6; }
 if ${ac_cv_wl_no_as_needed+:} false; then :
@@ -26296,3 +26389,16 @@ If you want a release build with all stable optimizations active (PGO, etc),
 please run ./configure --enable-optimizations
 " >&6;}
 fi
+
+if test "x$PY_SUPPORT_TIER" = x0; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+
+Platform \"$host\" with compiler \"$ac_cv_cc_name\" is not supported by the
+CPython core team, see https://peps.python.org/pep-0011/ for more information.
+" >&5
+$as_echo "$as_me: WARNING:
+
+Platform \"$host\" with compiler \"$ac_cv_cc_name\" is not supported by the
+CPython core team, see https://peps.python.org/pep-0011/ for more information.
+" >&2;}
+fi
index 4c540ec52b4d867ec134a45a3d8683648ec68206..af437b6d401f8f99f2829f2a72bd7d573f6f1c9a 100644 (file)
@@ -770,6 +770,35 @@ AC_PROG_GREP
 AC_PROG_SED
 AC_PROG_EGREP
 
+dnl detect compiler name
+dnl check for xlc before clang, newer xlc's can use clang as frontend.
+dnl check for GCC last, other compilers set __GNUC__, too.
+dnl msvc is listed for completeness.
+AC_CACHE_CHECK([for CC compiler name], [ac_cv_cc_name], [
+cat > conftest.c <<EOF
+#if defined(__INTEL_COMPILER) || defined(__ICC)
+  icc
+#elif defined(__ibmxl__) || defined(__xlc__) || defined(__xlC__)
+  xlc
+#elif defined(_MSC_VER)
+  msvc
+#elif defined(__clang__)
+  clang
+#elif defined(__GNUC__)
+  gcc
+#else
+#  error unknown compiler
+#endif
+EOF
+
+if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then
+  ac_cv_cc_name=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d '  '`
+else
+  ac_cv_cc_name="unknown"
+fi
+rm -f conftest.c conftest.out
+])
+
 # checks for UNIX variants that set C preprocessor variables
 # may set _GNU_SOURCE, __EXTENSIONS__, _POSIX_PTHREAD_SEMANTICS,
 # _POSIX_SOURCE, _POSIX_1_SOURCE, and more
@@ -1031,6 +1060,42 @@ if test x$MULTIARCH != x; then
 fi
 AC_SUBST(MULTIARCH_CPPFLAGS)
 
+dnl Support tiers according to https://peps.python.org/pep-0011/
+dnl
+dnl NOTE: Windows support tiers are defined in PC/pyconfig.h.
+dnl
+AC_MSG_CHECKING([for PEP 11 support tier])
+AS_CASE([$host/$ac_cv_cc_name],
+  [x86_64-*-linux-gnu/gcc],          [PY_SUPPORT_TIER=1], dnl Linux on AMD64, any vendor, glibc, gcc
+  [x86_64-apple-darwin*/clang],      [PY_SUPPORT_TIER=1], dnl macOS on Intel, any version
+  [i686-pc-windows-msvc/msvc],       [PY_SUPPORT_TIER=1], dnl 32bit Windows on Intel, MSVC
+  [x86_64-pc-windows-msvc/msvc],     [PY_SUPPORT_TIER=1], dnl 64bit Windows on AMD64, MSVC
+
+  [aarch64-apple-darwin*/clang],     [PY_SUPPORT_TIER=2], dnl macOS on M1, any version
+  [aarch64-*-linux-gnu/gcc],         [PY_SUPPORT_TIER=2], dnl Linux ARM64, glibc, gcc+clang
+  [aarch64-*-linux-gnu/clang],       [PY_SUPPORT_TIER=2],
+  [powerpc64le-*-linux-gnu/gcc],     [PY_SUPPORT_TIER=2], dnl Linux on PPC64 little endian, glibc, gcc
+  [x86_64-*-linux-gnu/clang],        [PY_SUPPORT_TIER=2], dnl Linux on AMD64, any vendor, glibc, clang
+
+  [aarch64-pc-windows-msvc/msvc],    [PY_SUPPORT_TIER=3], dnl Windows ARM64, MSVC
+  [armv7l-*-linux-gnueabihf/gcc],    [PY_SUPPORT_TIER=3], dnl ARMv7 LE with hardware floats, any vendor, glibc, gcc
+  [powerpc64le-*-linux-gnu/clang],   [PY_SUPPORT_TIER=3], dnl Linux on PPC64 little endian, glibc, clang
+  [s390x-*-linux-gnu/gcc],           [PY_SUPPORT_TIER=3], dnl Linux on 64bit s390x (big endian), glibc, gcc
+  dnl [wasm32-unknown-emscripten/clang], [PY_SUPPORT_TIER=3], dnl WebAssembly Emscripten
+  dnl [wasm32-unknown-wasi/clang],       [PY_SUPPORT_TIER=3], dnl WebAssembly System Interface
+  [x86_64-*-freebsd/clang],          [PY_SUPPORT_TIER=3], dnl FreeBSD on AMD64
+  [PY_SUPPORT_TIER=0]
+)
+
+AS_CASE([$PY_SUPPORT_TIER],
+  [1], [AC_MSG_RESULT([$host/$ac_cv_cc_name has tier 1 (supported)])],
+  [2], [AC_MSG_RESULT([$host/$ac_cv_cc_name has tier 2 (supported)])],
+  [3], [AC_MSG_RESULT([$host/$ac_cv_cc_name has tier 3 (partially supported)])],
+  [AC_MSG_WARN([$host/$ac_cv_cc_name is not supported])]
+)
+
+AC_DEFINE_UNQUOTED([PY_SUPPORT_TIER], [$PY_SUPPORT_TIER], [PEP 11 Support tier (1, 2, 3 or 0 for unsupported)])
+
 AC_CACHE_CHECK([for -Wl,--no-as-needed], [ac_cv_wl_no_as_needed], [
   save_LDFLAGS="$LDFLAGS"
   AS_VAR_APPEND([LDFLAGS], [-Wl,--no-as-needed])
@@ -6878,3 +6943,9 @@ If you want a release build with all stable optimizations active (PGO, etc),
 please run ./configure --enable-optimizations
 ])
 fi
+
+AS_VAR_IF([PY_SUPPORT_TIER], [0], [AC_MSG_WARN([
+
+Platform "$host" with compiler "$ac_cv_cc_name" is not supported by the
+CPython core team, see https://peps.python.org/pep-0011/ for more information.
+])])
index b32a5802d3182e5917d900c5e0ff95c8c377ab86..a09652ec15e536ef66fc3c73f8fd6ad55703b597 100644 (file)
 /* Cipher suite string for PY_SSL_DEFAULT_CIPHERS=0 */
 #undef PY_SSL_DEFAULT_CIPHER_STRING
 
+/* PEP 11 Support tier (1, 2, 3 or 0 for unsupported) */
+#undef PY_SUPPORT_TIER
+
 /* Define if you want to build an interpreter with many run-time checks. */
 #undef Py_DEBUG