[PATCH 1/1] sb/linux.py: More reliably recognize distribution
Chris Johns
chrisj at rtems.org
Sun Nov 12 21:43:50 UTC 2023
Hi Michael,
I cannot apply the patch. Git does not like it and applying with patch gives the
following error:
patching file source-builder/sb/linux.py
patch: **** malformed patch at line 25: @@ -56,36 +57,11 @@ def load():
Are you able to get git to send the patch. If not could please attach the output
of `git format-patch -1`?
Thanks
Chris
On 11/11/2023 1:41 pm, Michael South wrote:
>
> If available, use "distro" package (introduced Python 3.6, back-ported
> to 2.6)
> to recognize Linux distributions and versions.
>
> Updates #4966
> ---
> source-builder/sb/linux.py | 89 +++++++++++++++++++++++++-------------
> 1 file changed, 59 insertions(+), 30 deletions(-)
>
> diff --git a/source-builder/sb/linux.py b/source-builder/sb/linux.py
> index d71ac39..45f88b0 100644
> --- a/source-builder/sb/linux.py
> +++ b/source-builder/sb/linux.py
> @@ -28,6 +28,7 @@ import pprint
> import os
> from . import path
> +from . import log
> def load():
> uname = os.uname()
> @@ -56,36 +57,11 @@ def load():
> }
> # platform.dist() was removed in Python 3.8
> - if hasattr(platform, 'dist'):
> - # Works for LSB distros
> - try:
> - distro = platform.dist()[0]
> - distro_ver = float(platform.dist()[1])
> - except ValueError:
> - # Non LSB distro found, use failover"
> - pass
> - else:
> - distro = ''
> -
> - # Non LSB - fail over to issue
> - if distro == '':
> - try:
> - issue = open('/etc/issue').read()
> - distro = issue.split(' ')[0]
> - distro_ver = float(issue.split(' ')[2])
> - except:
> - pass
> -
> - distro = distro.lower()
> -
> - # Manage distro aliases
> - if distro in ['centos']:
> - distro = 'redhat'
> - elif distro in ['fedora']:
> - if distro_ver < 17:
> - distro = 'redhat'
> - elif distro in ['ubuntu', 'mx', 'linuxmint']:
> - distro = 'debian'
> + # The distro module (introduced in Python 3.6, back-ported to 2.6)
> + # is preferred.
> + distro = ''
> + distro_like = ''
> + distro_ver = 0
> variations = {
> 'debian' : { '__bzip2': ('exe', 'required',
> '/bin/bzip2'),
> @@ -114,10 +90,63 @@ def load():
> '__sed': ('exe', 'required',
> '/bin/sed') },
> }
> + try:
> + import distro as distro_mod
> + distro = distro_mod.id()
> + distro_like = distro_mod.like()
> + try:
> + distro_ver = float(distro_mod.version())
> + except ValueError:
> + pass
> + except:
> + pass
> +
> + if distro == '' and hasattr(platform, 'dist'):
> + distro = platform.dist()[0]
> + try:
> + distro_ver = float(platform.dist()[1])
> + except ValueError:
> + pass
> +
> + # Non LSB - last resort, try issue
> + if distro == '':
> + try:
> + with open('/etc/issue') as f:
> + issue = f.read().split(' ')
> + distro = issue[0]
> + distro_ver = float(issue[2])
> + except:
> + pass
> +
> + if distro:
> + distro = distro.lower()
> + if distro_like:
> + distro_like = distro_like.lower().split(' ')[0]
> +
> + # Some additional distro aliases
> + if distro in ['centos']:
> + distro_like = 'redhat'
> + elif distro in ['fedora']:
> + if distro_ver < 17:
> + distro_like = 'redhat'
> + elif distro in ['ubuntu', 'mx', 'linuxmint']:
> + distro_like = 'debian'
> +
> + if not (distro in variations) and (distro_like in variations):
> + distro = distro_like
> + # Versions don't carry over to likes; e.g. linuxmint 21.6 !=
> debian 21.6.
> + distro_ver = 0
> +
> if distro in variations:
> for v in variations[distro]:
> if path.exists(variations[distro][v][2]):
> defines[v] = variations[distro][v]
> + else:
> + log.warning('Unrecognized OS distro; assuming defaults for
> grep, sed, etc.')
> + try:
> + distro_mod
> + except:
> + log.warning("The 'distro' package may fix this problem; try
> 'pip install distro'.")
> defines['_build'] = defines['_host']
> defines['_build_vendor'] = defines['_host_vendor']
More information about the devel
mailing list