From 9cb590f9804a89d8914d0d7d6c89c336f6d86d86 Mon Sep 17 00:00:00 2001 From: Kai Willadsen Date: Mon, 6 May 2019 08:15:23 +1000 Subject: [PATCH] Update build helpers for Python 3.8 compatibility (#322) The `linux_distribution` helper for the platform module has been removed in Python 3.8, so we need an additional helper to check for the Debian- style packaging layout. Really this should be an `install_requires`, but moving our build helpers to `setuptools` is a not-insignificant risk that I'd rather not take when we're looking at moving to Meson. --- README.md | 6 ++++++ meld/build_helpers.py | 29 ++++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/meld/build_helpers.py b/meld/build_helpers.py index 5977b3cd..f9fb302b 100644 --- a/meld/build_helpers.py +++ b/meld/build_helpers.py @@ -31,6 +31,15 @@ import platform import sys from distutils.log import info +try: + import distro +except ImportError: + python_version = tuple(int(x) for x in platform.python_version_tuple()) + if python_version >= (3, 8): + print( + 'Missing build requirement "distro" Python module; ' + 'install paths may be incorrect', file=sys.stderr) + def has_help(self): return "build_help" in self.distribution.cmdclass and os.name != 'nt' @@ -404,11 +413,21 @@ class install(distutils.command.install.install): def finalize_options(self): special_cases = ('debian', 'ubuntu', 'linuxmint') - if (platform.system() == 'Linux' and - platform.linux_distribution()[0].lower() in special_cases): - # Maintain an explicit install-layout, but use deb by default - specified_layout = getattr(self, 'install_layout', None) - self.install_layout = specified_layout or 'deb' + if platform.system() == 'Linux': + # linux_distribution has been removed in Python 3.8; we require + # the third-party distro package for future handling. + try: + distribution = platform.linux_distribution()[0].lower() + except AttributeError: + try: + distribution = distro.id() + except NameError: + distribution = 'unknown' + + if distribution in special_cases: + # Maintain an explicit install-layout, but use deb by default + specified_layout = getattr(self, 'install_layout', None) + self.install_layout = specified_layout or 'deb' distutils.command.install.install.finalize_options(self) -- 2.22.0