forked from Imagelibrary/binutils-gdb
[gdb/python] Handle empty PYTHONDONTWRITEBYTECODE
When using PYTHONDONTWRITEBYTECODE with an empty string we get:
...
$ PYTHONDONTWRITEBYTECODE= gdb -q -batch -ex "show python dont-write-bytecode"
Python's dont-write-bytecode setting is auto (currently on).
...
This is incorrect, it should be off.
The actual setting is correct, that was already fixed in commit 24d2cbc42c
("set/show python dont-write-bytecode fixes"), in function
python_write_bytecode.
Fix this by:
- factoring out new function env_python_dont_write_bytecode out of
python_write_bytecode, and
- using it in show_python_dont_write_bytecode.
Tested on x86_64-linux, using test-case gdb.python/py-startup-opt.exp and:
- PYTHONDONTWRITEBYTECODE=
- PYTHONDONTWRITEBYTECODE=1
- unset PYTHONDONTWRITEBYTECODE
Approved-By: Tom Tromey <tom@tromey.com>
PR python/32389
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32389
This commit is contained in:
@@ -2141,6 +2141,17 @@ set_python_ignore_environment (const char *args, int from_tty,
|
|||||||
not write `.pyc' files on import of a module. */
|
not write `.pyc' files on import of a module. */
|
||||||
static enum auto_boolean python_dont_write_bytecode = AUTO_BOOLEAN_AUTO;
|
static enum auto_boolean python_dont_write_bytecode = AUTO_BOOLEAN_AUTO;
|
||||||
|
|
||||||
|
|
||||||
|
/* Return true if environment variable PYTHONDONTWRITEBYTECODE is set to a
|
||||||
|
non-empty string. */
|
||||||
|
|
||||||
|
static bool
|
||||||
|
env_python_dont_write_bytecode ()
|
||||||
|
{
|
||||||
|
const char *envvar = getenv ("PYTHONDONTWRITEBYTECODE");
|
||||||
|
return envvar != nullptr && envvar[0] != '\0';
|
||||||
|
}
|
||||||
|
|
||||||
/* Implement 'show python dont-write-bytecode'. */
|
/* Implement 'show python dont-write-bytecode'. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -2150,8 +2161,10 @@ show_python_dont_write_bytecode (struct ui_file *file, int from_tty,
|
|||||||
if (python_dont_write_bytecode == AUTO_BOOLEAN_AUTO)
|
if (python_dont_write_bytecode == AUTO_BOOLEAN_AUTO)
|
||||||
{
|
{
|
||||||
const char *auto_string
|
const char *auto_string
|
||||||
= (python_ignore_environment
|
= ((python_ignore_environment
|
||||||
|| getenv ("PYTHONDONTWRITEBYTECODE") == nullptr) ? "off" : "on";
|
|| !env_python_dont_write_bytecode ())
|
||||||
|
? "off"
|
||||||
|
: "on");
|
||||||
|
|
||||||
gdb_printf (file,
|
gdb_printf (file,
|
||||||
_("Python's dont-write-bytecode setting is %s (currently %s).\n"),
|
_("Python's dont-write-bytecode setting is %s (currently %s).\n"),
|
||||||
@@ -2177,10 +2190,7 @@ python_write_bytecode ()
|
|||||||
if (python_ignore_environment)
|
if (python_ignore_environment)
|
||||||
wbc = 1;
|
wbc = 1;
|
||||||
else
|
else
|
||||||
{
|
wbc = env_python_dont_write_bytecode () ? 0 : 1;
|
||||||
const char *pdwbc = getenv ("PYTHONDONTWRITEBYTECODE");
|
|
||||||
wbc = (pdwbc == nullptr || pdwbc[0] == '\0') ? 1 : 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
wbc = python_dont_write_bytecode == AUTO_BOOLEAN_TRUE ? 0 : 1;
|
wbc = python_dont_write_bytecode == AUTO_BOOLEAN_TRUE ? 0 : 1;
|
||||||
|
|||||||
@@ -93,6 +93,14 @@ proc test_python_settings { exp_state } {
|
|||||||
"else:" "" \
|
"else:" "" \
|
||||||
" print (\"${attr} is off\")" "" \
|
" print (\"${attr} is off\")" "" \
|
||||||
"end" "${attr} is ${answer}"
|
"end" "${attr} is ${answer}"
|
||||||
|
|
||||||
|
if { $attr == "dont_write_bytecode" && $exp_state == "off" } {
|
||||||
|
set setting dont-write-bytecode
|
||||||
|
set show_setting \
|
||||||
|
"Python's $setting setting is auto (currently $answer)."
|
||||||
|
gdb_test "show python $setting" \
|
||||||
|
[string_to_regexp $show_setting]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gdb_exit
|
gdb_exit
|
||||||
|
|||||||
Reference in New Issue
Block a user