summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sturmlechner <asturm@gentoo.org>2019-12-29 19:41:08 +0100
committerAnthony G. Basile <blueness@gentoo.org>2020-01-13 12:36:19 -0500
commitecb1d2b716b08a3ea9d7aaaf5afc3fcaabbb55ef (patch)
tree5e66a4cd03aa5d9b42356d6ab1281928abd054d2 /net-dns
parentnet-proxy/squidguard: version bump to 1.6.0 (diff)
downloadgentoo-ecb1d2b716b08a3ea9d7aaaf5afc3fcaabbb55ef.tar.gz
gentoo-ecb1d2b716b08a3ea9d7aaaf5afc3fcaabbb55ef.tar.bz2
gentoo-ecb1d2b716b08a3ea9d7aaaf5afc3fcaabbb55ef.zip
net-dns/avahi: python3_7 support, drop obsolete eutils and multilib
Drop >py-compile, seemingly not necessary anymore. Make more use of myconf array. Tests passed, fwiw. Closes: https://bugs.gentoo.org/704200 Package-Manager: Portage-2.3.84, Repoman-2.3.20 Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org> Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
Diffstat (limited to 'net-dns')
-rw-r--r--net-dns/avahi/avahi-0.7-r5.ebuild217
-rw-r--r--net-dns/avahi/files/avahi-0.7-python3-gdbm.patch234
-rw-r--r--net-dns/avahi/files/avahi-0.7-python3-unittest.patch151
-rw-r--r--net-dns/avahi/files/avahi-0.7-python3.patch94
-rw-r--r--net-dns/avahi/files/avahi-0.7-remove-empty-avahi_discover.patch77
5 files changed, 773 insertions, 0 deletions
diff --git a/net-dns/avahi/avahi-0.7-r5.ebuild b/net-dns/avahi/avahi-0.7-r5.ebuild
new file mode 100644
index 000000000000..edac01c62ae4
--- /dev/null
+++ b/net-dns/avahi/avahi-0.7-r5.ebuild
@@ -0,0 +1,217 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="7"
+
+PYTHON_COMPAT=( python3_7 )
+PYTHON_REQ_USE="gdbm"
+inherit autotools flag-o-matic multilib-minimal mono-env python-r1 systemd
+
+DESCRIPTION="System which facilitates service discovery on a local network"
+HOMEPAGE="http://avahi.org/"
+SRC_URI="https://github.com/lathiat/avahi/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86"
+IUSE="autoipd bookmarks dbus doc gdbm gtk gtk3 howl-compat +introspection ipv6 kernel_linux mdnsresponder-compat mono nls python qt5 selinux systemd test"
+
+REQUIRED_USE="
+ python? ( dbus gdbm ${PYTHON_REQUIRED_USE} )
+ mono? ( dbus )
+ howl-compat? ( dbus )
+ mdnsresponder-compat? ( dbus )
+ systemd? ( dbus )
+"
+
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ dev-libs/libdaemon
+ dev-libs/expat
+ dev-libs/glib:2[${MULTILIB_USEDEP}]
+ gdbm? ( sys-libs/gdbm:=[${MULTILIB_USEDEP}] )
+ qt5? ( dev-qt/qtcore:5 )
+ gtk? ( x11-libs/gtk+:2[${MULTILIB_USEDEP}] )
+ gtk3? ( x11-libs/gtk+:3[${MULTILIB_USEDEP}] )
+ dbus? ( sys-apps/dbus[${MULTILIB_USEDEP}] )
+ kernel_linux? ( sys-libs/libcap )
+ introspection? ( dev-libs/gobject-introspection:= )
+ mono? (
+ dev-lang/mono
+ gtk? ( dev-dotnet/gtk-sharp:2 )
+ )
+ python? (
+ ${PYTHON_DEPS}
+ dbus? ( dev-python/dbus-python[${PYTHON_USEDEP}] )
+ introspection? ( dev-python/pygobject:3[${PYTHON_USEDEP}] )
+ )
+ bookmarks? (
+ ${PYTHON_DEPS}
+ >=dev-python/twisted-16.0.0[${PYTHON_USEDEP}]
+ )
+"
+RDEPEND="
+ acct-user/avahi
+ acct-group/avahi
+ acct-group/netdev
+ autoipd? (
+ acct-user/avahi-autoipd
+ acct-group/avahi-autoipd
+ )
+ ${DEPEND}
+ howl-compat? ( !net-misc/howl )
+ mdnsresponder-compat? ( !net-misc/mDNSResponder )
+ selinux? ( sec-policy/selinux-avahi )
+"
+BDEPEND="
+ dev-util/glib-utils
+ doc? ( app-doc/doxygen )
+ app-doc/xmltoman
+ dev-util/intltool
+ virtual/pkgconfig[${MULTILIB_USEDEP}]
+"
+
+MULTILIB_WRAPPED_HEADERS=( /usr/include/avahi-qt5/qt-watch.h )
+
+PATCHES=(
+ "${FILESDIR}/${P}-qt5.patch"
+ "${FILESDIR}/${P}-CVE-2017-6519.patch"
+ "${FILESDIR}/${P}-remove-empty-avahi_discover.patch"
+ "${FILESDIR}/${P}-python3.patch"
+ "${FILESDIR}/${P}-python3-unittest.patch"
+ "${FILESDIR}/${P}-python3-gdbm.patch"
+)
+
+pkg_setup() {
+ use mono && mono-env_pkg_setup
+ use python || use bookmarks && python_setup
+}
+
+src_prepare() {
+ default
+
+ if ! use ipv6; then
+ sed -i \
+ -e "s/use-ipv6=yes/use-ipv6=no/" \
+ avahi-daemon/avahi-daemon.conf || die
+ fi
+
+ sed -i \
+ -e "s:\\.\\./\\.\\./\\.\\./doc/avahi-docs/html/:../../../doc/${PF}/html/:" \
+ doxygen_to_devhelp.xsl || die
+
+ eautoreconf
+
+ # bundled manpages
+ multilib_copy_sources
+}
+
+src_configure() {
+ # those steps should be done once-per-ebuild rather than per-ABI
+ use sh && replace-flags -O? -O0
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ local myconf=(
+ --disable-monodoc
+ --disable-python-dbus
+ --disable-qt3
+ --disable-qt4
+ --disable-static
+ --enable-manpages
+ --enable-glib
+ --enable-gobject
+ --enable-xmltoman
+ --localstatedir="${EPREFIX}/var"
+ --with-distro=gentoo
+ --with-systemdsystemunitdir="$(systemd_get_systemunitdir)"
+ $(use_enable dbus)
+ $(use_enable gdbm)
+ $(use_enable gtk)
+ $(use_enable gtk3)
+ $(use_enable howl-compat compat-howl)
+ $(use_enable mdnsresponder-compat compat-libdns_sd)
+ $(use_enable nls)
+ $(multilib_native_use_enable autoipd)
+ $(multilib_native_use_enable doc doxygen-doc)
+ $(multilib_native_use_enable introspection)
+ $(multilib_native_use_enable mono)
+ $(multilib_native_use_enable python)
+ $(multilib_native_use_enable test tests)
+ )
+
+ if use python; then
+ myconf+=(
+ $(multilib_native_use_enable dbus python-dbus)
+ $(multilib_native_use_enable introspection pygobject)
+ )
+ fi
+
+ if use mono; then
+ myconf+=( $(multilib_native_use_enable doc monodoc) )
+ fi
+
+ if ! multilib_is_native_abi; then
+ myconf+=(
+ # used by daemons only
+ --disable-libdaemon
+ --with-xml=none
+ )
+ fi
+
+ myconf+=( $(multilib_native_use_enable qt5) )
+
+ econf "${myconf[@]}"
+}
+
+multilib_src_compile() {
+ emake
+
+ multilib_is_native_abi && use doc && emake avahi.devhelp
+}
+
+multilib_src_install() {
+ emake install DESTDIR="${D}"
+ use bookmarks && use python && use dbus && use gtk || \
+ rm -f "${ED}"/usr/bin/avahi-bookmarks
+
+ # https://github.com/lathiat/avahi/issues/28
+ use howl-compat && dosym avahi-compat-howl.pc /usr/$(get_libdir)/pkgconfig/howl.pc
+ use mdnsresponder-compat && dosym avahi-compat-libdns_sd/dns_sd.h /usr/include/dns_sd.h
+
+ if multilib_is_native_abi && use doc; then
+ docinto html
+ dodoc -r doxygen/html/.
+ insinto /usr/share/devhelp/books/avahi
+ doins avahi.devhelp
+ fi
+
+ # The build system creates an empty "/run" directory, so we clean it up here
+ rmdir "${ED}"/run || die
+}
+
+multilib_src_install_all() {
+ if use autoipd; then
+ insinto /lib/rcscripts/net
+ doins "${FILESDIR}"/autoipd.sh
+
+ insinto /lib/netifrc/net
+ newins "${FILESDIR}"/autoipd-openrc.sh autoipd.sh
+ fi
+
+ dodoc docs/{AUTHORS,NEWS,README,TODO}
+
+ find "${ED}" -name '*.la' -type f -delete || die
+}
+
+pkg_postinst() {
+ if use autoipd; then
+ elog
+ elog "To use avahi-autoipd to configure your interfaces with IPv4LL (RFC3927)"
+ elog "addresses, just set config_<interface>=( autoipd ) in /etc/conf.d/net!"
+ elog
+ fi
+}
diff --git a/net-dns/avahi/files/avahi-0.7-python3-gdbm.patch b/net-dns/avahi/files/avahi-0.7-python3-gdbm.patch
new file mode 100644
index 000000000000..3976b8df2e76
--- /dev/null
+++ b/net-dns/avahi/files/avahi-0.7-python3-gdbm.patch
@@ -0,0 +1,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("#"):
diff --git a/net-dns/avahi/files/avahi-0.7-python3-unittest.patch b/net-dns/avahi/files/avahi-0.7-python3-unittest.patch
new file mode 100644
index 000000000000..9d735a1780c2
--- /dev/null
+++ b/net-dns/avahi/files/avahi-0.7-python3-unittest.patch
@@ -0,0 +1,151 @@
+From 62fe263662b52a462895fd8d21cf29b2fa22fe86 Mon Sep 17 00:00:00 2001
+From: Simon McVittie <smcv@debian.org>
+Date: Fri, 27 Apr 2018 11:10:57 +0100
+Subject: [PATCH] avahi-python: Add a unit test for string and bytestring
+ conversions
+
+Signed-off-by: Simon McVittie <smcv@debian.org>
+---
+ .gitignore | 1 +
+ avahi-python/avahi/.gitignore | 5 ++
+ avahi-python/avahi/Makefile.am | 7 +++
+ avahi-python/avahi/test.py | 85 ++++++++++++++++++++++++++++++++++
+ 4 files changed, 98 insertions(+)
+ create mode 100755 avahi-python/avahi/test.py
+
+diff --git a/.gitignore b/.gitignore
+index beab8d94..06565f06 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -32,3 +32,4 @@ ltmain.sh
+ missing
+ py-compile
+ stamp-h1
++test-driver
+diff --git a/avahi-python/avahi/.gitignore b/avahi-python/avahi/.gitignore
+index 118a34de..9b0f6e3c 100644
+--- a/avahi-python/avahi/.gitignore
++++ b/avahi-python/avahi/.gitignore
+@@ -1 +1,6 @@
++*.log
++*.pyc
++*.pyo
++*.trs
+ ServiceTypeDatabase.py
++__pycache__/
+diff --git a/avahi-python/avahi/Makefile.am b/avahi-python/avahi/Makefile.am
+index 3eb67d0d..cf527aff 100644
+--- a/avahi-python/avahi/Makefile.am
++++ b/avahi-python/avahi/Makefile.am
+@@ -16,6 +16,11 @@
+ # USA.
+
+ EXTRA_DIST = __init__.py ServiceTypeDatabase.py.in
++EXTRA_DIST += test.py
++
++TESTS =
++TEST_EXTENSIONS = .py
++PY_LOG_COMPILER = $(PYTHON)
+
+ pkglibdatadir=$(libdir)/avahi
+
+@@ -55,6 +60,8 @@ if HAVE_PYTHON_DBUS
+
+ avahi_PYTHON += __init__.py
+
++TESTS += test.py
++
+ endif
+ endif
+
+diff --git a/avahi-python/avahi/test.py b/avahi-python/avahi/test.py
+new file mode 100755
+index 00000000..7afc4809
+--- /dev/null
++++ b/avahi-python/avahi/test.py
+@@ -0,0 +1,85 @@
++#!/usr/bin/python
++#
++# Copyright 2018 Simon McVittie
++#
++# 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 os
++import os.path
++import sys
++import unittest
++from collections import OrderedDict
++
++sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir))
++
++import avahi
++import dbus
++
++class TestUtilityMethods(unittest.TestCase):
++ def test_byte_array_to_string(self):
++ self.assertEqual(
++ avahi.byte_array_to_string([1, 2, 127, 128]),
++ '....')
++ self.assertEqual(
++ avahi.byte_array_to_string([ord('a'), ord(' '), ord('b')]),
++ 'a b')
++
++ def test_txt_array_to_string_array(self):
++ self.assertEqual(
++ avahi.txt_array_to_string_array([[1, 2], [ord('a'), ord('b')]]),
++ ['..', 'ab'])
++
++ def test_string_to_byte_array(self):
++ self.assertEqual(
++ avahi.string_to_byte_array('abc'),
++ [dbus.Byte(97), dbus.Byte(98), dbus.Byte(99)])
++ self.assertIsInstance(
++ avahi.string_to_byte_array('abc')[0],
++ dbus.Byte)
++ self.assertEqual(
++ avahi.string_to_byte_array(b'\x01\xff'),
++ [dbus.Byte(0x01), dbus.Byte(0xff)])
++ self.assertEqual(
++ avahi.string_to_byte_array(u'\u00e1'),
++ [dbus.Byte(0xc3), dbus.Byte(0xa1)])
++
++ def test_string_array_to_txt_array(self):
++ self.assertEqual(
++ avahi.string_array_to_txt_array(['abc', b'\x01', u'\u00e1']),
++ [
++ [dbus.Byte(97), dbus.Byte(98), dbus.Byte(99)],
++ [dbus.Byte(0x01)],
++ [dbus.Byte(0xc3), dbus.Byte(0xa1)]])
++ self.assertIsInstance(
++ avahi.string_array_to_txt_array(['abc'])[0][0],
++ dbus.Byte)
++
++ def test_dict_to_txt_array(self):
++ self.assertEqual(
++ avahi.dict_to_txt_array(
++ OrderedDict((('a', 'abc'), ('b', b'\x01'), ('c', u'\u00e1')))),
++ [
++ [dbus.Byte(97), dbus.Byte(ord('=')), dbus.Byte(97), dbus.Byte(98), dbus.Byte(99)],
++ [dbus.Byte(98), dbus.Byte(ord('=')), dbus.Byte(0x01)],
++ [dbus.Byte(99), dbus.Byte(ord('=')), dbus.Byte(0xc3), dbus.Byte(0xa1)]])
++ self.assertIsInstance(
++ avahi.dict_to_txt_array({'a': 'abc'})[0][0],
++ dbus.Byte)
++
++if __name__ == '__main__':
++ unittest.main()
diff --git a/net-dns/avahi/files/avahi-0.7-python3.patch b/net-dns/avahi/files/avahi-0.7-python3.patch
new file mode 100644
index 000000000000..a4bb34029964
--- /dev/null
+++ b/net-dns/avahi/files/avahi-0.7-python3.patch
@@ -0,0 +1,94 @@
+From 169e85dbc13dcaae8a699618883e512614f540b7 Mon Sep 17 00:00:00 2001
+From: Simon McVittie <smcv@debian.org>
+Date: Fri, 27 Apr 2018 11:09:07 +0100
+Subject: [PATCH] avahi-python: Encode unicode strings as UTF-8
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Previously, we would effectively encode anything representable in
+Latin-1 as Latin-1, and crash on anything not representable in Latin-1:
+
+>>> import avahi
+>>> avahi.string_to_byte_array(u'©')
+[dbus.Byte(169)]
+>>> avahi.string_to_byte_array(u'\ufeff')
+Traceback (most recent call last):
+ File "<stdin>", line 1, in <module>
+ File "/usr/lib/python2.7/dist-packages/avahi/__init__.py", line 94, in string_to_byte_array
+ r.append(dbus.Byte(ord(c)))
+ValueError: Integer outside range 0-255
+
+This is particularly important for Python 3, where the str type
+is a Unicode string.
+
+The b'' syntax for bytestrings is supported since at least Python 2.7.
+
+These functions now accept either Unicode strings (Python 2 unicode,
+Python 3 str), which are encoded in UTF-8, or bytestrings
+(Python 2 str, Python 3 bytes) which are taken as-is.
+
+Signed-off-by: Simon McVittie <smcv@debian.org>
+---
+ avahi-python/avahi/__init__.py | 24 +++++++++++++++++++++---
+ 1 file changed, 21 insertions(+), 3 deletions(-)
+
+diff --git a/avahi-python/avahi/__init__.py b/avahi-python/avahi/__init__.py
+index 7b450293..02305b02 100644
+--- a/avahi-python/avahi/__init__.py
++++ b/avahi-python/avahi/__init__.py
+@@ -17,6 +17,8 @@
+
+ # Some definitions matching those in avahi-common/defs.h
+
++import sys
++
+ import dbus
+
+ SERVER_INVALID, SERVER_REGISTERING, SERVER_RUNNING, SERVER_COLLISION, SERVER_FAILURE = range(0, 5)
+@@ -66,6 +68,9 @@
+ DBUS_INTERFACE_SERVICE_RESOLVER = DBUS_NAME + ".ServiceResolver"
+ DBUS_INTERFACE_RECORD_BROWSER = DBUS_NAME + ".RecordBrowser"
+
++if sys.version_info[0] >= 3:
++ unicode = str
++
+ def byte_array_to_string(s):
+ r = ""
+
+@@ -86,12 +91,19 @@ def txt_array_to_string_array(t):
+
+ return l
+
+-
+ def string_to_byte_array(s):
++ if isinstance(s, unicode):
++ s = s.encode('utf-8')
++
+ r = []
+
+ for c in s:
+- r.append(dbus.Byte(ord(c)))
++ if isinstance(c, int):
++ # Python 3: iterating over bytes yields ints
++ r.append(dbus.Byte(c))
++ else:
++ # Python 2: iterating over str yields str
++ r.append(dbus.Byte(ord(c)))
+
+ return r
+
+@@ -107,6 +119,12 @@ def dict_to_txt_array(txt_dict):
+ l = []
+
+ for k,v in txt_dict.items():
+- l.append(string_to_byte_array("%s=%s" % (k,v)))
++ if isinstance(k, unicode):
++ k = k.encode('utf-8')
++
++ if isinstance(v, unicode):
++ v = v.encode('utf-8')
++
++ l.append(string_to_byte_array(b"%s=%s" % (k,v)))
+
+ return l
diff --git a/net-dns/avahi/files/avahi-0.7-remove-empty-avahi_discover.patch b/net-dns/avahi/files/avahi-0.7-remove-empty-avahi_discover.patch
new file mode 100644
index 000000000000..702499e22185
--- /dev/null
+++ b/net-dns/avahi/files/avahi-0.7-remove-empty-avahi_discover.patch
@@ -0,0 +1,77 @@
+From ffb19d8f3c7f1fe4f31f79f8601dd3079730401b Mon Sep 17 00:00:00 2001
+From: Simon McVittie <smcv@debian.org>
+Date: Fri, 27 Apr 2018 09:01:13 +0100
+Subject: [PATCH] Remove empty avahi_discover Python module
+
+The avahi-discover tool no longer has any code outside its main
+executable, so it does not need to install library modules. Its only
+library code was avahi_discover.SimpleGladeApp, which was removed
+in 2009.
+
+Signed-off-by: Simon McVittie <smcv@debian.org>
+---
+ avahi-python/avahi-discover/Makefile.am | 6 ------
+ avahi-python/avahi-discover/__init__.py | 18 ------------------
+ 2 files changed, 24 deletions(-)
+ delete mode 100755 avahi-python/avahi-discover/__init__.py
+
+diff --git a/avahi-python/avahi-discover/Makefile.am b/avahi-python/avahi-discover/Makefile.am
+index 5fc4b25f..bb4d7172 100644
+--- a/avahi-python/avahi-discover/Makefile.am
++++ b/avahi-python/avahi-discover/Makefile.am
+@@ -18,7 +18,6 @@
+ AM_CFLAGS=-I$(top_srcdir)
+
+ EXTRA_DIST = \
+- __init__.py \
+ avahi-discover.py \
+ avahi-discover.desktop.in.in
+
+@@ -31,15 +30,11 @@ pythonscripts =
+ desktopdir = $(datadir)/applications
+ desktop_DATA =
+
+-avahi_discoverdir = $(pythondir)/avahi_discover
+-avahi_discover_PYTHON =
+-
+ if HAVE_GDBM
+ pythonscripts += \
+ avahi-discover
+ desktop_DATA += avahi-discover.desktop
+ @INTLTOOL_DESKTOP_RULE@
+-avahi_discover_PYTHON += __init__.py
+ endif
+
+ if HAVE_DBM
+@@ -47,7 +42,6 @@ pythonscripts += \
+ avahi-discover
+ desktop_DATA += avahi-discover.desktop
+ @INTLTOOL_DESKTOP_RULE@
+-avahi_discover_PYTHON += __init__.py
+ endif
+
+ avahi-discover.desktop.in: avahi-discover.desktop.in.in
+diff --git a/avahi-python/avahi-discover/__init__.py b/avahi-python/avahi-discover/__init__.py
+deleted file mode 100755
+index 6f3ec7f9..00000000
+--- a/avahi-python/avahi-discover/__init__.py
++++ /dev/null
+@@ -1,18 +0,0 @@
+-#!@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.