Migrate to pyproject.toml (#1131)

Migrate away from setuptools to pyproject.toml
diff --git a/CHANGELOG b/CHANGELOG.md
similarity index 99%
rename from CHANGELOG
rename to CHANGELOG.md
index 70b3c9b..eb5df20 100644
--- a/CHANGELOG
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
 - The verification module has been removed. NOTE: this changes the public APIs
   by removing the "verify" parameter.
 - Changed FORCE_MULTILINE_DICT to override SPLIT_ALL_TOP_LEVEL_COMMA_SEPARATED_VALUES.
+- Adopt pyproject.toml (PEP 517) for build system
 
 ## [0.40.1] 2023-06-20
 ### Fixed
diff --git a/MANIFEST.in b/MANIFEST.in
index c88aede..26bd40e 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,4 +1,4 @@
-include HACKING.md LICENSE AUTHORS CHANGELOG CONTRIBUTING.md CONTRIBUTORS
+include HACKING.md LICENSE AUTHORS CHANGELOG.md CONTRIBUTING.md CONTRIBUTORS
 include .coveragerc .editorconfig .flake8 plugins/README.md
 include plugins/vim/autoload/yapf.vim plugins/vim/plugin/yapf.vim pylintrc
 include .style.yapf tox.ini .travis.yml .vimrc
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..afc9ccc
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,61 @@
+[build-system]
+requires = ["setuptools>=58.5.0"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "yapf"
+description = "A formatter for Python code"
+authors = [{ name = "Google Inc." }]
+maintainers = [{ name = "Bill Wendling", email = "morbo@google.com" }]
+license = { file = "LICENSE" }
+readme = "README.md"
+requires-python = ">=3.7"
+version = "0.40.1"
+classifiers = [
+    'Development Status :: 4 - Beta',
+    'Environment :: Console',
+    'Intended Audience :: Developers',
+    'License :: OSI Approved :: Apache Software License',
+    'Operating System :: OS Independent',
+    'Programming Language :: Python',
+    'Programming Language :: Python :: 3 :: Only',
+    'Programming Language :: Python :: 3.7',
+    'Programming Language :: Python :: 3.8',
+    'Programming Language :: Python :: 3.9',
+    'Programming Language :: Python :: 3.10',
+    'Programming Language :: Python :: 3.11',
+    'Topic :: Software Development :: Libraries :: Python Modules',
+    'Topic :: Software Development :: Quality Assurance',
+]
+dependencies = [
+    'importlib-metadata>=6.6.0',
+    'platformdirs>=3.5.1',
+    'tomli>=2.0.1',
+]
+
+[project.scripts]
+yapf = "yapf:run_main"
+yapf-diff = "yapf_third_party.yapf_diff.yapf_diff:main"
+
+[project.urls]
+url = 'https://github.com/google/yapf'
+changelog = "https://github.com/google/yapf/blob/main/CHANGELOG.md"
+
+[tool.distutils.bdist_wheel]
+python_tag = "py3"
+
+[tool.setuptools]
+include-package-data = true
+package-dir = { yapf_third_party = 'third_party/yapf_third_party' }
+
+[tool.setuptools.packages.find]
+where = [".", 'third_party']
+include = ["yapf*", 'yapftests*']
+
+[tool.setuptools.package-data]
+yapf_third_party = [
+    'yapf_diff/LICENSE',
+    '_ylib2to3/Grammar.txt',
+    '_ylib2to3/PatternGrammar.txt',
+    '_ylib2to3/LICENSE',
+]
diff --git a/setup.py b/setup.py
deleted file mode 100644
index 605b78a..0000000
--- a/setup.py
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 Google Inc. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import codecs
-import sys
-import unittest
-
-from setuptools import Command
-from setuptools import find_packages
-from setuptools import setup
-
-
-class RunTests(Command):
-  user_options = []
-
-  def initialize_options(self):
-    pass
-
-  def finalize_options(self):
-    pass
-
-  def run(self):
-    loader = unittest.TestLoader()
-    tests = loader.discover('yapftests', pattern='*_test.py', top_level_dir='.')
-    runner = unittest.TextTestRunner()
-    results = runner.run(tests)
-    sys.exit(0 if results.wasSuccessful() else 1)
-
-
-with codecs.open('README.md', 'r', 'utf-8') as fd:
-  setup(
-      name='yapf',
-      version='0.40.1',
-      description='A formatter for Python code.',
-      url='https://github.com/google/yapf',
-      long_description=fd.read(),
-      license='Apache License, Version 2.0',
-      author='Google Inc.',
-      maintainer='Bill Wendling',
-      maintainer_email='morbo@google.com',
-      options={'bdist_wheel': {
-          'python_tag': 'py3'
-      }},
-      packages=find_packages(where='.', include=['yapf*', 'yapftests*']) +
-      find_packages(where='third_party'),
-      package_dir={'yapf_third_party': 'third_party/yapf_third_party'},
-      project_urls={
-          'Source': 'https://github.com/google/yapf',
-      },
-      classifiers=[
-          'Development Status :: 4 - Beta',
-          'Environment :: Console',
-          'Intended Audience :: Developers',
-          'License :: OSI Approved :: Apache Software License',
-          'Operating System :: OS Independent',
-          'Programming Language :: Python',
-          'Programming Language :: Python :: 3 :: Only',
-          'Programming Language :: Python :: 3.7',
-          'Programming Language :: Python :: 3.8',
-          'Programming Language :: Python :: 3.9',
-          'Programming Language :: Python :: 3.10',
-          'Programming Language :: Python :: 3.11',
-          'Topic :: Software Development :: Libraries :: Python Modules',
-          'Topic :: Software Development :: Quality Assurance',
-      ],
-      entry_points={
-          'console_scripts': [
-              'yapf = yapf:run_main',
-              'yapf-diff = yapf_third_party.yapf_diff.yapf_diff:main',
-          ],
-      },
-      cmdclass={
-          'test': RunTests,
-      },
-      package_data={
-          'yapf_third_party': [
-              'yapf_diff/LICENSE',
-              '_ylib2to3/Grammar.txt',
-              '_ylib2to3/PatternGrammar.txt',
-              '_ylib2to3/LICENSE',
-          ]
-      },
-      include_package_data=True,
-      python_requires='>=3.7',
-      setup_requires=[
-          'setuptools>=58.5.0',  # for include_package_data fix (issue #1107)
-      ],
-      install_requires=[
-          'importlib-metadata>=6.6.0',
-          'platformdirs>=3.5.1',
-          'tomli>=2.0.1',
-      ],
-  )