commit:     48fad51b53b9aa4dacb87dabbd99c4772f680f0c
Author:     Marek Szuba <marecki <AT> gentoo <DOT> org>
AuthorDate: Wed Aug 23 21:48:51 2023 +0000
Commit:     Marek Szuba <marecki <AT> gentoo <DOT> org>
CommitDate: Wed Aug 23 22:17:11 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=48fad51b

app-misc/gramps: switch to PEP-517 build mode

Uses backported upstream refactoring of setup.py from distutils to
setuptools.

Bug: https://bugs.gentoo.org/909880
Signed-off-by: Marek Szuba <marecki <AT> gentoo.org>

 .../gramps/files/gramps-5.1.6-pep517_setup.patch   | 163 +++++++++++++++++++++
 app-misc/gramps/gramps-5.1.6-r2.ebuild             |  82 +++++++++++
 2 files changed, 245 insertions(+)

diff --git a/app-misc/gramps/files/gramps-5.1.6-pep517_setup.patch 
b/app-misc/gramps/files/gramps-5.1.6-pep517_setup.patch
new file mode 100644
index 000000000000..7853b23ba1b8
--- /dev/null
+++ b/app-misc/gramps/files/gramps-5.1.6-pep517_setup.patch
@@ -0,0 +1,163 @@
+--- a/setup.py
++++ b/setup.py
+@@ -23,7 +23,7 @@
+ #
+ 
+ '''
+-Gramps distutils module.
++Gramps setuptools module.
+ '''
+ 
+ #check python version first
+@@ -32,11 +32,11 @@
+ if sys.version_info < (3, 2):
+     raise SystemExit("Gramps requires Python 3.2 or later.")
+ 
+-from distutils import log
+-from distutils.core import setup, Command
+-from distutils.util import convert_path, newer
+-from distutils.command.build import build as _build
+-from distutils.command.install import install as _install
++from setuptools import setup, Command
++try:
++    from setuptools.command.build import build as _build
++except ImportError:
++    from distutils.command.build import build as _build
+ import os
+ import glob
+ import codecs
+@@ -45,6 +45,9 @@
+ from gramps.version import VERSION
+ import unittest
+ import argparse
++import logging
++
++_LOG = logging.getLogger(".setup")
+ 
+ # this list MUST be a subset of _LOCALE_NAMES in gen/utils/grampslocale.py
+ # (that is, if you add a new language here, be sure it's in _LOCALE_NAMES too)
+@@ -75,6 +78,17 @@
+     packaging = True
+ sys.argv = [sys.argv[0]] + passthrough
+ 
++def newer(source, target):
++    '''
++    Determines if a target file needs to be rebuilt.
++
++    Returns True if the target file doesn't exist or if the source file is
++    newer than the target file.
++    '''
++    if not os.path.exists(target):
++        return True
++    return os.path.getmtime(source) > os.path.getmtime(target)
++
+ def intltool_version():
+     '''
+     Return the version of intltool as a tuple.
+@@ -140,7 +154,7 @@
+                 reply = input(ask)
+                 if reply in ['n', 'N']:
+                     raise SystemExit(msg)
+-            log.info('Compiling %s >> %s', po_file, mo_file)
++            _LOG.info('Compiling %s >> %s', po_file, mo_file)
+ 
+         #linux specific piece:
+         target = 'share/locale/' + lang + '/LC_MESSAGES'
+@@ -179,7 +193,7 @@
+                     with open(newfile, 'rb') as f_in,\
+                             gzip.open(man_file_gz, 'wb') as f_out:
+                         f_out.writelines(f_in)
+-                        log.info('Compiling %s >> %s', filename, man_file_gz)
++                        _LOG.info('Compiling %s >> %s', filename, man_file_gz)
+ 
+                     os.remove(newfile)
+                     filename = False
+@@ -193,30 +207,26 @@
+     '''
+     Merge translation files into desktop and mime files
+     '''
+-    for filename in _FILES:
+-        filename = convert_path(filename)
+-        strip_files(filename + '.in', filename, ['_tip', '_name'])
+-
+     i_v = intltool_version()
+     if i_v is None or i_v < (0, 25, 0):
+-        log.info('No intltool or version < 0.25.0, build_intl is aborting')
++        _LOG.info('No intltool or version < 0.25.0, build_intl is aborting')
+         return
+     data_files = build_cmd.distribution.data_files
+     base = build_cmd.build_base
+ 
+-    merge_files = (('data/gramps.desktop', 'share/applications', '-d'),
+-                    ('data/gramps.keys', 'share/mime-info', '-k'),
+-                    ('data/gramps.xml', 'share/mime/packages', '-x'),
+-                    ('data/gramps.appdata.xml', 'share/metainfo', '-x'))
++    merge_files = (('gramps.desktop', 'share/applications', '-d'),
++                    ('gramps.keys', 'share/mime-info', '-k'),
++                    ('gramps.xml', 'share/mime/packages', '-x'),
++                    ('gramps.appdata.xml', 'share/metainfo', '-x'))
+ 
+     for filename, target, option in merge_files:
+-        filenamelocal = convert_path(filename)
++        filenamelocal = os.path.join('data', filename)
+         newfile = os.path.join(base, filenamelocal)
+         newdir = os.path.dirname(newfile)
+         if not(os.path.isdir(newdir) or os.path.islink(newdir)):
+             os.makedirs(newdir)
+         merge(filenamelocal + '.in', newfile, option)
+-        data_files.append((target, [base + '/' + filename]))
++        data_files.append((target, [base + '/data/' + filename]))
+ 
+ def strip_files(in_file, out_file, mark):
+     '''
+@@ -232,7 +242,7 @@
+                     line = line.replace(marker, marker[1:])
+                 fb.write(line)
+         old.close()
+-        log.info('Compiling %s >> %s', in_file, out_file)
++        _LOG.info('Compiling %s >> %s', in_file, out_file)
+ 
+ def merge(in_file, out_file, option, po_dir='po', cache=True):
+     '''
+@@ -262,7 +272,7 @@
+             msg = ('ERROR: %s was not merged into the translation files!\n' %
+                     out_file)
+             raise SystemExit(msg)
+-        log.info('Compiling %s >> %s', in_file, out_file)
++        _LOG.info('Compiling %s >> %s', in_file, out_file)
+ 
+ class build(_build):
+     """Custom build command."""
+@@ -273,22 +283,6 @@
+         build_intl(self)
+         _build.run(self)
+ 
+-class install(_install):
+-    """Custom install command."""
+-    def run(self):
+-        resource_file = os.path.join(os.path.dirname(__file__), 'gramps', 
'gen',
+-                                     'utils', 'resource-path')
+-        with open(resource_file, 'w', encoding='utf-8', errors='strict') as 
fp:
+-            if packaging:
+-                path = resource_path
+-            else:
+-                path = os.path.abspath(os.path.join(self.install_data, 
'share'))
+-            fp.write(path)
+-
+-        _install.run(self)
+-
+-        os.remove(resource_file)
+-
+ class test(Command):
+     """Command to run Gramps unit tests"""
+     description = "run all unit tests"
+@@ -503,7 +497,7 @@
+       url = 'http://gramps-project.org',
+       license = 'GPL v2 or greater',
+       platforms = ['FreeBSD', 'Linux', 'MacOS', 'Windows'],
+-      cmdclass = {'build': build, 'install': install, 'test': test},
++      cmdclass = {'build': build, 'test': test},
+       packages = packages,
+       package_data = {'gramps': package_data},
+       data_files = data_files,
+Binary files a/.setup.py.swp and b/.setup.py.swp differ

diff --git a/app-misc/gramps/gramps-5.1.6-r2.ebuild 
b/app-misc/gramps/gramps-5.1.6-r2.ebuild
new file mode 100644
index 000000000000..21e33b40891f
--- /dev/null
+++ b/app-misc/gramps/gramps-5.1.6-r2.ebuild
@@ -0,0 +1,82 @@
+# Copyright 2001-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_SINGLE_IMPL=1
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..11} )
+PYTHON_REQ_USE="sqlite"
+
+inherit distutils-r1 xdg-utils
+
+DESCRIPTION="Community genealogy program aiming to be both intuitive and 
feature-complete"
+HOMEPAGE="https://gramps-project.org/";
+SRC_URI="https://github.com/gramps-project/${PN}/archive/v${PV}.tar.gz
+       -> ${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="exif geo postscript +rcs +reports spell test"
+
+# Many tests fail unless the deprecated BerkeleyDB back-end is enabled.
+RESTRICT="test"
+
+RDEPEND="
+       $(python_gen_cond_dep '
+               dev-python/pycairo[${PYTHON_USEDEP}]
+               >=dev-python/pygobject-3.12:3[cairo,${PYTHON_USEDEP}]
+               dev-python/pyicu[${PYTHON_USEDEP}]
+               exif? ( >=media-libs/gexiv2-0.5[${PYTHON_USEDEP},introspection] 
)
+       ')
+       gnome-base/librsvg:2
+       >x11-libs/gtk+-3.14.8:3[introspection]
+       x11-libs/pango[introspection]
+       x11-misc/xdg-utils
+       geo? ( >=sci-geosciences/osm-gps-map-1.1.0 )
+       spell? ( app-text/gtkspell:3[introspection] )
+       rcs? ( dev-vcs/rcs )
+       reports? ( media-gfx/graphviz[postscript?] )
+"
+BDEPEND="test? (
+       $(python_gen_cond_dep '
+               dev-python/jsonschema[${PYTHON_USEDEP}]
+               dev-python/lxml[${PYTHON_USEDEP}]
+       ')
+)"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-5.1.3-test_locale.patch
+       "${FILESDIR}"/${PN}-5.1.6-pep517_setup.patch
+)
+
+DISTUTILS_ARGS="--no-compress-manpages"
+
+distutils_enable_tests pytest
+
+src_prepare() {
+       # Install documentation to the proper location. This can't be done
+       # easily with a patch because we substitute in the ${PF} variable,
+       # and that changes with every revision.
+       sed -i -e "s:share/doc/gramps:share/doc/${PF}:g" setup.py || die
+
+       # The final part of PEP-517 support, handled with sed in order to avoid
+       # making the patch file too large
+       sed -e "s:_name:name:g" data/holidays.xml.in > data/holidays.xml || die
+       sed -e "s:_tip:tip:g" data/tips.xml.in > data/tips.xml || die
+
+       default
+}
+
+pkg_postinst() {
+       xdg_desktop_database_update
+       xdg_icon_cache_update
+       xdg_mimeinfo_database_update
+}
+
+pkg_postrm() {
+       xdg_desktop_database_update
+       xdg_icon_cache_update
+       xdg_mimeinfo_database_update
+}

Reply via email to