commit:     ecb1d2b716b08a3ea9d7aaaf5afc3fcaabbb55ef
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 29 18:41:08 2019 +0000
Commit:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Mon Jan 13 17:36:19 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ecb1d2b7

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 <AT> gentoo.org>
Signed-off-by: Anthony G. Basile <blueness <AT> gentoo.org>

 net-dns/avahi/avahi-0.7-r5.ebuild                  | 217 +++++++++++++++++++
 net-dns/avahi/files/avahi-0.7-python3-gdbm.patch   | 234 +++++++++++++++++++++
 .../avahi/files/avahi-0.7-python3-unittest.patch   | 151 +++++++++++++
 net-dns/avahi/files/avahi-0.7-python3.patch        |  94 +++++++++
 .../avahi-0.7-remove-empty-avahi_discover.patch    |  77 +++++++
 5 files changed, 773 insertions(+)

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 00000000000..edac01c62ae
--- /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 00000000000..3976b8df2e7
--- /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.steff...@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 00000000000..9d735a1780c
--- /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 <s...@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 <s...@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 00000000000..a4bb3402996
--- /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 <s...@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 <s...@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 00000000000..702499e2218
--- /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 <s...@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 <s...@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.

Reply via email to