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.