Patchwork [2/4] python-smartpm: Add smartpm recipe

login
register
mail settings
Submitter Mark Hatle
Date Oct. 31, 2012, 9:19 p.m.
Message ID <6f77829d5542d9b19cfaf1ebb0d1e633c1a83e4b.1351718092.git.mark.hatle@windriver.com>
Download mbox | patch
Permalink /patch/38725/
State New
Headers show

Comments

Mark Hatle - Oct. 31, 2012, 9:19 p.m.
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.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
---
 .../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(+), 0 deletions(-)
 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
Saul Wold - Nov. 2, 2012, 8:18 a.m.
On 10/31/2012 02:19 PM, Mark Hatle wrote:
> 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.
>
> Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
> ---
>   .../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(+), 0 deletions(-)
>   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
>

Mark,

It seems that you might be missing
> diff --git a/meta/recipes-devtools/python/python-smartpm/smart-rpm-root.patch b/meta/recipes-devtools/python/python-smartpm/smart-rpm-root.patch
> new file mode 100644
> index 0000000..b2629ef
> --- /dev/null
> +++ b/meta/recipes-devtools/python/python-smartpm/smart-rpm-root.patch
> @@ -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 <paul.eggleton@linux.intel.com>
> +
> +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):
> diff --git a/meta/recipes-devtools/python/python-smartpm/smartpm-rpm5-nodig.patch b/meta/recipes-devtools/python/python-smartpm/smartpm-rpm5-nodig.patch
> new file mode 100644
> index 0000000..9919a94
> --- /dev/null
> +++ b/meta/recipes-devtools/python/python-smartpm/smartpm-rpm5-nodig.patch
> @@ -0,0 +1,46 @@
> +RPM5 has removed support for RPMVSF_NOSIGNATURES
> +
> +Patch smart to no longer use this flag
> +
> +Upstream-Status: Pending
> +
> +Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
> +
> +diff -ur smart-1.4.1.orig/smart/backends/rpm/base.py smart-1.4.1/smart/backends/rpm/base.py
> +--- smart-1.4.1.orig/smart/backends/rpm/base.py	2012-10-04 11:22:11.229351164 -0500
> ++++ smart-1.4.1/smart/backends/rpm/base.py	2012-10-04 11:22:44.820170786 -0500
> +@@ -53,8 +53,8 @@
> +         if sysconf.get("rpm-dbpath"):
> +             rpm.addMacro('_dbpath', "/" + sysconf.get("rpm-dbpath"))
> +         getTS.ts = rpm.ts(getTS.root)
> +-        if not sysconf.get("rpm-check-signatures", False):
> +-            getTS.ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES)
> ++        #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)
> +         if not os.path.isdir(dbdir):
> +@@ -82,8 +82,8 @@
> +         if sysconf.get("rpm-dbpath"):
> +             rpm.addMacro('_dbpath', "/" + sysconf.get("rpm-dbpath"))
> +         ts = rpm.ts(getTS.root)
> +-        if not sysconf.get("rpm-check-signatures", False):
> +-            ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES)
> ++        #if not sysconf.get("rpm-check-signatures", False):
> ++        #    ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES)
> +         return ts
> +     else:
> +         return getTS.ts
> +diff -ur smart-1.4.1.orig/smart/plugins/yumchannelsync.py smart-1.4.1/smart/plugins/yumchannelsync.py
> +--- smart-1.4.1.orig/smart/plugins/yumchannelsync.py	2010-12-06 03:11:05.000000000 -0600
> ++++ smart-1.4.1/smart/plugins/yumchannelsync.py	2012-10-04 11:23:09.799350924 -0500
> +@@ -56,7 +56,8 @@
> +
> +     rpmroot = sysconf.get("rpm-root", "/")
> +     ts = rpmUtils.transaction.initReadOnlyTransaction(root=rpmroot)
> +-    ts.pushVSFlags(~(rpm._RPMVSF_NOSIGNATURES|rpm._RPMVSF_NODIGESTS))
> ++    #ts.pushVSFlags(~(rpm._RPMVSF_NOSIGNATURES|rpm._RPMVSF_NODIGESTS))
> ++    ts.pushVSFlags(~(rpm._RPMVSF_NODIGESTS))
> +     releasever = None
> +     # HACK: we're hard-coding the most used distros, will add more if needed
> +     idx = ts.dbMatch('provides', 'fedora-release')
> diff --git a/meta/recipes-devtools/python/python-smartpm_1.4.1.bb b/meta/recipes-devtools/python/python-smartpm_1.4.1.bb
> new file mode 100644
> index 0000000..485cec3
> --- /dev/null
> +++ b/meta/recipes-devtools/python/python-smartpm_1.4.1.bb
> @@ -0,0 +1,119 @@
> +SUMMARY = "The Smart Package Manager"
> +
> +DESCRIPTION = "The Smart Package Manager project has the ambitious objective of creating \
> +smart and portable algorithms for solving adequately the problem of managing software \
> +upgrades and installation. This tool works in all major distributions and will bring \
> +notable advantages over native tools currently in use (APT, APT-RPM, YUM, URPMI, etc)."
> +
> +HOMEPAGE = "http://smartpm.org/"
> +SECTION = "devel/python"
> +LICENSE = "GPLv2"
> +LIC_FILES_CHKSUM = "file://LICENSE;md5=393a5ca445f6965873eca0259a17f833"
> +
> +DEPENDS = "python rpm"
> +PR = "r0"
> +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 \
> +          "
> +
> +SRC_URI[md5sum] = "573ef32ba177a6b3c4bf7ef04873fcb6"
> +SRC_URI[sha256sum] = "b1d519ddb43d60f293b065c28870a5d9e8b591cd49e8c68caea48ace91085eba"
> +S = "${WORKDIR}/${SRCNAME}-${PV}"
> +
> +# Options - rpm, qt4, gtk
> +PACKAGECONFIG ??= "rpm"
> +
> +RPM_RDEP = "python-smartpm-backend-rpm"
> +QT_RDEP = "python-smartpm-interface-qt4"
> +GTK_RDEP = "python-smartpm-interface-gtk"
> +
> +RPM_RDEP_virtclass-native = ""
> +QT_RDEP_virtclass-native = ""
> +GTK_RDEP_virtclass-native = ""
> +
> +PACKAGECONFIG[rpm] = ",,rpm,${RPM_RDEP}"
> +PACKAGECONFIG[qt4] = ",,qt4-x11,${QT_RDEP}"
> +PACKAGECONFIG[gtk] = ",,gtk+,${GTK_RDEP}"
> +
> +inherit distutils
> +
> +do_install_append() {
> +   # Cleanup unused item...
> +   rmdir ${D}${datadir}/share
> +
> +   # We don't support the following items
> +   rm -rf ${D}${libdir}/python*/site-packages/smart/backends/slack
> +   rm -rf ${D}${libdir}/python*/site-packages/smart/backends/arch
> +   rm -rf ${D}${libdir}/python*/site-packages/smart/interfaces/qt
> +
> +   # Temporary, debian support in OE is missing the python module
> +   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/aptchannelsync.py*
> +   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/debdir.py*
> +   rm -rf ${D}${libdir}/python*/site-packages/smart/backends/deb
> +
> +   # Disable automatic channel detection
> +   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/detectsys.py*
> +
> +   # Disable landscape support
> +   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/landscape.py*
> +
> +   # Disable urpmi channel support
> +   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/urpmichannelsync.py*
> +
> +   # Disable yum channel support
> +   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/yumchannelsync.py*
> +
> +   # Disable zypper channel support
> +   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/zyppchannelsync.py*
> +
> +   if [ -z "${@base_contains('PACKAGECONFIG', 'rpm', 'rpm', '', d)}" ]; then
> +      rm -f ${D}${libdir}/python*/site-packages/smart/plugins/rpmdir.py*
> +      rm -rf ${D}${libdir}/python*/site-packages/smart/backends/rpm
> +   fi
> +
> +   if [ -z "${@base_contains('PACKAGECONFIG', 'qt4', 'qt4', '', d)}" ]; then
> +      rm -rf ${D}${libdir}/python*/site-packages/smart/interfaces/qt4
> +   fi
> +
> +   if [ -z "${@base_contains('PACKAGECONFIG', 'gtk+', 'gtk', '', d)}" ]; then
> +      rm -rf ${D}${libdir}/python*/site-packages/smart/interfaces/gtk
> +   fi
> +}
> +
> +PACKAGES  = "python-smartpm-dev python-smartpm-dbg python-smartpm-doc smartpm"
> +PACKAGES += "${@base_contains('PACKAGECONFIG', 'rpm', 'python-smartpm-backend-rpm', '', d)}"
> +PACKAGES += "${@base_contains('PACKAGECONFIG', 'qt4', 'python-smartpm-interface-qt4', '', d)}"
> +PACKAGES += "${@base_contains('PACKAGECONFIG', 'gtk', 'python-smartpm-interface-gtk', '', d)}"
> +PACKAGES += "python-smartpm-interface-images"
> +PACKAGES += "python-smartpm"
> +
> +RDEPENDS_smartpm = 'python-smartpm'
> +
> +RDEPENDS_python-smartpm_append = " virtual/python-smartpm-backend python-codecs python-textutils python-xml"
> +RDEPENDS_python-smartpm_append += " python-fcntl python-pickle python-crypt python-compression python-shell"
> +RDEPENDS_python-smartpm_append += " python-resource python-netclient python-threading python-unixadmin"
> +
> +#RDEPENDS_python-smartpm_append += " python-modules"
> +
> +RDEPENDS_python-smartpm-backend-rpm = 'python-rpm'
> +RPROVIDES_python-smartpm-backend-rpm = 'virtual/python-smartpm-backend'
> +
> +RDEPENDS_python-smartpm-interface-qt4 = 'qt4-x11 python-smartpm-interface-images'
> +RDEPENDS_python-smartpm-interface-gtk = 'gtk+ python-smartpm-interface-images'
> +
Mark,

I think you might need some more PROVIDES or RDEPENDS mods here since I 
am seeing issues with nativesdk
> ERROR: Nothing PROVIDES 'nativesdk-rpm' (but virtual:nativesdk:/intel/poky/distro/meta/recipes-devtools/python/python-smartpm_1.4.1.bb DEPENDS on or otherwise requires it)
> ERROR: Nothing RPROVIDES 'nativesdk-python-smartpm' (but virtual:nativesdk:/intel/poky/distro/meta/recipes-devtools/python/python-smartpm_1.4.1.bb RDEPENDS on or otherwise requires it)
> ERROR: No eligible RPROVIDERs exist for 'nativesdk-python-smartpm'
> NOTE: Runtime target 'nativesdk-python-smartpm' is unbuildable, removing...
> Missing or unbuildable dependency chain was: ['nativesdk-python-smartpm']
> ERROR: Nothing RPROVIDES 'nativesdk-python-rpm' (but virtual:nativesdk:/intel/poky/distro/meta/recipes-devtools/python/python-smartpm_1.4.1.bb RDEPENDS on or otherwise requires it)
> NOTE: Runtime target 'nativesdk-python-rpm' is unbuildable, removing...
> Missing or unbuildable dependency chain was: ['nativesdk-python-rpm']
> ERROR: Nothing RPROVIDES 'virtual/nativesdk-python-smartpm-backend' (but virtual:nativesdk:/intel/poky/distro/meta/recipes-devtools/python/python-smartpm_1.4.1.bb RDEPENDS on or otherwise requires it)
> ERROR: No eligible RPROVIDERs exist for 'virtual/nativesdk-python-smartpm-backend'
> NOTE: Runtime target 'virtual/nativesdk-python-smartpm-backend' is unbuildable, removing...
> Missing or unbuildable dependency chain was: ['virtual/nativesdk-python-smartpm-backend']
> NOTE: Preparing runqueue


Sau!


> +FILES_smartpm = "${bindir}/smart"
> +
> +FILES_${PN}-dbg += "${libdir}/python*/site-packages/smart/backends/rpm/.debug"
> +
> +FILES_python-smartpm-backend-rpm = "${libdir}/python*/site-packages/smart/backends/rpm"
> +
> +FILES_python-smartpm-interface-qt4 = "${libdir}/python*/site-packages/smart/interfaces/qt4"
> +FILES_python-smartpm-interface-gtk = "${libdir}/python*/site-packages/smart/interfaces/gtk"
> +FILES_python-smartpm-interface-images = "${datadir}/${baselib}/python*/site-packages/smart/interfaces/images"
> +
> +BBCLASSEXTEND = "native nativesdk"
> +
>

Patch

diff --git a/meta/recipes-devtools/python/python-smartpm/smart-rpm-root.patch b/meta/recipes-devtools/python/python-smartpm/smart-rpm-root.patch
new file mode 100644
index 0000000..b2629ef
--- /dev/null
+++ b/meta/recipes-devtools/python/python-smartpm/smart-rpm-root.patch
@@ -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 <paul.eggleton@linux.intel.com>
+
+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):
diff --git a/meta/recipes-devtools/python/python-smartpm/smartpm-rpm5-nodig.patch b/meta/recipes-devtools/python/python-smartpm/smartpm-rpm5-nodig.patch
new file mode 100644
index 0000000..9919a94
--- /dev/null
+++ b/meta/recipes-devtools/python/python-smartpm/smartpm-rpm5-nodig.patch
@@ -0,0 +1,46 @@ 
+RPM5 has removed support for RPMVSF_NOSIGNATURES
+
+Patch smart to no longer use this flag
+
+Upstream-Status: Pending
+
+Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+
+diff -ur smart-1.4.1.orig/smart/backends/rpm/base.py smart-1.4.1/smart/backends/rpm/base.py
+--- smart-1.4.1.orig/smart/backends/rpm/base.py	2012-10-04 11:22:11.229351164 -0500
++++ smart-1.4.1/smart/backends/rpm/base.py	2012-10-04 11:22:44.820170786 -0500
+@@ -53,8 +53,8 @@
+         if sysconf.get("rpm-dbpath"):
+             rpm.addMacro('_dbpath', "/" + sysconf.get("rpm-dbpath"))
+         getTS.ts = rpm.ts(getTS.root)
+-        if not sysconf.get("rpm-check-signatures", False):
+-            getTS.ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES)
++        #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)
+         if not os.path.isdir(dbdir):
+@@ -82,8 +82,8 @@
+         if sysconf.get("rpm-dbpath"):
+             rpm.addMacro('_dbpath', "/" + sysconf.get("rpm-dbpath"))
+         ts = rpm.ts(getTS.root)
+-        if not sysconf.get("rpm-check-signatures", False):
+-            ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES)
++        #if not sysconf.get("rpm-check-signatures", False):
++        #    ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES)
+         return ts
+     else:
+         return getTS.ts
+diff -ur smart-1.4.1.orig/smart/plugins/yumchannelsync.py smart-1.4.1/smart/plugins/yumchannelsync.py
+--- smart-1.4.1.orig/smart/plugins/yumchannelsync.py	2010-12-06 03:11:05.000000000 -0600
++++ smart-1.4.1/smart/plugins/yumchannelsync.py	2012-10-04 11:23:09.799350924 -0500
+@@ -56,7 +56,8 @@
+ 
+     rpmroot = sysconf.get("rpm-root", "/")
+     ts = rpmUtils.transaction.initReadOnlyTransaction(root=rpmroot)
+-    ts.pushVSFlags(~(rpm._RPMVSF_NOSIGNATURES|rpm._RPMVSF_NODIGESTS))
++    #ts.pushVSFlags(~(rpm._RPMVSF_NOSIGNATURES|rpm._RPMVSF_NODIGESTS))
++    ts.pushVSFlags(~(rpm._RPMVSF_NODIGESTS))
+     releasever = None
+     # HACK: we're hard-coding the most used distros, will add more if needed
+     idx = ts.dbMatch('provides', 'fedora-release')
diff --git a/meta/recipes-devtools/python/python-smartpm_1.4.1.bb b/meta/recipes-devtools/python/python-smartpm_1.4.1.bb
new file mode 100644
index 0000000..485cec3
--- /dev/null
+++ b/meta/recipes-devtools/python/python-smartpm_1.4.1.bb
@@ -0,0 +1,119 @@ 
+SUMMARY = "The Smart Package Manager"
+
+DESCRIPTION = "The Smart Package Manager project has the ambitious objective of creating \
+smart and portable algorithms for solving adequately the problem of managing software \
+upgrades and installation. This tool works in all major distributions and will bring \
+notable advantages over native tools currently in use (APT, APT-RPM, YUM, URPMI, etc)."
+
+HOMEPAGE = "http://smartpm.org/"
+SECTION = "devel/python"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=393a5ca445f6965873eca0259a17f833"
+
+DEPENDS = "python rpm"
+PR = "r0"
+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 \
+          "
+
+SRC_URI[md5sum] = "573ef32ba177a6b3c4bf7ef04873fcb6"
+SRC_URI[sha256sum] = "b1d519ddb43d60f293b065c28870a5d9e8b591cd49e8c68caea48ace91085eba"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+# Options - rpm, qt4, gtk
+PACKAGECONFIG ??= "rpm"
+
+RPM_RDEP = "python-smartpm-backend-rpm"
+QT_RDEP = "python-smartpm-interface-qt4"
+GTK_RDEP = "python-smartpm-interface-gtk"
+
+RPM_RDEP_virtclass-native = ""
+QT_RDEP_virtclass-native = ""
+GTK_RDEP_virtclass-native = ""
+
+PACKAGECONFIG[rpm] = ",,rpm,${RPM_RDEP}"
+PACKAGECONFIG[qt4] = ",,qt4-x11,${QT_RDEP}"
+PACKAGECONFIG[gtk] = ",,gtk+,${GTK_RDEP}"
+
+inherit distutils
+
+do_install_append() {
+   # Cleanup unused item...
+   rmdir ${D}${datadir}/share
+
+   # We don't support the following items
+   rm -rf ${D}${libdir}/python*/site-packages/smart/backends/slack
+   rm -rf ${D}${libdir}/python*/site-packages/smart/backends/arch
+   rm -rf ${D}${libdir}/python*/site-packages/smart/interfaces/qt
+
+   # Temporary, debian support in OE is missing the python module
+   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/aptchannelsync.py*
+   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/debdir.py*
+   rm -rf ${D}${libdir}/python*/site-packages/smart/backends/deb
+
+   # Disable automatic channel detection
+   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/detectsys.py*
+
+   # Disable landscape support
+   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/landscape.py*
+
+   # Disable urpmi channel support
+   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/urpmichannelsync.py*
+
+   # Disable yum channel support
+   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/yumchannelsync.py*
+
+   # Disable zypper channel support
+   rm -f ${D}${libdir}/python*/site-packages/smart/plugins/zyppchannelsync.py*
+
+   if [ -z "${@base_contains('PACKAGECONFIG', 'rpm', 'rpm', '', d)}" ]; then
+      rm -f ${D}${libdir}/python*/site-packages/smart/plugins/rpmdir.py*
+      rm -rf ${D}${libdir}/python*/site-packages/smart/backends/rpm
+   fi
+
+   if [ -z "${@base_contains('PACKAGECONFIG', 'qt4', 'qt4', '', d)}" ]; then
+      rm -rf ${D}${libdir}/python*/site-packages/smart/interfaces/qt4
+   fi
+
+   if [ -z "${@base_contains('PACKAGECONFIG', 'gtk+', 'gtk', '', d)}" ]; then
+      rm -rf ${D}${libdir}/python*/site-packages/smart/interfaces/gtk
+   fi
+}
+
+PACKAGES  = "python-smartpm-dev python-smartpm-dbg python-smartpm-doc smartpm"
+PACKAGES += "${@base_contains('PACKAGECONFIG', 'rpm', 'python-smartpm-backend-rpm', '', d)}"
+PACKAGES += "${@base_contains('PACKAGECONFIG', 'qt4', 'python-smartpm-interface-qt4', '', d)}"
+PACKAGES += "${@base_contains('PACKAGECONFIG', 'gtk', 'python-smartpm-interface-gtk', '', d)}"
+PACKAGES += "python-smartpm-interface-images"
+PACKAGES += "python-smartpm"
+
+RDEPENDS_smartpm = 'python-smartpm'
+
+RDEPENDS_python-smartpm_append = " virtual/python-smartpm-backend python-codecs python-textutils python-xml"
+RDEPENDS_python-smartpm_append += " python-fcntl python-pickle python-crypt python-compression python-shell"
+RDEPENDS_python-smartpm_append += " python-resource python-netclient python-threading python-unixadmin"
+
+#RDEPENDS_python-smartpm_append += " python-modules"
+
+RDEPENDS_python-smartpm-backend-rpm = 'python-rpm'
+RPROVIDES_python-smartpm-backend-rpm = 'virtual/python-smartpm-backend'
+
+RDEPENDS_python-smartpm-interface-qt4 = 'qt4-x11 python-smartpm-interface-images'
+RDEPENDS_python-smartpm-interface-gtk = 'gtk+ python-smartpm-interface-images'
+
+FILES_smartpm = "${bindir}/smart"
+
+FILES_${PN}-dbg += "${libdir}/python*/site-packages/smart/backends/rpm/.debug"
+
+FILES_python-smartpm-backend-rpm = "${libdir}/python*/site-packages/smart/backends/rpm"
+
+FILES_python-smartpm-interface-qt4 = "${libdir}/python*/site-packages/smart/interfaces/qt4"
+FILES_python-smartpm-interface-gtk = "${libdir}/python*/site-packages/smart/interfaces/gtk"
+FILES_python-smartpm-interface-images = "${datadir}/${baselib}/python*/site-packages/smart/interfaces/images"
+
+BBCLASSEXTEND = "native nativesdk"
+