diff --git a/CHANGES.rst b/CHANGES.rst index 86921f6..442d876 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -11,6 +11,9 @@ - Explicitly list ``docutils`` as a dependency. - Add the ability to specify a ``:class:`` argument to set CSS classes on programoutput nodes. +- [Internal] Convert static project metadata to ``pyproject.toml``. +- [Internal] Clarify conflicting licensing statements by setting them + all to the original BSD 2 Clause license. 0.19 (2026-02-20) diff --git a/LICENSE b/LICENSE index f3ad84a..6421c8a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,23 +1,23 @@ +Copyright (c) 2010, 2011, 2012 Sebastian Wiesner +All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. -3. Neither the name of the copyright holder nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -“AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY diff --git a/pyproject.toml b/pyproject.toml index fed528d..fd96355 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,76 @@ [build-system] -requires = ["setuptools"] +requires = ["setuptools>=61"] build-backend = "setuptools.build_meta" + +[project] +name = "sphinxcontrib-programoutput" +description = "Sphinx extension to include program output" +readme = "README.rst" +requires-python = ">=3.10" +license = "BSD-2-Clause" +license-files = [ + 'LICENSE', +] +keywords = ["sphinx", "cli", "command", "output", "program", "example"] +authors = [{name = "Sebastian Wiesner", email = "lunaryorn@gmail.com"}] +maintainers = [{name = "Jason Madden", email = "jason@seecoresoftware.com"}] +dependencies = [ + "Sphinx >= 5.0.0", + "docutils", +] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Documentation", + "Topic :: Utilities", + "Framework :: Sphinx", + "Framework :: Sphinx :: Extension", +] +dynamic = ["version"] + +[project.optional-dependencies] +test = [ + # Sphinx 8.1 stopped raising SphinxWarning when the ``logger.warning`` + # method is invoked. So we now have to test side effects. + # That's OK, and the same side effect test works on older + # versions as well. + "erbsland-sphinx-ansi >= 1.2.4", +] +docs = [ + "furo", +] +ansi = [ + "erbsland-sphinx-ansi >= 1.2.4", +] + +[project.urls] +Homepage = "https://sphinxcontrib-programoutput.readthedocs.io/en/latest/" +Documentation = "https://sphinxcontrib-programoutput.readthedocs.io/en/latest/" +Repository = "https://github.com/OpenNTI/sphinxcontrib-programoutput/" +Issues = "https://github.com/OpenNTI/sphinxcontrib-programoutput/issues" +Changelog = "https://github.com/OpenNTI/sphinxcontrib-programoutput/blob/master/CHANGES.rst" + +[tool.setuptools] +zip-safe = false +include-package-data = true +platforms = ["any"] + +[tool.setuptools.dynamic] +version = {attr = "sphinxcontrib.programoutput.__version__"} + +[tool.setuptools.packages.find] +where = ["src"] +namespaces = true + +[tool.zest-releaser] +python-file-with-version = "src/sphinxcontrib/programoutput/__init__.py" diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 05b2903..0000000 --- a/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[zest.releaser] -python-file-with-version = src/sphinxcontrib/programoutput/__init__.py diff --git a/setup.py b/setup.py index 894d932..6068493 100644 --- a/setup.py +++ b/setup.py @@ -1,117 +1,3 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2011, 2012, Sebastian Wiesner -# All rights reserved. - -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: - -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. - -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -import os -import re from setuptools import setup -from setuptools import find_namespace_packages - -def read_desc(): - with open('README.rst', encoding='utf-8') as stream: - readme = stream.read() - # CHANGES.rst includes sphinx-specific markup, so - # it can't be in the long description without some processing - # that we're not doing -- its invalid ReST - - return readme - -def read_version_number(): - VERSION_PATTERN = re.compile(r"__version__ = '([^']+)'") - with open(os.path.join('src', 'sphinxcontrib', 'programoutput', '__init__.py'), - encoding='utf-8') as stream: - for line in stream: - match = VERSION_PATTERN.search(line) - if match: - return match.group(1) - - raise ValueError('Could not extract version number') - -tests_require = [ - # Sphinx 8.1 stopped raising SphinxWarning when the ``logger.warning`` - # method is invoked. So we now have to test side effects. - # That's OK, and the same side effect test works on older - # versions as well. - "erbsland-sphinx-ansi >= 1.2.4", -] -setup( - name='sphinxcontrib-programoutput', - version=read_version_number(), - url='https://sphinxcontrib-programoutput.readthedocs.org/', - license='BSD', - author='Sebastian Wiesner', - author_email='lunaryorn@gmail.com', - maintainer="Jason Madden", - maintainer_email='jason@seecoresoftware.com', - description='Sphinx extension to include program output', - long_description=read_desc(), - keywords="sphinx cli command output program example", - zip_safe=False, - project_urls={ - 'Homepage': "https://sphinxcontrib-programoutput.readthedocs.io/en/latest/", - 'Documentation': "https://sphinxcontrib-programoutput.readthedocs.io/en/latest/", - "Repository": "https://github.com/OpenNTI/sphinxcontrib-programoutput/", - "Issues": "https://github.com/OpenNTI/sphinxcontrib-programoutput/issues", - "Changelog": - "https://github.com/OpenNTI/sphinxcontrib-programoutput/blob/master/CHANGES.rst", - }, - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: BSD License', - 'Operating System :: OS Independent', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3 :: Only', - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: 3.13", - "Programming Language :: Python :: 3.14", - "Programming Language :: Python :: Implementation :: CPython", - "Programming Language :: Python :: Implementation :: PyPy", - 'Topic :: Documentation', - 'Topic :: Utilities', - 'Framework :: Sphinx', - 'Framework :: Sphinx :: Extension', - ], - platforms='any', - packages=find_namespace_packages('src'), - package_dir={'': 'src'}, - include_package_data=True, - install_requires=[ - 'Sphinx >= 5.0.0', - 'docutils', - ], - extras_require={ - 'test': tests_require, - 'docs': [ - 'furo', - ], - 'ansi': [ - "erbsland-sphinx-ansi >= 1.2.4", - ], - }, - python_requires=">=3.10", -) +setup()