We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
What's the status of GLFW?
I see there's a `glfw` backend, but in `setup.py` it is neither listed as a dependency nor defined as an extra. Is that an oversight or deliberately?

I'm packaging `vispy` for Fedora and with [glfw](https://pypi.org/project/glfw/) added as a dependency, I'm seeing `glfw` listed in the output of `vispy.sys_info()`. Tests using `glsw` as a backend also appear to work fine.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `setup.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 # Copyright (c) Vispy Development Team. All Rights Reserved.
3 # Distributed under the (new) BSD License. See LICENSE.txt for more info.
4 """Vispy setup script.
5 
6 Steps to do a new release:
7 
8 Preparations:
9   * Test on Windows, Linux, Mac
10   * Make release notes
11   * Update API documentation and other docs that need updating.
12 
13 Define the version and release:
14   * tag the tip changeset as version x.x.x; `git tag -a 'vX.Y.Z' -m "Version X.Y.Z"`
15   * push tag to github
16   * verify that azure pipelines complete
17   * verify that `.tar.gz` sdist and binary wheels are available on PyPI
18 
19 Announcing:
20   * It can be worth waiting a day for eager users to report critical bugs
21   * Announce in scipy-user, vispy mailing list, twitter (@vispyproject)
22 
23 """
24 
25 import os
26 import sys
27 from os import path as op
28 from setuptools import setup, find_packages
29 
30 import numpy as np
31 from Cython.Build import cythonize
32 from Cython.Distutils import Extension
33 
34 name = 'vispy'
35 description = 'Interactive visualization in Python'
36 
37 # Special commands for building jupyter notebook extension
38 here = os.path.dirname(os.path.abspath(__file__))
39 node_root = os.path.join(here, 'js')
40 is_repo = os.path.exists(os.path.join(here, '.git'))
41 
42 npm_path = os.pathsep.join([
43     os.path.join(node_root, 'node_modules', '.bin'),
44     os.environ.get('PATH', os.defpath),
45 ])
46 
47 
48 def set_builtin(name, value):
49     if isinstance(__builtins__, dict):
50         __builtins__[name] = value
51     else:
52         setattr(__builtins__, name, value)
53 
54 
55 extensions = [Extension('vispy.visuals.text._sdf_cpu',
56                         sources=[op.join('vispy', 'visuals', 'text', '_sdf_cpu.pyx')],
57                         include_dirs=[np.get_include()],
58                         cython_directives={"language_level": "3"},
59                         define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")],
60                         ),
61               ]
62 
63 install_requires = ['numpy', 'freetype-py', 'hsluv', 'kiwisolver', 'packaging']
64 if sys.version_info < (3, 9):
65     install_requires.append("importlib-resources")
66 
67 readme = open('README.rst', 'r').read()
68 setup(
69     name=name,
70     use_scm_version={
71         'write_to': 'vispy/version.py',
72         # uses setuptools_scm.version.get_local_dirty_tag (+dirty or empty string)
73         'local_scheme': 'dirty-tag',
74     },
75     author='Vispy contributors',
76     author_email='vispy@googlegroups.com',
77     license='BSD-3-Clause',
78     url='http://vispy.org',
79     download_url='https://pypi.python.org/pypi/vispy',
80     keywords=[
81         'visualization',
82         'OpenGl',
83         'ES',
84         'medical',
85         'imaging',
86         '3D',
87         'plotting',
88         'numpy',
89         'bigdata',
90         'ipython',
91         'jupyter',
92         'widgets',
93     ],
94     description=description,
95     long_description=readme,
96     long_description_content_type='text/x-rst',
97     platforms='any',
98     provides=['vispy'],
99     python_requires='>=3.8',
100     install_requires=install_requires,
101     extras_require={
102         'ipython-static': ['ipython'],
103         'pyglet': ['pyglet>=1.2'],
104         'pyqt5': ['pyqt5'],
105         'pyqt6': ['pyqt6'],
106         'pyside': ['PySide'],
107         'pyside2': ['PySide2'],
108         'pyside6': ['PySide6'],
109         'sdl2': ['PySDL2'],
110         'wx': ['wxPython'],
111         'tk': ['pyopengltk'],
112         'doc': ['pydata-sphinx-theme', 'numpydoc', 'sphinxcontrib-apidoc',
113                 'sphinx-gallery', 'myst-parser', 'pillow', 'pytest',
114                 'pyopengl'],
115         'io': ['meshio', 'Pillow'],
116     },
117     packages=find_packages(exclude=['make']),
118     ext_modules=cythonize(extensions, language_level=3),
119     package_dir={'vispy': 'vispy'},
120     data_files=[],
121     include_package_data=True,
122     package_data={
123         'vispy': [op.join('io', '_data', '*'),
124                   op.join('app', 'tests', 'qt-designer.ui'),
125                   op.join('util', 'fonts', 'data', '*.ttf'),
126                   ],
127 
128         'vispy.glsl': ['*.vert', '*.frag', "*.glsl"],
129         'vispy.glsl.antialias': ['*.vert', '*.frag', "*.glsl"],
130         'vispy.glsl.arrowheads': ['*.vert', '*.frag', "*.glsl"],
131         'vispy.glsl.arrows': ['*.vert', '*.frag', "*.glsl"],
132         'vispy.glsl.collections': ['*.vert', '*.frag', "*.glsl"],
133         'vispy.glsl.colormaps': ['*.vert', '*.frag', "*.glsl"],
134         'vispy.glsl.lines': ['*.vert', '*.frag', "*.glsl"],
135         'vispy.glsl.markers': ['*.vert', '*.frag', "*.glsl"],
136         'vispy.glsl.math': ['*.vert', '*.frag', "*.glsl"],
137         'vispy.glsl.misc': ['*.vert', '*.frag', "*.glsl"],
138         'vispy.glsl.transforms': ['*.vert', '*.frag', "*.glsl"],
139 
140     },
141     zip_safe=False,
142     classifiers=[
143         'Development Status :: 3 - Alpha',
144         'Intended Audience :: Science/Research',
145         'Intended Audience :: Education',
146         'Intended Audience :: Developers',
147         'Topic :: Scientific/Engineering :: Visualization',
148         'License :: OSI Approved :: BSD License',
149         'Operating System :: MacOS :: MacOS X',
150         'Operating System :: Microsoft :: Windows',
151         'Operating System :: POSIX',
152         'Programming Language :: Python',
153         'Programming Language :: Python :: 3.8',
154         'Programming Language :: Python :: 3.9',
155         'Programming Language :: Python :: 3.10',
156         'Programming Language :: Python :: 3.11',
157         'Framework :: IPython'
158     ],
159 )
160
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -106,6 +106,7 @@
         'pyside': ['PySide'],
         'pyside2': ['PySide2'],
         'pyside6': ['PySide6'],
+        'glfw': ['glfw'],
         'sdl2': ['PySDL2'],
         'wx': ['wxPython'],
         'tk': ['pyopengltk'],

{"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -106,6 +106,7 @@\n         'pyside': ['PySide'],\n         'pyside2': ['PySide2'],\n         'pyside6': ['PySide6'],\n+        'glfw': ['glfw'],\n         'sdl2': ['PySDL2'],\n         'wx': ['wxPython'],\n         'tk': ['pyopengltk'],\n", "issue": "What's the status of GLFW?\nI see there's a `glfw` backend, but in `setup.py` it is neither listed as a dependency nor defined as an extra. Is that an oversight or deliberately?\r\n\r\nI'm packaging `vispy` for Fedora and with [glfw](https://pypi.org/project/glfw/) added as a dependency, I'm seeing `glfw` listed in the output of `vispy.sys_info()`. Tests using `glsw` as a backend also appear to work fine.\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\n# Copyright (c) Vispy Development Team. All Rights Reserved.\n# Distributed under the (new) BSD License. See LICENSE.txt for more info.\n\"\"\"Vispy setup script.\n\nSteps to do a new release:\n\nPreparations:\n  * Test on Windows, Linux, Mac\n  * Make release notes\n  * Update API documentation and other docs that need updating.\n\nDefine the version and release:\n  * tag the tip changeset as version x.x.x; `git tag -a 'vX.Y.Z' -m \"Version X.Y.Z\"`\n  * push tag to github\n  * verify that azure pipelines complete\n  * verify that `.tar.gz` sdist and binary wheels are available on PyPI\n\nAnnouncing:\n  * It can be worth waiting a day for eager users to report critical bugs\n  * Announce in scipy-user, vispy mailing list, twitter (@vispyproject)\n\n\"\"\"\n\nimport os\nimport sys\nfrom os import path as op\nfrom setuptools import setup, find_packages\n\nimport numpy as np\nfrom Cython.Build import cythonize\nfrom Cython.Distutils import Extension\n\nname = 'vispy'\ndescription = 'Interactive visualization in Python'\n\n# Special commands for building jupyter notebook extension\nhere = os.path.dirname(os.path.abspath(__file__))\nnode_root = os.path.join(here, 'js')\nis_repo = os.path.exists(os.path.join(here, '.git'))\n\nnpm_path = os.pathsep.join([\n    os.path.join(node_root, 'node_modules', '.bin'),\n    os.environ.get('PATH', os.defpath),\n])\n\n\ndef set_builtin(name, value):\n    if isinstance(__builtins__, dict):\n        __builtins__[name] = value\n    else:\n        setattr(__builtins__, name, value)\n\n\nextensions = [Extension('vispy.visuals.text._sdf_cpu',\n                        sources=[op.join('vispy', 'visuals', 'text', '_sdf_cpu.pyx')],\n                        include_dirs=[np.get_include()],\n                        cython_directives={\"language_level\": \"3\"},\n                        define_macros=[(\"NPY_NO_DEPRECATED_API\", \"NPY_1_7_API_VERSION\")],\n                        ),\n              ]\n\ninstall_requires = ['numpy', 'freetype-py', 'hsluv', 'kiwisolver', 'packaging']\nif sys.version_info < (3, 9):\n    install_requires.append(\"importlib-resources\")\n\nreadme = open('README.rst', 'r').read()\nsetup(\n    name=name,\n    use_scm_version={\n        'write_to': 'vispy/version.py',\n        # uses setuptools_scm.version.get_local_dirty_tag (+dirty or empty string)\n        'local_scheme': 'dirty-tag',\n    },\n    author='Vispy contributors',\n    author_email='vispy@googlegroups.com',\n    license='BSD-3-Clause',\n    url='http://vispy.org',\n    download_url='https://pypi.python.org/pypi/vispy',\n    keywords=[\n        'visualization',\n        'OpenGl',\n        'ES',\n        'medical',\n        'imaging',\n        '3D',\n        'plotting',\n        'numpy',\n        'bigdata',\n        'ipython',\n        'jupyter',\n        'widgets',\n    ],\n    description=description,\n    long_description=readme,\n    long_description_content_type='text/x-rst',\n    platforms='any',\n    provides=['vispy'],\n    python_requires='>=3.8',\n    install_requires=install_requires,\n    extras_require={\n        'ipython-static': ['ipython'],\n        'pyglet': ['pyglet>=1.2'],\n        'pyqt5': ['pyqt5'],\n        'pyqt6': ['pyqt6'],\n        'pyside': ['PySide'],\n        'pyside2': ['PySide2'],\n        'pyside6': ['PySide6'],\n        'sdl2': ['PySDL2'],\n        'wx': ['wxPython'],\n        'tk': ['pyopengltk'],\n        'doc': ['pydata-sphinx-theme', 'numpydoc', 'sphinxcontrib-apidoc',\n                'sphinx-gallery', 'myst-parser', 'pillow', 'pytest',\n                'pyopengl'],\n        'io': ['meshio', 'Pillow'],\n    },\n    packages=find_packages(exclude=['make']),\n    ext_modules=cythonize(extensions, language_level=3),\n    package_dir={'vispy': 'vispy'},\n    data_files=[],\n    include_package_data=True,\n    package_data={\n        'vispy': [op.join('io', '_data', '*'),\n                  op.join('app', 'tests', 'qt-designer.ui'),\n                  op.join('util', 'fonts', 'data', '*.ttf'),\n                  ],\n\n        'vispy.glsl': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.antialias': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.arrowheads': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.arrows': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.collections': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.colormaps': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.lines': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.markers': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.math': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.misc': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.transforms': ['*.vert', '*.frag', \"*.glsl\"],\n\n    },\n    zip_safe=False,\n    classifiers=[\n        'Development Status :: 3 - Alpha',\n        'Intended Audience :: Science/Research',\n        'Intended Audience :: Education',\n        'Intended Audience :: Developers',\n        'Topic :: Scientific/Engineering :: Visualization',\n        'License :: OSI Approved :: BSD License',\n        'Operating System :: MacOS :: MacOS X',\n        'Operating System :: Microsoft :: Windows',\n        'Operating System :: POSIX',\n        'Programming Language :: Python',\n        'Programming Language :: Python :: 3.8',\n        'Programming Language :: Python :: 3.9',\n        'Programming Language :: Python :: 3.10',\n        'Programming Language :: Python :: 3.11',\n        'Framework :: IPython'\n    ],\n)\n", "path": "setup.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\n# Copyright (c) Vispy Development Team. All Rights Reserved.\n# Distributed under the (new) BSD License. See LICENSE.txt for more info.\n\"\"\"Vispy setup script.\n\nSteps to do a new release:\n\nPreparations:\n  * Test on Windows, Linux, Mac\n  * Make release notes\n  * Update API documentation and other docs that need updating.\n\nDefine the version and release:\n  * tag the tip changeset as version x.x.x; `git tag -a 'vX.Y.Z' -m \"Version X.Y.Z\"`\n  * push tag to github\n  * verify that azure pipelines complete\n  * verify that `.tar.gz` sdist and binary wheels are available on PyPI\n\nAnnouncing:\n  * It can be worth waiting a day for eager users to report critical bugs\n  * Announce in scipy-user, vispy mailing list, twitter (@vispyproject)\n\n\"\"\"\n\nimport os\nimport sys\nfrom os import path as op\nfrom setuptools import setup, find_packages\n\nimport numpy as np\nfrom Cython.Build import cythonize\nfrom Cython.Distutils import Extension\n\nname = 'vispy'\ndescription = 'Interactive visualization in Python'\n\n# Special commands for building jupyter notebook extension\nhere = os.path.dirname(os.path.abspath(__file__))\nnode_root = os.path.join(here, 'js')\nis_repo = os.path.exists(os.path.join(here, '.git'))\n\nnpm_path = os.pathsep.join([\n    os.path.join(node_root, 'node_modules', '.bin'),\n    os.environ.get('PATH', os.defpath),\n])\n\n\ndef set_builtin(name, value):\n    if isinstance(__builtins__, dict):\n        __builtins__[name] = value\n    else:\n        setattr(__builtins__, name, value)\n\n\nextensions = [Extension('vispy.visuals.text._sdf_cpu',\n                        sources=[op.join('vispy', 'visuals', 'text', '_sdf_cpu.pyx')],\n                        include_dirs=[np.get_include()],\n                        cython_directives={\"language_level\": \"3\"},\n                        define_macros=[(\"NPY_NO_DEPRECATED_API\", \"NPY_1_7_API_VERSION\")],\n                        ),\n              ]\n\ninstall_requires = ['numpy', 'freetype-py', 'hsluv', 'kiwisolver', 'packaging']\nif sys.version_info < (3, 9):\n    install_requires.append(\"importlib-resources\")\n\nreadme = open('README.rst', 'r').read()\nsetup(\n    name=name,\n    use_scm_version={\n        'write_to': 'vispy/version.py',\n        # uses setuptools_scm.version.get_local_dirty_tag (+dirty or empty string)\n        'local_scheme': 'dirty-tag',\n    },\n    author='Vispy contributors',\n    author_email='vispy@googlegroups.com',\n    license='BSD-3-Clause',\n    url='http://vispy.org',\n    download_url='https://pypi.python.org/pypi/vispy',\n    keywords=[\n        'visualization',\n        'OpenGl',\n        'ES',\n        'medical',\n        'imaging',\n        '3D',\n        'plotting',\n        'numpy',\n        'bigdata',\n        'ipython',\n        'jupyter',\n        'widgets',\n    ],\n    description=description,\n    long_description=readme,\n    long_description_content_type='text/x-rst',\n    platforms='any',\n    provides=['vispy'],\n    python_requires='>=3.8',\n    install_requires=install_requires,\n    extras_require={\n        'ipython-static': ['ipython'],\n        'pyglet': ['pyglet>=1.2'],\n        'pyqt5': ['pyqt5'],\n        'pyqt6': ['pyqt6'],\n        'pyside': ['PySide'],\n        'pyside2': ['PySide2'],\n        'pyside6': ['PySide6'],\n        'glfw': ['glfw'],\n        'sdl2': ['PySDL2'],\n        'wx': ['wxPython'],\n        'tk': ['pyopengltk'],\n        'doc': ['pydata-sphinx-theme', 'numpydoc', 'sphinxcontrib-apidoc',\n                'sphinx-gallery', 'myst-parser', 'pillow', 'pytest',\n                'pyopengl'],\n        'io': ['meshio', 'Pillow'],\n    },\n    packages=find_packages(exclude=['make']),\n    ext_modules=cythonize(extensions, language_level=3),\n    package_dir={'vispy': 'vispy'},\n    data_files=[],\n    include_package_data=True,\n    package_data={\n        'vispy': [op.join('io', '_data', '*'),\n                  op.join('app', 'tests', 'qt-designer.ui'),\n                  op.join('util', 'fonts', 'data', '*.ttf'),\n                  ],\n\n        'vispy.glsl': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.antialias': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.arrowheads': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.arrows': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.collections': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.colormaps': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.lines': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.markers': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.math': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.misc': ['*.vert', '*.frag', \"*.glsl\"],\n        'vispy.glsl.transforms': ['*.vert', '*.frag', \"*.glsl\"],\n\n    },\n    zip_safe=False,\n    classifiers=[\n        'Development Status :: 3 - Alpha',\n        'Intended Audience :: Science/Research',\n        'Intended Audience :: Education',\n        'Intended Audience :: Developers',\n        'Topic :: Scientific/Engineering :: Visualization',\n        'License :: OSI Approved :: BSD License',\n        'Operating System :: MacOS :: MacOS X',\n        'Operating System :: Microsoft :: Windows',\n        'Operating System :: POSIX',\n        'Programming Language :: Python',\n        'Programming Language :: Python :: 3.8',\n        'Programming Language :: Python :: 3.9',\n        'Programming Language :: Python :: 3.10',\n        'Programming Language :: Python :: 3.11',\n        'Framework :: IPython'\n    ],\n)\n", "path": "setup.py"}]}