From 24d2cbc42ccf08dba79394635db3be084eed9062 Mon Sep 17 00:00:00 2001 From: Kevin Buettner Date: Mon, 25 Jul 2022 12:04:10 -0700 Subject: set/show python dont-write-bytecode fixes GDB uses the environment variable PYTHONDONTWRITEBYTECODE to determine whether or not to write the result of byte-compiling python modules when the "python dont-write-bytecode" setting is "auto". Simon noticed that GDB's implementation doesn't follow the Python documentation. At present, GDB only checks for the existence of this environment variable. That is not sufficient though. Regarding PYTHONDONTWRITEBYTECODE, this document... https://docs.python.org/3/using/cmdline.html ...says: If this is set to a non-empty string, Python won't try to write .pyc files on the import of source modules. This commit fixes GDB's handling of PYTHONDONTWRITEBYTECODE by adding an empty string check. This commit also corrects the set/show command documentation for "python dont-write-bytecode". The current doc was just a copy of that for set/show python ignore-environment. During his review of an earlier version of this patch, Eli Zaretskii asked that the help text that I proposed for "set/show python dont-write-bytecode" be expanded. I've done that in addition to clarifying the documentation of this option in the GDB manual. --- gdb/python/python.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'gdb/python/python.c') diff --git a/gdb/python/python.c b/gdb/python/python.c index c7d4157..7997bee 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -1866,8 +1866,15 @@ python_write_bytecode () int wbc = 0; if (python_dont_write_bytecode == AUTO_BOOLEAN_AUTO) - wbc = (!python_ignore_environment - && getenv ("PYTHONDONTWRITEBYTECODE") != nullptr) ? 0 : 1; + { + if (python_ignore_environment) + wbc = 1; + else + { + const char *pdwbc = getenv ("PYTHONDONTWRITEBYTECODE"); + wbc = (pdwbc == nullptr || pdwbc[0] == '\0') ? 1 : 0; + } + } else wbc = python_dont_write_bytecode == AUTO_BOOLEAN_TRUE ? 0 : 1; @@ -2346,11 +2353,22 @@ python executable."), add_setshow_auto_boolean_cmd ("dont-write-bytecode", no_class, &python_dont_write_bytecode, _("\ -Set whether the Python interpreter should ignore environment variables."), _(" \ -Show whether the Python interpreter showlist ignore environment variables."), _(" \ -When enabled GDB's Python interpreter will ignore any Python related\n \ -flags in the environment. This is equivalent to passing `-E' to a\n \ -python executable."), +Set whether the Python interpreter should avoid byte-compiling python modules."), _("\ +Show whether the Python interpreter should avoid byte-compiling python modules."), _("\ +When enabled, GDB's embedded Python interpreter won't byte-compile python\n\ +modules. In order to take effect, this setting must be enabled in an early\n\ +initialization file, i.e. those run via the --early-init-eval-command or\n\ +-eix command line options. A 'set python dont-write-bytecode on' command\n\ +can also be issued directly from the GDB command line via the\n\ +--early-init-eval-command or -eiex command line options.\n\ +\n\ +This setting defaults to 'auto'. In this mode, provided the 'python\n\ +ignore-environment' setting is 'off', the environment variable\n\ +PYTHONDONTWRITEBYTECODE is examined to determine whether or not to\n\ +byte-compile python modules. PYTHONDONTWRITEBYTECODE is considered to be\n\ +off/disabled either when set to the empty string or when the\n\ +environment variable doesn't exist. All other settings, including those\n\ +which don't seem to make sense, indicate that it's on/enabled."), set_python_dont_write_bytecode, show_python_dont_write_bytecode, &user_set_python_list, -- cgit v1.1