[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[PATCH] add a stub for rpm on rpm-less systems



Attached is a patch which provides anaconda a rpm pacifier.  There are
still tons of places where anaconda does 'import rpm' (even if it's
now unnecessary).  This is a temporary solution until all of those
'import rpm's are gone.

Cheers,

Matt
-- 
Matt Wilson
Founding Engineer
rPath, Inc.
msw rpath com
--- anaconda/Makefile.inc.orig	2006-03-06 21:35:52.000000000 -0500
+++ anaconda/Makefile.inc	2006-03-06 21:35:37.000000000 -0500
@@ -25,6 +25,7 @@
 endif
 
 USESELINUX=1
+USERPM=1
 
 ifndef RPM_OPT_FLAGS
 RPM_OPT_FLAGS = -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions
--- anaconda/Makefile.orig	2006-03-06 20:11:17.000000000 -0500
+++ anaconda/Makefile	2006-03-06 20:08:13.000000000 -0500
@@ -18,7 +18,14 @@
 
 PYFILES = $(wildcard *.py)
 
-all:  subdirs mini-wm xmouse.so xutils.so $(CATALOGS) lang-table lang-names
+ifeq ($(USERPM), 0)
+STUBS = rpm.py
+endif
+
+all:  $(STUBS) subdirs mini-wm xmouse.so xutils.so $(CATALOGS) lang-table lang-names
+
+rpm.py: rpm-stub.py
+	cp rpm-stub.py rpm.py
 
 lang-names: lang-table
 	PYTHONPATH="." $(PYTHON) scripts/getlangnames.py > lang-names
--- anaconda/rpm-stub.py.orig	2006-03-06 20:08:56.000000000 -0500
+++ anaconda/rpm-stub.py	2006-03-06 21:35:15.000000000 -0500
@@ -0,0 +1,75 @@
+#
+# Copyright (c) 2004-2006 rPath, Inc.
+#
+# This software may be freely redistributed under the terms of the GNU
+# library public license.
+#
+# You should have received a copy of the GNU Library Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+def _createTags(*args):
+    i = 0
+    g = globals()
+    # create a mapping from name to enum
+    tags = {}
+    for index, (tag, default) in enumerate(args):
+        g[tag] = index
+        # strip off RPMTAG_, lowercase
+        name = tag[7:].lower()
+        tags[name] = (index, default)
+    return tags
+
+def delMacro(*args, **kwargs):
+    pass
+
+def addMacro(*args, **kwargs):
+    pass
+
+tags = _createTags(('RPMTAG_ARCH', None),
+                   ('RPMTAG_DESCRIPTION', None),
+                   ('RPMTAG_EPOCH', None),
+                   ('RPMTAG_GROUP', None),
+                   ('RPMTAG_NAME', None),
+                   ('RPMTAG_OBSOLETENAME', None),
+                   ('RPMTAG_RELEASE', None),
+                   ('RPMTAG_SIZE', None),
+                   ('RPMTAG_SUMMARY', None),
+                   ('RPMTAG_VERSION', None),
+                   ('RPMTAG_BASENAMES', []),
+                   ('RPMTAG_REQUIRENAME', []),
+                   ('RPMTAG_PROVIDENAME', []))
+tags['RPMTAG_FILENAME'] = (1000000, None)
+tags['RPMTAG_DISCNUM'] = (1000002, None)
+tags['RPMTAG_ORDER'] = (1000003, None)
+
+class Header(dict):
+    def __init__(self):
+        pass
+
+    def _getkey(self, key):
+        if type(key) is not int:
+            if key not in tags.keys():
+                raise KeyError, "invalid tag"
+            return tags[key]
+        else:
+            for k, default in tags.itervalues():
+                if key == k:
+                    return k, default
+        raise KeyError, "invalid tag"
+
+    def __setitem__(self, key, value):
+        key = self._getkey(key)[0]
+        dict.__setitem__(self, key, value)
+
+    def __getitem__(self, key):
+        key, default = self._getkey(key)
+        return dict.get(self, key, default)
+
+    def __hash__(self):
+        return hash(self.nvf)
+
+def versionCompare(a, b):
+    # rpmvercmp means nothing to us
+    return 1

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]