diff --git a/0001-Force-legacy-datestamp-while-RHBZ-1715412-is-still-a.patch b/0001-Force-legacy-datestamp-while-RHBZ-1715412-is-still-a.patch deleted file mode 100644 index f59bdfd..0000000 --- a/0001-Force-legacy-datestamp-while-RHBZ-1715412-is-still-a.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 4a4693c842b6da5d66e3a6bdb1eb7914d2402f7f Mon Sep 17 00:00:00 2001 -From: Neal Gompa -Date: Wed, 20 Jan 2021 06:50:03 -0500 -Subject: [PATCH] Force legacy datestamp while RHBZ#1715412 is still an issue - ---- - rpmdev-bumpspec | 2 +- - rpmdev-newspec.in | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/rpmdev-bumpspec b/rpmdev-bumpspec -index dc4eb05..3e18b41 100755 ---- a/rpmdev-bumpspec -+++ b/rpmdev-bumpspec -@@ -300,7 +300,7 @@ the Free Software Foundation; either version 2 of the License, or - parser.add_option("-n", "--new", - help="set new version and reset/set release " - "(simple spec files only)") -- parser.add_option("-D", "--legacy-datestamp", default=False, action='store_true', -+ parser.add_option("-D", "--legacy-datestamp", default=True, action='store_true', - help="use legacy datestamp for changelog entries") - parser.add_option("-d", "--datestamp", - help="changelog date string (default: today)") -diff --git a/rpmdev-newspec.in b/rpmdev-newspec.in -index 27af10f..a083dd9 100644 ---- a/rpmdev-newspec.in -+++ b/rpmdev-newspec.in -@@ -293,7 +293,7 @@ if [[ $NEWSPEC_PREFER_MACROS ]] ; then - " - fi - --if [[ $rpmver -ge 41400 ]] && [[ -z $NEWSPEC_LEGACY_DATESTAMP ]] ; then # >= 4.14 (RHEL >= 8, Fedora >= 27) -+if [[ $rpmver -ge 41400 ]] && [[ $(/bin/false) ]] ; then # >= 4.14 (RHEL >= 8, Fedora >= 27) - chlog="s|^%changelog\\s*|%changelog\\n* $(LC_ALL=C date +'%a %b %d %T %Z %Y') $(rpmdev-packager)\\n- |Mg" - else - chlog="s|^%changelog\\s*|%changelog\\n* $(LC_ALL=C date --utc +'%a %b %d %Y') $(rpmdev-packager)\\n- |Mg" --- -2.29.2 - diff --git a/0002-rpmdevtools-git-83b35ac.patch b/0002-rpmdevtools-git-83b35ac.patch deleted file mode 100644 index ff616da..0000000 --- a/0002-rpmdevtools-git-83b35ac.patch +++ /dev/null @@ -1,531 +0,0 @@ -diff --git a/Makefile.am b/Makefile.am -index bb6f7c6..d55f397 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -15,7 +15,7 @@ man8_MANS = rpmdev-rmdevelrpms.8 - dist_pkgsysconf_DATA = curlrc newspec.conf rmdevelrpms.conf \ - spectemplate-lib.spec spectemplate-minimal.spec \ - spectemplate-perl.spec spectemplate-php-pear.spec \ -- spectemplate-python.spec spectemplate-ruby.spec \ -+ spectemplate-python.spec spectemplate-pyproject.spec spectemplate-ruby.spec \ - spectemplate-ocaml.spec spectemplate-R.spec spectemplate-dummy.spec \ - template.init - -diff --git a/rpmdev-bumpspec b/rpmdev-bumpspec -index b8f4047..5a6a909 100755 ---- a/rpmdev-bumpspec -+++ b/rpmdev-bumpspec -@@ -27,8 +27,10 @@ import time - - try: - from rpmautospec import specfile_uses_rpmautospec -+ from rpmautospec.subcommands.release import calculate_release_number - except ImportError: - specfile_uses_rpmautospec = None -+ calculate_release_number = None - - __version__ = "1.0.13" - -@@ -378,19 +380,25 @@ the Free Software Foundation; either version 2 of the License, or - # Not actually a parser error, but... meh. - parser.error(e) - -- uses_rpmautospec = False -+ uses_rpmautospec_autorelease = uses_rpmautospec_autochangelog = False - if specfile_uses_rpmautospec: -- uses_rpmautospec = specfile_uses_rpmautospec( -+ uses_rpmautospec_autorelease = specfile_uses_rpmautospec( - specpath=s.filename, - check_autorelease=True, - check_autochangelog=False - ) -+ uses_rpmautospec_autochangelog = specfile_uses_rpmautospec( -+ specpath=s.filename, -+ check_autorelease=False, -+ check_autochangelog=True -+ ) - -- if uses_rpmautospec: -+ changed = False -+ if uses_rpmautospec_autorelease: - if opts.new: - print("RPMAutoSpec usage detected, only setting Version.") - changed = s.newVersion(opts.new, set_release=False) -- else: -+ elif uses_rpmautospec_autochangelog: - print("RPMAutoSpec usage detected, not changing the spec file.") - continue - else: -@@ -405,14 +413,12 @@ the Free Software Foundation; either version 2 of the License, or - - changed = True - -- # If we didn't change anything, no need to write and modify the -- # changelog. - if changed: -+ # Write out changed version or release if changed. - s.writeFile(aspec) -- else: -- continue - -- if uses_rpmautospec: -+ if uses_rpmautospec_autochangelog: -+ print("RPMAutospec %autochangelog is used, no need to add %changelog entry.") - continue - - if not s.checkChangelogPresence(): -@@ -422,6 +428,10 @@ the Free Software Foundation; either version 2 of the License, or - # Get EVR for changelog entry. - cmd = ("rpm", "-q", "--specfile", "--define", "dist %{nil}", - "--qf=%|epoch?{%{epoch}:}:{}|%{version}-%{release}\n", aspec) -+ if not opts.new and calculate_release_number and uses_rpmautospec_autorelease: -+ # Rpmautospec doesn’t see a change yet so the calculated number will be one too low. -+ release_number = calculate_release_number(aspec) + 1 -+ cmd += ("--define", "_rpmautospec_release_number {}".format(release_number)) - popen = subprocess.Popen(cmd, stdout=subprocess.PIPE) - evr = popen.communicate()[0].split(b"\n")[0] - if sys.version_info[0] > 2: -diff --git a/rpmdev-spectool b/rpmdev-spectool -index 1d57256..2c06ef8 100755 ---- a/rpmdev-spectool -+++ b/rpmdev-spectool -@@ -25,7 +25,9 @@ import os - import tempfile - import time - from collections import OrderedDict --from typing import Optional -+from typing import Any, Callable, Dict, List, Optional -+from typing import OrderedDict as OrderedDictT -+from typing import Tuple - from urllib.parse import urlparse - - import progressbar -@@ -46,13 +48,13 @@ anything about missing sources or patches). The plan is to catch errors like - this in spectool itself and warn the user about it in the future.""" - - --def complete_spec_paths(prefix, **kwargs): -+def complete_spec_paths(prefix, **kwargs) -> List[str]: - import glob - - return glob.glob(prefix + "*.spec") - - --def get_args() -> dict: -+def get_args() -> Dict[str, Any]: - try: - import argcomplete - except ImportError: -@@ -191,6 +193,15 @@ def get_args() -> dict: - help="output debug info, don't clean up when done", - ) - -+ misc.add_argument( -+ "--http-header", -+ "-H", -+ action="append", -+ dest="headers", -+ default=[], -+ help="Optionally add custom headers", -+ ) -+ - specfile = parser.add_argument("specfile", action="store") - - if argcomplete: -@@ -202,17 +213,17 @@ def get_args() -> dict: - return vars(parser.parse_args()) - - --def split_numbers(args: str) -> list: -+def split_numbers(args: str) -> List[str]: - return args.split(",") - - - # simple streamed file download progress tracker inspired by requests_download - class ProgressTracker: -- def __init__(self, progress_bar: progressbar.ProgressBar): -+ def __init__(self, progress_bar: progressbar.ProgressBar) -> None: - self.progress_bar = progress_bar - self.received = 0 - -- def on_start(self, response: requests.Response): -+ def on_start(self, response: requests.Response) -> None: - max_value = None - - if "content-length" in response.headers: -@@ -221,7 +232,7 @@ class ProgressTracker: - self.progress_bar.start(max_value=max_value) - self.received = 0 - -- def on_chunk(self, chunk: bytes): -+ def on_chunk(self, chunk: bytes) -> None: - self.received += len(chunk) - - try: -@@ -229,12 +240,13 @@ class ProgressTracker: - except ValueError: - pass - -- def on_finish(self): -+ def on_finish(self) -> None: - self.progress_bar.finish() - - - # simple streamed file download implementation inspired by requests_download --def download(url, target, headers=None, tracker: Optional[ProgressTracker] = None): -+def download(url, target, headers=None, -+ tracker: Optional[ProgressTracker] = None) -> None: - if headers is None: - headers = {} - -@@ -263,7 +275,8 @@ def download(url, target, headers=None, tracker: Optional[ProgressTracker] = Non - tracker.on_finish() - - --def get_file(url: str, path: str, force: bool) -> bool: -+def get_file(url: str, path: str, force: bool, -+ headers: Optional[Dict[str, str]] = None) -> bool: - if os.path.exists(path): - if force: - os.remove(path) -@@ -272,13 +285,13 @@ def get_file(url: str, path: str, force: bool) -> bool: - return False - - progress = ProgressTracker(progressbar.DataTransferBar()) -- download(url, path, tracker=progress) -+ download(url, path, tracker=progress, headers=headers) - - return True - - - class Spec: -- def __init__(self, path: str): -+ def __init__(self, path: str) -> None: - self.path = path - self.spec = rpm.spec(self.path) - -@@ -289,10 +302,10 @@ class Spec: - self.files = list(self.spec.sources) - self.files.sort(key=(lambda file: file[1])) - -- self._sources = None -- self._patches = None -+ self._sources: Optional[OrderedDictT[str, str]] = None -+ self._patches: Optional[OrderedDictT[str, str]] = None - -- def _files(self, typ) -> OrderedDict: -+ def _files(self, typ: int) -> OrderedDictT[str, str]: - # file is a 3-tuple of (path, number, type) - # type 1: source file - # type 2: patch file -@@ -305,41 +318,42 @@ class Spec: - return files - - @property -- def sources(self) -> OrderedDict: -+ def sources(self) -> OrderedDictT[str, str]: - if not self._sources: - self._sources = self._files(1) - - return self._sources - - @property -- def patches(self) -> OrderedDict: -+ def patches(self) -> OrderedDictT[str, str]: - if not self._patches: - self._patches = self._files(2) - - return self._patches - -- def print_source(self, number: int, value: str = None): -+ def print_source(self, number: str, value: Optional[str] = None) -> None: - if not value: - value = self.sources[number] - - print("Source{}: {}".format(number, value)) - -- def print_patch(self, number: int, value: str = None): -+ def print_patch(self, number: str, value: Optional[str] = None) -> None: - if not value: - value = self.patches[number] - - print("Patch{}: {}".format(number, value)) - -- def list_sources(self): -+ def list_sources(self) -> None: - for (number, value) in self.sources.items(): - self.print_source(number, value) - -- def list_patches(self): -+ def list_patches(self) -> None: - for (number, value) in self.patches.items(): - self.print_patch(number, value) - - @staticmethod -- def _get_file(value: str, directory: str, force: bool, dry: bool): -+ def _get_file(value: str, directory: str, force: bool, dry: bool, -+ headers: Optional[Dict[str, str]] = None) -> None: - parsed = urlparse(value) - - if "#" not in value: -@@ -354,19 +368,23 @@ class Spec: - return - - if parsed.scheme: -+ if dry: -+ print("Would have downloaded: {}".format(value)) -+ return None - if not dry: - path = os.path.join(directory, basename) - - try: - print("Downloading: {}".format(value)) - os.makedirs(directory, exist_ok=True) -- really = get_file(value, path, force) -+ really = get_file(value, path, force, headers=headers) - if really: - print("Downloaded: {}".format(basename)) - - except IOError as e: - print("Download failed:") - print(e) -+ raise e - - except KeyboardInterrupt: - if os.path.isfile(path): -@@ -376,28 +394,53 @@ class Spec: - print("Download cancelled.") - raise - -- else: -- print("Would have downloaded: {}".format(value)) -- -- def get_source(self, number: int, directory: str, force: bool, dry: bool, value: str = None): -+ def get_source(self, number: str, directory: str, force: bool, dry: bool, -+ value: Optional[str] = None, -+ headers: Optional[Dict[str, str]] = None) -> bool: - if not value: - value = self.sources[number] - -- self._get_file(value, directory, force, dry) -+ try: -+ self._get_file(value, directory, force, dry, headers=headers) -+ return False -+ -+ except IOError: -+ return True - -- def get_patch(self, number: int, directory: str, force: bool, dry: bool, value: str = None): -+ def get_patch(self, number: str, directory: str, force: bool, dry: bool, -+ value: Optional[str] = None, -+ headers: Optional[Dict[str, str]] = None) -> bool: - if not value: - value = self.patches[number] - -- self._get_file(value, directory, force, dry) -+ try: -+ self._get_file(value, directory, force, dry, headers=headers) -+ return False -+ -+ except IOError: -+ return True -+ -+ def get_sources(self, directory: str, force: bool, dry: bool, -+ headers: Optional[Dict[str, str]] = None): -+ failure = False - -- def get_sources(self, directory: str, force: bool, dry: bool): - for number, value in self.sources.items(): -- self.get_source(number, directory, force, dry, value) -+ if self.get_source(number, directory, force, dry, value, -+ headers=headers): -+ failure = True -+ -+ return failure -+ -+ def get_patches(self, directory: str, force: bool, dry: bool, -+ headers: Optional[Dict[str, str]] = None): -+ failure = False - -- def get_patches(self, directory: str, force: bool, dry: bool): - for number, value in self.patches.items(): -- self.get_patch(number, directory, force, dry, value) -+ if self.get_patch(number, directory, force, dry, value, -+ headers=headers): -+ failure = True -+ -+ return failure - - - def main() -> int: -@@ -484,6 +527,10 @@ def main() -> int: - if args["get_files"]: - force = args["force"] - dry = args["dry_run"] -+ headers = {} -+ for header in args["headers"]: -+ k, sep, v = header.partition(':') -+ headers[k.strip()] = v.strip() - - if args["directory"] and args["sourcedir"]: - print("Conflicting requests for download directory.") -@@ -496,18 +543,21 @@ def main() -> int: - else: - directory = os.getcwd() - -+ tasks: List[Tuple[Callable[..., bool], Tuple[Any, ...]]] = [] -+ - if args["source"]: - numbers = split_numbers(args["source"]) - - for number in numbers: - if number not in spec.sources.keys(): -- print("No patch with number '{}' found.".format(number)) -+ print("No source with number '{}' found.".format(number)) - continue - -- spec.get_source(number, directory, force, dry) -+ tasks.append((spec.get_source, (number, directory, force, dry, -+ headers))) - - elif args["sources"] and not args["patch"]: -- spec.get_sources(directory, force, dry) -+ tasks.append((spec.get_sources, (directory, force, dry, headers))) - - if args["patch"]: - numbers = split_numbers(args["patch"]) -@@ -517,10 +567,22 @@ def main() -> int: - print("No patch with number '{}' found.".format(number)) - continue - -- spec.get_patch(number, directory, force, dry) -+ tasks.append((spec.get_patch, (number, directory, force, dry, -+ headers))) - - elif args["patches"] and not args["source"]: -- spec.get_patches(directory, force, dry) -+ tasks.append((spec.get_patches, (directory, force, dry, headers))) -+ -+ failure = False -+ -+ for task, fargs in tasks: -+ fail = task(*fargs) -+ -+ if fail: -+ failure = True -+ -+ if failure: -+ return 1 - - return 0 - -diff --git a/spectemplate-cmake.spec b/spectemplate-cmake.spec -new file mode 100644 -index 0000000..0cdcbb8 ---- /dev/null -+++ b/spectemplate-cmake.spec -@@ -0,0 +1,38 @@ -+Name: -+Version: -+Release: 1%{?dist} -+Summary: -+ -+License: -+URL: -+Source0: -+ -+BuildRequires: cmake -+ -+%description -+%{summary}. -+ -+ -+%prep -+%autosetup -q -+ -+ -+%build -+%cmake -+%cmake_build -+ -+ -+%install -+%cmake_install -+ -+ -+%check -+%ctest -+ -+ -+%files -+%license add-license-file-here -+%doc add-docs-here -+ -+ -+%changelog -diff --git a/spectemplate-pyproject.spec b/spectemplate-pyproject.spec -new file mode 100644 -index 0000000..15d5a65 ---- /dev/null -+++ b/spectemplate-pyproject.spec -@@ -0,0 +1,60 @@ -+Name: python-... -+Version: ... -+Release: 1%{?dist} -+Summary: ... -+ -+License: ... -+URL: https://... -+# use a source from git forge or PyPI: -+Source: %{url}/archive/v%{version}/...-%{version}.tar.gz / %{pypi_source ...} -+ -+# for pure Python packages: -+BuildArch: noarch -+# for packages with extension modules: -+BuildRequires: gcc -+ -+BuildRequires: python3-devel -+ -+%global _description %{expand: -+...} -+ -+%description %_description -+ -+%package -n python3-... -+Summary: %{summary} -+ -+%description -n python3-... %_description -+ -+ -+%prep -+%autosetup -p1 -n ...-%{version} -+ -+ -+%generate_buildrequires -+# use the appropriate flags to get all test dependencies: -+%pyproject_buildrequires -x... / -t -+ -+ -+%build -+%pyproject_wheel -+ -+ -+%install -+%pyproject_install -+# list the installed top-level Python module names: -+%pyproject_save_files ... -+ -+ -+%check -+# testing the package is mandatory, at least somehow: -+%tox / %pytest / %pyproject_check_import ... -+ -+ -+%files -n python3-... -f %{pyproject_files} -+%doc README.* -+# only add LICENSE / COPYING if not included in %%{pyproject_files} -+%license LICENSE / COPYING -+%{_bindir}/... -+ -+ -+%changelog diff --git a/progressbar.py b/progressbar.py deleted file mode 100644 index c822e29..0000000 --- a/progressbar.py +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/python3 -# -*- coding: utf-8 -*- -# -# A simple text-based progress bar, compatible with the basic API of: -# https://github.com/WoLpH/python-progressbar -# -# Copyright (C) 2021 Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program 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 General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -# USA. - - -import shutil -import sys -import time - - -class ProgressBar: - FORMAT = '{value:>10} / {max_value:<10} [{bars}]' - BARS = '= ' - SPINLEN = 5 - - def __init__(self, stream=sys.stderr, max_width=80, fps=10): - self._stream = stream - self._max_width = max_width - self._min_delay = 1 / fps - - @staticmethod - def _format_value(value): - raise NotImplementedError() - - def start(self, max_value): - self._value = 0 - self._max_value = max_value or 0 - self._status = dict() - self._spinner = 0 - self._timestamp = 0 - self.update(0) - - def update(self, value): - self._value = value - if value > self._max_value: - self._max_value = 0 - - ts = time.time() - if (ts - self._timestamp) < self._min_delay: - return - self._timestamp = ts - - status = {'value': self._format_value(value), - 'max_value': self._format_value(self._max_value) \ - if self._max_value else '???', - 'bars': ''} - - termw = min(shutil.get_terminal_size()[0], self._max_width) - nbars = max(termw - len(self.FORMAT.format(**status)), 0) - nfill = nskip = 0 - - if self._max_value: - nfill = round(nbars * value / self._max_value) - elif nbars > self.SPINLEN: - nfill = self.SPINLEN - nskip = self._spinner % (nbars - self.SPINLEN) - self._spinner = nskip + 1 - - status['bars'] = self.BARS[1] * nskip + \ - self.BARS[0] * nfill + \ - self.BARS[1] * (nbars - nfill - nskip) - - if status == self._status: - return - self._status = status - - self._stream.write('\r') - self._stream.write(self.FORMAT.format(**self._status)) - self._stream.flush() - - def finish(self): - self._max_value = self._value - self._timestamp = 0 # Force an update - self.update(self._value) - - self._stream.write('\n') - self._stream.flush() - - -class DataTransferBar(ProgressBar): - @staticmethod - def _format_value(value): - symbols = ' KMGTPEZY' - depth = 0 - max_depth = len(symbols) - 1 - unit = 1024.0 - - # 1023.95 should be formatted as 1.0 (not 1024.0) - # More info: https://stackoverflow.com/a/63839503 - thres = unit - 0.05 - - while value >= thres and depth < max_depth: - depth += 1 - value /= unit - symbol = ' %siB' % symbols[depth] if depth > 0 else '' - - return '%.1f%s' % (value, symbol) - - -if __name__ == '__main__': - # Show a dummy bar for debugging purposes - - bar = DataTransferBar() - size = 50*1024*1024 - chunk = 1024*1234 - recvd = 0 - - bar.start(size) - while recvd < (size - chunk): - recvd += chunk - bar.update(recvd) - time.sleep(0.1) - bar.update(size) - bar.finish() diff --git a/rpmdevtools-9.5-no_qa_robot.patch b/rpmdevtools-9.5-no_qa_robot.patch deleted file mode 100644 index 1e17765..0000000 --- a/rpmdevtools-9.5-no_qa_robot.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff -up rpmdevtools-9.5/Makefile.am.orig rpmdevtools-9.5/Makefile.am ---- rpmdevtools-9.5/Makefile.am.orig 2021-12-10 11:37:29.889405680 +0100 -+++ rpmdevtools-9.5/Makefile.am 2021-12-10 11:37:34.637495820 +0100 -@@ -1,4 +1,4 @@ --SUBDIRS = emacs qa-robot -+SUBDIRS = emacs - - pkgsysconfdir = $(sysconfdir)/rpmdevtools - bashcompdir = @bashcompdir@ -diff -up rpmdevtools-9.5/Makefile.in.orig rpmdevtools-9.5/Makefile.in ---- rpmdevtools-9.5/Makefile.in.orig 2021-12-10 11:37:31.073428158 +0100 -+++ rpmdevtools-9.5/Makefile.in 2021-12-10 11:37:38.304565439 +0100 -@@ -317,7 +317,7 @@ target_alias = @target_alias@ - top_build_prefix = @top_build_prefix@ - top_builddir = @top_builddir@ - top_srcdir = @top_srcdir@ --SUBDIRS = emacs qa-robot -+SUBDIRS = emacs - pkgsysconfdir = $(sysconfdir)/rpmdevtools - bin_SCRIPTS = rpmdev-newinit rpmdev-newspec rpmdev-rmdevelrpms - dist_bin_SCRIPTS = rpmdev-checksig rpmdev-diff rpmdev-extract rpmdev-md5 \ diff --git a/rpmdevtools.spec b/rpmdevtools.spec index 86879d9..b634a07 100644 --- a/rpmdevtools.spec +++ b/rpmdevtools.spec @@ -1,63 +1,47 @@ +%global spectool_version 1.0.10 + Name: rpmdevtools -Version: 9.6 -Release: 13%{?dist} +Version: 8.6 +Release: 1%{?dist} Summary: RPM Development Tools -# rpmdev-md5 and rpmdev-setuptree are GPL-2.0-only, -# everything else is GPL-2.0-or-later. -License: GPL-2.0-or-later AND GPL-2.0-only -URL: https://pagure.io/rpmdevtools -Source0: https://releases.pagure.org/rpmdevtools/%{name}-%{version}.tar.xz -Source1: progressbar.py - -# Fedora-specific downstream patches -## Force legacy datestamp by default until rhbz#1715412 is resolved -Patch1001: 0001-Force-legacy-datestamp-while-RHBZ-1715412-is-still-a.patch - -# RHEL-specific downstream patches -## Remove fakeroot dependency (rhbz#1905465) -Patch2001: rpmdevtools-9.5-no_qa_robot.patch +# rpmdev-setuptree is GPLv2, everything else GPLv2+ +License: GPLv2+ and GPLv2 +URL: https://fedorahosted.org/rpmdevtools/ +Source0: https://fedorahosted.org/released/rpmdevtools/%{name}-%{version}.tar.xz BuildArch: noarch # help2man, pod2man, *python for creating man pages -BuildRequires: make BuildRequires: help2man BuildRequires: %{_bindir}/pod2man -BuildRequires: perl-generators -# python dependencies for spectool -# spectool is executed for creating man page -BuildRequires: python3-devel -%if ! 0%{?rhel} -BuildRequires: python3dist(progressbar2) -%endif -BuildRequires: python3dist(requests) -BuildRequires: python3dist(rpm) +BuildRequires: python >= 2.6 +BuildRequires: rpm-python # emacs-common >= 1:22.3-3 for macros.emacs BuildRequires: emacs-common >= 1:22.3-3 BuildRequires: bash-completion +%if 0%{?fedora} +# xemacs-common >= 21.5.29-8 for macros.xemacs +BuildRequires: xemacs-common >= 21.5.29-8 +%endif +Provides: spectool = %{spectool_version} Requires: curl Requires: diffutils -%if ! 0%{?rhel} Requires: fakeroot -%endif Requires: file Requires: findutils Requires: gawk Requires: grep +Requires: python >= 2.4 Requires: rpm-build >= 4.4.2.3 -Requires: python3dist(argcomplete) -%if ! 0%{?rhel} -Requires: python3dist(progressbar2) -%endif -Requires: python3dist(requests) -Requires: python3dist(rpm) +Requires: rpm-python Requires: sed Requires: emacs-filesystem -# Optionally support rpmautospec -Recommends: python%{python3_version}dist(rpmautospec) +%if 0%{?fedora} +Requires: xemacs-filesystem +%endif %description -This package contains scripts and Emacs support files to aid in +This package contains scripts and (X)Emacs support files to aid in development of RPM packages. rpmdev-setuptree Create RPM build tree within user's home directory rpmdev-diff Diff contents of two archives @@ -67,7 +51,7 @@ rpmdev-checksig Check package signatures using alternate RPM keyring rpminfo Print information about executables and libraries rpmdev-md5/sha* Display checksums of all files in an archive file rpmdev-vercmp RPM version comparison checker -rpmdev-spectool Expand and download sources and patches in specfiles +spectool Expand and download sources and patches in specfiles rpmdev-wipetree Erase all files within dirs created by rpmdev-setuptree rpmdev-extract Extract various archives, "tar xvf" style rpmdev-bumpspec Bump revision in specfile @@ -75,52 +59,36 @@ rpmdev-bumpspec Bump revision in specfile %prep -%autosetup -N -%autopatch -p1 %{!?rhel:-M2000} -grep -lF "%{_bindir}/python " * \ -| xargs sed -i -e "s|%{_bindir}/python |%{_bindir}/python3 |" - -%if 0%{?rhel} -# Let spectool find the bundled progressbar2 implementation -cp %{SOURCE1} . -sed -i \ -'s|^\(import progressbar\)$|'\ -'import sys\n'\ -'sys.path.insert(1, "%{_datadir}/rpmdevtools")\n'\ -'\1\nsys.path.pop(1)|' \ -rpmdev-spectool -%endif +%setup -q %build %configure --libdir=%{_prefix}/lib -%make_build +make %{?_smp_mflags} %install -%make_install +rm -rf $RPM_BUILD_ROOT + +make install DESTDIR=$RPM_BUILD_ROOT echo %%{_datadir}/bash-completion > %{name}.files -[ -d %{buildroot}%{_sysconfdir}/bash_completion.d ] && \ +[ -d $RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d ] && \ echo %%{_sysconfdir}/bash_completion.d > %{name}.files +%if 0%{?fedora} +for dir in %{_emacs_sitestartdir} %{_xemacs_sitestartdir} ; do +%else for dir in %{_emacs_sitestartdir} ; do - install -dm 755 %{buildroot}$dir - ln -s %{_datadir}/rpmdevtools/rpmdev-init.el %{buildroot}$dir - touch %{buildroot}$dir/rpmdev-init.elc -done - -# For backwards compatibility -ln -sr %{buildroot}%{_bindir}/rpmdev-spectool %{buildroot}%{_bindir}/spectool -echo ".so man1/rpmdev-spectool.1" > %{buildroot}%{_mandir}/man1/spectool.1 - -%if 0%{?rhel} -cp %{SOURCE1} %{buildroot}%{_datadir}/rpmdevtools/ -%py_byte_compile %{python3} %{buildroot}%{_datadir}/rpmdevtools/ %endif + install -dm 755 $RPM_BUILD_ROOT$dir + ln -s %{_datadir}/rpmdevtools/rpmdev-init.el $RPM_BUILD_ROOT$dir + touch $RPM_BUILD_ROOT$dir/rpmdev-init.elc +done %files -f %{name}.files +%{!?_licensedir:%global license %%doc} %license COPYING %doc NEWS %config(noreplace) %{_sysconfdir}/rpmdevtools/ @@ -128,150 +96,14 @@ cp %{SOURCE1} %{buildroot}%{_datadir}/rpmdevtools/ %{_bindir}/* %{_emacs_sitestartdir}/rpmdev-init.el %ghost %{_emacs_sitestartdir}/rpmdev-init.elc +%if 0%{?fedora} +%{_xemacs_sitestartdir}/rpmdev-init.el +%ghost %{_xemacs_sitestartdir}/rpmdev-init.elc +%endif %{_mandir}/man[18]/*.[18]* %changelog -* Sat Aug 09 2025 Fabio Valentini - 9.6-13 -- Revert to last stable release - -* Mon Aug 04 2025 Mark Wielaard - 9.6-12.git83b35ac -- Add BuildRequires for autoreconf, fixes rhbz#2385580 - -* Fri Jul 25 2025 Fedora Release Engineering - 9.6-11.git83b35ac -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Thu Jan 23 2025 Jens Petersen - 9.6-10.git83b35ac -- update to latest git 83b35ac changes - -* Sat Jan 18 2025 Fedora Release Engineering - 9.6-9 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Fri Jul 19 2024 Fedora Release Engineering - 9.6-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Fri Jan 26 2024 Fedora Release Engineering - 9.6-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Mon Jan 22 2024 Fedora Release Engineering - 9.6-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Aug 25 2023 Petr Pisar - 9.6-5 -- Convert a license tag to SPDX format - -* Fri Jul 21 2023 Fedora Release Engineering - 9.6-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Fri Jan 20 2023 Fedora Release Engineering - 9.6-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Sat Jul 23 2022 Fedora Release Engineering - 9.6-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Fri Feb 04 2022 Neal Gompa - 9.6-1 -- Update to 9.6 - -* Fri Jan 21 2022 Fedora Release Engineering - 9.5-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Tue Nov 9 2021 Jerry James - 9.5-3 -- Drop XEmacs support in F36 and later - -* Fri Jul 23 2021 Fedora Release Engineering - 9.5-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Sat Jul 17 2021 Neal Gompa - 9.5-1 -- Update to 9.5 - -* Sat Jul 17 2021 Neal Gompa - 9.4-1 -- Update to 9.4 - -* Mon Feb 15 2021 Miro Hrončok - 9.3-5 -- Require any Python version of the Python packages - -* Wed Jan 27 2021 Fedora Release Engineering - 9.3-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Mon Jan 25 2021 Miro Hrončok - 9.3-3 -- spectool: Download text as text - -* Fri Jan 22 2021 Michal Domonkos - 9.3-2 -- Replace requests-download dependency with requests - -* Wed Jan 20 2021 Neal Gompa - 9.3-1 -- Update to 9.3 -- Force legacy datestamp by default until rhbz#1715412 is resolved - -* Mon Oct 05 2020 Neal Gompa - 9.2-1 -- Update to 9.2 - -* Thu Aug 20 2020 Neal Gompa - 9.1-1 -- Update to 9.1 - -* Wed Jul 29 2020 Fedora Release Engineering - 9.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Thu Jul 16 2020 Neal Gompa - 9.0-2 -- Backport fix for python spec template - -* Tue Jul 14 2020 Neal Gompa - 9.0-1 -- Update to 9.0 - -* Wed Mar 25 2020 Jitka Plesnikova - 8.10-11 -- Add perl dependencies needed for build - -* Thu Jan 30 2020 Fedora Release Engineering - 8.10-10 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Fri Jul 26 2019 Fedora Release Engineering - 8.10-9 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Sat Feb 02 2019 Fedora Release Engineering - 8.10-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Wed Nov 28 2018 Neal Gompa - 8.10-7 -- Fix regex substitution issues with Python 3.7 (rhbz#1651954) - -* Sun Sep 16 2018 Neal Gompa - 8.10-6 -- Fix regex related deprecation warnings (rhbz#1598089) - -* Sat Jul 14 2018 Fedora Release Engineering - 8.10-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Fri Feb 09 2018 Fedora Release Engineering - 8.10-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Thu Jul 27 2017 Fedora Release Engineering - 8.10-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Sat Feb 11 2017 Fedora Release Engineering - 8.10-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Sat Jan 14 2017 Ville Skyttä - 8.10-1 -- Update to 8.10 - -* Mon Dec 19 2016 Miro Hrončok - 8.9-2 -- Rebuild for Python 3.6 - -* Sat Jun 25 2016 Ville Skyttä - 8.9-1 -- Update to 8.9 - -* Sat Jun 25 2016 Ville Skyttä - 8.8-1 -- Update to 8.8 - -* Fri Jun 24 2016 Petr Písař -- Add new mandatory perl build deps - -* Thu Jun 23 2016 Ville Skyttä - 8.7-1 -- Update to 8.7 -- Specfile cleanups - -* Thu Feb 04 2016 Fedora Release Engineering - 8.6-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Fri Jun 5 2015 Ville Skyttä - 8.6-2 -- Use python3 on > F-22 - * Sun May 10 2015 Ville Skyttä - 8.6-1 - Update to 8.6 diff --git a/sources b/sources index 4bb8a6c..679ad55 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (rpmdevtools-9.6.tar.xz) = 691fec8944029dbe60cb3eab0200d1201f5aa3dd11cd49e8313ee7c1fe998237217ea9c5ae7b4a70f61f3c998093f23d26266b23f41607ddca3148d5f6b6ae06 +daee90323a325efee01257c1e9c6aced rpmdevtools-8.6.tar.xz