commit:     b0311e22fe1952500385ab56183d7fb8d13099ff
Author:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
AuthorDate: Thu Aug 20 22:10:01 2020 +0000
Commit:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
CommitDate: Thu Aug 20 22:10:01 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b0311e22

gnome-base/gconf: Python 3, python-single-r1.eclass, EAPI 6

Only a single Python executable is installed so supporting multiple
Python versions does not make sense here.

Closes: https://bugs.gentoo.org/705354
Package-Manager: Portage-3.0.4, Repoman-3.0.1
Signed-off-by: James Le Cuirot <chewi <AT> gentoo.org>

 gnome-base/gconf/files/gconf-3.2.6-python3.patch | 164 +++++++++++++++++++++++
 gnome-base/gconf/gconf-3.2.6-r5.ebuild           | 146 ++++++++++++++++++++
 2 files changed, 310 insertions(+)

diff --git a/gnome-base/gconf/files/gconf-3.2.6-python3.patch 
b/gnome-base/gconf/files/gconf-3.2.6-python3.patch
new file mode 100644
index 00000000000..d1504cc0e23
--- /dev/null
+++ b/gnome-base/gconf/files/gconf-3.2.6-python3.patch
@@ -0,0 +1,164 @@
+From dbd4f1bc1992c2942538980e76a50c8b8a758d70 Mon Sep 17 00:00:00 2001
+From: Takao Fujiwara <tfuji...@redhat.com>
+Date: Fri, 11 Dec 2015 18:29:49 +0900
+Subject: [PATCH] gsettings-schema-convert: Support python3
+
+https://bugzilla.gnome.org/show_bug.cgi?id=759334
+---
+ gsettings/gsettings-schema-convert | 43 ++++++++++++++++++++------------------
+ 1 file changed, 23 insertions(+), 20 deletions(-)
+
+diff --git a/gsettings/gsettings-schema-convert 
b/gsettings/gsettings-schema-convert
+index 913cc83..6ccf8c5 100755
+--- a/gsettings/gsettings-schema-convert
++++ b/gsettings/gsettings-schema-convert
+@@ -25,6 +25,9 @@
+ # TODO: we don't support migrating a pair from a gconf schema. It has yet to 
be
+ #       seen in real-world usage, though.
+ 
++from __future__ import print_function
++
++import codecs
+ import os
+ import sys
+ 
+@@ -398,7 +401,7 @@ class SimpleSchemaParser:
+ 
+     def _word_to_token(self, word):
+         lower = word.lower()
+-        if lower and lower in self.allowed_tokens.keys():
++        if lower and lower in list(self.allowed_tokens.keys()):
+             return lower
+         raise GSettingsSchemaConvertException('\'%s\' is not a valid token.' 
% lower)
+ 
+@@ -594,7 +597,7 @@ class SimpleSchemaParser:
+             self.object_stack.append(new_object)
+ 
+     def parse(self):
+-        f = open(self.file, 'r')
++        f = codecs.open(self.file, 'r', encoding='utf-8')
+         lines = [ line[:-1] for line in f.readlines() ]
+         f.close()
+ 
+@@ -603,7 +606,7 @@ class SimpleSchemaParser:
+             for line in lines:
+                 current_line_nb += 1
+                 self.parse_line(line)
+-        except GSettingsSchemaConvertException, e:
++        except GSettingsSchemaConvertException as e:
+             raise GSettingsSchemaConvertException('%s:%s: %s' % 
(os.path.basename(self.file), current_line_nb, e))
+ 
+         return self.root
+@@ -711,7 +714,7 @@ class XMLSchemaParser:
+             schema = self._parse_schema(schema_node)
+ 
+             for (child_schema, child_name) in schema._children:
+-                if parent.has_key(child_schema):
++                if child_schema in parent:
+                     raise GSettingsSchemaConvertException('Child \'%s\' is 
declared by two different schemas: \'%s\' and \'%s\'.' % (child_schema, 
parent[child_schema], schema.id))
+                 parent[child_schema] = schema
+ 
+@@ -719,7 +722,7 @@ class XMLSchemaParser:
+ 
+         # now let's move all schemas where they should leave
+         for schema in schemas:
+-            if parent.has_key(schema.id):
++            if schema.id in parent:
+                 parent_schema = parent[schema.id]
+ 
+                 # check that the paths of parent and child are supported by
+@@ -1054,31 +1057,31 @@ def main(args):
+     (options, args) = parser.parse_args()
+ 
+     if len(args) < 1:
+-        print >> sys.stderr, 'Need a filename to work on.'
++        print('Need a filename to work on.', file=sys.stderr)
+         return 1
+     elif len(args) > 1:
+-        print >> sys.stderr, 'Too many arguments.'
++        print('Too many arguments.', file=sys.stderr)
+         return 1
+ 
+     if options.simple and options.xml:
+-        print >> sys.stderr, 'Too many output formats requested.'
++        print('Too many output formats requested.', file=sys.stderr)
+         return 1
+ 
+     if not options.gconf and options.gettext_domain:
+-        print >> sys.stderr, 'Default gettext domain can only be specified 
when converting a gconf schema.'
++        print('Default gettext domain can only be specified when converting a 
gconf schema.', file=sys.stderr)
+         return 1
+ 
+     if not options.gconf and options.schema_id:
+-        print >> sys.stderr, 'Default schema ID can only be specified when 
converting a gconf schema.'
++        print('Default schema ID can only be specified when converting a 
gconf schema.', file=sys.stderr)
+         return 1
+ 
+     if not options.gconf and options.keep_underscores:
+-        print >> sys.stderr, 'The --keep-underscores option can only be 
specified when converting a gconf schema.'
++        print('The --keep-underscores option can only be specified when 
converting a gconf schema.', file=sys.stderr)
+         return 1
+ 
+     argfile = os.path.expanduser(args[0])
+     if not os.path.exists(argfile):
+-        print >> sys.stderr, '\'%s\' does not exist.' % argfile
++        print('\'%s\' does not exist.' % argfile, file=sys.stderr)
+         return 1
+ 
+     if options.output:
+@@ -1095,7 +1098,7 @@ def main(args):
+             try:
+                 parser = GConfSchemaParser(argfile, options.gettext_domain, 
options.schema_id, options.keep_underscores)
+                 schema_root = parser.parse()
+-            except SyntaxError, e:
++            except SyntaxError as e:
+                 raise GSettingsSchemaConvertException('\'%s\' does not look 
like a valid gconf schema file: %s' % (argfile, e))
+         else:
+             # autodetect if file is XML or not
+@@ -1104,7 +1107,7 @@ def main(args):
+                 schema_root = parser.parse()
+                 if not options.simple and not options.xml:
+                     options.simple = True
+-            except SyntaxError, e:
++            except SyntaxError as e:
+                 parser = SimpleSchemaParser(argfile)
+                 schema_root = parser.parse()
+                 if not options.simple and not options.xml:
+@@ -1113,10 +1116,10 @@ def main(args):
+         if options.xml:
+             node = schema_root.get_xml_node()
+             try:
+-                output = ET.tostring(node, pretty_print = True)
++                output = ET.tostring(node, pretty_print = True, 
encoding="unicode")
+             except TypeError:
+                 # pretty_print only works with lxml
+-                output = ET.tostring(node)
++                output = ET.tostring(node, encoding="unicode")
+         else:
+             output = schema_root.get_simple_string()
+ 
+@@ -1124,17 +1127,17 @@ def main(args):
+             sys.stdout.write(output)
+         else:
+             try:
+-                fout = open(options.output, 'w')
++                fout = codecs.open(options.output, 'w', encoding='utf-8')
+                 fout.write(output)
+                 fout.close()
+-            except GSettingsSchemaConvertException, e:
++            except GSettingsSchemaConvertException as e:
+                 fout.close()
+                 if os.path.exists(options.output):
+                     os.unlink(options.output)
+                 raise e
+ 
+-    except GSettingsSchemaConvertException, e:
+-        print >> sys.stderr, '%s' % e
++    except GSettingsSchemaConvertException as e:
++        print('%s' % e, file=sys.stderr)
+         return 1
+ 
+     return 0
+-- 
+2.4.3
+

diff --git a/gnome-base/gconf/gconf-3.2.6-r5.ebuild 
b/gnome-base/gconf/gconf-3.2.6-r5.ebuild
new file mode 100644
index 00000000000..ca22f3e6fb6
--- /dev/null
+++ b/gnome-base/gconf/gconf-3.2.6-r5.ebuild
@@ -0,0 +1,146 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+GNOME_ORG_MODULE="GConf"
+GNOME2_LA_PUNT="yes"
+PYTHON_COMPAT=( python3_{7,8,9} )
+PYTHON_REQ_USE="xml"
+
+inherit gnome2 multilib-minimal python-single-r1
+
+DESCRIPTION="GNOME configuration system and daemon"
+HOMEPAGE="https://projects.gnome.org/gconf/";
+
+LICENSE="LGPL-2+"
+SLOT="2"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 
~x86-linux"
+IUSE="debug +introspection ldap policykit"
+
+RDEPEND="
+       ${PYTHON_DEPS}
+       >=dev-libs/glib-2.34.3:2[${MULTILIB_USEDEP}]
+       >=dev-libs/dbus-glib-0.100.2:=[${MULTILIB_USEDEP}]
+       >=sys-apps/dbus-1.6.18-r1:=[${MULTILIB_USEDEP}]
+       >=dev-libs/libxml2-2.9.1-r4:2[${MULTILIB_USEDEP}]
+       introspection? ( >=dev-libs/gobject-introspection-0.9.5:= )
+       ldap? ( >=net-nds/openldap-2.4.38-r1:=[${MULTILIB_USEDEP}] )
+       policykit? ( sys-auth/polkit:= )
+"
+DEPEND="${RDEPEND}
+       dev-libs/libxslt
+       dev-util/glib-utils
+       dev-util/gtk-doc-am
+       >=dev-util/intltool-0.35
+       virtual/pkgconfig
+"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+pkg_setup() {
+       kill_gconf
+       python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       # Do not start gconfd when installing schemas, fix bug #238276, 
upstream #631983
+       eapply "${FILESDIR}/${PN}-2.24.0-no-gconfd.patch"
+
+       # Do not crash in gconf_entry_set_value() when entry pointer is NULL, 
upstream #631985
+       eapply "${FILESDIR}/${PN}-2.28.0-entry-set-value-sigsegv.patch"
+
+       # From 'master'
+       # mconvert: enable recursive scheme lookup and fix a crasher
+       eapply "${FILESDIR}/${P}-mconvert-crasher.patch"
+
+       # dbus: Don't spew to console when unable to connect to dbus daemon
+       eapply "${FILESDIR}/${P}-spew-console-error.patch"
+
+       # gsettings-data-convert: Warn (and fix) invalid schema paths
+       eapply "${FILESDIR}/${P}-gsettings-data-convert-paths.patch"
+
+       # gsettings-data-convert: Migrate from Python 2 to 3.
+       eapply "${FILESDIR}/${P}-python3.patch"
+
+       gnome2_src_prepare
+}
+
+multilib_src_configure() {
+       ECONF_SOURCE=${S} \
+       gnome2_src_configure \
+               --disable-static \
+               --enable-gsettings-backend \
+               --with-gtk=3.0 \
+               --disable-orbit \
+               $(use_enable debug) \
+               $(multilib_native_use_enable introspection) \
+               $(use_with ldap openldap) \
+               $(multilib_native_use_enable policykit defaults-service)
+
+       if multilib_is_native_abi; then
+               ln -s "${S}"/doc/gconf/html doc/gconf/html || die
+       fi
+}
+
+multilib_src_install() {
+       gnome2_src_install
+}
+
+multilib_src_install_all() {
+       python_fix_shebang "${ED}"/usr/bin/gsettings-schema-convert
+
+       keepdir /etc/gconf/gconf.xml.mandatory
+       keepdir /etc/gconf/gconf.xml.defaults
+       # Make sure this directory exists, bug #268070, upstream #572027
+       keepdir /etc/gconf/gconf.xml.system
+
+       echo "CONFIG_PROTECT_MASK=\"/etc/gconf\"" > 50gconf
+       echo 'GSETTINGS_BACKEND="gconf"' >> 50gconf
+       doenvd 50gconf
+       dodir /root/.gconfd
+}
+
+pkg_preinst() {
+       kill_gconf
+       gnome2_pkg_preinst
+}
+
+pkg_postinst() {
+       kill_gconf
+
+       gnome2_pkg_postinst
+
+       multilib_pkg_postinst() {
+               gnome2_giomodule_cache_update \
+                       || die "Update GIO modules cache failed (for ${ABI})"
+       }
+       multilib_foreach_abi multilib_pkg_postinst
+
+       # change the permissions to avoid some gconf bugs
+       einfo "changing permissions for gconf dirs"
+       find  "${EPREFIX}"/etc/gconf/ -type d -exec chmod ugo+rx "{}" \;
+
+       einfo "changing permissions for gconf files"
+       find  "${EPREFIX}"/etc/gconf/ -type f -exec chmod ugo+r "{}" \;
+}
+
+pkg_postrm() {
+       gnome2_pkg_postrm
+
+       multilib_pkg_postrm() {
+               gnome2_giomodule_cache_update \
+                       || die "Update GIO modules cache failed (for ${ABI})"
+       }
+       multilib_foreach_abi multilib_pkg_postrm
+}
+
+kill_gconf() {
+       # This function will kill all running gconfd-2 that could be causing 
troubles
+       if [ -x "${EPREFIX}"/usr/bin/gconftool-2 ]
+       then
+               "${EPREFIX}"/usr/bin/gconftool-2 --shutdown
+       fi
+
+       return 0
+}

Reply via email to