summaryrefslogtreecommitdiff
path: root/src/wheel
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2022-11-04 11:05:00 +0200
committerGitHub <noreply@github.com>2022-11-04 11:05:00 +0200
commit9ec201660fa07ee0714edd17c979a7039ea852a4 (patch)
tree3217054035ebccb33cc0990ea12b8c561f50eb51 /src/wheel
parent747e1f6090547abcf65108c5a229cbe21a64a2ae (diff)
downloadwheel-git-9ec201660fa07ee0714edd17c979a7039ea852a4.tar.gz
Removed install dependency on setuptools (#483)
Also re-added the fallback for `license_paths` on setuptools versions older than 57.
Diffstat (limited to 'src/wheel')
-rw-r--r--src/wheel/bdist_wheel.py47
-rwxr-xr-xsrc/wheel/cli/convert.py7
2 files changed, 50 insertions, 4 deletions
diff --git a/src/wheel/bdist_wheel.py b/src/wheel/bdist_wheel.py
index 3a82caa..4754fd1 100644
--- a/src/wheel/bdist_wheel.py
+++ b/src/wheel/bdist_wheel.py
@@ -15,6 +15,7 @@ import sysconfig
import warnings
from collections import OrderedDict
from email.generator import BytesGenerator, Generator
+from glob import iglob
from io import BytesIO
from shutil import rmtree
from zipfile import ZIP_DEFLATED, ZIP_STORED
@@ -31,6 +32,9 @@ from .wheelfile import WheelFile
safe_name = pkg_resources.safe_name
safe_version = pkg_resources.safe_version
+setuptools_major_version = int(
+ pkg_resources.get_distribution("setuptools").version.split(".")[0]
+)
PY_LIMITED_API_PATTERN = r"cp3\d"
@@ -430,8 +434,47 @@ class bdist_wheel(Command):
@property
def license_paths(self):
- metadata = self.distribution.metadata
- return sorted(metadata.license_files or [])
+ if setuptools_major_version >= 57:
+ # Setuptools has resolved any patterns to actual file names
+ return self.distribution.metadata.license_files or ()
+
+ files = set()
+ metadata = self.distribution.get_option_dict("metadata")
+ if setuptools_major_version >= 42:
+ # Setuptools recognizes the license_files option but does not do globbing
+ patterns = self.distribution.metadata.license_files
+ else:
+ # Prior to those, wheel is entirely responsible for handling license files
+ if "license_files" in metadata:
+ patterns = metadata["license_files"][1].split()
+ else:
+ patterns = ()
+
+ if "license_file" in metadata:
+ warnings.warn(
+ 'The "license_file" option is deprecated. Use "license_files" instead.',
+ DeprecationWarning,
+ )
+ files.add(metadata["license_file"][1])
+
+ if not files and not patterns and not isinstance(patterns, list):
+ patterns = ("LICEN[CS]E*", "COPYING*", "NOTICE*", "AUTHORS*")
+
+ for pattern in patterns:
+ for path in iglob(pattern):
+ if path.endswith("~"):
+ log.debug(
+ f'ignoring license file "{path}" as it looks like a backup'
+ )
+ continue
+
+ if path not in files and os.path.isfile(path):
+ log.info(
+ f'adding license file "{path}" (matched pattern "{pattern}")'
+ )
+ files.add(path)
+
+ return files
def egg2dist(self, egginfo_path, distinfo_path):
"""Convert an .egg-info directory into a .dist-info directory"""
diff --git a/src/wheel/cli/convert.py b/src/wheel/cli/convert.py
index 0ca66f3..1287059 100755
--- a/src/wheel/cli/convert.py
+++ b/src/wheel/cli/convert.py
@@ -7,12 +7,15 @@ import tempfile
import zipfile
from glob import iglob
-from setuptools.dist import Distribution
-
from ..bdist_wheel import bdist_wheel
from ..wheelfile import WheelFile
from . import WheelError
+try:
+ from setuptools import Distribution
+except ImportError:
+ from distutils.dist import Distribution
+
egg_info_re = re.compile(
r"""
(?P<name>.+?)-(?P<ver>.+?)