mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
[3.13] gh-130940: Remove PyConfig.use_system_logger (#131129)
Removes ``PyConfig.use_system_logger``, resolving an ABI incompatibility introduced in 3.13.2. Changes the default behavior of iOS to *always* direct stdout/stderr to the system log.
This commit is contained in:
parent
65b58291b0
commit
589f422d1b
9 changed files with 19 additions and 57 deletions
|
@ -1271,17 +1271,6 @@ PyConfig
|
|||
|
||||
Default: ``1`` in Python config and ``0`` in isolated config.
|
||||
|
||||
.. c:member:: int use_system_logger
|
||||
|
||||
If non-zero, ``stdout`` and ``stderr`` will be redirected to the system
|
||||
log.
|
||||
|
||||
Only available on macOS 10.12 and later, and on iOS.
|
||||
|
||||
Default: ``0`` (don't use system log).
|
||||
|
||||
.. versionadded:: 3.13.2
|
||||
|
||||
.. c:member:: int user_site_directory
|
||||
|
||||
If non-zero, add the user site directory to :data:`sys.path`.
|
||||
|
|
|
@ -296,8 +296,6 @@ To add Python to an iOS Xcode project:
|
|||
* Buffered stdio (:c:member:`PyConfig.buffered_stdio`) is *disabled*;
|
||||
* Writing bytecode (:c:member:`PyConfig.write_bytecode`) is *disabled*;
|
||||
* Signal handlers (:c:member:`PyConfig.install_signal_handlers`) are *enabled*;
|
||||
* System logging (:c:member:`PyConfig.use_system_logger`) is *enabled*
|
||||
(optional, but strongly recommended);
|
||||
* ``PYTHONHOME`` for the interpreter is configured to point at the
|
||||
``python`` subfolder of your app's bundle; and
|
||||
* The ``PYTHONPATH`` for the interpreter includes:
|
||||
|
|
|
@ -179,9 +179,6 @@ typedef struct PyConfig {
|
|||
int use_frozen_modules;
|
||||
int safe_path;
|
||||
int int_max_str_digits;
|
||||
#ifdef __APPLE__
|
||||
int use_system_logger;
|
||||
#endif
|
||||
|
||||
int cpu_count;
|
||||
#ifdef Py_GIL_DISABLED
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import unittest
|
||||
from _apple_support import SystemLog
|
||||
from test.support import is_apple
|
||||
from test.support import is_apple_mobile
|
||||
from unittest.mock import Mock, call
|
||||
|
||||
if not is_apple:
|
||||
raise unittest.SkipTest("Apple-specific")
|
||||
if not is_apple_mobile:
|
||||
raise unittest.SkipTest("iOS-specific")
|
||||
|
||||
|
||||
# Test redirection of stdout and stderr to the Apple system log.
|
||||
|
|
|
@ -627,8 +627,6 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
|||
CONFIG_COMPAT.update({
|
||||
'legacy_windows_stdio': 0,
|
||||
})
|
||||
if support.is_apple:
|
||||
CONFIG_COMPAT['use_system_logger'] = False
|
||||
|
||||
CONFIG_PYTHON = dict(CONFIG_COMPAT,
|
||||
_config_init=API_PYTHON,
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
The ``PyConfig.use_system_logger`` attribute, introduced in Python 3.13.2, has
|
||||
been removed. The introduction of this attribute inadvertently introduced an
|
||||
ABI breakage on macOS and iOS. The use of the system logger is now enabled
|
||||
by default on iOS, and disabled by default on macOS.
|
|
@ -130,9 +130,6 @@ static const PyConfigSpec PYCONFIG_SPEC[] = {
|
|||
#ifdef Py_DEBUG
|
||||
SPEC(run_presite, WSTR_OPT),
|
||||
#endif
|
||||
#ifdef __APPLE__
|
||||
SPEC(use_system_logger, BOOL),
|
||||
#endif
|
||||
|
||||
{NULL, 0, 0},
|
||||
};
|
||||
|
@ -751,9 +748,6 @@ config_check_consistency(const PyConfig *config)
|
|||
assert(config->cpu_count != 0);
|
||||
// config->use_frozen_modules is initialized later
|
||||
// by _PyConfig_InitImportConfig().
|
||||
#ifdef __APPLE__
|
||||
assert(config->use_system_logger >= 0);
|
||||
#endif
|
||||
#ifdef Py_STATS
|
||||
assert(config->_pystats >= 0);
|
||||
#endif
|
||||
|
@ -856,9 +850,6 @@ _PyConfig_InitCompatConfig(PyConfig *config)
|
|||
config->_is_python_build = 0;
|
||||
config->code_debug_ranges = 1;
|
||||
config->cpu_count = -1;
|
||||
#ifdef __APPLE__
|
||||
config->use_system_logger = 0;
|
||||
#endif
|
||||
#ifdef Py_GIL_DISABLED
|
||||
config->enable_gil = _PyConfig_GIL_DEFAULT;
|
||||
#endif
|
||||
|
@ -887,9 +878,6 @@ config_init_defaults(PyConfig *config)
|
|||
#ifdef MS_WINDOWS
|
||||
config->legacy_windows_stdio = 0;
|
||||
#endif
|
||||
#ifdef __APPLE__
|
||||
config->use_system_logger = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -925,9 +913,6 @@ PyConfig_InitIsolatedConfig(PyConfig *config)
|
|||
#ifdef MS_WINDOWS
|
||||
config->legacy_windows_stdio = 0;
|
||||
#endif
|
||||
#ifdef __APPLE__
|
||||
config->use_system_logger = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -47,20 +47,15 @@
|
|||
# include <TargetConditionals.h>
|
||||
# include <mach-o/loader.h>
|
||||
// The os_log unified logging APIs were introduced in macOS 10.12, iOS 10.0,
|
||||
// tvOS 10.0, and watchOS 3.0;
|
||||
// tvOS 10.0, and watchOS 3.0; we enable the use of the system logger
|
||||
// automatically on non-macOS platforms.
|
||||
# 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
|
||||
# define USE_APPLE_SYSTEM_LOG 1
|
||||
# else
|
||||
# define HAS_APPLE_SYSTEM_LOG 0
|
||||
# define USE_APPLE_SYSTEM_LOG 0
|
||||
# endif
|
||||
|
||||
# if HAS_APPLE_SYSTEM_LOG
|
||||
# if USE_APPLE_SYSTEM_LOG
|
||||
# include <os/log.h>
|
||||
# endif
|
||||
#endif
|
||||
|
@ -92,7 +87,7 @@ static PyStatus init_sys_streams(PyThreadState *tstate);
|
|||
#ifdef __ANDROID__
|
||||
static PyStatus init_android_streams(PyThreadState *tstate);
|
||||
#endif
|
||||
#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
|
||||
#if defined(__APPLE__) && USE_APPLE_SYSTEM_LOG
|
||||
static PyStatus init_apple_streams(PyThreadState *tstate);
|
||||
#endif
|
||||
static void wait_for_thread_shutdown(PyThreadState *tstate);
|
||||
|
@ -1280,12 +1275,10 @@ init_interp_main(PyThreadState *tstate)
|
|||
return status;
|
||||
}
|
||||
#endif
|
||||
#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
|
||||
if (config->use_system_logger) {
|
||||
status = init_apple_streams(tstate);
|
||||
if (_PyStatus_EXCEPTION(status)) {
|
||||
return status;
|
||||
}
|
||||
#if defined(__APPLE__) && USE_APPLE_SYSTEM_LOG
|
||||
status = init_apple_streams(tstate);
|
||||
if (_PyStatus_EXCEPTION(status)) {
|
||||
return status;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -2971,7 +2964,7 @@ done:
|
|||
|
||||
#endif // __ANDROID__
|
||||
|
||||
#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
|
||||
#if defined(__APPLE__) && USE_APPLE_SYSTEM_LOG
|
||||
|
||||
static PyObject *
|
||||
apple_log_write_impl(PyObject *self, PyObject *args)
|
||||
|
@ -3032,7 +3025,7 @@ done:
|
|||
return status;
|
||||
}
|
||||
|
||||
#endif // __APPLE__ && HAS_APPLE_SYSTEM_LOG
|
||||
#endif // __APPLE__ && USE_APPLE_SYSTEM_LOG
|
||||
|
||||
|
||||
static void
|
||||
|
|
|
@ -53,8 +53,6 @@
|
|||
// Enforce UTF-8 encoding for stderr, stdout, file-system encoding and locale.
|
||||
// See https://docs.python.org/3/library/os.html#python-utf-8-mode.
|
||||
preconfig.utf8_mode = 1;
|
||||
// Use the system logger for stdout/err
|
||||
config.use_system_logger = 1;
|
||||
// Don't buffer stdio. We want output to appears in the log immediately
|
||||
config.buffered_stdio = 0;
|
||||
// Don't write bytecode; we can't modify the app bundle
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue