Blame SOURCES/0001-avahi-python-Use-the-agnostic-DBM-interface.patch

2de76d
From be7992f35ab4ed7ed9907319b429dc079c2b7285 Mon Sep 17 00:00:00 2001
2de76d
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
2de76d
Date: Tue, 11 Jul 2017 21:52:37 +0200
2de76d
Subject: [PATCH] avahi-python: Use the agnostic DBM interface
2de76d
2de76d
Also fixes configure failing if Python 3 is the build python and GDBM is
2de76d
enabled, since Py3 only has anydbm under the name of 'dbm'.
2de76d
2de76d
Not enough to make ServiceTypeDatabase.py compatible with Py3, but it's
2de76d
a start.
2de76d
2de76d
(cherry picked from commit 63750f1be96ad08c407193b08bf3b9ee74310e2d)
2de76d
2de76d
Related: #1561019
2de76d
---
2de76d
 avahi-python/avahi/Makefile.am                  | 15 +----------
2de76d
 avahi-python/avahi/ServiceTypeDatabase.py.in    | 33 ++++++++++++++++++-------
2de76d
 configure.ac                                    |  9 +++----
2de76d
 service-type-database/Makefile.am               | 18 +++-----------
2de76d
 service-type-database/{build-db.in => build-db} | 13 +++++++---
2de76d
 5 files changed, 42 insertions(+), 46 deletions(-)
2de76d
 rename service-type-database/{build-db.in => build-db} (87%)
2de76d
2de76d
diff --git a/avahi-python/avahi/Makefile.am b/avahi-python/avahi/Makefile.am
2de76d
index 3eb67d0..c906b9b 100644
2de76d
--- a/avahi-python/avahi/Makefile.am
2de76d
+++ b/avahi-python/avahi/Makefile.am
2de76d
@@ -25,29 +25,16 @@ avahidir = $(pythondir)/avahi
2de76d
 
2de76d
 if HAVE_GDBM
2de76d
 nodist_avahi_SCRIPTS = ServiceTypeDatabase.py
2de76d
-
2de76d
-ServiceTypeDatabase.py: ServiceTypeDatabase.py.in
2de76d
-	$(AM_V_GEN)sed -e 's,@PYTHON\@,$(PYTHON),g' \
2de76d
-		-e 's,@DBM\@,gdbm,g' \
2de76d
-		-e 's,@FIRST_KEY\@,key = self.db.firstkey(),g' \
2de76d
-		-e 's,@CHECK_KEY\@,while key is not None:,g' \
2de76d
-		-e 's,@NEXT_KEY\@,key = self.db.nextkey(key),g' \
2de76d
-		-e 's,@pkglibdatadir\@,$(pkglibdatadir),g' $< > $@ && \
2de76d
-	chmod +x $@
2de76d
 endif
2de76d
 
2de76d
 if HAVE_DBM
2de76d
 nodist_avahi_SCRIPTS = ServiceTypeDatabase.py
2de76d
+endif
2de76d
 
2de76d
 ServiceTypeDatabase.py: ServiceTypeDatabase.py.in
2de76d
 	$(AM_V_GEN)sed -e 's,@PYTHON\@,$(PYTHON),g' \
2de76d
-		-e 's,@DBM\@,dbm,g' \
2de76d
-		-e 's,@FIRST_KEY\@,keys = self.db.keys(),g' \
2de76d
-		-e 's,@CHECK_KEY\@,for key in keys:,g' \
2de76d
-		-e 's,@NEXT_KEY\@,,g' \
2de76d
 		-e 's,@pkglibdatadir\@,$(pkglibdatadir),g' $< > $@ && \
2de76d
 	chmod +x $@
2de76d
-endif
2de76d
 
2de76d
 avahi_PYTHON = $(avahi_SCRIPTS)
2de76d
 
2de76d
diff --git a/avahi-python/avahi/ServiceTypeDatabase.py.in b/avahi-python/avahi/ServiceTypeDatabase.py.in
2de76d
index 4ddd654..d7f9969 100644
2de76d
--- a/avahi-python/avahi/ServiceTypeDatabase.py.in
2de76d
+++ b/avahi-python/avahi/ServiceTypeDatabase.py.in
2de76d
@@ -17,7 +17,11 @@
2de76d
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
2de76d
 # USA.
2de76d
 
2de76d
-import @DBM@
2de76d
+try:
2de76d
+    import anydbm as dbm
2de76d
+except ImportError:
2de76d
+    import dbm
2de76d
+
2de76d
 import locale
2de76d
 import re
2de76d
 
2de76d
@@ -28,7 +32,7 @@ class ServiceTypeDatabase:
2de76d
 
2de76d
     def __init__(self, filename = "@pkglibdatadir@/service-types.db"):
2de76d
 
2de76d
-        self.db = @DBM@.open(filename, "r")
2de76d
+        self.db = dbm.open(filename, "r")
2de76d
 
2de76d
         l = locale.getlocale(locale.LC_MESSAGES)
2de76d
 
2de76d
@@ -90,13 +94,24 @@ class ServiceTypeDatabase:
2de76d
 
2de76d
     def __iter__(self):
2de76d
 
2de76d
-        @FIRST_KEY@
2de76d
-        @CHECK_KEY@
2de76d
-
2de76d
-            if re.search('_[a-zA-Z0-9-]+\._[a-zA-Z0-9-]+', key) and not re.search('_[a-zA-Z0-9-]+\._[a-zA-Z0-9-]+\[.*\]', key):
2de76d
-                yield key
2de76d
-
2de76d
-            @NEXT_KEY@
2de76d
+        def want_key(key):
2de76d
+            if not re.search('_[a-zA-Z0-9-]+\._[a-zA-Z0-9-]+', key):
2de76d
+                return False
2de76d
+            if re.search('_[a-zA-Z0-9-]+\._[a-zA-Z0-9-]+\[.*\]', key):
2de76d
+                return False
2de76d
+            return True
2de76d
+
2de76d
+        try:
2de76d
+            key = self.db.firstkey()
2de76d
+        except AttributeError:
2de76d
+            for key in self.db.keys():
2de76d
+                if want_key(key):
2de76d
+                    yield key
2de76d
+        else:
2de76d
+            while key is not None:
2de76d
+                if want_key(key):
2de76d
+                    yield key
2de76d
+                key = self.db.nextkey(key)
2de76d
 
2de76d
     def __len__(self):
2de76d
 
2de76d
diff --git a/configure.ac b/configure.ac
2de76d
index 6678971..fbbf7cf 100644
2de76d
--- a/configure.ac
2de76d
+++ b/configure.ac
2de76d
@@ -824,11 +824,10 @@ if test "x$HAVE_PYTHON" = "xyes" ; then
2de76d
         fi
2de76d
 
2de76d
         AM_CHECK_PYMOD(socket,,,[AC_MSG_ERROR(Could not find Python module socket)])
2de76d
-        if test "x$HAVE_GDBM" = "xyes"; then
2de76d
-            AM_CHECK_PYMOD(gdbm,,,[AC_MSG_ERROR(Could not find Python module gdbm)])
2de76d
-        fi
2de76d
-        if test "x$HAVE_DBM" = "xyes"; then
2de76d
-            AM_CHECK_PYMOD(dbm,,,[AC_MSG_ERROR(Could not find Python module dbm)])
2de76d
+        if test "x$HAVE_GDBM" = "xyes" || test "x$HAVE_DBM" = "xyes"; then
2de76d
+            AM_CHECK_PYMOD(anydbm,,,[
2de76d
+                AM_CHECK_PYMOD(dbm,,,[AC_MSG_ERROR(Could not find Python module dbm)])
2de76d
+            ])
2de76d
         fi
2de76d
     fi
2de76d
 fi
2de76d
diff --git a/service-type-database/Makefile.am b/service-type-database/Makefile.am
2de76d
index d184fde..f9fa082 100644
2de76d
--- a/service-type-database/Makefile.am
2de76d
+++ b/service-type-database/Makefile.am
2de76d
@@ -15,7 +15,7 @@
2de76d
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
2de76d
 # USA.
2de76d
 
2de76d
-EXTRA_DIST=build-db.in service-types
2de76d
+EXTRA_DIST=service-types
2de76d
 
2de76d
 pkglibdatadir=$(libdir)/avahi
2de76d
 
2de76d
@@ -27,16 +27,11 @@ if HAVE_GDBM
2de76d
 noinst_SCRIPTS=build-db
2de76d
 pkglibdata_DATA+=service-types.db
2de76d
 
2de76d
-build-db: build-db.in
2de76d
-	$(AM_V_GEN)sed -e 's,@PYTHON\@,$(PYTHON),g' \
2de76d
-	    -e 's,@DBM\@,gdbm,g' $< > $@ && \
2de76d
-	chmod +x $@
2de76d
-
2de76d
-service-types.db: service-types build-db
2de76d
+service-types.db: service-types
2de76d
 	$(AM_V_GEN)$(PYTHON) build-db $< $@.coming && \
2de76d
 	mv $@.coming $@
2de76d
 
2de76d
-CLEANFILES = service-types.db build-db
2de76d
+CLEANFILES = service-types.db
2de76d
 
2de76d
 endif
2de76d
 if HAVE_DBM
2de76d
@@ -44,11 +39,6 @@ if HAVE_DBM
2de76d
 noinst_SCRIPTS=build-db
2de76d
 pkglibdata_DATA+=service-types.db.pag service-types.db.dir
2de76d
 
2de76d
-build-db: build-db.in
2de76d
-	$(AM_V_GEN)sed -e 's,@PYTHON\@,$(PYTHON),g' \
2de76d
-	    -e 's,@DBM\@,dbm,g' $< > $@ && \
2de76d
-	chmod +x $@
2de76d
-
2de76d
 service-types.db.pag: service-types.db
2de76d
 	$(AM_V_GEN)mv service-types.db.coming.pag service-types.db.pag
2de76d
 service-types.db.dir: service-types.db
2de76d
@@ -57,7 +47,7 @@ service-types.db: service-types build-db
2de76d
 	$(AM_V_GEN)$(PYTHON) build-db $< $@.coming && \
2de76d
 	if test -f "$@.coming"; then mv $@.coming $@; fi
2de76d
 
2de76d
-CLEANFILES = service-types.db* build-db
2de76d
+CLEANFILES = service-types.db*
2de76d
 
2de76d
 endif
2de76d
 endif
2de76d
diff --git a/service-type-database/build-db.in b/service-type-database/build-db
2de76d
similarity index 87%
2de76d
rename from service-type-database/build-db.in
2de76d
rename to service-type-database/build-db
2de76d
index 4cda425..78ee892 100755
2de76d
--- a/service-type-database/build-db.in
2de76d
+++ b/service-type-database/build-db
2de76d
@@ -1,4 +1,4 @@
2de76d
-#!@PYTHON@
2de76d
+#!/usr/bin/env python
2de76d
 # -*-python-*-
2de76d
 # This file is part of avahi.
2de76d
 #
2de76d
@@ -17,7 +17,12 @@
2de76d
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
2de76d
 # USA.
2de76d
 
2de76d
-import @DBM@, sys
2de76d
+try:
2de76d
+    import anydbm as dbm
2de76d
+except ImportError:
2de76d
+    import dbm
2de76d
+
2de76d
+import sys
2de76d
 
2de76d
 if len(sys.argv) > 1:
2de76d
     infn = sys.argv[1]
2de76d
@@ -29,9 +34,9 @@ if len(sys.argv) > 2:
2de76d
 else:
2de76d
     outfn = infn + ".db"
2de76d
 
2de76d
-db = @DBM@.open(outfn, "n")
2de76d
+db = dbm.open(outfn, "n")
2de76d
 
2de76d
-for ln in file(infn, "r"):
2de76d
+for ln in open(infn, "r"):
2de76d
     ln = ln.strip(" \r\n\t")
2de76d
     
2de76d
     if ln == "" or ln.startswith("#"):
2de76d
-- 
2de76d
2.14.3
2de76d