Python dependency generators live in python-rpm-generators now (#1444925)
This commit is contained in:
parent
0123653c89
commit
7bc220d2a2
@ -1,20 +0,0 @@
|
|||||||
--- rpm-4.13.0-rc1/scripts/Makefile.am.orig 2015-09-01 19:45:43.896822977 +0200
|
|
||||||
+++ rpm-4.13.0-rc1/scripts/Makefile.am 2016-06-13 15:46:34.281390084 +0200
|
|
||||||
@@ -11,7 +11,7 @@
|
|
||||||
check-files check-prereqs \
|
|
||||||
check-buildroot check-rpaths check-rpaths-worker \
|
|
||||||
find-debuginfo.sh find-lang.sh \
|
|
||||||
- perl.prov perl.req pythondeps.sh \
|
|
||||||
+ perl.prov perl.req pythondeps.sh pythondistdeps.py \
|
|
||||||
rpmdb_loadcvt rpm.daily rpm.log rpm.supp rpm2cpio.sh \
|
|
||||||
tgpg vpkg-provides.sh \
|
|
||||||
find-requires find-provides \
|
|
||||||
@@ -30,7 +30,7 @@
|
|
||||||
check-files check-prereqs \
|
|
||||||
check-buildroot check-rpaths check-rpaths-worker \
|
|
||||||
find-lang.sh find-requires find-provides \
|
|
||||||
- perl.prov perl.req pythondeps.sh \
|
|
||||||
+ perl.prov perl.req pythondeps.sh pythondistdeps.py \
|
|
||||||
mono-find-requires mono-find-provides \
|
|
||||||
pkgconfigdeps.sh libtooldeps.sh \
|
|
||||||
ocaml-find-requires.sh ocaml-find-provides.sh \
|
|
@ -1,9 +0,0 @@
|
|||||||
--- rpm-4.13.0-rc1/fileattrs/python.attr.orig 2016-06-13 15:49:10.072832164 +0200
|
|
||||||
+++ rpm-4.13.0-rc1/fileattrs/python.attr 2016-06-13 15:50:46.687106846 +0200
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-%__python_provides %{_rpmconfigdir}/pythondeps.sh --provides
|
|
||||||
+%__python_provides %{_rpmconfigdir}/pythondistdeps.py --provides --majorver-provides
|
|
||||||
%__python_requires %{_rpmconfigdir}/pythondeps.sh --requires
|
|
||||||
-%__python_path ^((/usr/lib(64)?/python[[:digit:]]\\.[[:digit:]]/.*\\.(py[oc]?|so))|(%{_bindir}/python[[:digit:]]\\.[[:digit:]]))$
|
|
||||||
+%__python_path ^((/usr/lib(64)?/python[[:digit:]]\\.[[:digit:]]/.*))|(%{_bindir}/python[[:digit:]]\\.[[:digit:]]))$
|
|
||||||
%__python_magic [Pp]ython.*(executable|byte-compiled)
|
|
@ -1,9 +0,0 @@
|
|||||||
diff -uNr rpm-4.13.0.orig/scripts/pythondistdeps.py rpm-4.13.0/scripts/pythondistdeps.py
|
|
||||||
--- rpm-4.13.0.orig/scripts/pythondistdeps.py 2016-12-18 12:25:21.287632679 +0100
|
|
||||||
+++ rpm-4.13.0/scripts/pythondistdeps.py 2016-12-18 12:25:48.857479226 +0100
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-#!/usr/bin/python
|
|
||||||
+#!/usr/bin/python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# Copyright 2010 Per Øyvind Karlsen <proyvind@moondrake.org>
|
|
@ -1,229 +0,0 @@
|
|||||||
diff --git a/scripts/pythondistdeps.py b/scripts/pythondistdeps.py
|
|
||||||
new file mode 100755
|
|
||||||
index 0000000..8a2f43d
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/scripts/pythondistdeps.py
|
|
||||||
@@ -0,0 +1,223 @@
|
|
||||||
+#!/usr/bin/python
|
|
||||||
+# -*- coding: utf-8 -*-
|
|
||||||
+#
|
|
||||||
+# Copyright 2010 Per Øyvind Karlsen <proyvind@moondrake.org>
|
|
||||||
+# Copyright 2015 Neal Gompa <ngompa13@gmail.com>
|
|
||||||
+#
|
|
||||||
+# This program is free software. It may be redistributed and/or modified under
|
|
||||||
+# the terms of the LGPL version 2.1 (or later).
|
|
||||||
+#
|
|
||||||
+# RPM python dependency generator, using .egg-info/.egg-link/.dist-info data
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+from __future__ import print_function
|
|
||||||
+from getopt import getopt
|
|
||||||
+from os.path import basename, dirname, isdir, sep
|
|
||||||
+from sys import argv, stdin, version
|
|
||||||
+from distutils.sysconfig import get_python_lib
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+opts, args = getopt(
|
|
||||||
+ argv[1:], 'hPRrCEMLl:',
|
|
||||||
+ ['help', 'provides', 'requires', 'recommends', 'conflicts', 'extras', 'majorver-provides', 'legacy-provides' , 'legacy'])
|
|
||||||
+
|
|
||||||
+Provides = False
|
|
||||||
+Requires = False
|
|
||||||
+Recommends = False
|
|
||||||
+Conflicts = False
|
|
||||||
+Extras = False
|
|
||||||
+Provides_PyMajorVer_Variant = False
|
|
||||||
+legacy_Provides = False
|
|
||||||
+legacy = False
|
|
||||||
+
|
|
||||||
+for o, a in opts:
|
|
||||||
+ if o in ('-h', '--help'):
|
|
||||||
+ print('-h, --help\tPrint help')
|
|
||||||
+ print('-P, --provides\tPrint Provides')
|
|
||||||
+ print('-R, --requires\tPrint Requires')
|
|
||||||
+ print('-r, --recommends\tPrint Recommends')
|
|
||||||
+ print('-C, --conflicts\tPrint Conflicts')
|
|
||||||
+ print('-E, --extras\tPrint Extras ')
|
|
||||||
+ print('-M, --majorver-provides\tPrint extra Provides with Python major version only')
|
|
||||||
+ print('-L, --legacy-provides\tPrint extra legacy pythonegg Provides')
|
|
||||||
+ print('-l, --legacy\tPrint legacy pythonegg Provides/Requires instead')
|
|
||||||
+ exit(1)
|
|
||||||
+ elif o in ('-P', '--provides'):
|
|
||||||
+ Provides = True
|
|
||||||
+ elif o in ('-R', '--requires'):
|
|
||||||
+ Requires = True
|
|
||||||
+ elif o in ('-r', '--recommends'):
|
|
||||||
+ Recommends = True
|
|
||||||
+ elif o in ('-C', '--conflicts'):
|
|
||||||
+ Conflicts = True
|
|
||||||
+ elif o in ('-E', '--extras'):
|
|
||||||
+ Extras = True
|
|
||||||
+ elif o in ('-M', '--majorver-provides'):
|
|
||||||
+ Provides_PyMajorVer_Variant = True
|
|
||||||
+ elif o in ('-L', '--legacy-provides'):
|
|
||||||
+ legacy_Provides = True
|
|
||||||
+ elif o in ('-l', '--legacy'):
|
|
||||||
+ legacy = True
|
|
||||||
+
|
|
||||||
+if Requires:
|
|
||||||
+ py_abi = True
|
|
||||||
+else:
|
|
||||||
+ py_abi = False
|
|
||||||
+py_deps = {}
|
|
||||||
+if args:
|
|
||||||
+ files = args
|
|
||||||
+else:
|
|
||||||
+ files = stdin.readlines()
|
|
||||||
+
|
|
||||||
+for f in files:
|
|
||||||
+ f = f.strip()
|
|
||||||
+ lower = f.lower()
|
|
||||||
+ name = 'python(abi)'
|
|
||||||
+ # add dependency based on path, versioned if within versioned python directory
|
|
||||||
+ if py_abi and (lower.endswith('.py') or lower.endswith('.pyc') or lower.endswith('.pyo')):
|
|
||||||
+ if name not in py_deps:
|
|
||||||
+ py_deps[name] = []
|
|
||||||
+ purelib = get_python_lib(standard_lib=1, plat_specific=0).split(version[:3])[0]
|
|
||||||
+ platlib = get_python_lib(standard_lib=1, plat_specific=1).split(version[:3])[0]
|
|
||||||
+ for lib in (purelib, platlib):
|
|
||||||
+ if lib in f:
|
|
||||||
+ spec = ('==', f.split(lib)[1].split(sep)[0])
|
|
||||||
+ if spec not in py_deps[name]:
|
|
||||||
+ py_deps[name].append(spec)
|
|
||||||
+
|
|
||||||
+ # XXX: hack to workaround RPM internal dependency generator not passing directories
|
|
||||||
+ lower_dir = dirname(lower)
|
|
||||||
+ if lower_dir.endswith('.egg') or \
|
|
||||||
+ lower_dir.endswith('.egg-info') or \
|
|
||||||
+ lower_dir.endswith('.egg-link') or \
|
|
||||||
+ lower_dir.endswith('.dist-info'):
|
|
||||||
+ lower = lower_dir
|
|
||||||
+ f = dirname(f)
|
|
||||||
+ # Determine provide, requires, conflicts & recommends based on egg/dist metadata
|
|
||||||
+ if lower.endswith('.egg') or \
|
|
||||||
+ lower.endswith('.egg-info') or \
|
|
||||||
+ lower.endswith('.egg-link') or \
|
|
||||||
+ lower.endswith('.dist-info'):
|
|
||||||
+ # This import is very slow, so only do it if needed
|
|
||||||
+ from pkg_resources import Distribution, FileMetadata, PathMetadata
|
|
||||||
+ dist_name = basename(f)
|
|
||||||
+ if isdir(f):
|
|
||||||
+ path_item = dirname(f)
|
|
||||||
+ metadata = PathMetadata(path_item, f)
|
|
||||||
+ else:
|
|
||||||
+ path_item = f
|
|
||||||
+ metadata = FileMetadata(f)
|
|
||||||
+ dist = Distribution.from_location(path_item, dist_name, metadata)
|
|
||||||
+ if (Provides_PyMajorVer_Variant or legacy_Provides or legacy) and Provides:
|
|
||||||
+ # Get the Python major version
|
|
||||||
+ pyver_major = dist.py_version.split('.')[0]
|
|
||||||
+ if Provides:
|
|
||||||
+ # If egg/dist metadata says package name is python, we provide python(abi)
|
|
||||||
+ if dist.key == 'python':
|
|
||||||
+ name = 'python(abi)'
|
|
||||||
+ if name not in py_deps:
|
|
||||||
+ py_deps[name] = []
|
|
||||||
+ py_deps[name].append(('==', dist.py_version))
|
|
||||||
+ if not legacy:
|
|
||||||
+ name = 'python{}dist({})'.format(dist.py_version, dist.key)
|
|
||||||
+ if name not in py_deps:
|
|
||||||
+ py_deps[name] = []
|
|
||||||
+ if Provides_PyMajorVer_Variant:
|
|
||||||
+ pymajor_name = 'python{}dist({})'.format(pyver_major, dist.key)
|
|
||||||
+ if pymajor_name not in py_deps:
|
|
||||||
+ py_deps[pymajor_name] = []
|
|
||||||
+ if legacy or legacy_Provides:
|
|
||||||
+ legacy_name = 'pythonegg({})({})'.format(pyver_major, dist.key)
|
|
||||||
+ if legacy_name not in py_deps:
|
|
||||||
+ py_deps[legacy_name] = []
|
|
||||||
+ if dist.version:
|
|
||||||
+ spec = ('==', dist.version)
|
|
||||||
+ if spec not in py_deps[name]:
|
|
||||||
+ if not legacy:
|
|
||||||
+ py_deps[name].append(spec)
|
|
||||||
+ if Provides_PyMajorVer_Variant:
|
|
||||||
+ py_deps[pymajor_name].append(spec)
|
|
||||||
+ if legacy or legacy_Provides:
|
|
||||||
+ py_deps[legacy_name].append(spec)
|
|
||||||
+ if Requires or (Recommends and dist.extras):
|
|
||||||
+ name = 'python(abi)'
|
|
||||||
+ # If egg/dist metadata says package name is python, we don't add dependency on python(abi)
|
|
||||||
+ if dist.key == 'python':
|
|
||||||
+ py_abi = False
|
|
||||||
+ if name in py_deps:
|
|
||||||
+ py_deps.pop(name)
|
|
||||||
+ elif py_abi and dist.py_version:
|
|
||||||
+ if name not in py_deps:
|
|
||||||
+ py_deps[name] = []
|
|
||||||
+ spec = ('==', dist.py_version)
|
|
||||||
+ if spec not in py_deps[name]:
|
|
||||||
+ py_deps[name].append(spec)
|
|
||||||
+ deps = dist.requires()
|
|
||||||
+ if Recommends:
|
|
||||||
+ depsextras = dist.requires(extras=dist.extras)
|
|
||||||
+ if not Requires:
|
|
||||||
+ for dep in reversed(depsextras):
|
|
||||||
+ if dep in deps:
|
|
||||||
+ depsextras.remove(dep)
|
|
||||||
+ deps = depsextras
|
|
||||||
+ # add requires/recommends based on egg/dist metadata
|
|
||||||
+ for dep in deps:
|
|
||||||
+ if legacy:
|
|
||||||
+ name = 'pythonegg({})({})'.format(pyver_major, dep.key)
|
|
||||||
+ else:
|
|
||||||
+ name = 'python{}dist({})'.format(dist.py_version, dep.key)
|
|
||||||
+ for spec in dep.specs:
|
|
||||||
+ if spec[0] != '!=':
|
|
||||||
+ if name not in py_deps:
|
|
||||||
+ py_deps[name] = []
|
|
||||||
+ if spec not in py_deps[name]:
|
|
||||||
+ py_deps[name].append(spec)
|
|
||||||
+ if not dep.specs:
|
|
||||||
+ py_deps[name] = []
|
|
||||||
+ # Unused, for automatic sub-package generation based on 'extras' from egg/dist metadata
|
|
||||||
+ # TODO: implement in rpm later, or...?
|
|
||||||
+ if Extras:
|
|
||||||
+ deps = dist.requires()
|
|
||||||
+ extras = dist.extras
|
|
||||||
+ print(extras)
|
|
||||||
+ for extra in extras:
|
|
||||||
+ print('%%package\textras-{}'.format(extra))
|
|
||||||
+ print('Summary:\t{} extra for {} python package'.format(extra, dist.key))
|
|
||||||
+ print('Group:\t\tDevelopment/Python')
|
|
||||||
+ depsextras = dist.requires(extras=[extra])
|
|
||||||
+ for dep in reversed(depsextras):
|
|
||||||
+ if dep in deps:
|
|
||||||
+ depsextras.remove(dep)
|
|
||||||
+ deps = depsextras
|
|
||||||
+ for dep in deps:
|
|
||||||
+ for spec in dep.specs:
|
|
||||||
+ if spec[0] == '!=':
|
|
||||||
+ print('Conflicts:\t{} {} {}'.format(dep.key, '==', spec[1]))
|
|
||||||
+ else:
|
|
||||||
+ print('Requires:\t{} {} {}'.format(dep.key, spec[0], spec[1]))
|
|
||||||
+ print('%%description\t{}'.format(extra))
|
|
||||||
+ print('{} extra for {} python package'.format(extra, dist.key))
|
|
||||||
+ print('%%files\t\textras-{}\n'.format(extra))
|
|
||||||
+ if Conflicts:
|
|
||||||
+ # Should we really add conflicts for extras?
|
|
||||||
+ # Creating a meta package per extra with recommends on, which has
|
|
||||||
+ # the requires/conflicts in stead might be a better solution...
|
|
||||||
+ for dep in dist.requires(extras=dist.extras):
|
|
||||||
+ name = dep.key
|
|
||||||
+ for spec in dep.specs:
|
|
||||||
+ if spec[0] == '!=':
|
|
||||||
+ if name not in py_deps:
|
|
||||||
+ py_deps[name] = []
|
|
||||||
+ spec = ('==', spec[1])
|
|
||||||
+ if spec not in py_deps[name]:
|
|
||||||
+ py_deps[name].append(spec)
|
|
||||||
+names = list(py_deps.keys())
|
|
||||||
+names.sort()
|
|
||||||
+for name in names:
|
|
||||||
+ if py_deps[name]:
|
|
||||||
+ # Print out versioned provides, requires, recommends, conflicts
|
|
||||||
+ for spec in py_deps[name]:
|
|
||||||
+ print('{} {} {}'.format(name, spec[0], spec[1]))
|
|
||||||
+ else:
|
|
||||||
+ # Print out unversioned provides, requires, recommends, conflicts
|
|
||||||
+ print(name)
|
|
@ -1,34 +0,0 @@
|
|||||||
From 30d472c8af086df077e6cf047a87fdaf93c9b21b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Igor Gnatenko <ignatenko@redhat.com>
|
|
||||||
Date: Wed, 24 Aug 2016 15:37:16 +0200
|
|
||||||
Subject: [PATCH] pythondistdeps.py: add forgotten import
|
|
||||||
|
|
||||||
Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
|
|
||||||
---
|
|
||||||
scripts/pythondistdeps.py | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/scripts/pythondistdeps.py b/scripts/pythondistdeps.py
|
|
||||||
index 76017f3..e4b99e2 100755
|
|
||||||
--- a/scripts/pythondistdeps.py
|
|
||||||
+++ b/scripts/pythondistdeps.py
|
|
||||||
@@ -15,6 +15,7 @@ from getopt import getopt
|
|
||||||
from os.path import basename, dirname, isdir, sep
|
|
||||||
from sys import argv, stdin, version
|
|
||||||
from distutils.sysconfig import get_python_lib
|
|
||||||
+from warnings import warn
|
|
||||||
|
|
||||||
|
|
||||||
opts, args = getopt(
|
|
||||||
@@ -108,7 +109,7 @@ for f in files:
|
|
||||||
dist = Distribution.from_location(path_item, dist_name, metadata)
|
|
||||||
# Check if py_version is defined in the file
|
|
||||||
if not dist.py_version:
|
|
||||||
- warnings.warn("Version for {!r} has not been found".format(dist), RuntimeWarning)
|
|
||||||
+ warn("Version for {!r} has not been found".format(dist), RuntimeWarning)
|
|
||||||
continue
|
|
||||||
if (Provides_PyMajorVer_Variant or legacy_Provides or legacy) and Provides:
|
|
||||||
# Get the Python major version
|
|
||||||
--
|
|
||||||
2.9.3
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
|||||||
From ff395f4a820497a443baa6cd0198c49b06207c3f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Orsava <torsava@redhat.com>
|
|
||||||
Date: Thu, 16 Feb 2017 11:36:29 +0100
|
|
||||||
Subject: [PATCH] Fix pythondistdeps.py --provides for Python wheels
|
|
||||||
|
|
||||||
As Python wheels do not contain targetted Python version in the directory/file
|
|
||||||
name of their metadata like Python eggs do, and since the Python version is not
|
|
||||||
contained in the metadata either, it is necessary to get it from elsewhere.
|
|
||||||
|
|
||||||
Here it is parsed from the path the metadata resides at
|
|
||||||
(e.g. /usr/lib/pythonX.Y/site-packages/...)
|
|
||||||
---
|
|
||||||
scripts/pythondistdeps.py | 13 ++++++++++---
|
|
||||||
1 file changed, 10 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/scripts/pythondistdeps.py b/scripts/pythondistdeps.py
|
|
||||||
index e4b99e2..d44210c 100644
|
|
||||||
--- a/scripts/pythondistdeps.py
|
|
||||||
+++ b/scripts/pythondistdeps.py
|
|
||||||
@@ -107,10 +107,17 @@ for f in files:
|
|
||||||
path_item = f
|
|
||||||
metadata = FileMetadata(f)
|
|
||||||
dist = Distribution.from_location(path_item, dist_name, metadata)
|
|
||||||
- # Check if py_version is defined in the file
|
|
||||||
+ # Check if py_version is defined in the metadata file/directory name
|
|
||||||
if not dist.py_version:
|
|
||||||
- warn("Version for {!r} has not been found".format(dist), RuntimeWarning)
|
|
||||||
- continue
|
|
||||||
+ # Try to parse the Python version from the path the metadata
|
|
||||||
+ # resides at (e.g. /usr/lib/pythonX.Y/site-packages/...)
|
|
||||||
+ import re
|
|
||||||
+ res = re.search(r"/python(?P<pyver>\d+\.\d)/", path_item)
|
|
||||||
+ if res:
|
|
||||||
+ dist.py_version = res.group('pyver')
|
|
||||||
+ else:
|
|
||||||
+ warn("Version for {!r} has not been found".format(dist), RuntimeWarning)
|
|
||||||
+ continue
|
|
||||||
if (Provides_PyMajorVer_Variant or legacy_Provides or legacy) and Provides:
|
|
||||||
# Get the Python major version
|
|
||||||
pyver_major = dist.py_version.split('.')[0]
|
|
||||||
--
|
|
||||||
2.11.0
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
|||||||
From 2f51022e1586a9b3ac8036b23995074b00910475 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Igor Gnatenko <ignatenko@redhat.com>
|
|
||||||
Date: Mon, 22 Aug 2016 12:55:50 +0200
|
|
||||||
Subject: [PATCH 2/3] pythondistdeps.py: show warning if version is not found
|
|
||||||
in metadata
|
|
||||||
|
|
||||||
In 49197c930bb6090d0fca4089ea75ec9d10e62f99 we introduced skipping
|
|
||||||
metadata which has no version, but it's better to show some warning.
|
|
||||||
|
|
||||||
Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
|
|
||||||
---
|
|
||||||
scripts/pythondistdeps.py | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/scripts/pythondistdeps.py b/scripts/pythondistdeps.py
|
|
||||||
index 54905c3..d7226e0 100755
|
|
||||||
--- a/scripts/pythondistdeps.py
|
|
||||||
+++ b/scripts/pythondistdeps.py
|
|
||||||
@@ -110,6 +110,7 @@ for f in files:
|
|
||||||
dist = Distribution.from_location(path_item, dist_name, metadata)
|
|
||||||
# Check if py_version is defined in the file
|
|
||||||
if not dist.py_version:
|
|
||||||
+ warnings.warn("Version for {!r} has not been found".format(dist), RuntimeWarning)
|
|
||||||
continue
|
|
||||||
if (Provides_PyMajorVer_Variant or legacy_Provides or legacy) and Provides:
|
|
||||||
# Get the Python major version
|
|
||||||
--
|
|
||||||
2.9.3
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
|||||||
From 83e4d44b802d39dfbd407488c0d9f629799b809c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Igor Gnatenko <ignatenko@redhat.com>
|
|
||||||
Date: Mon, 22 Aug 2016 12:56:05 +0200
|
|
||||||
Subject: [PATCH 3/3] pythondistdeps.py: skip .egg-link files
|
|
||||||
|
|
||||||
From setuptools's documentation:
|
|
||||||
These files are not eggs, strictly speaking. They simply provide a way
|
|
||||||
to reference an egg that is not physically installed in the desired
|
|
||||||
location. They exist primarily as a cross-platform alternative to
|
|
||||||
symbolic links, to support "installing" code that is being developed in
|
|
||||||
a different location than the desired installation location.
|
|
||||||
|
|
||||||
If we read .egg-link using pkg_resources.Distribution it will
|
|
||||||
never have version as it is just list of directories which should be
|
|
||||||
taken into account.
|
|
||||||
|
|
||||||
We could change into that directories and add eggs from those locations
|
|
||||||
for parsing, but RPM's dependency generator already passing all files
|
|
||||||
from built RPM so it just does not make any sense to traverse those
|
|
||||||
directories.
|
|
||||||
|
|
||||||
After all written above, let's just ignore .egg-link files.
|
|
||||||
|
|
||||||
Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
|
|
||||||
---
|
|
||||||
scripts/pythondistdeps.py | 2 --
|
|
||||||
1 file changed, 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/scripts/pythondistdeps.py b/scripts/pythondistdeps.py
|
|
||||||
index d7226e0..76017f3 100755
|
|
||||||
--- a/scripts/pythondistdeps.py
|
|
||||||
+++ b/scripts/pythondistdeps.py
|
|
||||||
@@ -89,14 +89,12 @@ for f in files:
|
|
||||||
lower_dir = dirname(lower)
|
|
||||||
if lower_dir.endswith('.egg') or \
|
|
||||||
lower_dir.endswith('.egg-info') or \
|
|
||||||
- lower_dir.endswith('.egg-link') or \
|
|
||||||
lower_dir.endswith('.dist-info'):
|
|
||||||
lower = lower_dir
|
|
||||||
f = dirname(f)
|
|
||||||
# Determine provide, requires, conflicts & recommends based on egg/dist metadata
|
|
||||||
if lower.endswith('.egg') or \
|
|
||||||
lower.endswith('.egg-info') or \
|
|
||||||
- lower.endswith('.egg-link') or \
|
|
||||||
lower.endswith('.dist-info'):
|
|
||||||
# This import is very slow, so only do it if needed
|
|
||||||
from pkg_resources import Distribution, FileMetadata, PathMetadata
|
|
||||||
--
|
|
||||||
2.9.3
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
|||||||
From 49197c930bb6090d0fca4089ea75ec9d10e62f99 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Neal=20Gompa=20=28=E3=83=8B=E3=83=BC=E3=83=AB=E3=83=BB?=
|
|
||||||
=?UTF-8?q?=E3=82=B3=E3=82=99=E3=83=B3=E3=83=8F=E3=82=9A=29?=
|
|
||||||
<ngompa13@gmail.com>
|
|
||||||
Date: Sat, 20 Aug 2016 11:01:06 -0400
|
|
||||||
Subject: [PATCH 1/3] pythondistdeps.py: skip distribution metadata if there is
|
|
||||||
no version
|
|
||||||
|
|
||||||
For example, reading .egg-link using pkg_resources.Distribution returns
|
|
||||||
actual metadata, but it does not contain version. It returns traceback like:
|
|
||||||
|
|
||||||
File "/usr/lib/rpm/pythondistdeps.py", line 113, in <module>
|
|
||||||
pyver_major = dist.py_version.split('.')[0]
|
|
||||||
AttributeError: 'NoneType' object has no attribute 'split'
|
|
||||||
Traceback (most recent call last):
|
|
||||||
File "/usr/lib/rpm/pythondistdeps.py", line 113, in <module>
|
|
||||||
pyver_major = dist.py_version.split('.')[0]
|
|
||||||
AttributeError: 'NoneType' object has no attribute 'split'
|
|
||||||
|
|
||||||
Let's just skip such errors as we can't do much about that.
|
|
||||||
|
|
||||||
Reference: https://bugzilla.redhat.com/show_bug.cgi?id=1368673
|
|
||||||
Reported-and-tested-by: Igor Gnatenko <ignatenko@redhat.com>
|
|
||||||
---
|
|
||||||
scripts/pythondistdeps.py | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/scripts/pythondistdeps.py b/scripts/pythondistdeps.py
|
|
||||||
index 8a2f43d..54905c3 100755
|
|
||||||
--- a/scripts/pythondistdeps.py
|
|
||||||
+++ b/scripts/pythondistdeps.py
|
|
||||||
@@ -108,6 +108,9 @@ for f in files:
|
|
||||||
path_item = f
|
|
||||||
metadata = FileMetadata(f)
|
|
||||||
dist = Distribution.from_location(path_item, dist_name, metadata)
|
|
||||||
+ # Check if py_version is defined in the file
|
|
||||||
+ if not dist.py_version:
|
|
||||||
+ continue
|
|
||||||
if (Provides_PyMajorVer_Variant or legacy_Provides or legacy) and Provides:
|
|
||||||
# Get the Python major version
|
|
||||||
pyver_major = dist.py_version.split('.')[0]
|
|
||||||
--
|
|
||||||
2.9.3
|
|
||||||
|
|
28
rpm.spec
28
rpm.spec
@ -33,7 +33,7 @@
|
|||||||
Summary: The RPM package management system
|
Summary: The RPM package management system
|
||||||
Name: rpm
|
Name: rpm
|
||||||
Version: %{rpmver}
|
Version: %{rpmver}
|
||||||
Release: %{?snapver:0.%{snapver}.}21%{?dist}
|
Release: %{?snapver:0.%{snapver}.}22%{?dist}
|
||||||
Group: System Environment/Base
|
Group: System Environment/Base
|
||||||
Url: http://www.rpm.org/
|
Url: http://www.rpm.org/
|
||||||
Source0: http://ftp.rpm.org/releases/%{srcdir}/%{name}-%{srcver}.tar.bz2
|
Source0: http://ftp.rpm.org/releases/%{srcdir}/%{name}-%{srcver}.tar.bz2
|
||||||
@ -58,22 +58,9 @@ Patch5: rpm-4.12.0-rpm2cpio-hack.patch
|
|||||||
# Patches already upstream:
|
# Patches already upstream:
|
||||||
Patch100: rpm-4.13.0-python-rpmsign.patch
|
Patch100: rpm-4.13.0-python-rpmsign.patch
|
||||||
|
|
||||||
Patch133: rpm-4.13.x-pythondistdeps.patch
|
|
||||||
Patch134: rpm-4.13.x-pythondistdeps-Makefile.patch
|
|
||||||
Patch135: rpm-4.13.x-pythondistdeps-fileattr.patch
|
|
||||||
Patch136: rpm-4.13.x-pythondistdeps.py-skip-distribution-metadata-if-ther.patch
|
|
||||||
Patch137: rpm-4.13.x-pythondistdeps.py-show-warning-if-version-is-not-fou.patch
|
|
||||||
Patch138: rpm-4.13.x-pythondistdeps.py-skip-.egg-link-files.patch
|
|
||||||
Patch139: rpm-4.13.x-pythondistdeps.py-add-forgotten-import.patch
|
|
||||||
Patch140: rpm-4.13.x-brp-python-bytecompile-Python3-only.patch
|
Patch140: rpm-4.13.x-brp-python-bytecompile-Python3-only.patch
|
||||||
# Upstream PR: https://github.com/rpm-software-management/rpm/pull/154
|
|
||||||
# rhbz#1421776
|
|
||||||
Patch141: rpm-4.13.x-pythondistdeps.py-fix-processing-wheels.patch
|
|
||||||
Patch142: rpm-4.13.x-fix-refcount-for-spec_type.patch
|
Patch142: rpm-4.13.x-fix-refcount-for-spec_type.patch
|
||||||
|
|
||||||
# Fedora-specific (python3) patch (RHBZ #1405483)
|
|
||||||
Patch200: rpm-4.13.x-pythondistdeps-python3.patch
|
|
||||||
|
|
||||||
# debuginfo backports (#1427970)
|
# debuginfo backports (#1427970)
|
||||||
Patch250: 0001-Add-build-id-links-to-rpm-for-all-ELF-files.patch
|
Patch250: 0001-Add-build-id-links-to-rpm-for-all-ELF-files.patch
|
||||||
Patch251: 0002-Make-it-possible-to-have-unique-build-ids-across-bui.patch
|
Patch251: 0002-Make-it-possible-to-have-unique-build-ids-across-bui.patch
|
||||||
@ -248,10 +235,6 @@ Requires: /usr/bin/gdb-add-index
|
|||||||
# "just work" while allowing for alternatives, depend on a virtual
|
# "just work" while allowing for alternatives, depend on a virtual
|
||||||
# provide, typically coming from redhat-rpm-config.
|
# provide, typically coming from redhat-rpm-config.
|
||||||
Requires: system-rpm-config
|
Requires: system-rpm-config
|
||||||
# Techincally rpmbuild doesn't require python3 (and setuptools), but
|
|
||||||
# pythondistdeps generator expects it.
|
|
||||||
# See: https://bugzilla.redhat.com/show_bug.cgi?id=1410631
|
|
||||||
Requires: python3-setuptools
|
|
||||||
|
|
||||||
%description build
|
%description build
|
||||||
The rpm-build package contains the scripts and executable programs
|
The rpm-build package contains the scripts and executable programs
|
||||||
@ -457,9 +440,9 @@ done
|
|||||||
|
|
||||||
find $RPM_BUILD_ROOT -name "*.la"|xargs rm -f
|
find $RPM_BUILD_ROOT -name "*.la"|xargs rm -f
|
||||||
|
|
||||||
# These live in perl-generators now
|
# These live in perl-generators and python-rpm-generators now
|
||||||
rm -f $RPM_BUILD_ROOT/%{rpmhome}/{perldeps.pl,perl.*}
|
rm -f $RPM_BUILD_ROOT/%{rpmhome}/{perldeps.pl,perl.*,python*}
|
||||||
rm -f $RPM_BUILD_ROOT/%{_fileattrsdir}/perl*
|
rm -f $RPM_BUILD_ROOT/%{_fileattrsdir}/{perl*,python*}
|
||||||
# Axe unused cruft
|
# Axe unused cruft
|
||||||
rm -f $RPM_BUILD_ROOT/%{rpmhome}/{tcl.req,osgideps.pl}
|
rm -f $RPM_BUILD_ROOT/%{rpmhome}/{tcl.req,osgideps.pl}
|
||||||
|
|
||||||
@ -610,6 +593,9 @@ exit 0
|
|||||||
%doc doc/librpm/html/*
|
%doc doc/librpm/html/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue May 23 2017 Panu Matilainen <pmatilai@redhat.com> - 4.13.0.1-22
|
||||||
|
- Python dependency generators live in python-rpm-generators now (#1444925)
|
||||||
|
|
||||||
* Tue May 23 2017 Panu Matilainen <pmatilai@redhat.com> - 4.13.0.1-21
|
* Tue May 23 2017 Panu Matilainen <pmatilai@redhat.com> - 4.13.0.1-21
|
||||||
- Fix rpmsign python module import failing (#1393659)
|
- Fix rpmsign python module import failing (#1393659)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user