diff --git a/setupbase.py b/setupbase.py index 1dd6c57a2..cc92088e5 100644 --- a/setupbase.py +++ b/setupbase.py @@ -572,12 +572,41 @@ def get_bdist_wheel(): return RequiresWheel else: try: - from wheel.bdist_wheel import bdist_wheel + from wheel.bdist_wheel import bdist_wheel, read_pkg_info, write_pkg_info except ImportError: return RequiresWheel + class bdist_wheel_tag(bdist_wheel): + def get_tag(self): return ('py%i' % sys.version_info[0], 'none', 'any') + + def add_requirements(self, metadata_path): + """transform platform-dependent requirements""" + pkg_info = read_pkg_info(metadata_path) + # pkg_info is an email.Message object (?!) + # we have to remove the unconditional 'readline' and/or 'pyreadline' entries + # and transform them to conditionals + requires = pkg_info.get_all('Requires-Dist') + del pkg_info['Requires-Dist'] + def _remove_startswith(lis, prefix): + """like list.remove, but with startswith instead of ==""" + found = False + for idx, item in enumerate(lis): + if item.startswith(prefix): + found = True + break + if found: + lis.pop(idx) + + for pkg in ("readline", "pyreadline"): + _remove_startswith(requires, pkg) + requires.append("readline; sys.platform == 'darwin'") + requires.append("pyreadline (>=2.0); sys.platform == 'win32'") + for r in requires: + pkg_info['Requires-Dist'] = r + write_pkg_info(metadata_path, pkg_info) + return bdist_wheel_tag #---------------------------------------------------------------------------