From 78c8fbe8a35cd2926f37f21235c5d8b587efae46 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sun, 8 Oct 2023 21:57:02 -0700 Subject: [PATCH] Migrate to PEP517 meson-python build Bug: https://bugs.gentoo.org/909888 Signed-off-by: Zac Medico Closes: https://github.com/gentoo/gentoolkit/pull/36 Signed-off-by: Sam James --- .github/workflows/ci.yml | 17 ++- MANIFEST.in | 13 -- bin/ebump | 2 +- bin/euse | 2 +- bin/meson.build | 55 +++++++ bin/revdep-rebuild.sh | 2 +- data/meson.build | 20 +++ man/meson.build | 23 +++ meson.build | 68 +++++++++ meson_options.txt | 15 ++ pym/gentoolkit/eclean/cli.py | 2 +- pym/gentoolkit/eclean/meson.build | 18 +++ pym/gentoolkit/ekeyword/ekeyword.py | 2 +- pym/gentoolkit/ekeyword/meson.build | 26 ++++ pym/gentoolkit/ekeyword/tests/meson.build | 12 ++ pym/gentoolkit/enalyze/__init__.py | 4 +- pym/gentoolkit/enalyze/meson.build | 17 +++ pym/gentoolkit/equery/__init__.py | 4 +- pym/gentoolkit/equery/meson.build | 26 ++++ pym/gentoolkit/eshowkw/__init__.py | 2 +- pym/gentoolkit/eshowkw/meson.build | 16 ++ pym/gentoolkit/imlate/imlate.py | 2 +- pym/gentoolkit/imlate/meson.build | 14 ++ pym/gentoolkit/meson.build | 35 +++++ pym/gentoolkit/revdep_rebuild/__init__.py | 2 +- pym/gentoolkit/revdep_rebuild/meson.build | 21 +++ pym/gentoolkit/test/eclean/meson.build | 20 +++ pym/gentoolkit/test/equery/meson.build | 7 + pym/gentoolkit/test/meson.build | 16 ++ pym/meson.build | 1 + pyproject.toml | 17 +++ setup.py | 176 ---------------------- 32 files changed, 454 insertions(+), 203 deletions(-) delete mode 100644 MANIFEST.in create mode 100644 bin/meson.build create mode 100644 data/meson.build create mode 100644 man/meson.build create mode 100644 meson.build create mode 100644 meson_options.txt create mode 100644 pym/gentoolkit/eclean/meson.build create mode 100644 pym/gentoolkit/ekeyword/meson.build create mode 100644 pym/gentoolkit/ekeyword/tests/meson.build create mode 100644 pym/gentoolkit/enalyze/meson.build create mode 100644 pym/gentoolkit/equery/meson.build create mode 100644 pym/gentoolkit/eshowkw/meson.build create mode 100644 pym/gentoolkit/imlate/meson.build create mode 100644 pym/gentoolkit/meson.build create mode 100644 pym/gentoolkit/revdep_rebuild/meson.build create mode 100644 pym/gentoolkit/test/eclean/meson.build create mode 100644 pym/gentoolkit/test/equery/meson.build create mode 100644 pym/gentoolkit/test/meson.build create mode 100644 pym/meson.build create mode 100644 pyproject.toml delete mode 100755 setup.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 36a636a7..c78050da 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,6 +25,14 @@ jobs: uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + set -xe + python -VV + python -m site + python -m pip install --upgrade pip + # setuptools needed for 3.12+ because of https://github.com/mesonbuild/meson/issues/7702. + python -m pip install meson ninja setuptools - name: Install portage run: | mkdir portage @@ -38,8 +46,13 @@ jobs: sudo wget "https://www.gentoo.org/dtd/metadata.dtd" -O /var/cache/distfiles/metadata.dtd sudo wget "https://gitweb.gentoo.org/proj/portage.git/plain/cnf/repos.conf" -O /etc/portage/repos.conf sudo ln -s /var/db/repos/gentoo/profiles/default/linux/amd64/17.1/systemd /etc/portage/make.profile - - name: Run tests + - name: Test meson install --destdir /tmp/install-root + run: | + echo -e "[binaries]\npython = '$(command -v python)'" > /tmp/native.ini + meson setup --native-file /tmp/native.ini /tmp/build . + meson install -C /tmp/build --destdir /tmp/install-root + - name: Run tests for ${{ matrix.python-version }} run: | export PYTHONPATH="${PWD}/portage/lib"${PYTHONPATH:+:}${PYTHONPATH} export PATH="${PWD}/portage/bin":${PATH} - python setup.py test + meson test -C /tmp/build --verbose diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 8f26beaf..00000000 --- a/MANIFEST.in +++ /dev/null @@ -1,13 +0,0 @@ -include AUTHORS -include ChangeLog -include COPYING -include CREDITS -include DEVELOPING -include NEWS -include README -include TODO -include setup.py -recursive-include data * -recursive-include bin * -recursive-include man * -recursive-include pym *.py *.txt diff --git a/bin/ebump b/bin/ebump index 25e9a7c9..dc045e75 100755 --- a/bin/ebump +++ b/bin/ebump @@ -12,7 +12,7 @@ __description__="Ebuild version bumping tool" # a given ebuild and auxiliary files in the Portage tree. It is only # useful for Gentoo developers with CVS commit access. -VERSION="git" +VERSION="@VERSION@" die() { echo $1 >&2 diff --git a/bin/euse b/bin/euse index daffd66d..f15a36c0 100755 --- a/bin/euse +++ b/bin/euse @@ -8,7 +8,7 @@ set -f # Licensed under the GPL v2 PROGRAM_NAME=euse -VERSION="git" +VERSION="@VERSION@" EPREFIX=${EPREFIX:-$(portageq envvar EPREFIX)} ETC="${EPREFIX}/etc" diff --git a/bin/meson.build b/bin/meson.build new file mode 100644 index 00000000..eb99870a --- /dev/null +++ b/bin/meson.build @@ -0,0 +1,55 @@ +py_bins = [ + 'eclean', + 'eclean-dist', + 'eclean-pkg', + 'ekeyword', + 'enalyze', + 'epkginfo', + 'equery', + 'eread', + 'eshowkw', + 'imlate', + 'merge-driver-ekeyword', + 'revdep-rebuild', +] + +ebump = configure_file( + input : 'ebump', + output : 'ebump', + configuration : conf_data +) + +euse = configure_file( + input : 'euse', + output : 'euse', + configuration : conf_data +) + +revdep_rebuild_sh = configure_file( + input : 'revdep-rebuild.sh', + output : 'revdep-rebuild.sh', + configuration : conf_data +) + +other_bins = [ + ebump, + euse, + revdep_rebuild_sh, +] + +# It might seem sensible to use py.install_sources() to install the Python +# scripts, but it's really just a wrapper around install_data that forces the +# install_dir. Meson 1.2.0 and later also optimize to bytecode, but Gentoo does +# this in the ebuild. + +install_data( + py_bins, + install_dir : get_option('bindir'), + install_mode : 'rwxr-xr-x', +) + +install_data( + other_bins, + install_dir : get_option('bindir'), + install_mode : 'rwxr-xr-x', +) diff --git a/bin/revdep-rebuild.sh b/bin/revdep-rebuild.sh index 09b0d1c3..457b0f25 100755 --- a/bin/revdep-rebuild.sh +++ b/bin/revdep-rebuild.sh @@ -18,7 +18,7 @@ unset GREP_OPTIONS # Readonly variables: declare -r APP_NAME="revdep-rebuild" # # The name of this application -declare -r VERSION="git" +declare -r VERSION="@VERSION@" declare -r OIFS="$IFS" # Save the IFS declare -r ENV_FILE=0_env.rr # Contains environment variables declare -r FILES_FILE=1_files.rr # Contains a list of files to search diff --git a/data/meson.build b/data/meson.build new file mode 100644 index 00000000..f79ec01b --- /dev/null +++ b/data/meson.build @@ -0,0 +1,20 @@ +install_data( + [ + '99gentoolkit-env', + ], + install_dir : sysconfdir / 'env.d' +) + +install_data( + [ + 'eclean/packages.exclude', + 'eclean/distfiles.exclude', + 'revdep-rebuild/99revdep-rebuild', + ], + install_dir: sysconfdir, + preserve_path: true +) + +if not system_wide + subdir_done() +endif diff --git a/man/meson.build b/man/meson.build new file mode 100644 index 00000000..aa888f75 --- /dev/null +++ b/man/meson.build @@ -0,0 +1,23 @@ +man_pages_out = [] +man_pages_in = [ + 'ebump.1', + 'eclean.1', + 'enalyze.1', + 'epkginfo.1', + 'equery.1', + 'eread.1', + 'eshowkw.1', + 'euse.1', + 'imlate.1', + 'revdep-rebuild.1', +] + +foreach man_page : man_pages_in + man_pages_out += configure_file( + input : man_page, + output : man_page, + configuration : conf_data + ) +endforeach + +install_man(man_pages_out) diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..b6098760 --- /dev/null +++ b/meson.build @@ -0,0 +1,68 @@ +project( + 'gentoolkit', + 'c', + version : '0.6.2', + license : 'GPL-2.0-or-later', + meson_version : '>=0.64.0' +) + +py_mod = import('python') +py = py_mod.find_installation(pure : true) + +sed = find_program('sed', required : true) + +system_wide = get_option('system-wide') + +eprefix = get_option('eprefix') +prefixdir = get_option('prefix') +datadir = get_option('datadir') +docdir = get_option('docdir') + +sysconfdir = system_wide ? get_option('sysconfdir') \ + : datadir / 'etc' + +if docdir == '' + docdir = system_wide ? datadir / 'doc' / 'gentoolkit' \ + : datadir / 'share' / 'gentoolkit' / 'doc' +endif + +conf_data = configuration_data({ + 'VERSION' : meson.project_version() +}) + +if system_wide + conf_data.set('INSTALL_TYPE', 'SYSTEM') + conf_data.set('EPREFIX', eprefix) +else + conf_data.set('INSTALL_TYPE', 'MODULE') + conf_data.set('EPREFIX', '') +endif + +subdir('bin') +subdir('pym') + +test( + 'python-unittest', + py, + args : ['-m', 'unittest', 'discover', meson.current_source_dir() / 'pym'], + timeout : 0 +) + +if get_option('code-only') + subdir_done() +endif + +subdir('data') + +install_data( + [ + 'NEWS', + ], + install_dir : docdir +) + +if not system_wide + subdir_done() +endif + +subdir('man') diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 00000000..265d5729 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,15 @@ +option('system-wide', type : 'boolean', value : true, + description : 'Install system-wide rather than isolated inside a Python environment' +) + +option('code-only', type : 'boolean', value : false, + description : 'Do not install additional files such as configuration or documentation' +) + +option('eprefix', type : 'string', + description : 'Prefix directory for gentoolkit to operate under' +) + +option('docdir', type : 'string', + description : 'Documentation directory' +) diff --git a/pym/gentoolkit/eclean/cli.py b/pym/gentoolkit/eclean/cli.py index b180641b..e3dd5407 100644 --- a/pym/gentoolkit/eclean/cli.py +++ b/pym/gentoolkit/eclean/cli.py @@ -9,7 +9,7 @@ + "modular re-write by: Brian Dolbec (dol-sen)" ) __email__ = "degrenier@easyconnect.fr, " + "brian.dolbec@gmail.com" -__version__ = "git" +__version__ = "@VERSION@" __productname__ = "eclean" __description__ = "A cleaning tool for Gentoo distfiles and binaries." diff --git a/pym/gentoolkit/eclean/meson.build b/pym/gentoolkit/eclean/meson.build new file mode 100644 index 00000000..8a282849 --- /dev/null +++ b/pym/gentoolkit/eclean/meson.build @@ -0,0 +1,18 @@ + +cli_py = configure_file( + input : 'cli.py', + output : 'cli.py', + configuration : conf_data +) + +py.install_sources( + [ + '__init__.py', + 'clean.py', + cli_py, + 'exclude.py', + 'output.py', + 'search.py', + ], + subdir : 'gentoolkit/eclean' +) diff --git a/pym/gentoolkit/ekeyword/ekeyword.py b/pym/gentoolkit/ekeyword/ekeyword.py index 01946e9a..aa4986ee 100755 --- a/pym/gentoolkit/ekeyword/ekeyword.py +++ b/pym/gentoolkit/ekeyword/ekeyword.py @@ -50,7 +50,7 @@ from portage.output import colorize, nocolor -__version__ = "git" +__version__ = "@VERSION@" # Operation object that describes how to perform a change. # Args: diff --git a/pym/gentoolkit/ekeyword/meson.build b/pym/gentoolkit/ekeyword/meson.build new file mode 100644 index 00000000..f4f86f8b --- /dev/null +++ b/pym/gentoolkit/ekeyword/meson.build @@ -0,0 +1,26 @@ + +ekeyword_py = configure_file( + input : 'ekeyword.py', + output : 'ekeyword.py', + configuration : conf_data +) + +py.install_sources( + [ + '__init__.py', + ekeyword_py, + 'test_ekeyword.py', + ], + subdir : 'gentoolkit/ekeyword' +) + +install_data( + [ + 'Makefile', + 'README', + 'pytest.ini', + ], + install_dir : py.get_install_dir() / 'gentoolkit' / 'ekeyword' +) + +subdir('tests') diff --git a/pym/gentoolkit/ekeyword/tests/meson.build b/pym/gentoolkit/ekeyword/tests/meson.build new file mode 100644 index 00000000..39267314 --- /dev/null +++ b/pym/gentoolkit/ekeyword/tests/meson.build @@ -0,0 +1,12 @@ +install_data( + [ + 'process-1.ebuild', + 'profiles/arches-desc/profiles/arch.list', + 'profiles/arches-desc/profiles/arches.desc', + 'profiles/arches-desc/profiles/profiles.desc', + 'profiles/both/profiles/arch.list', + 'profiles/both/profiles/profiles.desc', + ], + preserve_path: true, + install_dir : py.get_install_dir() / 'gentoolkit' / 'ekeyword' / 'tests' +) diff --git a/pym/gentoolkit/enalyze/__init__.py b/pym/gentoolkit/enalyze/__init__.py index 1f099acf..875de2e6 100644 --- a/pym/gentoolkit/enalyze/__init__.py +++ b/pym/gentoolkit/enalyze/__init__.py @@ -12,8 +12,8 @@ __docformat__ = "epytext" -# version is dynamically set by distutils sdist -__version__ = "git" +# version is dynamically set by meson dist +__version__ = "@VERSION@" __productname__ = "enalyze" __authors__ = "Brian Dolbec, " diff --git a/pym/gentoolkit/enalyze/meson.build b/pym/gentoolkit/enalyze/meson.build new file mode 100644 index 00000000..2747677b --- /dev/null +++ b/pym/gentoolkit/enalyze/meson.build @@ -0,0 +1,17 @@ + +__init__py = configure_file( + input : '__init__.py', + output : '__init__.py', + configuration : conf_data +) + +py.install_sources( + [ + __init__py, + 'analyze.py', + 'lib.py', + 'output.py', + 'rebuild.py', + ], + subdir : 'gentoolkit/enalyze' +) diff --git a/pym/gentoolkit/equery/__init__.py b/pym/gentoolkit/equery/__init__.py index 15a9b6a0..7beb6319 100644 --- a/pym/gentoolkit/equery/__init__.py +++ b/pym/gentoolkit/equery/__init__.py @@ -6,8 +6,8 @@ __all__ = ("format_options", "format_package_names", "mod_usage") __docformat__ = "epytext" -# version is dynamically set by distutils sdist -__version__ = "git" +# version is dynamically set by meson dist +__version__ = "@VERSION@" # ======= # Imports diff --git a/pym/gentoolkit/equery/meson.build b/pym/gentoolkit/equery/meson.build new file mode 100644 index 00000000..e6a02c86 --- /dev/null +++ b/pym/gentoolkit/equery/meson.build @@ -0,0 +1,26 @@ + +__init__py = configure_file( + input : '__init__.py', + output : '__init__.py', + configuration : conf_data +) + +py.install_sources( + [ + __init__py, + 'belongs.py', + 'check.py', + 'depends.py', + 'depgraph.py', + 'files.py', + 'has.py', + 'hasuse.py', + 'keywords.py', + 'list_.py', + 'meta.py', + 'size.py', + 'uses.py', + 'which.py', + ], + subdir : 'gentoolkit/equery' +) diff --git a/pym/gentoolkit/eshowkw/__init__.py b/pym/gentoolkit/eshowkw/__init__.py index 1aa69824..0d65733d 100644 --- a/pym/gentoolkit/eshowkw/__init__.py +++ b/pym/gentoolkit/eshowkw/__init__.py @@ -2,7 +2,7 @@ # Distributed under the terms of the GNU General Public License v2 __package__ = "gentoolkit.eshowkw" -__version__ = "git" +__version__ = "@VERSION@" __author__ = "Tomáš Chvátal " import sys, os, fnmatch diff --git a/pym/gentoolkit/eshowkw/meson.build b/pym/gentoolkit/eshowkw/meson.build new file mode 100644 index 00000000..b7a838e1 --- /dev/null +++ b/pym/gentoolkit/eshowkw/meson.build @@ -0,0 +1,16 @@ + +__init__py = configure_file( + input : '__init__.py', + output : '__init__.py', + configuration : conf_data +) + +py.install_sources( + [ + __init__py, + 'display_pretty.py', + 'keywords_content.py', + 'keywords_header.py' + ], + subdir : 'gentoolkit/eshowkw' +) diff --git a/pym/gentoolkit/imlate/imlate.py b/pym/gentoolkit/imlate/imlate.py index 1db322a0..0c7ab047 100755 --- a/pym/gentoolkit/imlate/imlate.py +++ b/pym/gentoolkit/imlate/imlate.py @@ -4,7 +4,7 @@ # $Id$ # Author: Christian Ruppert -__version__ = "git" +__version__ = "@VERSION@" # works just with stable keywords! MAIN_ARCH = "auto" # can be overridden by -m ARCH diff --git a/pym/gentoolkit/imlate/meson.build b/pym/gentoolkit/imlate/meson.build new file mode 100644 index 00000000..5208c235 --- /dev/null +++ b/pym/gentoolkit/imlate/meson.build @@ -0,0 +1,14 @@ + +imlate_py = configure_file( + input : 'imlate.py', + output : 'imlate.py', + configuration : conf_data +) + +py.install_sources( + [ + '__init__.py', + imlate_py, + ], + subdir : 'gentoolkit/imlate' +) diff --git a/pym/gentoolkit/meson.build b/pym/gentoolkit/meson.build new file mode 100644 index 00000000..7908d947 --- /dev/null +++ b/pym/gentoolkit/meson.build @@ -0,0 +1,35 @@ + +py.install_sources( + [ + '__init__.py', + 'atom.py', + 'base.py', + 'cpv.py', + 'dbapi.py', + 'dependencies.py', + 'eprefix.py', + 'errors.py', + 'flag.py', + 'formatters.py', + 'helpers.py', + 'keyword.py', + 'module_base.py', + 'package.py', + 'pprinter.py', + 'profile.py', + 'query.py', + 'sets.py', + 'textwrap_.py', + 'versionmatch.py', + ], + subdir : 'gentoolkit' +) + +subdir('eclean') +subdir('ekeyword') +subdir('enalyze') +subdir('equery') +subdir('eshowkw') +subdir('imlate') +subdir('revdep_rebuild') +subdir('test') diff --git a/pym/gentoolkit/revdep_rebuild/__init__.py b/pym/gentoolkit/revdep_rebuild/__init__.py index 7fba30b1..66a943f2 100644 --- a/pym/gentoolkit/revdep_rebuild/__init__.py +++ b/pym/gentoolkit/revdep_rebuild/__init__.py @@ -3,4 +3,4 @@ # Copyright 2003-2010 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -__version__ = "git" +__version__ = "@VERSION@" diff --git a/pym/gentoolkit/revdep_rebuild/meson.build b/pym/gentoolkit/revdep_rebuild/meson.build new file mode 100644 index 00000000..b73eff81 --- /dev/null +++ b/pym/gentoolkit/revdep_rebuild/meson.build @@ -0,0 +1,21 @@ + +__init__py = configure_file( + input : '__init__.py', + output : '__init__.py', + configuration : conf_data +) + +py.install_sources( + [ + __init__py, + 'analyse.py', + 'assign.py', + 'cache.py', + 'collect.py', + 'rebuild.py', + 'runner.py', + 'settings.py', + 'stuff.py', + ], + subdir : 'gentoolkit/revdep_rebuild' +) diff --git a/pym/gentoolkit/test/eclean/meson.build b/pym/gentoolkit/test/eclean/meson.build new file mode 100644 index 00000000..fa1390b9 --- /dev/null +++ b/pym/gentoolkit/test/eclean/meson.build @@ -0,0 +1,20 @@ +py.install_sources( + [ + '__init__.py', + 'creator.py', + 'distsupport.py', + 'test_clean.py', + 'test_search.py', + ], + subdir : 'gentoolkit/test/eclean' +) + +install_data( + [ + 'Packages', + 'distfiles.exclude', + 'testdistfiles.tar.gz', + ], + preserve_path: true, + install_dir : py.get_install_dir() / 'gentoolkit' / 'test' / 'eclean' +) diff --git a/pym/gentoolkit/test/equery/meson.build b/pym/gentoolkit/test/equery/meson.build new file mode 100644 index 00000000..02a0df21 --- /dev/null +++ b/pym/gentoolkit/test/equery/meson.build @@ -0,0 +1,7 @@ +py.install_sources( + [ + '__init__.py', + 'test_init.py', + ], + subdir : 'gentoolkit/test/equery' +) diff --git a/pym/gentoolkit/test/meson.build b/pym/gentoolkit/test/meson.build new file mode 100644 index 00000000..2d8c0e76 --- /dev/null +++ b/pym/gentoolkit/test/meson.build @@ -0,0 +1,16 @@ +py.install_sources( + [ + '__init__.py', + 'test_atom.py', + 'test_cpv.py', + 'test_helpers.py', + 'test_keyword.py', + 'test_profile.py', + 'test_query.py', + 'test_syntax.py', + ], + subdir : 'gentoolkit/test' +) + +subdir('eclean') +subdir('equery') diff --git a/pym/meson.build b/pym/meson.build new file mode 100644 index 00000000..9b1b354d --- /dev/null +++ b/pym/meson.build @@ -0,0 +1 @@ +subdir('gentoolkit') diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..fae23b5e --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,17 @@ +[project] +name = 'gentoolkit' +dynamic = ['version'] +description = 'Collection of administration scripts for Gentoo' +readme = 'README.md' +requires-python = '>=3.9' +license = {file = "COPYING"} +authors = [ + {name = 'Gentoo Portage tools team', email = 'tools-portage@gentoo.org'}, +] + +[build-system] +build-backend = 'mesonpy' +requires = ['meson-python'] + +[tool.meson-python.args] +setup = ['-Dsystem-wide=false'] diff --git a/setup.py b/setup.py deleted file mode 100755 index 6299ac84..00000000 --- a/setup.py +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/bin/env python - -import re -import sys -import subprocess -from distutils import core -from distutils.cmd import Command -from glob import glob - -import os -import io - -sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "pym")) - -if (len(sys.argv) > 2) and (sys.argv[1] == "set_version"): - __version__ = sys.argv[2] -else: - __version__ = os.getenv("VERSION", default=os.getenv("PVR", default="9999")) - -cwd = os.getcwd() - -# Load EPREFIX from Portage, fall back to the empty string if it fails -try: - from portage.const import EPREFIX -except ImportError: - EPREFIX = "" - - -# Bash files that need `VERSION=""` subbed, relative to this dir: -bash_scripts = [ - (os.path.join(cwd, path), "VERSION=") - for path in ("bin/ebump", "bin/euse", "bin/revdep-rebuild.sh") -] - -# Python files that need `__version__ = ""` subbed, relative to this dir: -python_scripts = [ - (os.path.join(cwd, path), "__version__ = ") - for path in ( - "bin/eclean", - "bin/eclean-dist", - "bin/eclean-pkg", - "bin/epkginfo", - "pym/gentoolkit/eclean/cli.py", - "pym/gentoolkit/enalyze/__init__.py", - "pym/gentoolkit/ekeyword/ekeyword.py", - "pym/gentoolkit/equery/__init__.py", - "pym/gentoolkit/eshowkw/__init__.py", - "pym/gentoolkit/imlate/imlate.py", - "pym/gentoolkit/revdep_rebuild/__init__.py", - ) -] - -manpages = [ - (os.path.join(cwd, path[0]), path[1]) - for path in ( - ("man/ebump.1", "EBUMP"), - ("man/eclean.1", "ECLEAN"), - ("man/enalyze.1", "ENALYZE"), - ("man/epkginfo.1", "EPKGINFO"), - ("man/equery.1", "EQUERY"), - ("man/eread.1", "EREAD"), - ("man/eshowkw.1", "ESHOWKW"), - ("man/euse.1", "EUSE"), - ("man/imlate.1", "IMLATE"), - ("man/revdep-rebuild.1", "REVDEP-REBUILD"), - ) -] - - -class set_version(core.Command): - """Set python __version__ and bash VERSION to our __version__.""" - - description = "hardcode scripts' version using VERSION from environment" - user_options = [] # [(long_name, short_name, desc),] - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - ver = "git" if __version__ == "9999" else __version__ - print("Setting version to %s" % ver) - - def sub(files, pattern): - for f in files: - updated_file = [] - with open(f[0], "r", 1, "utf_8") as s: - for line in s: - newline = re.sub(pattern % f[1], '"%s"' % ver, line, 1) - updated_file.append(newline) - with open(f[0], "w", 1, "utf_8") as s: - s.writelines(updated_file) - - quote = r'[\'"]{1}' - bash_re = r"(?<=%s)" + quote + "[^'\"]*" + quote - sub(bash_scripts, bash_re) - python_re = r"(?<=^%s)" + quote + "[^'\"]*" + quote - sub(python_scripts, python_re) - man_re = r'(?<=^.TH "%s" "[0-9]" )' + quote + "[^'\"]*" + quote - sub(manpages, man_re) - - -class TestCommand(Command): - user_options = [] - - def initialize_options(self): - pass - - def finalize_options(self): - pass - - def run(self): - args = [sys.executable, "-m", "unittest", "discover", "pym"] - raise SystemExit(subprocess.call(args)) - - -packages = [ - str(".".join(root.split(os.sep)[1:])) - for root, dirs, files in os.walk("pym/gentoolkit") - if "__init__.py" in files -] - -test_data = { - "gentoolkit": [ - "test/eclean/Packages", - "test/eclean/testdistfiles.tar.gz", - "test/eclean/distfiles.exclude", - ] -} - -core.setup( - name="gentoolkit", - version=__version__, - description="Set of tools that work with and enhance portage.", - author="", - author_email="", - maintainer="Gentoo Portage Tools Team", - maintainer_email="tools-portage@gentoo.org", - url="http://www.gentoo.org/proj/en/portage/tools/index.xml", - download_url="http://distfiles.gentoo.org/distfiles/gentoolkit-%s.tar.gz" - % __version__, - package_dir={"": "pym"}, - packages=packages, - package_data=test_data, - scripts=(glob("bin/*")), - data_files=( - ( - os.path.join(os.sep, EPREFIX.lstrip(os.sep), "etc/env.d"), - ["data/99gentoolkit-env"], - ), - ( - os.path.join(os.sep, EPREFIX.lstrip(os.sep), "etc/revdep-rebuild"), - ["data/revdep-rebuild/99revdep-rebuild"], - ), - ( - os.path.join(os.sep, EPREFIX.lstrip(os.sep), "etc/eclean"), - glob("data/eclean/*"), - ), - ( - os.path.join(os.sep, EPREFIX.lstrip(os.sep), "usr/share/man/man1"), - glob("man/*"), - ), - ( - os.path.join(os.sep, EPREFIX.lstrip(os.sep), "usr/lib/tmpfiles.d"), - ["data/tmpfiles.d/revdep-rebuild.conf"], - ), - ), - cmdclass={ - "test": TestCommand, - "set_version": set_version, - }, -) - -# vim: set ts=4 sw=4 tw=79: