[Python-checkins] gh-93491: Add support tier detection to configure (GH-93492)

miss-islington webhook-mailer at python.org
Fri Jun 10 09:50:41 EDT 2022


https://github.com/python/cpython/commit/516d90eb215315a120e0a7168db68540321bb478
commit: 516d90eb215315a120e0a7168db68540321bb478
branch: 3.11
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2022-06-10T06:50:26-07:00
summary:

gh-93491: Add support tier detection to configure (GH-93492)


Co-authored-by: Adam Turner <9087854+AA-Turner at users.noreply.github.com>
Co-authored-by: Steve Dower <steve.dower at microsoft.com>
Co-authored-by: Erlend Egeberg Aasland <erlend.aasland at protonmail.com>
(cherry picked from commit 3124d9a5aafb64431aa9facd0ae0e12201be77fa)

Co-authored-by: Christian Heimes <christian at python.org>

files:
A Misc/NEWS.d/next/Build/2022-06-04-12-53-53.gh-issue-93491.ehM211.rst
M PC/pyconfig.h
M configure
M configure.ac
M 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
index 0000000000000..b3560fac81d2a
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2022-06-04-12-53-53.gh-issue-93491.ehM211.rst
@@ -0,0 +1 @@
+``configure`` now detects and reports :pep:`11` support tiers.
diff --git a/PC/pyconfig.h b/PC/pyconfig.h
index 5a96a4ebe51ee..f71d5fe00d575 100644
--- a/PC/pyconfig.h
+++ b/PC/pyconfig.h
@@ -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 */
 
diff --git a/configure b/configure
index 2ad709ca5492b..5c85360b3038f 100755
--- 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 :
@@ -26407,3 +26500,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
diff --git a/configure.ac b/configure.ac
index c1ea163e4461e..93c198fe1cee3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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])
@@ -6944,3 +7009,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.
+])])
diff --git a/pyconfig.h.in b/pyconfig.h.in
index b325ef259c8c0..01928cbb33ad5 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -1519,6 +1519,9 @@
 /* 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
 



More information about the Python-checkins mailing list