summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2025-01-07 05:12:58 (GMT)
committerGitHub <noreply@github.com>2025-01-07 05:12:58 (GMT)
commite837a1f71e832ce8f551a6fac05e346f654457e0 (patch)
treeb06ad118cbba5dd4ef33f128b315c4dd01956b6d /Python
parent24b147a19b360c49cb1740aa46211d342aaa071f (diff)
downloadcpython-e837a1f71e832ce8f551a6fac05e346f654457e0.zip
cpython-e837a1f71e832ce8f551a6fac05e346f654457e0.tar.gz
cpython-e837a1f71e832ce8f551a6fac05e346f654457e0.tar.bz2
gh-128146: Exclude os/log.h import on older macOS versions. (#128165)
Reworks the handling of Apple system log handling to account for older macOS versions that don't provide os-log.
Diffstat (limited to 'Python')
-rw-r--r--Python/pylifecycle.c33
1 files changed, 22 insertions, 11 deletions
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 0641812..8a15a09 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -46,8 +46,25 @@
#if defined(__APPLE__)
# include <AvailabilityMacros.h>
+# include <TargetConditionals.h>
# include <mach-o/loader.h>
-# include <os/log.h>
+// The os_log unified logging APIs were introduced in macOS 10.12, iOS 10.0,
+// tvOS 10.0, and watchOS 3.0;
+# if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
+# define HAS_APPLE_SYSTEM_LOG 1
+# elif defined(TARGET_OS_OSX) && TARGET_OS_OSX
+# if defined(MAC_OS_X_VERSION_10_12) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12
+# define HAS_APPLE_SYSTEM_LOG 1
+# else
+# define HAS_APPLE_SYSTEM_LOG 0
+# endif
+# else
+# define HAS_APPLE_SYSTEM_LOG 0
+# endif
+
+# if HAS_APPLE_SYSTEM_LOG
+# include <os/log.h>
+# endif
#endif
#ifdef HAVE_SIGNAL_H
@@ -77,7 +94,7 @@ static PyStatus init_sys_streams(PyThreadState *tstate);
#ifdef __ANDROID__
static PyStatus init_android_streams(PyThreadState *tstate);
#endif
-#if defined(__APPLE__)
+#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
static PyStatus init_apple_streams(PyThreadState *tstate);
#endif
static void wait_for_thread_shutdown(PyThreadState *tstate);
@@ -1262,7 +1279,7 @@ init_interp_main(PyThreadState *tstate)
return status;
}
#endif
-#if defined(__APPLE__)
+#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
if (config->use_system_logger) {
status = init_apple_streams(tstate);
if (_PyStatus_EXCEPTION(status)) {
@@ -2946,7 +2963,7 @@ done:
#endif // __ANDROID__
-#if defined(__APPLE__)
+#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
static PyObject *
apple_log_write_impl(PyObject *self, PyObject *args)
@@ -2957,14 +2974,9 @@ apple_log_write_impl(PyObject *self, PyObject *args)
return NULL;
}
- // Call the underlying Apple logging API. The os_log unified logging APIs
- // were introduced in macOS 10.12, iOS 10.0, tvOS 10.0, and watchOS 3.0;
- // this call is a no-op on older versions.
- #if TARGET_OS_IPHONE || (TARGET_OS_OSX && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12)
// Pass the user-provided text through explicit %s formatting
// to avoid % literals being interpreted as a formatting directive.
os_log_with_type(OS_LOG_DEFAULT, logtype, "%s", text);
- #endif
Py_RETURN_NONE;
}
@@ -2999,7 +3011,6 @@ init_apple_streams(PyThreadState *tstate)
if (result == NULL) {
goto error;
}
-
goto done;
error:
@@ -3013,7 +3024,7 @@ done:
return status;
}
-#endif // __APPLE__
+#endif // __APPLE__ && HAS_APPLE_SYSTEM_LOG
static void