Skip to content
This repository was archived by the owner on Jan 30, 2023. It is now read-only.

Commit a9a2fde

Browse files
author
Matthias Koeppe
committed
src/sage/doctest/control.py: Get sage-gdb-commands with importlib.resources
1 parent e0c9408 commit a9a2fde

File tree

1 file changed

+76
-71
lines changed

1 file changed

+76
-71
lines changed

src/sage/doctest/control.py

+76-71
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@
2424
import os
2525
import sys
2626
import time
27+
import importlib.resources
2728
import json
2829
import re
30+
import shlex
2931
import types
3032
import sage.misc.flatten
3133
import sage.misc.randstate as randstate
@@ -1183,92 +1185,95 @@ def run_val_gdb(self, testing=False):
11831185
sage: DD = DocTestDefaults(gdb=True)
11841186
sage: DC = DocTestController(DD, ["hello_world.py"])
11851187
sage: DC.run_val_gdb(testing=True)
1186-
exec gdb -x "...sage-gdb-commands" --args sage-runtests --serial --timeout=0 hello_world.py
1188+
exec gdb -x ...sage-gdb-commands... --args sage-runtests --serial --timeout=0 hello_world.py
11871189
11881190
::
11891191
11901192
sage: DD = DocTestDefaults(valgrind=True, optional="all", timeout=172800)
11911193
sage: DC = DocTestController(DD, ["hello_world.py"])
11921194
sage: DC.run_val_gdb(testing=True)
1193-
exec valgrind --tool=memcheck --leak-resolution=high --leak-check=full --num-callers=25 --suppressions="...valgrind/pyalloc.supp" --suppressions="...valgrind/sage.supp" --suppressions="...valgrind/sage-additional.supp" --log-file=".../valgrind/sage-memcheck.%p" sage-runtests --serial --timeout=172800 --optional=all hello_world.py
1195+
exec valgrind --tool=memcheck --leak-resolution=high --leak-check=full --num-callers=25 --suppressions="...valgrind/pyalloc.supp" --suppressions="...valgrind/sage.supp" --suppressions="...valgrind/sage-additional.supp" --log-file=.../valgrind/sage-memcheck.%p... sage-runtests --serial --timeout=172800 --optional=all hello_world.py
11941196
"""
11951197
try:
11961198
sage_cmd = self._assemble_cmd()
11971199
except ValueError:
11981200
self.log(sys.exc_info()[1])
11991201
return 2
12001202
opt = self.options
1201-
if opt.gdb:
1202-
cmd = '''exec gdb -x "%s" --args '''%(os.path.join(SAGE_VENV, "bin", "sage-gdb-commands"))
1203-
flags = ""
1204-
if opt.logfile:
1205-
sage_cmd += " --logfile %s"%(opt.logfile)
1206-
else:
1207-
if opt.logfile is None:
1208-
default_log = os.path.join(DOT_SAGE, "valgrind")
1209-
if os.path.exists(default_log):
1210-
if not os.path.isdir(default_log):
1211-
self.log("%s must be a directory"%default_log)
1212-
return 2
1213-
else:
1214-
os.makedirs(default_log)
1215-
logfile = os.path.join(default_log, "sage-%s")
1216-
else:
1217-
logfile = opt.logfile
1218-
if opt.valgrind:
1219-
toolname = "memcheck"
1220-
flags = os.getenv("SAGE_MEMCHECK_FLAGS")
1221-
if flags is None:
1222-
flags = "--leak-resolution=high --leak-check=full --num-callers=25 "
1223-
flags += '''--suppressions="%s" '''%(os.path.join(SAGE_EXTCODE,"valgrind","pyalloc.supp"))
1224-
flags += '''--suppressions="%s" '''%(os.path.join(SAGE_EXTCODE,"valgrind","sage.supp"))
1225-
flags += '''--suppressions="%s" '''%(os.path.join(SAGE_EXTCODE,"valgrind","sage-additional.supp"))
1226-
elif opt.massif:
1227-
toolname = "massif"
1228-
flags = os.getenv("SAGE_MASSIF_FLAGS", "--depth=6 ")
1229-
elif opt.cachegrind:
1230-
toolname = "cachegrind"
1231-
flags = os.getenv("SAGE_CACHEGRIND_FLAGS", "")
1232-
elif opt.omega:
1233-
toolname = "exp-omega"
1234-
flags = os.getenv("SAGE_OMEGA_FLAGS", "")
1235-
cmd = "exec valgrind --tool=%s "%(toolname)
1236-
flags += ''' --log-file="%s" ''' % logfile
1237-
if opt.omega:
1238-
toolname = "omega"
1239-
if "%s" in flags:
1240-
flags %= toolname + ".%p" # replace %s with toolname
1241-
cmd += flags + sage_cmd
12421203

1243-
sys.stdout.flush()
1244-
sys.stderr.flush()
1245-
self.log(cmd)
1246-
1247-
if testing:
1248-
return
1249-
1250-
# Setup signal handlers.
1251-
# Save crash logs in temporary directory.
1252-
os.putenv('CYSIGNALS_CRASH_LOGS', tmp_dir("crash_logs_"))
1253-
init_cysignals()
1204+
with importlib.resources.path(__package__, 'sage-gdb-commands') as sage_gdb_commands:
1205+
if opt.gdb:
1206+
cmd = f'''exec gdb -x {shlex.quote(str(sage_gdb_commands))} --args '''
1207+
flags = ""
1208+
if opt.logfile:
1209+
sage_cmd += f" --logfile {shlex.quote(opt.logfile)}"
1210+
else:
1211+
if opt.logfile is None:
1212+
default_log = os.path.join(DOT_SAGE, "valgrind")
1213+
if os.path.exists(default_log):
1214+
if not os.path.isdir(default_log):
1215+
self.log(f"{default_log} must be a directory")
1216+
return 2
1217+
else:
1218+
os.makedirs(default_log)
1219+
logfile = os.path.join(default_log, "sage-%s")
1220+
else:
1221+
logfile = opt.logfile
1222+
if opt.valgrind:
1223+
toolname = "memcheck"
1224+
flags = os.getenv("SAGE_MEMCHECK_FLAGS")
1225+
if flags is None:
1226+
flags = "--leak-resolution=high --leak-check=full --num-callers=25 "
1227+
flags += '''--suppressions="%s" '''%(os.path.join(SAGE_EXTCODE,"valgrind","pyalloc.supp"))
1228+
flags += '''--suppressions="%s" '''%(os.path.join(SAGE_EXTCODE,"valgrind","sage.supp"))
1229+
flags += '''--suppressions="%s" '''%(os.path.join(SAGE_EXTCODE,"valgrind","sage-additional.supp"))
1230+
elif opt.massif:
1231+
toolname = "massif"
1232+
flags = os.getenv("SAGE_MASSIF_FLAGS", "--depth=6 ")
1233+
elif opt.cachegrind:
1234+
toolname = "cachegrind"
1235+
flags = os.getenv("SAGE_CACHEGRIND_FLAGS", "")
1236+
elif opt.omega:
1237+
toolname = "exp-omega"
1238+
flags = os.getenv("SAGE_OMEGA_FLAGS", "")
1239+
cmd = "exec valgrind --tool=%s "%(toolname)
1240+
flags += f''' --log-file={shlex.quote(logfile)} '''
1241+
if opt.omega:
1242+
toolname = "omega"
1243+
if "%s" in flags:
1244+
flags %= toolname + ".%p" # replace %s with toolname
1245+
cmd += flags + sage_cmd
1246+
1247+
sys.stdout.flush()
1248+
sys.stderr.flush()
1249+
self.log(cmd)
1250+
1251+
if testing:
1252+
return
1253+
1254+
# Setup signal handlers.
1255+
# Save crash logs in temporary directory.
1256+
os.putenv('CYSIGNALS_CRASH_LOGS', tmp_dir("crash_logs_"))
1257+
init_cysignals()
1258+
1259+
import signal
1260+
import subprocess
1261+
p = subprocess.Popen(cmd, shell=True)
12541262

1255-
import signal
1256-
import subprocess
1257-
p = subprocess.Popen(cmd, shell=True)
1258-
if opt.timeout > 0:
1259-
signal.alarm(opt.timeout)
1260-
try:
1261-
return p.wait()
1262-
except AlarmInterrupt:
1263-
self.log(" Timed out")
1264-
return 4
1265-
except KeyboardInterrupt:
1266-
self.log(" Interrupted")
1267-
return 128
1268-
finally:
1269-
signal.alarm(0)
1270-
if p.returncode is None:
1271-
p.terminate()
1263+
if opt.timeout > 0:
1264+
signal.alarm(opt.timeout)
1265+
try:
1266+
return p.wait()
1267+
except AlarmInterrupt:
1268+
self.log(" Timed out")
1269+
return 4
1270+
except KeyboardInterrupt:
1271+
self.log(" Interrupted")
1272+
return 128
1273+
finally:
1274+
signal.alarm(0)
1275+
if p.returncode is None:
1276+
p.terminate()
12721277

12731278
def run(self):
12741279
"""

0 commit comments

Comments
 (0)