Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-128146: Exclude os/log.h import on older macOS versions. #128165

Merged
merged 5 commits into from
Jan 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Usage of the unified Apple System Log APIs was disabled when the minimum
macOS version is earlier than 10.12.
33 changes: 22 additions & 11 deletions Python/pylifecycle.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,25 @@

#if defined(__APPLE__)
# include <AvailabilityMacros.h>
freakboy3742 marked this conversation as resolved.
Show resolved Hide resolved
# 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
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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)) {
Expand Down Expand Up @@ -2946,7 +2963,7 @@ init_android_streams(PyThreadState *tstate)

#endif // __ANDROID__

#if defined(__APPLE__)
#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG

static PyObject *
apple_log_write_impl(PyObject *self, PyObject *args)
Expand All @@ -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;
}

Expand Down Expand Up @@ -2999,7 +3011,6 @@ init_apple_streams(PyThreadState *tstate)
if (result == NULL) {
goto error;
}

goto done;

error:
Expand All @@ -3013,7 +3024,7 @@ init_apple_streams(PyThreadState *tstate)
return status;
}

#endif // __APPLE__
#endif // __APPLE__ && HAS_APPLE_SYSTEM_LOG


static void
Expand Down
Loading