summaryrefslogtreecommitdiffstats
path: root/abs/core/avahi/0001-avahi-python-Use-the-agnostic-DBM-interface.patch
blob: 3945f9ca950ea3f899aaa643ebade2b31d6fd623 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
From 426f70261d61db359e573e06b03575ee8cf50f5d Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Tue, 11 Jul 2017 21:52:37 +0200
Subject: [PATCH] avahi-python: Use the agnostic DBM interface

Also fixes configure failing if Python 3 and GDBM are in use, since Py3
only has anydbm under the name of 'dbm'.
---
 avahi-python/avahi/Makefile.am                  | 15 +-----------
 avahi-python/avahi/ServiceTypeDatabase.py.in    | 31 ++++++++++++++++++-------
 configure.ac                                    |  9 ++++---
 service-type-database/.gitignore                |  1 -
 service-type-database/Makefile.am               | 18 ++++----------
 service-type-database/{build-db.in => build-db} | 13 +++++++----
 6 files changed, 41 insertions(+), 46 deletions(-)
 rename service-type-database/{build-db.in => build-db} (87%)

diff --git a/avahi-python/avahi/Makefile.am b/avahi-python/avahi/Makefile.am
index 3eb67d0df438a7f8..c906b9bf3b6d0708 100644
--- a/avahi-python/avahi/Makefile.am
+++ b/avahi-python/avahi/Makefile.am
@@ -25,29 +25,16 @@ avahidir = $(pythondir)/avahi
 
 if HAVE_GDBM
 nodist_avahi_SCRIPTS = ServiceTypeDatabase.py
-
-ServiceTypeDatabase.py: ServiceTypeDatabase.py.in
-	$(AM_V_GEN)sed -e 's,@PYTHON\@,$(PYTHON),g' \
-		-e 's,@DBM\@,gdbm,g' \
-		-e 's,@FIRST_KEY\@,key = self.db.firstkey(),g' \
-		-e 's,@CHECK_KEY\@,while key is not None:,g' \
-		-e 's,@NEXT_KEY\@,key = self.db.nextkey(key),g' \
-		-e 's,@pkglibdatadir\@,$(pkglibdatadir),g' $< > $@ && \
-	chmod +x $@
 endif
 
 if HAVE_DBM
 nodist_avahi_SCRIPTS = ServiceTypeDatabase.py
+endif
 
 ServiceTypeDatabase.py: ServiceTypeDatabase.py.in
 	$(AM_V_GEN)sed -e 's,@PYTHON\@,$(PYTHON),g' \
-		-e 's,@DBM\@,dbm,g' \
-		-e 's,@FIRST_KEY\@,keys = self.db.keys(),g' \
-		-e 's,@CHECK_KEY\@,for key in keys:,g' \
-		-e 's,@NEXT_KEY\@,,g' \
 		-e 's,@pkglibdatadir\@,$(pkglibdatadir),g' $< > $@ && \
 	chmod +x $@
-endif
 
 avahi_PYTHON = $(avahi_SCRIPTS)
 
diff --git a/avahi-python/avahi/ServiceTypeDatabase.py.in b/avahi-python/avahi/ServiceTypeDatabase.py.in
index 4ddd654409deb983..d7f9969bbd5a6ab0 100644
--- a/avahi-python/avahi/ServiceTypeDatabase.py.in
+++ b/avahi-python/avahi/ServiceTypeDatabase.py.in
@@ -17,18 +17,22 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 # USA.
 
-import @DBM@
+try:
+    import anydbm as dbm
+except ImportError:
+    import dbm
+
 import locale
 import re
 
 locale.setlocale(locale.LC_ALL, '')
 
 class ServiceTypeDatabase:
     """ServiceTypeDatabase maps service types to descriptions"""
 
     def __init__(self, filename = "@pkglibdatadir@/service-types.db"):
 
-        self.db = @DBM@.open(filename, "r")
+        self.db = dbm.open(filename, "r")
 
         l = locale.getlocale(locale.LC_MESSAGES)
 
@@ -90,13 +94,24 @@ class ServiceTypeDatabase:
 
     def __iter__(self):
 
-        @FIRST_KEY@
-        @CHECK_KEY@
+        def want_key(key):
+            if not re.search('_[a-zA-Z0-9-]+\._[a-zA-Z0-9-]+', key):
+                return False
+            if re.search('_[a-zA-Z0-9-]+\._[a-zA-Z0-9-]+\[.*\]', key):
+                return False
+            return True
 
-            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):
-                yield key
-
-            @NEXT_KEY@
+        try:
+            key = self.db.firstkey()
+        except AttributeError:
+            for key in self.db.keys():
+                if want_key(key):
+                    yield key
+        else:
+            while key is not None:
+                if want_key(key):
+                    yield key
+                key = self.db.nextkey(key)
 
     def __len__(self):
 
diff --git a/configure.ac b/configure.ac
index 66789718d45ff4ea..fbbf7cf3ef562a26 100644
--- a/configure.ac
+++ b/configure.ac
@@ -824,11 +824,10 @@ if test "x$HAVE_PYTHON" = "xyes" ; then
         fi
 
         AM_CHECK_PYMOD(socket,,,[AC_MSG_ERROR(Could not find Python module socket)])
-        if test "x$HAVE_GDBM" = "xyes"; then
-            AM_CHECK_PYMOD(gdbm,,,[AC_MSG_ERROR(Could not find Python module gdbm)])
-        fi
-        if test "x$HAVE_DBM" = "xyes"; then
-            AM_CHECK_PYMOD(dbm,,,[AC_MSG_ERROR(Could not find Python module dbm)])
+        if test "x$HAVE_GDBM" = "xyes" || test "x$HAVE_DBM" = "xyes"; then
+            AM_CHECK_PYMOD(anydbm,,,[
+                AM_CHECK_PYMOD(dbm,,,[AC_MSG_ERROR(Could not find Python module dbm)])
+            ])
         fi
     fi
 fi
diff --git a/service-type-database/.gitignore b/service-type-database/.gitignore
index 581f1929d521c01d..51b02600e70c1ceb 100644
--- a/service-type-database/.gitignore
+++ b/service-type-database/.gitignore
@@ -1,4 +1,3 @@
 Makefile
 Makefile.in
 service-types.db
-build-db
diff --git a/service-type-database/Makefile.am b/service-type-database/Makefile.am
index d184fde30f0758c5..f9fa0825e937f2f7 100644
--- a/service-type-database/Makefile.am
+++ b/service-type-database/Makefile.am
@@ -15,49 +15,39 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 # USA.
 
-EXTRA_DIST=build-db.in service-types
+EXTRA_DIST=service-types
 
 pkglibdatadir=$(libdir)/avahi
 
 pkglibdata_DATA=
 
 if HAVE_PYTHON
 if HAVE_GDBM
 
 noinst_SCRIPTS=build-db
 pkglibdata_DATA+=service-types.db
 
-build-db: build-db.in
-	$(AM_V_GEN)sed -e 's,@PYTHON\@,$(PYTHON),g' \
-	    -e 's,@DBM\@,gdbm,g' $< > $@ && \
-	chmod +x $@
-
-service-types.db: service-types build-db
+service-types.db: service-types
 	$(AM_V_GEN)$(PYTHON) build-db $< $@.coming && \
 	mv $@.coming $@
 
-CLEANFILES = service-types.db build-db
+CLEANFILES = service-types.db
 
 endif
 if HAVE_DBM
 
 noinst_SCRIPTS=build-db
 pkglibdata_DATA+=service-types.db.pag service-types.db.dir
 
-build-db: build-db.in
-	$(AM_V_GEN)sed -e 's,@PYTHON\@,$(PYTHON),g' \
-	    -e 's,@DBM\@,dbm,g' $< > $@ && \
-	chmod +x $@
-
 service-types.db.pag: service-types.db
 	$(AM_V_GEN)mv service-types.db.coming.pag service-types.db.pag
 service-types.db.dir: service-types.db
 	$(AM_V_GEN)mv service-types.db.coming.dir service-types.db.dir
 service-types.db: service-types build-db
 	$(AM_V_GEN)$(PYTHON) build-db $< $@.coming && \
 	if test -f "$@.coming"; then mv $@.coming $@; fi
 
-CLEANFILES = service-types.db* build-db
+CLEANFILES = service-types.db*
 
 endif
 endif
diff --git a/service-type-database/build-db.in b/service-type-database/build-db
similarity index 87%
rename from service-type-database/build-db.in
rename to service-type-database/build-db
index 4cda425374a79198..78ee892f606ea43c 100755
--- a/service-type-database/build-db.in
+++ b/service-type-database/build-db
@@ -1,37 +1,42 @@
-#!@PYTHON@
+#!/usr/bin/env python
 # -*-python-*-
 # This file is part of avahi.
 #
 # avahi is free software; you can redistribute it and/or modify it
 # under the terms of the GNU Lesser General Public License as
 # published by the Free Software Foundation; either version 2 of the
 # License, or (at your option) any later version.
 #
 # avahi is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
 # License for more details.
 #
 # You should have received a copy of the GNU Lesser General Public
 # License along with avahi; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 # USA.
 
-import @DBM@, sys
+try:
+    import anydbm as dbm
+except ImportError:
+    import dbm
+
+import sys
 
 if len(sys.argv) > 1:
     infn = sys.argv[1]
 else:
     infn = "service-types"
 
 if len(sys.argv) > 2:
     outfn = sys.argv[2]
 else:
     outfn = infn + ".db"
 
-db = @DBM@.open(outfn, "n")
+db = dbm.open(outfn, "n")
 
-for ln in file(infn, "r"):
+for ln in open(infn, "r"):
     ln = ln.strip(" \r\n\t")
     
     if ln == "" or ln.startswith("#"):
-- 
2.13.2