summaryrefslogtreecommitdiff
blob: 3976b8df2e76450c76a944fb37eb6c2ee52cf00d (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
From 63750f1be96ad08c407193b08bf3b9ee74310e2d 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 is the build python and GDBM is
enabled, since Py3 only has anydbm under the name of 'dbm'.

Not enough to make ServiceTypeDatabase.py compatible with Py3, but it's
a start.
---
 avahi-python/avahi/Makefile.am                | 15 +--------
 avahi-python/avahi/ServiceTypeDatabase.py.in  | 33 ++++++++++++++-----
 configure.ac                                  |  9 +++--
 service-type-database/.gitignore              |  1 -
 service-type-database/Makefile.am             | 18 +++-------
 .../{build-db.in => build-db}                 | 13 +++++---
 6 files changed, 42 insertions(+), 47 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 3eb67d0d..c906b9bf 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 4ddd6544..d7f9969b 100644
--- a/avahi-python/avahi/ServiceTypeDatabase.py.in
+++ b/avahi-python/avahi/ServiceTypeDatabase.py.in
@@ -17,7 +17,11 @@
 # 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
 
@@ -28,7 +32,7 @@ class ServiceTypeDatabase:
 
     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@
-
-            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@
+        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
+
+        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 66789718..fbbf7cf3 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 581f1929..51b02600 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 d184fde3..f9fa0825 100644
--- a/service-type-database/Makefile.am
+++ b/service-type-database/Makefile.am
@@ -15,7 +15,7 @@
 # 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
 
@@ -27,16 +27,11 @@ 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
@@ -44,11 +39,6 @@ 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
@@ -57,7 +47,7 @@ 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 4cda4253..78ee892f 100755
--- a/service-type-database/build-db.in
+++ b/service-type-database/build-db
@@ -1,4 +1,4 @@
-#!@PYTHON@
+#!/usr/bin/env python
 # -*-python-*-
 # This file is part of avahi.
 #
@@ -17,7 +17,12 @@
 # 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]
@@ -29,9 +34,9 @@ if len(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("#"):