First pass at implementing Smart
v2 cover First pass at implementing Smart
Since V1 that Mark originally posted, remove the BBCLASSEXTEND for nativesdk in python-smartpm as it is currently broken when building for nativesdk.
The following changes since commit fa7fb44d1ca2b8a57509806bde19672c68ef157d:
mesa-demos: fix --with-glut check (2012-11-12 22:31:41 +0000)
are available in the git repository at:
git://git.openembedded.org/openembedded-core-contrib paule/smart
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=paule/smart
Mark Hatle (4):
rpm: Slightly change the way python-rpm is constructed
python-smartpm: Add smartpm recipe
rpm: Add additional RPMSENSE values to python module
python-smartpm: Add basic knowledge of RPMSENSE_MISSINGOK
.../python/python-smartpm/smart-missingok.patch | 43 +++++++ .../python/python-smartpm/smart-rpm-root.patch | 80 +++++++++++++ .../python/python-smartpm/smartpm-rpm5-nodig.patch | 46 ++++++++ .../python/python-smartpm_1.4.1.bb | 120 ++++++++++++++++++++ .../rpm/rpm/python-rpm-rpmsense.patch | 33 ++++++ meta/recipes-devtools/rpm/rpm/rpm-py-init.patch | 27 +++++ meta/recipes-devtools/rpm/rpm_5.4.9.bb | 17 ++- 7 files changed, 360 insertions(+), 6 deletions(-) create mode 100644 meta/recipes-devtools/python/python-smartpm/smart-missingok.patch create mode 100644 meta/recipes-devtools/python/python-smartpm/smart-rpm-root.patch create mode 100644 meta/recipes-devtools/python/python-smartpm/smartpm-rpm5-nodig.patch create mode 100644 meta/recipes-devtools/python/python-smartpm_1.4.1.bb create mode 100644 meta/recipes-devtools/rpm/rpm/python-rpm-rpmsense.patch create mode 100644 meta/recipes-devtools/rpm/rpm/rpm-py-init.patch
Signature · 1 line
1.7.9.5
PATCH v2 1/4 rpm: Slightly change the way python-rpm is constructed
From: Mark Hatle <[email protected]>
If python support is enabled we want to make sure that the RPM python support is packaged properly.
Move the components into the site-packages directory, move the .la files to a new -dev package.
Add "rpm" as a dependency of python-rpm, otherwise rpm and the associated libraries won't be available.
Fixup python wrapper to handle automatic relocation, as supported by the vendor WINDRIVER configuration. (Based on a patch from Paul Eggleton)
--- meta/recipes-devtools/rpm/rpm/rpm-py-init.patch | 27 +++++++++++++++++++++++ meta/recipes-devtools/rpm/rpm_5.4.9.bb | 16 +++++++++----- 2 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 meta/recipes-devtools/rpm/rpm/rpm-py-init.patch
meta/recipes-devtools/rpm/rpm/rpm-py-init.patch new file +27 -0
@@ -0,0 +1,27 @@ +python/rpmmodules.c: Change the way the python module loads the RPM config + +In order to support the RPM_VENDOR_WINDRIVER enhancement of dynamic +runtime relocation paths, we need to call rpmcliInit instead of +rpmReadConfigFiles. The rpmcliInit will end up calling rpmReadConfigFiles +after the necessary relocation processing (if enabled). + +Code derived from changes suggested by Paul Eggleton. + +Upstream-Status: Pending + +Signed-off-by: Mark Hatle <[email protected]> + +diff --git a/python/rpmmodule.c b/python/rpmmodule.c +index f7282bc..dde68ca 100644 +--- a/python/rpmmodule.c ++++ b/python/rpmmodule.c +@@ -392,7 +392,8 @@ void init_rpm(void) + if (Py_AtExit(rpm_exithook) == -1) + return; + +- rpmReadConfigFiles(NULL, NULL); ++ const char *argv[1] = {"rpmmodule", 0}; ++ rpmcliInit(1, argv, NULL); + + d = PyModule_GetDict(m); +
meta/recipes-devtools/rpm/rpm_5.4.9.bb +10 -6
@@ -43,7 +43,7 @@ LICENSE = "LGPLv2.1" LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1" DEPENDS = "libpcre attr acl popt ossp-uuid file bison-native" -PR = "r52" +PR = "r53" # rpm2cpio is a shell script, which is part of the rpm src.rpm. It is needed # in order to extract the distribution SRPM into a format we can extract...
@@ -80,6 +80,7 @@ SRC_URI = "http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.9-0.20120508.src.rpm;ex file://makefile-am-exec-hook.patch \ file://rpm-stub-out-git_strerror.patch \ file://rpm-db_buffer_small.patch \ + file://rpm-py-init.patch \ " SRC_URI[md5sum] = "60d56ace884340c1b3fcac6a1d58e768"
@@ -107,7 +108,7 @@ PACKAGECONFIG[xar] = "--with-xar,--without-xar,xar," WITH_PYTHON = " --with-python=${PYTHON_BASEVERSION} \ --with-python-inc-dir=${STAGING_INCDIR}/python${PYTHON_BASEVERSION} \ - --with-python-lib-dir=${libdir}/python${PYTHON_BASEVERSION} \ + --with-python-lib-dir=${libdir}/python${PYTHON_BASEVERSION}/site-packages \ --without-pythonembed" PACKAGECONFIG[python] = "${WITH_PYTHON},--without-python,python,"
@@ -189,7 +190,7 @@ CFLAGS_append = " -DRPM_VENDOR_WINDRIVER -DRPM_VENDOR_POKY -DRPM_VENDOR_OE" LDFLAGS_append_libc-uclibc = "-lrt -lpthread" -PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-libs ${PN}-dev ${PN}-staticdev ${PN}-common ${PN}-build python-rpm-dbg python-rpm-staticdev python-rpm perl-module-rpm perl-module-rpm-dev ${PN}-locale" +PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-libs ${PN}-dev ${PN}-staticdev ${PN}-common ${PN}-build python-rpm-dbg python-rpm-staticdev python-rpm-dev python-rpm perl-module-rpm perl-module-rpm-dev ${PN}-locale" SOLIBS = "5.4.so"
@@ -302,9 +303,12 @@ RDEPENDS_${PN} = "base-files" RDEPENDS_${PN}_class-native = "" RDEPENDS_${PN}-build = "file" -FILES_python-rpm-dbg = "${libdir}/python*/rpm/.debug/_*" -FILES_python-rpm-staticdev = "${libdir}/python*/rpm/*.a" -FILES_python-rpm = "${libdir}/python*/rpm" +RDEPENDS_python-rpm = "${PN}" + +FILES_python-rpm-dbg = "${libdir}/python*/site-packages/rpm/.debug/_*" +FILES_python-rpm-dev = "${libdir}/python*/site-packages/rpm/*.la" +FILES_python-rpm-staticdev = "${libdir}/python*/site-packages/rpm/*.a" +FILES_python-rpm = "${libdir}/python*/site-packages/rpm" FILES_perl-module-rpm = "${libdir}/perl/*/* \ "
Signature · 1 line
1.7.9.5
PATCH v2 2/4 python-smartpm: Add smartpm recipe
In reply to Paul EggletonFrom: Mark Hatle <[email protected]>
This is the initial integration, basic functionality such as 'smart query' has been tested. Active use of remote feeds and such has not yet been verified.
Thanks to Paul Eggleton for corrections and bug fixes for the initial integration.
--- .../python/python-smartpm/smart-rpm-root.patch | 80 +++++++++++++ .../python/python-smartpm/smartpm-rpm5-nodig.patch | 46 ++++++++ .../python/python-smartpm_1.4.1.bb | 119 ++++++++++++++++++++ 3 files changed, 245 insertions(+) create mode 100644 meta/recipes-devtools/python/python-smartpm/smart-rpm-root.patch create mode 100644 meta/recipes-devtools/python/python-smartpm/smartpm-rpm5-nodig.patch create mode 100644 meta/recipes-devtools/python/python-smartpm_1.4.1.bb
meta/recipes-devtools/python/python-smartpm/smart-rpm-root.patch new file +80 -0
@@ -0,0 +1,80 @@ +Fix smart RPM backend to handle rpm-dbpath/rpm-root properly + +Don't assume that if the dbpath starts with / that it is an absolute +path. This matches the behaviour of rpm itself. (If the root path is +specified and does not start with /, rpm will prepend the root path +twice and fail). + +Upstream-Status: Pending + +Signed-off-by: Paul Eggleton <[email protected]> + +diff --git a/smart/backends/rpm/base.py b/smart/backends/rpm/base.py +index 7092332..0489e11 100644 +--- a/smart/backends/rpm/base.py ++++ b/smart/backends/rpm/base.py +@@ -46,6 +46,12 @@ __all__ = ["RPMPackage", "RPMProvides", "RPMNameProvides", "RPMPreRequires", + "rpm", "getTS", "getArchScore", "getArchColor", "system_provides", + "collapse_libc_requires"] + ++def rpm_join_dbpath(root, dbpath): ++ if dbpath.startswith('/') and root: ++ return os.path.join(root, dbpath[1:]) ++ else: ++ return os.path.join(root, dbpath) ++ + def getTS(new=False): + rpm_root = os.path.abspath(sysconf.get("rpm-root", "/")) + if not hasattr(getTS, "ts") or getTS.root != rpm_root: +@@ -56,7 +62,7 @@ def getTS(new=False): + #if not sysconf.get("rpm-check-signatures", False): + # getTS.ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES) + rpm_dbpath = sysconf.get("rpm-dbpath", "var/lib/rpm") +- dbdir = os.path.join(getTS.root, rpm_dbpath) ++ dbdir = rpm_join_dbpath(getTS.root, rpm_dbpath) + if not os.path.isdir(dbdir): + try: + os.makedirs(dbdir) +diff --git a/smart/channels/rpm_sys.py b/smart/channels/rpm_sys.py +index efcb10e..b9fda27 100644 +--- a/smart/channels/rpm_sys.py ++++ b/smart/channels/rpm_sys.py +@@ -20,7 +20,7 @@ + # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + # + from smart.backends.rpm.header import RPMDBLoader +-from smart.backends.rpm.base import getTS ++from smart.backends.rpm.base import getTS, rpm_join_dbpath + from smart.channel import PackageChannel + from smart import * + import os +@@ -32,9 +32,9 @@ class RPMSysChannel(PackageChannel): + + def fetch(self, fetcher, progress): + getTS() # Make sure the db exists. +- path = os.path.join(sysconf.get("rpm-root", "/"), +- sysconf.get("rpm-dbpath", "var/lib/rpm"), +- "Packages") ++ dbdir = rpm_join_dbpath(sysconf.get("rpm-root", "/"), ++ sysconf.get("rpm-dbpath", "var/lib/rpm")) ++ path = os.path.join(dbdir, "Packages") + digest = os.path.getmtime(path) + if digest == self._digest: + return True +diff --git a/smart/plugins/detectsys.py b/smart/plugins/detectsys.py +index 2cd49ad..3959d07 100644 +--- a/smart/plugins/detectsys.py ++++ b/smart/plugins/detectsys.py +@@ -20,10 +20,11 @@ + # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + # + from smart import * ++from smart.backends.rpm.base import rpm_join_dbpath + import os + + def detectRPMSystem(): +- dir = os.path.join(sysconf.get("rpm-root", "/"), ++ dir = rpm_join_dbpath(sysconf.get("rpm-root", "/"), + sysconf.get("rpm-dbpath", "var/lib/rpm")) + file = os.path.join(dir, "Packages") + if os.path.exists(file):
meta/recipes-devtools/python/python-smartpm/smartpm-rpm5-nodig.patch new file +46 -0
46 lines not on this page · raw message
meta/recipes-devtools/python/python-smartpm_1.4.1.bb new file +119 -0
119 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH v2 3/4 rpm: Add additional RPMSENSE values to python module
In reply to Paul EggletonFrom: Mark Hatle <[email protected]>
We add a number of additional RPMSENSE values to the python module to better support the dependency calculations in SMART.
--- .../rpm/rpm/python-rpm-rpmsense.patch | 33 ++++++++++++++++++++ meta/recipes-devtools/rpm/rpm_5.4.9.bb | 3 +- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 meta/recipes-devtools/rpm/rpm/python-rpm-rpmsense.patch
meta/recipes-devtools/rpm/rpm/python-rpm-rpmsense.patch new file +33 -0
@@ -0,0 +1,33 @@ +rpmmodule.c: Export a few additional RPMSENSE values + +We want to see the RPMSENSE_SCRIPT values for use with SMART. We also +want to see the MISSINGOK value so we can avoid recommended packages causing +failures. + +Upstream-status: Pending + +Signed-off-by: Mark Hatle <[email protected]> + +Index: rpm-5.4.9/python/rpmmodule.c +=================================================================== +--- rpm-5.4.9.orig/python/rpmmodule.c ++++ rpm-5.4.9/python/rpmmodule.c +@@ -494,12 +494,16 @@ void init_rpm(void) + REGISTER_ENUM(RPMSENSE_EQUAL); + REGISTER_ENUM(RPMSENSE_NOTEQUAL); + REGISTER_ENUM(RPMSENSE_FIND_REQUIRES); +-#if defined(RPM_VENDOR_MANDRIVA) ++#if defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_WINDRIVER) || defined(RPM_VENDOR_POKY) + REGISTER_ENUM(RPMSENSE_PREREQ); + REGISTER_ENUM(RPMSENSE_SCRIPT_PRE); + REGISTER_ENUM(RPMSENSE_SCRIPT_POST); + REGISTER_ENUM(RPMSENSE_SCRIPT_PREUN); +- REGISTER_ENUM(RPMSENSE_SCRIPT_POSTUN) ++ REGISTER_ENUM(RPMSENSE_SCRIPT_POSTUN); ++#endif ++ ++#if defined(RPM_VENDOR_WINDRIVER) || defined(RPM_VENDOR_POKY) ++ REGISTER_ENUM(RPMSENSE_MISSINGOK); + #endif + + REGISTER_ENUM(RPMDEPS_FLAG_NOUPGRADE);
meta/recipes-devtools/rpm/rpm_5.4.9.bb +2 -1
@@ -43,7 +43,7 @@ LICENSE = "LGPLv2.1" LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1" DEPENDS = "libpcre attr acl popt ossp-uuid file bison-native" -PR = "r53" +PR = "r54" # rpm2cpio is a shell script, which is part of the rpm src.rpm. It is needed # in order to extract the distribution SRPM into a format we can extract...
@@ -81,6 +81,7 @@ SRC_URI = "http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.9-0.20120508.src.rpm;ex file://rpm-stub-out-git_strerror.patch \ file://rpm-db_buffer_small.patch \ file://rpm-py-init.patch \ + file://python-rpm-rpmsense.patch \ " SRC_URI[md5sum] = "60d56ace884340c1b3fcac6a1d58e768"
Signature · 1 line
1.7.9.5
PATCH v2 4/4 python-smartpm: Add basic knowledge of RPMSENSE_MISSINGOK
In reply to Paul EggletonFrom: Mark Hatle <[email protected]>
Currently smart does not support recommend dependencies. Add the first set of 'support' for RPMSENSE_MISSINGOK (the flag that makes something a recommend). This initial support ends up ignoring the recommendation, but is written in a way that it will be the basis of eventual support.
--- .../python/python-smartpm/smart-missingok.patch | 43 ++++++++++++++++++++ .../python/python-smartpm_1.4.1.bb | 3 +- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 meta/recipes-devtools/python/python-smartpm/smart-missingok.patch
meta/recipes-devtools/python/python-smartpm/smart-missingok.patch new file +43 -0
@@ -0,0 +1,43 @@ +backends/rpm: Identify recommended packages + +We identify and store recommended packages (and later throw that data away.) + +This is indended to be the starting work to add support for recommended +packages to smart. + +Upstream-status: Inappropriate [ Code isn't finished! ] + +Signed-off-by: Mark Hatle <[email protected]> + +Index: smart-1.4.1/smart/backends/rpm/header.py +=================================================================== +--- smart-1.4.1.orig/smart/backends/rpm/header.py ++++ smart-1.4.1/smart/backends/rpm/header.py +@@ -292,6 +292,7 @@ class RPMHeaderLoader(Loader): + f = [0] + elif type(f) != list: + f = [f] ++ recdict = {} + reqdict = {} + for i in range(len(n)): + ni = n[i] +@@ -308,10 +309,17 @@ class RPMHeaderLoader(Loader): + # RPMSENSE_SCRIPT_PREUN | + # RPMSENSE_SCRIPT_POST | + # RPMSENSE_SCRIPT_POSTUN == 7744 +- reqdict[(f[i]&7744 and PreReq or Req, +- intern(ni), r, vi)] = True ++ if (f[i]&rpm.RPMSENSE_MISSINGOK): ++ print "Ignoring Recommend Dependency: %s" % (ni) ++ recdict[(f[i]&7744 and PreReq or Req, ++ intern(ni), r, vi)] = True ++ else: ++ reqdict[(f[i]&7744 and PreReq or Req, ++ intern(ni), r, vi)] = True ++ recargs = collapse_libc_requires(recdict.keys()) + reqargs = collapse_libc_requires(reqdict.keys()) + else: ++ recargs = None + reqargs = None + + n = h[1054] # RPMTAG_CONFLICTNAME
meta/recipes-devtools/python/python-smartpm_1.4.1.bb +2 -1
@@ -11,13 +11,14 @@ LICENSE = "GPLv2" LIC_FILES_CHKSUM = "file://LICENSE;md5=393a5ca445f6965873eca0259a17f833" DEPENDS = "python rpm" -PR = "r0" +PR = "r1" SRCNAME = "smart" SRC_URI = "\ http://launchpad.net/smart/trunk/${PV}/+download/${SRCNAME}-${PV}.tar.bz2 \ file://smartpm-rpm5-nodig.patch \ file://smart-rpm-root.patch \ + file://smart-missingok.patch \ " SRC_URI[md5sum] = "573ef32ba177a6b3c4bf7ef04873fcb6"
Signature · 1 line
1.7.9.5