mirror of
https://github.com/python/cpython.git
synced 2025-09-19 07:00:59 +00:00
[3.13] gh-128146: Exclude os/log.h import on older macOS versions. (GH-128165) (#128575)
gh-128146: Exclude os/log.h import on older macOS versions. (GH-128165)
Reworks the handling of Apple system log handling to account for older macOS
versions that don't provide os-log.
(cherry picked from commit e837a1f71e
)
Co-authored-by: Russell Keith-Magee <russell@keith-magee.com>
This commit is contained in:
parent
d81b99b53b
commit
bbe0b33d2a
2 changed files with 24 additions and 11 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
Usage of the unified Apple System Log APIs was disabled when the minimum
|
||||||
|
macOS version is earlier than 10.12.
|
|
@ -44,8 +44,25 @@
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
# include <AvailabilityMacros.h>
|
# include <AvailabilityMacros.h>
|
||||||
|
# include <TargetConditionals.h>
|
||||||
# include <mach-o/loader.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
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_SIGNAL_H
|
#ifdef HAVE_SIGNAL_H
|
||||||
|
@ -75,7 +92,7 @@ static PyStatus init_sys_streams(PyThreadState *tstate);
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
static PyStatus init_android_streams(PyThreadState *tstate);
|
static PyStatus init_android_streams(PyThreadState *tstate);
|
||||||
#endif
|
#endif
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
|
||||||
static PyStatus init_apple_streams(PyThreadState *tstate);
|
static PyStatus init_apple_streams(PyThreadState *tstate);
|
||||||
#endif
|
#endif
|
||||||
static void wait_for_thread_shutdown(PyThreadState *tstate);
|
static void wait_for_thread_shutdown(PyThreadState *tstate);
|
||||||
|
@ -1258,7 +1275,7 @@ init_interp_main(PyThreadState *tstate)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
|
||||||
if (config->use_system_logger) {
|
if (config->use_system_logger) {
|
||||||
status = init_apple_streams(tstate);
|
status = init_apple_streams(tstate);
|
||||||
if (_PyStatus_EXCEPTION(status)) {
|
if (_PyStatus_EXCEPTION(status)) {
|
||||||
|
@ -2933,7 +2950,7 @@ done:
|
||||||
|
|
||||||
#endif // __ANDROID__
|
#endif // __ANDROID__
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
apple_log_write_impl(PyObject *self, PyObject *args)
|
apple_log_write_impl(PyObject *self, PyObject *args)
|
||||||
|
@ -2944,14 +2961,9 @@ apple_log_write_impl(PyObject *self, PyObject *args)
|
||||||
return NULL;
|
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
|
// Pass the user-provided text through explicit %s formatting
|
||||||
// to avoid % literals being interpreted as a formatting directive.
|
// to avoid % literals being interpreted as a formatting directive.
|
||||||
os_log_with_type(OS_LOG_DEFAULT, logtype, "%s", text);
|
os_log_with_type(OS_LOG_DEFAULT, logtype, "%s", text);
|
||||||
#endif
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2986,7 +2998,6 @@ init_apple_streams(PyThreadState *tstate)
|
||||||
if (result == NULL) {
|
if (result == NULL) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
@ -3000,7 +3011,7 @@ done:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // __APPLE__
|
#endif // __APPLE__ && HAS_APPLE_SYSTEM_LOG
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue