make it work with both python2 and python3

I ran 2to3, fixed up the output a tiny bit, and fixed the C module as
well.  I smoke tested with both versions of Python but didn't use it in
anger yet.

Fix #29
This commit is contained in:
Tom Tromey
2015-05-19 09:44:09 -06:00
parent 63baaf9c82
commit 22bdecb10d
8 changed files with 65 additions and 24 deletions

View File

@@ -1,3 +1,7 @@
# This is passed to pkg-config to determine which python to use. It
# has to match your gdb.
pyname = python
all: gdb-gui.py gui/fix_signals.so
@:
@@ -5,7 +9,7 @@ gdb-gui.py: gdb-gui.py.in
sed -e "s,HERE,`pwd`," < gdb-gui.py.in > gdb-gui.py
gui/fix_signals.so: gui/fix-signals.c
gcc -shared -fPIC -g -o gui/fix_signals.so gui/fix-signals.c `pkg-config --cflags python` `pkg-config --libs python`
gcc -shared -fPIC -g -o gui/fix_signals.so gui/fix-signals.c `pkg-config --cflags $(pyname)` `pkg-config --libs $(pyname)`
clean:
-rm gdb-gui.py gui/fix_signals.so

View File

@@ -46,10 +46,10 @@ def notify_bug(bugno):
return
if not (bugno in bugs):
return
print "################"
print bugs[bugno]
print _warning % bugno
print ""
print "You can use 'set gui mention-missing off' to disable this message."
print "################"
print("################")
print(bugs[bugno])
print(_warning % bugno)
print("")
print("You can use 'set gui mention-missing off' to disable this message.")
print("################")
del bugs[bugno]

View File

@@ -65,7 +65,7 @@ LINESPEC is a line specification of the form given to 'break'."""
if sals is None:
raise gdb.GdbError('not found')
if len(sals) > 1:
print "Ambiguous linespec, only showing first result"
print("Ambiguous linespec, only showing first result")
sal = sals[0]
if sal.symtab is None or sal.symtab.filename is None:
raise gdb.GdbError('could not find file for symbol')
@@ -122,7 +122,7 @@ gui print @5 variable"""
def invoke(self, arg, from_tty):
self.dont_repeat()
window = gui.logwindow.LogWindow()
print "Created log window %d; now the default" % window.number
print("Created log window %d; now the default" % window.number)
class GuiPrintBase(gdb.Command):
def __init__(self, command):

View File

@@ -1,4 +1,4 @@
/* Copyright (C) 2013 Tom Tromey <tom@tromey.com>
/* Copyright (C) 2013, 2015 Tom Tromey <tom@tromey.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -53,8 +53,33 @@ static PyMethodDef methods[] =
{ NULL, NULL, 0, NULL }
};
#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef module =
{
PyModuleDef_HEAD_INIT,
"fix_signals",
NULL,
-1,
methods,
NULL,
NULL,
NULL,
NULL
};
PyMODINIT_FUNC
PyInit_fix_signals (void)
{
PyModule_Create (&module);
}
#else
PyMODINIT_FUNC
initfix_signals (void)
{
Py_InitModule ("fix_signals", methods);
}
#endif

View File

@@ -70,7 +70,7 @@ class _StoredParameter(gdb.Parameter):
elif p_kind is gdb.PARAM_ZINTEGER:
val = storage.getint(self.storage_name)
else:
raise "WHOOPS"
raise Error("missing case in gdb gui code")
# Don't record the first setting.
self.storage = None
if val is None:

View File

@@ -15,23 +15,30 @@
import gdb
import threading
try:
import queue
except ImportError:
# Python 2.
import Queue
queue = Queue
import os
import os.path
import gui
import fix_signals
from . import fix_signals
fix_signals.save()
from gi.repository import Gtk, Gdk, GObject, GtkSource, GLib, GdkPixbuf
(read_pipe, write_pipe) = os.pipe()
_event_queue = Queue.Queue()
_event_queue = queue.Queue()
def send_to_gtk(func):
_event_queue.put(func)
os.write(write_pipe, 'x')
# The payload is arbitrary, and bytes(1) is chosen to work on both
# Python 2 and Python 3.
os.write(write_pipe, bytes(1))
class _GtkThread(threading.Thread):
def handle_queue(self, source, condition):

View File

@@ -18,7 +18,12 @@
from gi.repository import GLib
import os
import errno
try:
import configparser
except ImportError:
# Python 2.
import ConfigParser
configparser = ConfigParser
import atexit
class StorageManager:
@@ -26,11 +31,11 @@ class StorageManager:
self.dir = os.path.join(GLib.get_user_config_dir(), 'gdb')
self.file = os.path.join(self.dir, 'settings')
try:
os.mkdir(self.dir, 0700)
os.mkdir(self.dir, 0o700)
except OSError as exc:
if exc.errno is not errno.EEXIST:
self.file = None
self.config = ConfigParser.RawConfigParser()
self.config = configparser.RawConfigParser()
if self.file is not None:
self.config.read(self.file)
if not self.config.has_section('general'):
@@ -56,7 +61,7 @@ class StorageManager:
self.config.set('general', name, value)
def write(self):
with open(self.file, 'wb') as save_file:
with open(self.file, 'wt') as save_file:
self.config.write(save_file)
storage_manager = StorageManager()

View File

@@ -70,15 +70,15 @@ class _ToplevelState(object):
def display(self):
with self.toplevel_lock:
if len(self.toplevels) == 0:
print "No windows"
print("No windows")
return
print ' Num Name'
print(' Num Name')
for winno in range(1, self.next_toplevel):
if winno in self.toplevels:
window = self.toplevels[winno]
print ' %3d %s' % (window.number,
window.window.get_title())
print(' %3d %s' % (window.number,
window.window.get_title()))
@in_gtk_thread
def _do_set_font(self, font_name):
@@ -123,7 +123,7 @@ class _ToplevelState(object):
@in_gtk_thread
def windows(self):
return self.toplevels.values()
return list(self.toplevels.values())
state = _ToplevelState()