mirror of
https://github.com/cs01/gdbgui
synced 2024-11-16 07:47:46 +01:00
update dependencies, support Python 3.9 (#400)
This commit is contained in:
parent
c1f337d10b
commit
0e636d5426
22 changed files with 1169 additions and 1022 deletions
2
.github/workflows/build_executable.yml
vendored
2
.github/workflows/build_executable.yml
vendored
|
@ -13,7 +13,7 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest]
|
os: [ubuntu-latest, macos-latest]
|
||||||
python-version: [3.8]
|
python-version: [3.9]
|
||||||
include:
|
include:
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
buildname: linux
|
buildname: linux
|
||||||
|
|
6
.github/workflows/tests.yml
vendored
6
.github/workflows/tests.yml
vendored
|
@ -15,7 +15,7 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest]
|
os: [ubuntu-latest]
|
||||||
python-version: [3.6, 3.7, 3.8]
|
python-version: [3.9]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
@ -41,7 +41,7 @@ jobs:
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v2
|
||||||
with:
|
with:
|
||||||
python-version: 3.8
|
python-version: 3.9
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
|
@ -57,7 +57,7 @@ jobs:
|
||||||
- name: Set up Python
|
- name: Set up Python
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v2
|
||||||
with:
|
with:
|
||||||
python-version: 3.8
|
python-version: 3.9
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -5,14 +5,13 @@ build
|
||||||
executable
|
executable
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*.a.dSYM
|
*.a.dSYM
|
||||||
gdbgui.spec
|
gdbgui_pyinstaller.spec
|
||||||
*-link
|
*-link
|
||||||
*-link.c
|
*-link.c
|
||||||
*-link.dSYM
|
*-link.dSYM
|
||||||
*.pyc
|
*.pyc
|
||||||
yarn-error.log
|
yarn-error.log
|
||||||
venv
|
venv
|
||||||
.vscode
|
|
||||||
site
|
site
|
||||||
gdbgui/static/js/*
|
gdbgui/static/js/*
|
||||||
__pycache__
|
__pycache__
|
||||||
|
|
12
.vscode/settings.json
vendored
Normal file
12
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"python.formatting.provider": "black",
|
||||||
|
"[python]": {
|
||||||
|
"editor.formatOnSave": true
|
||||||
|
},
|
||||||
|
"[json]": {
|
||||||
|
"editor.formatOnSave": true
|
||||||
|
},
|
||||||
|
"files.associations": {
|
||||||
|
"*.spec": "python"
|
||||||
|
}
|
||||||
|
}
|
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -1,5 +1,15 @@
|
||||||
# gdbgui release history
|
# gdbgui release history
|
||||||
|
|
||||||
|
## 0.15.0.0
|
||||||
|
|
||||||
|
No new features, just bugfixes and compatibility fixes
|
||||||
|
|
||||||
|
- Support only Python 3.9 (though other Python versions may work)
|
||||||
|
- Use only the threading async model for flask-socketio. No longer support gevent or eventlet.
|
||||||
|
- [bugfix] Catch exception if gdb used in tty window crashes instead of gdbgui crashing along with it
|
||||||
|
- Disable pagination in gdb ttyy by default. It can be turned back on with `set pagination off`.
|
||||||
|
- Upgrade various dependencies for both the backend and frontend (Python and JavaScript)
|
||||||
|
|
||||||
## 0.14.0.2
|
## 0.14.0.2
|
||||||
|
|
||||||
- Pinned python-socketio version
|
- Pinned python-socketio version
|
||||||
|
|
|
@ -8,6 +8,7 @@ graft gdbgui
|
||||||
graft gdbgui/static/js
|
graft gdbgui/static/js
|
||||||
|
|
||||||
prune examples
|
prune examples
|
||||||
|
prune .vscode
|
||||||
prune downloads
|
prune downloads
|
||||||
prune screenshots
|
prune screenshots
|
||||||
prune tests
|
prune tests
|
||||||
|
@ -15,6 +16,8 @@ prune docs
|
||||||
prune docker
|
prune docker
|
||||||
prune images
|
prune images
|
||||||
prune gdbgui/__pycache__
|
prune gdbgui/__pycache__
|
||||||
|
prune gdbgui/server/__pycache__
|
||||||
|
prune gdbgui/src/
|
||||||
|
|
||||||
exclude mypy.ini
|
exclude mypy.ini
|
||||||
exclude .eslintrc.json
|
exclude .eslintrc.json
|
||||||
|
@ -26,6 +29,7 @@ exclude jest.config.js
|
||||||
exclude make_executable.py
|
exclude make_executable.py
|
||||||
exclude mkdocs.yml
|
exclude mkdocs.yml
|
||||||
exclude package.json
|
exclude package.json
|
||||||
|
exclude requirements.in
|
||||||
exclude requirements.txt
|
exclude requirements.txt
|
||||||
exclude tsconfig.json
|
exclude tsconfig.json
|
||||||
exclude tslint.json
|
exclude tslint.json
|
||||||
|
|
|
@ -1,2 +1 @@
|
||||||
* Twitter: @grassfedcode
|
* Email: chadsmith.software@gmail.com
|
||||||
* Email: grassfedcode@gmail.com
|
|
|
@ -85,4 +85,4 @@ gdbgui is distributed through
|
||||||
|
|
||||||
## Contact
|
## Contact
|
||||||
|
|
||||||
grassfedcode@gmail.com
|
chadsmith.software@gmail.com
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
0.14.0.2
|
0.15.0.0
|
||||||
|
|
|
@ -21,8 +21,7 @@ from gdbgui.server.server import run_server
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
logger.setLevel(logging.WARNING)
|
logging.getLogger("werkzeug").setLevel(logging.ERROR)
|
||||||
logging.basicConfig(format="(%(asctime)s) %(msg)s")
|
|
||||||
|
|
||||||
|
|
||||||
def get_gdbgui_auth_user_credentials(auth_file, user, password):
|
def get_gdbgui_auth_user_credentials(auth_file, user, password):
|
||||||
|
@ -245,6 +244,8 @@ def main():
|
||||||
"and https://sourceware.org/gdb/onlinedocs/gdb/Starting.html"
|
"and https://sourceware.org/gdb/onlinedocs/gdb/Starting.html"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
logger.setLevel(logging.DEBUG if args.debug else logging.INFO)
|
||||||
|
|
||||||
run_server(
|
run_server(
|
||||||
app=app,
|
app=app,
|
||||||
socketio=socketio,
|
socketio=socketio,
|
||||||
|
|
|
@ -74,7 +74,10 @@ class Pty:
|
||||||
timeout_sec = 0
|
timeout_sec = 0
|
||||||
(data_to_read, _, _) = select.select([self.stdout], [], [], timeout_sec)
|
(data_to_read, _, _) = select.select([self.stdout], [], [], timeout_sec)
|
||||||
if data_to_read:
|
if data_to_read:
|
||||||
response = os.read(self.stdout, self.max_read_bytes).decode()
|
try:
|
||||||
|
response = os.read(self.stdout, self.max_read_bytes).decode()
|
||||||
|
except OSError:
|
||||||
|
return None
|
||||||
return response
|
return response
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -64,21 +64,8 @@ def run_server(
|
||||||
protocol = "http://"
|
protocol = "http://"
|
||||||
url_with_prefix = "http://" + url
|
url_with_prefix = "http://" + url
|
||||||
|
|
||||||
if debug:
|
socketio.server_options["allow_upgrades"] = False
|
||||||
async_mode = "eventlet"
|
socketio.init_app(app)
|
||||||
else:
|
|
||||||
async_mode = "gevent"
|
|
||||||
|
|
||||||
socketio.server_options["async_mode"] = async_mode
|
|
||||||
try:
|
|
||||||
socketio.init_app(app)
|
|
||||||
except Exception:
|
|
||||||
print(
|
|
||||||
'failed to initialize socketio app with async mode "%s". Continuing with async mode "threading".'
|
|
||||||
% async_mode
|
|
||||||
)
|
|
||||||
socketio.server_options["async_mode"] = "threading"
|
|
||||||
socketio.init_app(app)
|
|
||||||
|
|
||||||
if testing is False:
|
if testing is False:
|
||||||
if host == DEFAULT_HOST:
|
if host == DEFAULT_HOST:
|
||||||
|
@ -103,7 +90,7 @@ def run_server(
|
||||||
)
|
)
|
||||||
|
|
||||||
print("exit gdbgui by pressing CTRL+C")
|
print("exit gdbgui by pressing CTRL+C")
|
||||||
|
os.environ["WERKZEUG_RUN_MAIN"] = "true"
|
||||||
try:
|
try:
|
||||||
socketio.run(
|
socketio.run(
|
||||||
app,
|
app,
|
||||||
|
|
|
@ -35,7 +35,7 @@ let show_license = function() {
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
If you wish to redistribute gdbgui as part of a closed source product, you can do
|
If you wish to redistribute gdbgui as part of a closed source product, you can do
|
||||||
so for a fee. Contact grassfedcode@gmail.com for details.
|
so for a fee. Contact chadsmith.software@gmail.com for details.
|
||||||
</p>
|
</p>
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
);
|
);
|
||||||
|
@ -45,7 +45,7 @@ let About = {
|
||||||
show_about: function() {
|
show_about: function() {
|
||||||
Actions.show_modal(
|
Actions.show_modal(
|
||||||
"About gdbgui",
|
"About gdbgui",
|
||||||
<React.Fragment>Copyright © Chad Smith, grassfedcode.com</React.Fragment>
|
<React.Fragment>Copyright © Chad Smith, chadsmith.dev</React.Fragment>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -242,7 +242,7 @@ class Dashboard extends React.PureComponent<any, { sessions: GdbguiSession[] }>
|
||||||
<footer className="h-40 bold text-lg bg-black text-gray-500 text-center flex flex-col justify-center">
|
<footer className="h-40 bold text-lg bg-black text-gray-500 text-center flex flex-col justify-center">
|
||||||
<p>gdbgui</p>
|
<p>gdbgui</p>
|
||||||
<p>The browser-based frontend to gdb</p>
|
<p>The browser-based frontend to gdb</p>
|
||||||
<a href="https://grassfedcode.com">Copyright Chad Smith</a>
|
<a href="https://chadsmith.dev">Copyright Chad Smith</a>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -25,10 +25,7 @@ else:
|
||||||
|
|
||||||
def write_spec_with_gdbgui_version_in_name(spec_path, binary_name):
|
def write_spec_with_gdbgui_version_in_name(spec_path, binary_name):
|
||||||
|
|
||||||
spec = f"""# -*- mode: python -*-
|
spec = f"""# This pyinstaller spec file was generated by {__file__}
|
||||||
|
|
||||||
# create executable with: pyinstaller gdbgui.spec
|
|
||||||
# run executable with: dist/gdbgui
|
|
||||||
|
|
||||||
block_cipher = None
|
block_cipher = None
|
||||||
|
|
||||||
|
@ -42,12 +39,8 @@ a = Analysis(['gdbgui/cli.py'], # noqa
|
||||||
('./gdbgui/VERSION.txt*', './')
|
('./gdbgui/VERSION.txt*', './')
|
||||||
],
|
],
|
||||||
hiddenimports=[
|
hiddenimports=[
|
||||||
'engineio.async_gevent',
|
|
||||||
'engineio.async_threading',
|
'engineio.async_threading',
|
||||||
'engineio.async_drivers.gevent',
|
|
||||||
'engineio.async_drivers.threading',
|
'engineio.async_drivers.threading',
|
||||||
'engineio.async_drivers.eventlet',
|
|
||||||
'engineio.async_drivers.gevent_uwsgi',
|
|
||||||
'pkg_resources.py2_warn',
|
'pkg_resources.py2_warn',
|
||||||
],
|
],
|
||||||
hookspath=[],
|
hookspath=[],
|
||||||
|
@ -98,7 +91,7 @@ def generate_md5(binary: Path, output_file: Path):
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
binary_name = "gdbgui_%s" % __version__
|
binary_name = "gdbgui_%s" % __version__
|
||||||
spec_path = "gdbgui.spec"
|
spec_path = "gdbgui_pyinstaller.spec"
|
||||||
distpath = (Path("executable") / platform_dir).resolve()
|
distpath = (Path("executable") / platform_dir).resolve()
|
||||||
extension = ".exe" if platform == "win32" else ""
|
extension = ".exe" if platform == "win32" else ""
|
||||||
binary_path = Path(distpath) / f"{binary_name}{extension}"
|
binary_path = Path(distpath) / f"{binary_name}{extension}"
|
||||||
|
|
|
@ -24,3 +24,8 @@ markdown_extensions:
|
||||||
- admonition # note blocks, warning blocks -- https://github.com/mkdocs/mkdocs/issues/1659
|
- admonition # note blocks, warning blocks -- https://github.com/mkdocs/mkdocs/issues/1659
|
||||||
- markdown.extensions.codehilite:
|
- markdown.extensions.codehilite:
|
||||||
guess_lang: false
|
guess_lang: false
|
||||||
|
|
||||||
|
extra:
|
||||||
|
analytics:
|
||||||
|
provider: google
|
||||||
|
property: UA-90243909-2
|
||||||
|
|
|
@ -7,7 +7,8 @@ import nox # type: ignore
|
||||||
|
|
||||||
nox.options.reuse_existing_virtualenvs = True
|
nox.options.reuse_existing_virtualenvs = True
|
||||||
nox.options.sessions = ["tests", "lint", "docs"]
|
nox.options.sessions = ["tests", "lint", "docs"]
|
||||||
python = ["3.6", "3.7", "3.8"]
|
python = ["3.9"]
|
||||||
|
|
||||||
prettier_command = [
|
prettier_command = [
|
||||||
"npx",
|
"npx",
|
||||||
"prettier@1.19.1",
|
"prettier@1.19.1",
|
||||||
|
@ -90,7 +91,9 @@ def lint(session):
|
||||||
session.run("flake8", *files_to_lint)
|
session.run("flake8", *files_to_lint)
|
||||||
session.run("mypy", *files_to_lint)
|
session.run("mypy", *files_to_lint)
|
||||||
vulture(session)
|
vulture(session)
|
||||||
session.run("check-manifest", "--ignore", "gdbgui/static/js/*")
|
session.run(
|
||||||
|
"check-manifest", "--ignore", "gdbgui/static/js/*", "--ignore", "*pycache*"
|
||||||
|
)
|
||||||
session.run("python", "setup.py", "check", "--metadata", "--strict")
|
session.run("python", "setup.py", "check", "--metadata", "--strict")
|
||||||
session.run(*prettier_command, "--check", external=True)
|
session.run(*prettier_command, "--check", external=True)
|
||||||
|
|
||||||
|
@ -157,7 +160,7 @@ def publish_docs(session):
|
||||||
def build_executable_current_platform(session):
|
def build_executable_current_platform(session):
|
||||||
session.run("yarn", "install", external=True)
|
session.run("yarn", "install", external=True)
|
||||||
session.run("yarn", "build", external=True)
|
session.run("yarn", "build", external=True)
|
||||||
session.install(".", "PyInstaller<3.7")
|
session.install(".", "PyInstaller>=4.5, <4.6")
|
||||||
session.run("python", "make_executable.py")
|
session.run("python", "make_executable.py")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"react": "^16.8",
|
"react": "^16.8",
|
||||||
"react-dom": "^16.4",
|
"react-dom": "^16.4",
|
||||||
"socket.io": "2.0.3",
|
"socket.io": "^4.1",
|
||||||
"socket.io-client": "2.0.3",
|
"socket.io-client": "^4.1",
|
||||||
"statorgfc": "^0.1.6",
|
"statorgfc": "^0.1.6",
|
||||||
"xterm": "4.8.0",
|
"xterm": "4.8.0",
|
||||||
"xterm-addon-fit": "^0.4.0",
|
"xterm-addon-fit": "^0.4.0",
|
||||||
|
|
4
requirements.in
Normal file
4
requirements.in
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Flask-SocketIO>5.1, <5.2
|
||||||
|
Flask-Compress>1.10, <1.11
|
||||||
|
pygdbmi>=0.10.0.0, <0.11
|
||||||
|
Pygments>=2.2.0, <3.0
|
|
@ -1,3 +1,36 @@
|
||||||
# https://caremad.io/posts/2013/07/setup-vs-requirement/
|
#
|
||||||
--index-url https://pypi.org/simple/
|
# This file is autogenerated by pip-compile with python 3.9
|
||||||
-e .
|
# To update, run:
|
||||||
|
#
|
||||||
|
# pip-compile requirements.in
|
||||||
|
#
|
||||||
|
bidict==0.21.2
|
||||||
|
# via python-socketio
|
||||||
|
brotli==1.0.9
|
||||||
|
# via flask-compress
|
||||||
|
click==8.0.1
|
||||||
|
# via flask
|
||||||
|
flask==2.0.1
|
||||||
|
# via
|
||||||
|
# flask-compress
|
||||||
|
# flask-socketio
|
||||||
|
flask-compress==1.10.1
|
||||||
|
# via -r requirements.in
|
||||||
|
flask-socketio==5.1.1
|
||||||
|
# via -r requirements.in
|
||||||
|
itsdangerous==2.0.1
|
||||||
|
# via flask
|
||||||
|
jinja2==3.0.1
|
||||||
|
# via flask
|
||||||
|
markupsafe==2.0.1
|
||||||
|
# via jinja2
|
||||||
|
pygdbmi==0.10.0.1
|
||||||
|
# via -r requirements.in
|
||||||
|
pygments==2.10.0
|
||||||
|
# via -r requirements.in
|
||||||
|
python-engineio==4.2.1
|
||||||
|
# via python-socketio
|
||||||
|
python-socketio==5.4.0
|
||||||
|
# via flask-socketio
|
||||||
|
werkzeug==2.0.1
|
||||||
|
# via flask
|
||||||
|
|
22
setup.py
22
setup.py
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import distutils.text_file
|
||||||
|
|
||||||
USING_WINDOWS = os.name == "nt"
|
USING_WINDOWS = os.name == "nt"
|
||||||
if USING_WINDOWS:
|
if USING_WINDOWS:
|
||||||
|
@ -26,7 +27,7 @@ setup(
|
||||||
name="gdbgui",
|
name="gdbgui",
|
||||||
version=VERSION,
|
version=VERSION,
|
||||||
author="Chad Smith",
|
author="Chad Smith",
|
||||||
author_email="grassfedcode@gmail.com",
|
author_email="chadsmith.software@gmail.com",
|
||||||
description="Browser-based frontend to gdb. Debug C, C++, Go, or Rust.",
|
description="Browser-based frontend to gdb. Debug C, C++, Go, or Rust.",
|
||||||
long_description=README,
|
long_description=README,
|
||||||
long_description_content_type="text/markdown",
|
long_description_content_type="text/markdown",
|
||||||
|
@ -58,18 +59,9 @@ setup(
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
install_requires=[
|
install_requires=distutils.text_file.TextFile(
|
||||||
"Flask>=0.12.2, <1.0", # http server
|
filename="./requirements.in"
|
||||||
"Flask-Compress>=1.4.0, <2.0", # to compress flask responses
|
).readlines(),
|
||||||
"Flask-SocketIO>=2.9, <3.0", # websocket server
|
|
||||||
"gevent>=1.2.2, <2.0", # websocket handling
|
|
||||||
"gevent-websocket>=0.10.1, <0.11", # also websocket
|
|
||||||
"eventlet>=0.25.0, <0.26", # also websocket
|
|
||||||
"pygdbmi>=0.10.0.0b0, <0.11", # parse gdb output
|
|
||||||
"Pygments>=2.2.0, <3.0", # syntax highlighting
|
|
||||||
"greenlet==0.4.16",
|
|
||||||
"python-socketio>=4.6.1, <5.0", # pinned to use socketio 2 under the hood (issue #366)
|
|
||||||
],
|
|
||||||
classifiers=[
|
classifiers=[
|
||||||
"Intended Audience :: Developers",
|
"Intended Audience :: Developers",
|
||||||
"Operating System :: MacOS",
|
"Operating System :: MacOS",
|
||||||
|
@ -78,9 +70,7 @@ setup(
|
||||||
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
|
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
|
||||||
"Programming Language :: Python",
|
"Programming Language :: Python",
|
||||||
"Programming Language :: Python :: 3",
|
"Programming Language :: Python :: 3",
|
||||||
"Programming Language :: Python :: 3.6",
|
"Programming Language :: Python :: 3.9",
|
||||||
"Programming Language :: Python :: 3.7",
|
|
||||||
"Programming Language :: Python :: 3.8",
|
|
||||||
],
|
],
|
||||||
python_requires=">=3.6",
|
python_requires=">=3.6",
|
||||||
project_urls={
|
project_urls={
|
||||||
|
|
Loading…
Reference in a new issue