SHA256
3
0
forked from pool/rpm

Compare commits

..

22 Commits

Author SHA256 Message Date
Ana Guerrero
70c5694e7e Accepting request 1245646 from Base:System
- make the rpm package not depend on libarchive

OBS-URL: https://build.opensuse.org/request/show/1245646
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/rpm?expand=0&rev=319
2025-02-17 19:53:29 +00:00
cecc51591b bah
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=694
2025-02-13 13:24:12 +00:00
989cea873c do not output debug messages in rpmspec -q if a buildsystem is
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=693
2025-02-13 13:22:10 +00:00
e3328aa890 update
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=692
2025-02-13 12:05:44 +00:00
4bb3c1092c - revert buildroot macro setting that did more harm than good
- add set_to_buildtime and set_to_source_date_epoch mtime policy
  support
  * new patch: mtime_policy_set.diff
- drop unused 0001-Add-option-to-set-mtime-of-files-in-rpms.patch
  patch

OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=691
2025-02-12 13:48:37 +00:00
641eb04afc make the rpm package not depend on libarchive
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=690
2025-02-12 12:39:08 +00:00
Ana Guerrero
f606ca2b78 Accepting request 1242814 from Base:System
- allow to have the primary binding signature in the unhashed area

OBS-URL: https://build.opensuse.org/request/show/1242814
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/rpm?expand=0&rev=318
2025-02-05 11:39:26 +00:00
4fc04db9b8 allow to have the primary binding signature in the unhashed area
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=688
2025-02-03 12:18:40 +00:00
Ana Guerrero
16f4e8e67e Accepting request 1241327 from Base:System
update to rpm-4.20.0

OBS-URL: https://build.opensuse.org/request/show/1241327
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/rpm?expand=0&rev=317
2025-01-31 15:01:54 +00:00
601ba77b6d Split unshare plugin configuration into a new "rpm-plugin-unshare" subpackage
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=686
2025-01-30 11:18:45 +00:00
d23997fd8c - enable config.guess/sub update also for loongarch64 architecture
- update config.guess/sub files to current state from autoconf-2.72

OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=685
2025-01-30 11:02:10 +00:00
1eda1f7aa8 make misuses of %global with %buildroot work again
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=684
2025-01-07 09:59:56 +00:00
0bccf0ecf6 - backport debug_package regression fix from upstream
- fix segfault in rpmtsNextFiles

OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=683
2024-12-19 14:27:36 +00:00
12a7523e94 new patch: buildroot-symlink.diff
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=682
2024-12-18 09:46:00 +00:00
583cc9f968 allow the buildroot to be a symbolic link in check-files
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=681
2024-12-17 10:00:45 +00:00
cfcc684186 - backport unshare fix from upstream and extend it a bit
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=680
2024-12-16 13:59:23 +00:00
b01ea491c0 - add compatibility %buildroot definition
- backport unshare fix from upstream

OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=679
2024-12-16 13:00:08 +00:00
5857a2d144 update to rpm-4.20.0
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=678
2024-12-16 11:20:08 +00:00
779e09f870 - move perl packaging to own package
adapt fileattrs.diff

see https://build.opensuse.org/request/show/1198690

OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=677
2024-12-16 08:59:27 +00:00
Ana Guerrero
4da695acba Accepting request 1223657 from Base:System
- Bump debugedit version (bsc#1233156)

OBS-URL: https://build.opensuse.org/request/show/1223657
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/rpm?expand=0&rev=316
2024-11-22 22:51:11 +00:00
e2f294b09a Tweak debugedit dep for now
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=675
2024-11-12 12:20:10 +00:00
093b7580da Accepting request 1223366 from home:michals
- Bump debugedit version (bsc#1233156)

OBS-URL: https://build.opensuse.org/request/show/1223366
OBS-URL: https://build.opensuse.org/package/show/Base:System/rpm?expand=0&rev=674
2024-11-12 10:16:55 +00:00
34 changed files with 1171 additions and 439 deletions

View File

@ -1,122 +0,0 @@
From fc04a1bde1941d2c61a9e33e55c5c492327674ba Mon Sep 17 00:00:00 2001
From: Jan Zerebecki <jan.suse@zerebecki.de>
Date: Thu, 15 Feb 2024 09:57:35 +0100
Subject: [PATCH 1/3] Add option to set mtime of files in rpms
to SOURCE_DATE_EPOCH.
For backwards compatibility the option clamp / limit the maximum mtime
is retained.
Setting it ouright avoids problems with an incorrectly older clock. It
also avoids problems with build scrips that incorrectly change file
mtimes when SOURCE_DATE_EPOCH_MTIME is in use.
mtimes are required to increase with new versions and releases
of an rpm with the same name, as rsync without --checksum and similar
tools would get confused if the content changes without newer mtime.
If SOURCE_DATE_EPOCH_MTIME is set use it instead for file modification time
stamps. It is supposed to be newer. This can be used if we might want to
compare if the file content remains the same when a build dependency
changes while a build script embeds SOURCE_DATE_EPOCH in the file
content.
This can be used to support automatic rebuilds. Normally automatic
rebuilds work, but together with reproducible builds an undesirable
situation may occur. If a build e.g. embeds SOURCE_DATE_EPOCH in the
output, then the output changes every time such a rebuild happens, which
can be very often. This is to be avoided as updating packages without
necessity is too expensive.
---
build/files.c | 33 ++++++++++++++++++++++++++++-----
docs/manual/buildprocess.md | 5 +++--
2 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/build/files.c b/build/files.c
index c403c806e..cec7999ca 100644
--- a/build/files.c
+++ b/build/files.c
@@ -1033,14 +1033,34 @@ static void genCpioListAndHeader(FileList fl, Package pkg, int isSrc)
rpm_loff_t totalFileSize = 0;
Header h = pkg->header; /* just a shortcut */
int override_date = 0;
+ int set_mtime = 0;
time_t source_date_epoch = 0;
char *srcdate = getenv("SOURCE_DATE_EPOCH");
+ char *msrcdate = getenv("SOURCE_DATE_EPOCH_MTIME");
- /* Limit the maximum date to SOURCE_DATE_EPOCH if defined
- * similar to the tar --clamp-mtime option
+ /* If SOURCE_DATE_EPOCH_MTIME is set use it for file modification time
+ * stamps, it is supposed to be newer. This can be used if we might want to
+ * compare if the file content remains the same when a build dependency
+ * changes while a build script embeds SOURCE_DATE_EPOCH in the file
+ * content. mtimes are required to increase with new versions and releases
+ * of an rpm with the same name, as rsync without --checksum and similar
+ * tools would get confused if the content changes without newer mtime. */
+ if (msrcdate != NULL) {
+ srcdate = msrcdate;
+ }
+
+ /* Set the file mtime to SOURCE_DATE_EPOCH it if requested to make the
+ * resulting rpm reproducible.
* https://reproducible-builds.org/specs/source-date-epoch/
+ *
+ * For backwards compatibility clamp / limit the maximum mtime if requested
+ * similar the tar --clamp-mtime option. Setting it ouright avoids problems
+ * with an incorrectly older clock. It also avoids problems with build
+ * scrips that incorrectly change file mtimes when SOURCE_DATE_EPOCH_MTIME
+ * is in use.
*/
- if (srcdate && rpmExpandNumeric("%{?clamp_mtime_to_source_date_epoch}")) {
+ if (srcdate && (rpmExpandNumeric("%{?clamp_mtime_to_source_date_epoch}")
+ || rpmExpandNumeric("%{?set_mtime_to_source_date_epoch}"))) {
char *endptr;
errno = 0;
source_date_epoch = strtol(srcdate, &endptr, 10);
@@ -1049,6 +1069,9 @@ static void genCpioListAndHeader(FileList fl, Package pkg, int isSrc)
fl->processingFailed = 1;
}
override_date = 1;
+ if (rpmExpandNumeric("%{?set_mtime_to_source_date_epoch}")) {
+ set_mtime = 1;
+ }
}
/*
@@ -1191,8 +1214,8 @@ static void genCpioListAndHeader(FileList fl, Package pkg, int isSrc)
totalFileSize += flp->fl_size;
}
}
-
- if (override_date && flp->fl_mtime > source_date_epoch) {
+
+ if (override_date && (flp->fl_mtime > source_date_epoch || set_mtime)) {
flp->fl_mtime = source_date_epoch;
}
/*
diff --git a/docs/manual/buildprocess.md b/docs/manual/buildprocess.md
index 1ceb47a7e..64cd35626 100644
--- a/docs/manual/buildprocess.md
+++ b/docs/manual/buildprocess.md
@@ -94,13 +94,14 @@ Macro name | Description
`%_build_pkgcheck` | Progam to run on each generated binary package
`%_build_pkcheck_set` | Program to run on the generated binary package set
-### Reproducability
+### Reproducibility
Macro name | Description
--------------------------------------|-----------
`%source_date_epoch_from_changelog` | Set `SOURCE_DATE_EPOCH` from latest `%changelog` entry
`%use_source_date_epoch_as_buildtime` | Set package BuildTime to `SOURCE_DATE_EPOCH`
-`%clamp_mtime_to_source_date_epoch` | Ensure file timestamps are not newer than `SOURCE_DATE_EPOCH`
+`%set_mtime_to_source_date_epoch` | Set file modification timestamps to `SOURCE_DATE_EPOCH_MTIME` or as fallback to `SOURCE_DATE_EPOCH`
+`%clamp_mtime_to_source_date_epoch` | You should use the above instead, it is for backwards compatibility only. Ensure file timestamps are not newer than `SOURCE_DATE_EPOCH`
### Vendor defaults
--
2.30.2

View File

@ -1,17 +1,6 @@
From e0a8b84f68993fccbe70c4fb1cd8402fa7371147 Mon Sep 17 00:00:00 2001 --- build/build.c.orig 2024-12-16 09:50:41.468083747 +0000
From: Jan Zerebecki <jan.suse@zerebecki.de> +++ build/build.c 2024-12-16 09:50:48.428069376 +0000
Date: Thu, 15 Feb 2024 07:58:44 +0100 @@ -45,8 +45,11 @@ static rpm_time_t getBuildTime(void)
Subject: [PATCH 2/3] log build time if it is set from SOURCE_DATE_EPOCH
---
build/build.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/build/build.c b/build/build.c
index f2cf98c8b..2693d80b3 100644
--- a/build/build.c
+++ b/build/build.c
@@ -35,8 +35,11 @@ static rpm_time_t getBuildTime(void)
epoch = strtol(srcdate, &endptr, 10); epoch = strtol(srcdate, &endptr, 10);
if (srcdate == endptr || *endptr || errno != 0) if (srcdate == endptr || *endptr || errno != 0)
rpmlog(RPMLOG_ERR, _("unable to parse SOURCE_DATE_EPOCH\n")); rpmlog(RPMLOG_ERR, _("unable to parse SOURCE_DATE_EPOCH\n"));
@ -23,7 +12,4 @@ index f2cf98c8b..2693d80b3 100644
+ } + }
} else } else
buildTime = (uint32_t) time(NULL); buildTime = (uint32_t) time(NULL);
free(btMacro);
--
2.30.2

View File

@ -1,30 +1,14 @@
From 973f94bafea8e641ed747d3c420ea1bc2e1cb37f Mon Sep 17 00:00:00 2001 --- build/build.c.orig 2024-10-07 09:35:46.000000000 +0000
From: Jan Zerebecki <jan.suse@zerebecki.de> +++ build/build.c 2024-12-16 09:50:14.728138966 +0000
Date: Thu, 15 Feb 2024 08:03:05 +0100 @@ -385,8 +385,10 @@ static int buildSpec(rpmts ts, BTA_t bui
Subject: [PATCH 3/3] Error out on a missing changelog date
if it is needed as the source for SOURCE_DATE_EPOCH, instead of only
logging a warning.
---
build/build.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/build/build.c b/build/build.c
index 2693d80b3..ce7bc8b88 100644
--- a/build/build.c
+++ b/build/build.c
@@ -344,8 +344,10 @@ static rpmRC buildSpec(rpmts ts, BTA_t buildArgs, rpmSpec spec, int what)
setenv("SOURCE_DATE_EPOCH", sdestr, 0); setenv("SOURCE_DATE_EPOCH", sdestr, 0);
rpmtdFreeData(&td); rpmtdFreeData(&td);
} else { } else {
- rpmlog(RPMLOG_WARNING, _("source_date_epoch_from_changelog set but " - rpmlog(RPMLOG_WARNING, _("%%source_date_epoch_from_changelog is set, but "
+ rpmlog(RPMLOG_ERR, _("source_date_epoch_from_changelog set but " + rpmlog(RPMLOG_ERR, _("%%source_date_epoch_from_changelog is set, but "
"%%changelog is missing\n")); "%%changelog has no entries to take a date from\n"));
+ rc = RPMRC_FAIL; + rc = RPMRC_FAIL;
+ goto exit; + goto exit;
} }
} }
--
2.30.2

View File

@ -1,14 +1,14 @@
--- tools/elfdeps.c.orig 2014-06-26 06:51:55.768815677 +0000 --- tools/elfdeps.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ tools/elfdeps.c 2014-08-04 13:02:16.981081591 +0000 +++ tools/elfdeps.c 2024-12-16 09:25:13.479234184 +0000
@@ -17,6 +17,7 @@ int soname_only = 0; @@ -17,6 +17,7 @@ int fake_soname = 1;
int fake_soname = 1;
int filter_soname = 1; int filter_soname = 1;
int require_interp = 0; int require_interp = 0;
int multifile = 0;
+int assume_exec = 0; +int assume_exec = 0;
typedef struct elfInfo_s { typedef struct elfInfo_s {
Elf *elf; Elf *elf;
@@ -299,7 +300,7 @@ static int processFile(const char *fn, i @@ -302,7 +303,7 @@ static int processFile(const char *fn, i
if (ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC) { if (ehdr->e_type == ET_DYN || ehdr->e_type == ET_EXEC) {
ei->marker = mkmarker(ehdr); ei->marker = mkmarker(ehdr);
ei->isDSO = (ehdr->e_type == ET_DYN); ei->isDSO = (ehdr->e_type == ET_DYN);
@ -17,10 +17,10 @@
processProgHeaders(ei, ehdr); processProgHeaders(ei, ehdr);
processSections(ei); processSections(ei);
@@ -364,6 +365,7 @@ int main(int argc, char *argv[]) @@ -372,6 +373,7 @@ int main(int argc, char *argv[])
{ "no-fake-soname", 0, POPT_ARG_VAL, &fake_soname, 0, NULL, NULL },
{ "no-filter-soname", 0, POPT_ARG_VAL, &filter_soname, 0, NULL, NULL }, { "no-filter-soname", 0, POPT_ARG_VAL, &filter_soname, 0, NULL, NULL },
{ "require-interp", 0, POPT_ARG_VAL, &require_interp, -1, NULL, NULL }, { "require-interp", 0, POPT_ARG_VAL, &require_interp, -1, NULL, NULL },
{ "multifile", 'm', POPT_ARG_VAL, &multifile, -1, NULL, NULL },
+ { "assume-exec", 0, POPT_ARG_VAL, &assume_exec, -1, NULL, NULL }, + { "assume-exec", 0, POPT_ARG_VAL, &assume_exec, -1, NULL, NULL },
POPT_AUTOHELP POPT_AUTOHELP
POPT_TABLEEND POPT_TABLEEND

View File

@ -1,25 +1,19 @@
Index: build/parseSpec.c --- build/parseSimpleScript.c.orig 2024-12-16 09:59:01.199053527 +0000
=================================================================== +++ build/parseSimpleScript.c 2024-12-16 10:08:22.389914963 +0000
--- build/parseSpec.c.orig @@ -59,6 +59,28 @@ int parseSimpleScript(rpmSpec spec, cons
+++ build/parseSpec.c target = &buf;
@@ -942,7 +942,30 @@ static rpmSpec parseSpec(const char *spe }
&(spec->buildrequires));
break; + if (!mode && !*target && !strcmp(name, "build")) {
case PART_BUILD: + *target = newStringBuf();
- parsePart = parseSimpleScript(spec, "%build", &(spec->build)); + appendLineStringBuf(*target,
+ if (spec->build) {
+ rpmlog(RPMLOG_ERR, _("line %d: second %s\n"), spec->lineNum, "%build");
+ parsePart = PART_ERROR;
+ break;
+ }
+ spec->build = newStringBuf();
+ appendLineStringBuf(spec->build,
+ "ref=/usr/lib/rpm\n" + "ref=/usr/lib/rpm\n"
+ "mints=0\n" + "mints=0\n"
+ "case $(uname -m) in\n" + "case $(uname -m) in\n"
+ " aarch64) mints=20120610;;\n" + " aarch64) mints=20120610;;\n"
+ " ppc64le) mints=20130610;;\n" + " ppc64le) mints=20130610;;\n"
+ " riscv64) mints=20160911;;\n" + " riscv64) mints=20160911;;\n"
+ " loongarch64) mints=20201222;;\n"
+ "esac\n" + "esac\n"
+ "for s in guess sub; do\n" + "for s in guess sub; do\n"
+ " for c in $(find -maxdepth 8 -name \"config.$s\"); do\n" + " for c in $(find -maxdepth 8 -name \"config.$s\"); do\n"
@ -30,7 +24,8 @@ Index: build/parseSpec.c
+ " done\n" + " done\n"
+ "done\n" + "done\n"
+ ); + );
+ parsePart = parseLines(spec, STRIP_NOTHING, NULL, &(spec->build)); + }
break; +
case PART_INSTALL: res = parseLines(spec, STRIP_NOTHING, NULL, target);
parsePart = parseSimpleScript(spec, "%install", &(spec->install));
if (buf) {

View File

@ -1,5 +1,5 @@
--- scripts/brp-strip-comment-note.orig 2023-09-19 10:10:10.000000000 +0000 --- scripts/brp-strip-comment-note.orig 2024-10-07 09:35:46.000000000 +0000
+++ scripts/brp-strip-comment-note 2023-10-09 12:22:27.504732553 +0000 +++ scripts/brp-strip-comment-note 2024-12-16 09:15:41.572425334 +0000
@@ -15,7 +15,7 @@ esac @@ -15,7 +15,7 @@ esac
# Strip .comment and .note sections (the latter only if it is not allocated) # Strip .comment and .note sections (the latter only if it is not allocated)
@ -9,10 +9,10 @@
note="-R .note" note="-R .note"
if $OBJDUMP -h $f | grep '^[ ]*[0-9]*[ ]*.note[ ]' -A 1 | \ if $OBJDUMP -h $f | grep '^[ ]*[0-9]*[ ]*.note[ ]' -A 1 | \
grep ALLOC >/dev/null; then grep ALLOC >/dev/null; then
--- scripts/brp-strip.orig 2023-09-19 10:10:10.000000000 +0000 --- scripts/brp-strip.orig 2024-10-07 09:35:46.000000000 +0000
+++ scripts/brp-strip 2023-10-09 12:24:36.920521652 +0000 +++ scripts/brp-strip 2024-12-16 09:15:41.572425334 +0000
@@ -35,6 +35,7 @@ strip_elf_binaries() @@ -37,6 +37,7 @@ strip_elf_binaries()
! -regex "${RPM_BUILD_ROOT}/*usr/lib/debug.*" \ ! -name "*.py" ! -name "*.js" ! -name "*.rb" \
! -name "*.go" -links "${nlinks}" -print0 | \ ! -name "*.go" -links "${nlinks}" -print0 | \
xargs -0 -r -P${nprocs} -n${MAX_ARGS} sh -c "file \"\$@\" | \ xargs -0 -r -P${nprocs} -n${MAX_ARGS} sh -c "file \"\$@\" | \
+ grep -v ' shared object,' | grep -v '/lib/modules/ | \ + grep -v ' shared object,' | grep -v '/lib/modules/ | \

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:69ead89491a66ae6c1a960977b7cc567e56f74d535a022fc193334d78be838f1 oid sha256:85df6005b9b78efe6bbe3341b3d260915aab3b5660d33886aa7e4b2c540f68e9
size 21222 size 24182

10
buildroot-symlink.diff Normal file
View File

@ -0,0 +1,10 @@
--- scripts/check-files.orig 2024-12-17 09:47:18.016502845 +0000
+++ scripts/check-files 2024-12-17 09:50:09.872159687 +0000
@@ -27,6 +27,6 @@ trap "rm -f \"${FILES_DISK}\"" 0 2 3 5 1
# Find non-directory files in the build root and compare to the manifest.
# TODO: regex chars in last sed(1) expression should be escaped
-find "${RPM_BUILD_ROOT}" -type f -o -type l | LC_ALL=C sort > "${FILES_DISK}"
+find -H "${RPM_BUILD_ROOT}" -type f -o -type l | LC_ALL=C sort > "${FILES_DISK}"
LC_ALL=C sort | diff -d "${FILES_DISK}" - | sed -n -e 's!^\(-\|< \)'"${RPM_BUILD_ROOT}"'/usr/share/info/dir$!!' -e 's!^\(-\|< \)'"${RPM_BUILD_ROOT}"'\(.*\)$! \2!gp'

12
buildsys.diff Normal file
View File

@ -0,0 +1,12 @@
--- build/parseSpec.c.orig 2025-02-13 13:20:21.075462279 +0000
+++ build/parseSpec.c 2025-02-13 13:15:42.447942795 +0000
@@ -1429,7 +1429,8 @@ static rpmRC parseSpecParts(rpmSpec spec
/* rpmGlob returns files sorted */
if (rpmGlob(pattern, &argc, &argv) == 0) {
for (int i = 0; i < argc; i++) {
- rpmlog(RPMLOG_NOTICE, "Reading %s\n", argv[i]);
+ if (stage != PARSE_BUILDSYS)
+ rpmlog(RPMLOG_NOTICE, "Reading %s\n", argv[i]);
pushOFI(spec, argv[i]);
snprintf(spec->fileStack->readBuf, spec->fileStack->readBufLen,
"# Spec part read from %s\n\n", argv[i]);

View File

@ -1,6 +1,6 @@
--- CMakeLists.txt.orig 2024-02-07 09:57:31.944781372 +0000 --- CMakeLists.txt.orig 2024-10-07 09:35:46.000000000 +0000
+++ CMakeLists.txt 2024-02-07 09:57:51.924739495 +0000 +++ CMakeLists.txt 2024-12-16 09:42:51.221054406 +0000
@@ -138,14 +138,26 @@ function(makemacros) @@ -153,14 +153,26 @@ function(makemacros)
list(GET db_backends 0 DB_BACKEND) list(GET db_backends 0 DB_BACKEND)
@ -28,5 +28,5 @@
+ set(RPMCANONGNU -gnu) + set(RPMCANONGNU -gnu)
+ endif() + endif()
if (ENABLE_CUTF8) configure_file(platform.in platform @ONLY)
set(C_LOCALE "C.UTF-8") configure_file(rpmrc.in rpmrc @ONLY)

View File

@ -1,14 +1,14 @@
--- CMakeLists.txt.orig 2024-02-01 13:24:18.665660569 +0000 --- CMakeLists.txt.orig 2024-12-16 09:43:16.909001370 +0000
+++ CMakeLists.txt 2024-02-01 13:25:07.917586376 +0000 +++ CMakeLists.txt 2024-12-16 09:45:05.892776434 +0000
@@ -238,7 +238,11 @@ endif() @@ -277,7 +277,11 @@ endif()
list(APPEND db_backends dummy) list(APPEND db_backends dummy)
if (ENABLE_PYTHON) if (ENABLE_PYTHON)
- find_package(Python3 3.2 COMPONENTS Interpreter Development REQUIRED) - find_package(Python3 3.7 COMPONENTS Interpreter Development REQUIRED)
+ if (WITH_PYTHON_VERSION) + if (WITH_PYTHON_VERSION)
+ find_package(Python3 ${WITH_PYTHON_VERSION} EXACT COMPONENTS Interpreter Development REQUIRED) + find_package(Python3 ${WITH_PYTHON_VERSION} EXACT COMPONENTS Interpreter Development REQUIRED)
+ else() + else()
+ find_package(Python3 3.2 COMPONENTS Interpreter Development REQUIRED) + find_package(Python3 3.7 COMPONENTS Interpreter Development REQUIRED)
+ endif() + endif()
endif() endif()

View File

@ -1,5 +1,5 @@
--- lib/backend/bdb_ro.c.orig 2022-04-07 11:13:18.994517848 +0000 --- lib/backend/bdb_ro.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/backend/bdb_ro.c 2022-12-02 13:22:16.726408071 +0000 +++ lib/backend/bdb_ro.c 2024-12-16 09:28:13.146864067 +0000
@@ -793,6 +793,7 @@ static unsigned int bdbro_pkgdbKey(dbiIn @@ -793,6 +793,7 @@ static unsigned int bdbro_pkgdbKey(dbiIn
struct rpmdbOps_s bdbro_dbops = { struct rpmdbOps_s bdbro_dbops = {
.name = "bdb_ro", .name = "bdb_ro",
@ -8,8 +8,8 @@
.open = bdbro_Open, .open = bdbro_Open,
.close = bdbro_Close, .close = bdbro_Close,
--- lib/backend/dbi.c.orig 2022-04-07 11:13:18.994517848 +0000 --- lib/backend/dbi.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/backend/dbi.c 2022-12-02 13:22:16.726408071 +0000 +++ lib/backend/dbi.c 2024-12-16 09:28:13.150864059 +0000
@@ -138,11 +138,20 @@ exit: @@ -138,11 +138,20 @@ exit:
} }
@ -31,8 +31,8 @@
const char * dbiName(dbiIndex dbi) const char * dbiName(dbiIndex dbi)
{ {
return dbi->dbi_file; return dbi->dbi_file;
--- lib/backend/dbi.h.orig 2022-04-07 11:13:18.994517848 +0000 --- lib/backend/dbi.h.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/backend/dbi.h 2022-12-02 13:22:16.726408071 +0000 +++ lib/backend/dbi.h 2024-12-16 09:28:13.150864059 +0000
@@ -13,6 +13,7 @@ enum rpmdbFlags { @@ -13,6 +13,7 @@ enum rpmdbFlags {
RPMDB_FLAG_REBUILD = (1 << 1), RPMDB_FLAG_REBUILD = (1 << 1),
RPMDB_FLAG_VERIFYONLY = (1 << 2), RPMDB_FLAG_VERIFYONLY = (1 << 2),
@ -41,7 +41,7 @@
}; };
typedef enum dbCtrlOp_e { typedef enum dbCtrlOp_e {
@@ -53,6 +54,7 @@ struct rpmdb_s { @@ -54,6 +55,7 @@ struct rpmdb_s {
int db_buildindex; /*!< Index rebuild indicator */ int db_buildindex; /*!< Index rebuild indicator */
const struct rpmdbOps_s * db_ops; /*!< backend ops */ const struct rpmdbOps_s * db_ops; /*!< backend ops */
@ -49,7 +49,7 @@
/* dbenv and related parameters */ /* dbenv and related parameters */
void * db_dbenv; /*!< Backend private handle */ void * db_dbenv; /*!< Backend private handle */
@@ -197,6 +199,14 @@ RPM_GNUC_INTERNAL @@ -194,6 +196,14 @@ RPM_GNUC_INTERNAL
const char * dbiName(dbiIndex dbi); const char * dbiName(dbiIndex dbi);
/** \ingroup dbi /** \ingroup dbi
@ -64,7 +64,7 @@
* Open a database cursor. * Open a database cursor.
* @param dbi index database handle * @param dbi index database handle
* @param flags DBC_WRITE if writing, or 0 (DBC_READ) for reading * @param flags DBC_WRITE if writing, or 0 (DBC_READ) for reading
@@ -240,6 +250,7 @@ const void * idxdbKey(dbiIndex dbi, dbiC @@ -237,6 +247,7 @@ const void * idxdbKey(dbiIndex dbi, dbiC
struct rpmdbOps_s { struct rpmdbOps_s {
const char *name; /* backend name */ const char *name; /* backend name */
const char *path; /* main database name */ const char *path; /* main database name */
@ -72,9 +72,9 @@
int (*open)(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags); int (*open)(rpmdb rdb, rpmDbiTagVal rpmtag, dbiIndex * dbip, int flags);
int (*close)(dbiIndex dbi, unsigned int flags); int (*close)(dbiIndex dbi, unsigned int flags);
--- lib/backend/ndb/rpmpkg.c.orig 2022-04-07 11:13:18.997517869 +0000 --- lib/backend/ndb/rpmpkg.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/backend/ndb/rpmpkg.c 2022-12-02 13:22:16.726408071 +0000 +++ lib/backend/ndb/rpmpkg.c 2024-12-16 09:28:13.150864059 +0000
@@ -1116,11 +1116,12 @@ static int rpmpkgPutInternal(rpmpkgdb pk @@ -1111,11 +1111,12 @@ static int rpmpkgPutInternal(rpmpkgdb pk
if (rpmpkgWriteBlob(pkgdb, pkgidx, blkoff, blkcnt, blob, blobl, pkgdb->generation)) { if (rpmpkgWriteBlob(pkgdb, pkgidx, blkoff, blkcnt, blob, blobl, pkgdb->generation)) {
return RPMRC_FAIL; return RPMRC_FAIL;
} }
@ -90,9 +90,9 @@
if (rpmpkgWriteslot(pkgdb, slotno, pkgidx, blkoff, blkcnt)) { if (rpmpkgWriteslot(pkgdb, slotno, pkgidx, blkoff, blkcnt)) {
free(pkgdb->slots); free(pkgdb->slots);
pkgdb->slots = 0; pkgdb->slots = 0;
--- lib/rpmdb.c.orig 2022-09-20 12:08:27.197920294 +0000 --- lib/rpmdb.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/rpmdb.c 2022-12-02 13:24:02.830159868 +0000 +++ lib/rpmdb.c 2024-12-16 09:29:39.686685792 +0000
@@ -469,7 +469,12 @@ static int openDatabase(const char * pre @@ -466,7 +466,12 @@ static int openDatabase(const char * pre
/* Open just bare minimum when rebuilding a potentially damaged db */ /* Open just bare minimum when rebuilding a potentially damaged db */
int justPkgs = (db->db_flags & RPMDB_FLAG_REBUILD) && int justPkgs = (db->db_flags & RPMDB_FLAG_REBUILD) &&
((db->db_mode & O_ACCMODE) == O_RDONLY); ((db->db_mode & O_ACCMODE) == O_RDONLY);
@ -106,7 +106,7 @@
if (!db->db_descr) if (!db->db_descr)
db->db_descr = "unknown db"; db->db_descr = "unknown db";
@@ -2228,6 +2233,15 @@ int rpmdbAdd(rpmdb db, Header h) @@ -2209,6 +2214,15 @@ int rpmdbAdd(rpmdb db, Header h)
if (db == NULL) if (db == NULL)
return 0; return 0;
@ -119,10 +119,10 @@
+ } + }
+ } + }
+ +
hdrBlob = headerExport(h, &hdrLen); hdrBlob = (uint8_t *)headerExport(h, &hdrLen);
if (hdrBlob == NULL || hdrLen == 0) { if (hdrBlob == NULL || hdrLen == 0) {
ret = -1; ret = -1;
@@ -2423,7 +2437,22 @@ int rpmdbRebuild(const char * prefix, rp @@ -2404,7 +2418,22 @@ int rpmdbRebuild(const char * prefix, rp
} }
rootdbpath = rpmGetPath(prefix, dbpath, NULL); rootdbpath = rpmGetPath(prefix, dbpath, NULL);
@ -146,7 +146,7 @@
if (rstreq(newdbpath, "") || rstreq(newdbpath, dbpath)) { if (rstreq(newdbpath, "") || rstreq(newdbpath, dbpath)) {
newdbpath = _free(newdbpath); newdbpath = _free(newdbpath);
rasprintf(&newdbpath, "%srebuilddb.%d", dbpath, (int) getpid()); rasprintf(&newdbpath, "%srebuilddb.%d", dbpath, (int) getpid());
@@ -2449,7 +2478,9 @@ int rpmdbRebuild(const char * prefix, rp @@ -2430,7 +2459,9 @@ int rpmdbRebuild(const char * prefix, rp
goto exit; goto exit;
} }
if (openDatabase(prefix, newdbpath, &newdb, if (openDatabase(prefix, newdbpath, &newdb,
@ -157,9 +157,9 @@
rc = 1; rc = 1;
goto exit; goto exit;
} }
--- lib/rpmdb_internal.h.orig 2022-04-07 11:13:19.014517984 +0000 --- lib/rpmdb_internal.h.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/rpmdb_internal.h 2022-12-02 13:22:16.726408071 +0000 +++ lib/rpmdb_internal.h 2024-12-16 09:28:13.150864059 +0000
@@ -25,6 +25,7 @@ extern "C" { @@ -18,6 +18,7 @@
enum rpmdbRebuildFlags_e { enum rpmdbRebuildFlags_e {
RPMDB_REBUILD_FLAG_SALVAGE = (1 << 0), RPMDB_REBUILD_FLAG_SALVAGE = (1 << 0),

17
debugpackage.diff Normal file
View File

@ -0,0 +1,17 @@
--- macros.in.orig 2024-12-19 13:27:56.291657815 +0000
+++ macros.in 2024-12-19 13:29:00.335537654 +0000
@@ -199,11 +199,12 @@ package or when debugging this package.\
%{nil}
# The duplicate __debug_package definition is needed to ensure matching
-# state when %install is skipped due to short-circuit.
+# state when %install is skipped due to short-circuit, IFF buildsubdir
+# is defined (indicating use of automatic debuginfo generation)
%debug_package \
%ifnarch noarch\
%global __debug_package 1\
-%%global __debug_package 1\
+%{?buildsubdir:%%global __debug_package 1}\
%_debuginfo_template\
%{?_debugsource_packages:%_debugsource_template}\
%endif\

View File

@ -1,6 +1,6 @@
--- lib/rpmscript.c.orig 2023-09-19 10:10:10.000000000 +0000 --- lib/rpmscript.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/rpmscript.c 2023-10-09 13:10:38.011654503 +0000 +++ lib/rpmscript.c 2024-12-16 09:26:15.035107390 +0000
@@ -463,7 +463,7 @@ rpmRC rpmScriptRun(rpmScript script, int @@ -462,7 +462,7 @@ rpmRC rpmScriptRun(rpmScript script, int
if (script == NULL) return RPMRC_OK; if (script == NULL) return RPMRC_OK;
ARGV_t args = NULL; ARGV_t args = NULL;
@ -9,7 +9,7 @@
RPMLOG_ERR : RPMLOG_WARNING; RPMLOG_ERR : RPMLOG_WARNING;
rpmRC rc; rpmRC rc;
int script_type = RPMSCRIPTLET_FORK | RPMSCRIPTLET_EXEC; int script_type = RPMSCRIPTLET_FORK | RPMSCRIPTLET_EXEC;
@@ -723,5 +723,8 @@ rpmscriptTypes rpmScriptType(rpmScript s @@ -724,5 +724,8 @@ rpmscriptTypes rpmScriptType(rpmScript s
rpmscriptFlags rpmScriptFlags(rpmScript script) rpmscriptFlags rpmScriptFlags(rpmScript script)
{ {
@ -19,11 +19,11 @@
+ flags |= RPMSCRIPT_FLAG_CRITICAL; + flags |= RPMSCRIPT_FLAG_CRITICAL;
+ return flags; + return flags;
} }
--- macros.in.orig 2023-10-09 13:10:35.043659922 +0000 --- macros.in.orig 2024-12-16 09:26:03.635130873 +0000
+++ macros.in 2023-10-09 13:10:38.015654495 +0000 +++ macros.in 2024-12-16 09:26:15.035107390 +0000
@@ -1377,5 +1377,10 @@ end @@ -1390,6 +1390,11 @@ end
end # Global buildsystem defaults
} %buildsystem_default_prep() %autosetup -C -p1 %*
+# Should errors in %post scriptlet be propagated as errors? +# Should errors in %post scriptlet be propagated as errors?
+# +#
@ -32,3 +32,4 @@
+ +
# \endverbatim # \endverbatim
#*/ #*/

View File

@ -1,26 +1,9 @@
--- fileattrs/elf.attr.orig 2023-09-19 10:10:10.000000000 +0000 --- fileattrs/elf.attr.orig 2024-10-07 09:35:46.000000000 +0000
+++ fileattrs/elf.attr 2023-10-09 13:07:09.252042587 +0000 +++ fileattrs/elf.attr 2024-12-16 09:23:29.831448715 +0000
@@ -1,4 +1,4 @@ @@ -1,5 +1,5 @@
%__elf_provides %{_rpmconfigdir}/elfdeps --provides %__elf_provides %{_rpmconfigdir}/elfdeps --provides --multifile
%__elf_requires %{_rpmconfigdir}/elfdeps --requires %__elf_requires %{_rpmconfigdir}/elfdeps --requires --multifile
%__elf_magic ^(setuid,? )?(setgid,? )?(sticky )?ELF (32|64)-bit.*$ %__elf_magic ^(setuid,? )?(setgid,? )?(sticky )?ELF (32|64)-bit.*$
-%__elf_exclude_path ^/lib/modules/.*\.ko?(\.[[:alnum:]]*)$ -%__elf_exclude_path ^/lib/modules/.*\\.ko?(\\.[[:alnum:]]*)$
+%__elf_exclude_path (^/usr/lib/debug/)|(^/lib/modules/.*\.ko?(\.[[:alnum:]]*)$) +%__elf_exclude_path (^/usr/lib/debug/)|(^/lib/modules/.*\\.ko?(\\.[[:alnum:]]*)$)
--- fileattrs/perl.attr.orig 2023-09-19 10:10:10.000000000 +0000 %__elf_protocol multifile
+++ fileattrs/perl.attr 2023-10-09 12:58:36.893003334 +0000
@@ -1,3 +1,4 @@
-%__perl_requires %{_rpmconfigdir}/perl.req
+# disabled for now
+#%__perl_requires %{_rpmconfigdir}/perl.req
%__perl_magic ^.*[Pp]erl .*$
%__perl_flags exeonly
--- fileattrs/perllib.attr.orig 2023-09-19 10:10:10.000000000 +0000
+++ fileattrs/perllib.attr 2023-10-09 12:58:36.893003334 +0000
@@ -1,5 +1,6 @@
%__perllib_provides %{_rpmconfigdir}/perl.prov
-%__perllib_requires %{_rpmconfigdir}/perl.req
+#disabled for now
+#%__perllib_requires %{_rpmconfigdir}/perl.req
%__perllib_magic ^Perl[[:digit:]] module source.*
%__perllib_path \\.pm$
%__perllib_flags magic_and_path

View File

@ -1,15 +1,16 @@
--- scripts/CMakeLists.txt.orig 2023-10-09 13:14:50.011193421 +0000 --- scripts/CMakeLists.txt.orig 2024-10-07 09:35:46.000000000 +0000
+++ scripts/CMakeLists.txt 2023-10-09 13:15:00.395174379 +0000 +++ scripts/CMakeLists.txt 2024-12-16 09:27:43.274925606 +0000
@@ -5,6 +5,7 @@ install(PROGRAMS @@ -4,7 +4,7 @@ install(PROGRAMS
brp-strip-static-archive brp-elfperms brp-remove-la-files
check-files check-prereqs check-files check-prereqs
check-buildroot check-rpaths check-rpaths-worker check-buildroot check-rpaths check-rpaths-worker
find-lang.sh find-requires find-provides - find-lang.sh find-requires find-provides
+ find-supplements + find-lang.sh find-requires find-provides find-supplements
perl.prov perl.req
pkgconfigdeps.sh pkgconfigdeps.sh
ocamldeps.sh ocamldeps.sh
--- scripts/find-supplements.orig 2023-10-09 13:14:37.371216603 +0000 fontconfig.prov script.req
+++ scripts/find-supplements 2023-10-09 13:14:37.371216603 +0000 --- scripts/find-supplements.orig 2024-12-16 09:27:13.626986691 +0000
+++ scripts/find-supplements 2024-12-16 09:27:13.626986691 +0000
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
+#!/bin/sh +#!/bin/sh
+ +

View File

@ -1,14 +1,14 @@
--- macros.in.orig 2023-10-09 12:34:52.359518015 +0000 --- macros.in.orig 2025-02-12 13:23:21.868124201 +0000
+++ macros.in 2023-10-09 12:34:56.915510497 +0000 +++ macros.in 2025-02-12 13:23:58.436059109 +0000
@@ -161,6 +161,7 @@ @@ -163,6 +163,7 @@
%{?_unique_debug_names:--unique-debug-suffix "-%{VERSION}-%{RELEASE}.%{_arch}"} \\\ %{?_unique_debug_names:--unique-debug-suffix "-%{VERSION}-%{RELEASE}.%{_arch}"} \\\
%{?_unique_debug_srcs:--unique-debug-src-base "%{name}-%{VERSION}-%{RELEASE}.%{_arch}"} \\\ %{?_unique_debug_srcs:--unique-debug-src-base "%{name}-%{VERSION}-%{RELEASE}.%{_arch}"} \\\
%{?_find_debuginfo_dwz_opts} \\\ %{?_find_debuginfo_dwz_opts} \\\
+ %{lua:if posix.access(rpm.expand("%_sourcedir/baselibs.conf"), "r") then print("--dwz-single-file-mode") end} \\\ + %{lua:if posix.access(rpm.expand("%_sourcedir/baselibs.conf"), "r") then print("--dwz-single-file-mode") end} \\\
%{?_find_debuginfo_opts} \\\ %{?_find_debuginfo_opts} \\\
%{?_debugsource_packages:-S debugsourcefiles.list} \\\ %{?_debugsource_packages:-S debugsourcefiles.list} \\\
"%{_builddir}/%{?buildsubdir}"\ "%{builddir}/%{?buildsubdir}"\
@@ -211,7 +212,8 @@ Supplements: (%{name} = %{version}-%{r @@ -216,7 +217,8 @@ Supplements: (%{name} = %{version}-%{r
%files langpack-%{1}\ %files langpack-%{1}\
%{nil} %{nil}
@ -18,7 +18,7 @@
%_defaultlicensedir %{_datadir}/licenses %_defaultlicensedir %{_datadir}/licenses
# Following macros for filtering auto deps must not be used in spec files. # Following macros for filtering auto deps must not be used in spec files.
@@ -277,7 +279,8 @@ Supplements: (%{name} = %{version}-%{r @@ -275,7 +277,8 @@ Supplements: (%{name} = %{version}-%{r
%_tmppath %{_var}/tmp %_tmppath %{_var}/tmp
# Path to top of build area. # Path to top of build area.
@ -28,7 +28,7 @@
#============================================================================== #==============================================================================
# ---- Optional rpmrc macros. # ---- Optional rpmrc macros.
@@ -379,7 +382,7 @@ Supplements: (%{name} = %{version}-%{r @@ -366,7 +369,7 @@ Supplements: (%{name} = %{version}-%{r
# "w.ufdio" uncompressed # "w.ufdio" uncompressed
# #
#%_source_payload w9.gzdio #%_source_payload w9.gzdio
@ -37,7 +37,7 @@
# Algorithm to use for generating file checksum digests on build. # Algorithm to use for generating file checksum digests on build.
# If not specified or 0, MD5 is used. # If not specified or 0, MD5 is used.
@@ -489,6 +492,19 @@ Supplements: (%{name} = %{version}-%{r @@ -476,6 +479,19 @@ Supplements: (%{name} = %{version}-%{r
# #
#%_include_minidebuginfo 1 #%_include_minidebuginfo 1
@ -57,7 +57,7 @@
# #
# Include a .gdb_index section in the .debug files. # Include a .gdb_index section in the .debug files.
# Requires _enable_debug_packages and gdb-add-index installed. # Requires _enable_debug_packages and gdb-add-index installed.
@@ -521,39 +537,39 @@ Supplements: (%{name} = %{version}-%{r @@ -508,39 +524,39 @@ Supplements: (%{name} = %{version}-%{r
# Same as for "separate" but if the __debug_package global is set then # Same as for "separate" but if the __debug_package global is set then
# the -debuginfo package will have a compatibility link for the main # the -debuginfo package will have a compatibility link for the main
# ELF /usr/lib/debug/.build-id/xx/yyy -> /usr/lib/.build-id/xx/yyy # ELF /usr/lib/debug/.build-id/xx/yyy -> /usr/lib/.build-id/xx/yyy
@ -104,7 +104,7 @@
# #
# Use internal dependency generator rather than external helpers? # Use internal dependency generator rather than external helpers?
@@ -572,6 +588,7 @@ Supplements: (%{name} = %{version}-%{r @@ -559,6 +575,7 @@ Supplements: (%{name} = %{version}-%{r
%__find_requires %{_rpmconfigdir}/find-requires %__find_requires %{_rpmconfigdir}/find-requires
#%__find_conflicts ??? #%__find_conflicts ???
#%__find_obsoletes ??? #%__find_obsoletes ???
@ -112,7 +112,7 @@
# #
# Path to file attribute classifications for automatic dependency # Path to file attribute classifications for automatic dependency
@@ -984,7 +1001,7 @@ Supplements: (%{name} = %{version}-%{r @@ -980,7 +997,7 @@ Supplements: (%{name} = %{version}-%{r
%_build_vendor %{_host_vendor} %_build_vendor %{_host_vendor}
%_build_os %{_host_os} %_build_os %{_host_os}
%_host @host@ %_host @host@
@ -121,7 +121,7 @@
%_host_cpu @host_cpu@ %_host_cpu @host_cpu@
%_host_vendor @host_vendor@ %_host_vendor @host_vendor@
%_host_os @host_os@ %_host_os @host_os@
@@ -1109,11 +1126,13 @@ Supplements: (%{name} = %{version}-%{r @@ -1105,11 +1122,13 @@ Supplements: (%{name} = %{version}-%{r
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# arch macro for all supported 32-bit ARM processors # arch macro for all supported 32-bit ARM processors

34
mtime_policy_set.diff Normal file
View File

@ -0,0 +1,34 @@
--- build/files.c.orig 2025-02-12 13:27:08.131721537 +0000
+++ build/files.c 2025-02-12 13:32:28.371151422 +0000
@@ -1049,10 +1049,10 @@ static void genCpioListAndHeader(FileLis
}
}
- if (!strcmp(mtime_policy_str, "clamp_to_buildtime")) {
+ if (!strcmp(mtime_policy_str, "clamp_to_buildtime") || !strcmp(mtime_policy_str, "set_to_buildtime")) {
mtime_clamp = spec->buildTime;
- override_date = 1;
- } else if (!strcmp(mtime_policy_str, "clamp_to_source_date_epoch")) {
+ override_date = mtime_policy_str[0] == 's' ? 2 : 1;
+ } else if (!strcmp(mtime_policy_str, "clamp_to_source_date_epoch") || !strcmp(mtime_policy_str, "set_to_source_date_epoch")) {
/* Limit the maximum date to SOURCE_DATE_EPOCH if defined
* similar to the tar --clamp-mtime option
* https://reproducible-builds.org/specs/source-date-epoch/
@@ -1065,7 +1065,7 @@ static void genCpioListAndHeader(FileLis
rpmlog(RPMLOG_ERR, _("unable to parse %s=%s\n"), "SOURCE_DATE_EPOCH", srcdate);
fl->processingFailed = 1;
}
- override_date = 1;
+ override_date = mtime_policy_str[0] == 's' ? 2 : 1;
}
} else if (*mtime_policy_str) {
rpmlog(RPMLOG_WARNING,
@@ -1214,7 +1214,7 @@ static void genCpioListAndHeader(FileLis
}
}
- if (override_date && flp->fl_mtime > mtime_clamp) {
+ if (override_date && (flp->fl_mtime > mtime_clamp || override_date == 2)) {
flp->fl_mtime = mtime_clamp;
}
/*

40
nextfiles.diff Normal file
View File

@ -0,0 +1,40 @@
--- lib/rpmtriggers.c.orig 2024-12-19 14:05:56.403437646 +0000
+++ lib/rpmtriggers.c 2024-12-19 14:11:56.646774439 +0000
@@ -239,31 +239,33 @@ typedef struct matchFilesIter_s {
static rpmfiles rpmtsNextFiles(matchFilesIter mfi)
{
Header h;
- rpmte *te;
rpmfiles files = NULL;
+ const char *pkgname = NULL;
rpmstrPool pool = mfi->ts->members->pool;
int ix;
- unsigned int offset;
ix = rpmdbGetIteratorIndex(mfi->pi);
if (ix < rpmdbGetIteratorCount(mfi->pi)) {
- offset = rpmdbGetIteratorOffsetFor(mfi->pi, ix);
+ unsigned int offset = rpmdbGetIteratorOffsetFor(mfi->pi, ix);
+ rpmte *te;
if (packageHashGetEntry(mfi->ts->members->removedPackages, offset,
&te, NULL, NULL)) {
/* Files are available in memory */
files = rpmteFiles(te[0]);
+ pkgname = rpmteN(te[0]);
}
if (packageHashGetEntry(mfi->ts->members->installedPackages, offset,
&te, NULL, NULL)) {
/* Files are available in memory */
files = rpmteFiles(te[0]);
+ pkgname = rpmteN(te[0]);
}
}
if (files) {
rpmdbSetIteratorIndex(mfi->pi, ix + 1);
- mfi->pkgname = rpmteN(te[0]);
+ mfi->pkgname = pkgname;
} else {
/* Files are not available in memory. Read them from rpmdb */
h = rpmdbNextIterator(mfi->pi);

View File

@ -1,20 +1,20 @@
--- build/parsePreamble.c.orig 2019-10-02 11:38:15.807736662 +0000 --- build/parsePreamble.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ build/parsePreamble.c 2019-10-02 11:39:12.495617575 +0000 +++ build/parsePreamble.c 2024-12-16 09:21:44.247668941 +0000
@@ -1032,7 +1032,7 @@ static struct PreambleRec_s const preamb @@ -1103,7 +1103,7 @@ static struct PreambleRec_s const preamb
{RPMTAG_SUGGESTNAME, 0, 0, 0, LEN_AND_STR("suggests")}, {RPMTAG_SUGGESTNAME, 2, 0, 0, 0, LEN_AND_STR("suggests")},
{RPMTAG_SUPPLEMENTNAME, 0, 0, 0, LEN_AND_STR("supplements")}, {RPMTAG_SUPPLEMENTNAME, 2, 0, 0, 0, LEN_AND_STR("supplements")},
{RPMTAG_ENHANCENAME, 0, 0, 0, LEN_AND_STR("enhances")}, {RPMTAG_ENHANCENAME, 2, 0, 0, 0, LEN_AND_STR("enhances")},
- {RPMTAG_PREREQ, 2, 1, 0, LEN_AND_STR("prereq")}, - {RPMTAG_PREREQ, 2, 1, 0, 0, LEN_AND_STR("prereq")},
+ {RPMTAG_PREREQ, 2, 0, 0, LEN_AND_STR("prereq")}, + {RPMTAG_PREREQ, 2, 0, 0, 0, LEN_AND_STR("prereq")},
{RPMTAG_CONFLICTNAME, 0, 0, 0, LEN_AND_STR("conflicts")}, {RPMTAG_CONFLICTNAME, 0, 0, 0, 0, LEN_AND_STR("conflicts")},
{RPMTAG_OBSOLETENAME, 0, 0, 0, LEN_AND_STR("obsoletes")}, {RPMTAG_OBSOLETENAME, 0, 0, 0, 0, LEN_AND_STR("obsoletes")},
{RPMTAG_PREFIXES, 0, 0, 1, LEN_AND_STR("prefixes")}, {RPMTAG_PREFIXES, 0, 0, 1, 0, LEN_AND_STR("prefixes")},
@@ -1041,7 +1041,7 @@ static struct PreambleRec_s const preamb @@ -1113,7 +1113,7 @@ static struct PreambleRec_s const preamb
{RPMTAG_BUILDARCHS, 0, 0, 0, LEN_AND_STR("buildarchitectures")}, {RPMTAG_BUILDARCHS, 0, 0, 0, 0, LEN_AND_STR("buildarch")},
{RPMTAG_BUILDARCHS, 0, 0, 0, LEN_AND_STR("buildarch")}, {RPMTAG_BUILDCONFLICTS, 0, 0, 0, 1, LEN_AND_STR("buildconflicts")},
{RPMTAG_BUILDCONFLICTS, 0, 0, 0, LEN_AND_STR("buildconflicts")}, {RPMTAG_BUILDOPTION, 2, 0, 0, 1, LEN_AND_STR("buildoption")},
- {RPMTAG_BUILDPREREQ, 0, 1, 0, LEN_AND_STR("buildprereq")}, - {RPMTAG_BUILDPREREQ, 0, 1, 0, 1, LEN_AND_STR("buildprereq")},
+ {RPMTAG_BUILDPREREQ, 0, 0, 0, LEN_AND_STR("buildprereq")}, + {RPMTAG_BUILDPREREQ, 0, 0, 0, 1, LEN_AND_STR("buildprereq")},
{RPMTAG_BUILDREQUIRES, 0, 0, 0, LEN_AND_STR("buildrequires")}, {RPMTAG_BUILDREQUIRES, 0, 0, 0, 1, LEN_AND_STR("buildrequires")},
{RPMTAG_AUTOREQPROV, 0, 0, 0, LEN_AND_STR("autoreqprov")}, {RPMTAG_BUILDSYSTEM, 0, 0, 1, 1, LEN_AND_STR("buildsystem")},
{RPMTAG_AUTOREQ, 0, 0, 0, LEN_AND_STR("autoreq")}, {RPMTAG_AUTOREQPROV, 0, 0, 0, 0, LEN_AND_STR("autoreqprov")},

View File

@ -1,5 +1,5 @@
--- include/rpm/rpmcli.h.orig 2023-09-19 10:10:10.000000000 +0000 --- include/rpm/rpmcli.h.orig 2024-10-07 09:35:46.000000000 +0000
+++ include/rpm/rpmcli.h 2023-10-12 11:43:59.662617302 +0000 +++ include/rpm/rpmcli.h 2024-12-16 09:31:12.446494695 +0000
@@ -306,6 +306,7 @@ enum rpmInstallFlags_e { @@ -306,6 +306,7 @@ enum rpmInstallFlags_e {
INSTALL_ALLMATCHES = (1 << 9), /*!< from --allmatches */ INSTALL_ALLMATCHES = (1 << 9), /*!< from --allmatches */
INSTALL_REINSTALL = (1 << 10), /*!< from --reinstall */ INSTALL_REINSTALL = (1 << 10), /*!< from --reinstall */
@ -24,8 +24,8 @@
*/ */
extern struct rpmInstallArguments_s rpmIArgs; extern struct rpmInstallArguments_s rpmIArgs;
--- include/rpm/rpmts.h.orig 2023-10-12 11:43:35.870664176 +0000 --- include/rpm/rpmts.h.orig 2024-12-16 09:30:58.714522978 +0000
+++ include/rpm/rpmts.h 2023-10-12 11:43:59.662617302 +0000 +++ include/rpm/rpmts.h 2024-12-16 09:31:12.446494695 +0000
@@ -253,6 +253,15 @@ int rpmtsOrder(rpmts ts); @@ -253,6 +253,15 @@ int rpmtsOrder(rpmts ts);
int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet); int rpmtsRun(rpmts ts, rpmps okProbs, rpmprobFilterFlags ignoreSet);
@ -42,8 +42,8 @@
* Reference a transaction set instance. * Reference a transaction set instance.
* @param ts transaction set * @param ts transaction set
* @return new transaction set reference * @return new transaction set reference
--- lib/poptI.c.orig 2023-09-19 10:10:10.000000000 +0000 --- lib/poptI.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/poptI.c 2023-10-12 11:43:59.662617302 +0000 +++ lib/poptI.c 2024-12-16 09:31:12.446494695 +0000
@@ -283,6 +283,10 @@ struct poptOption rpmInstallPoptTable[] @@ -283,6 +283,10 @@ struct poptOption rpmInstallPoptTable[]
&rpmIArgs.installInterfaceFlags, (INSTALL_RESTORE), &rpmIArgs.installInterfaceFlags, (INSTALL_RESTORE),
N_("restore package(s)"), N_("restore package(s)"),
@ -55,9 +55,9 @@
POPT_TABLEEND POPT_TABLEEND
}; };
--- lib/psm.c.orig 2023-10-12 11:43:35.850664215 +0000 --- lib/psm.c.orig 2024-12-16 09:30:58.694523019 +0000
+++ lib/psm.c 2023-10-12 11:43:59.662617302 +0000 +++ lib/psm.c 2024-12-16 09:31:12.446494695 +0000
@@ -1001,7 +1001,7 @@ static rpmRC rpmPackageErase(rpmts ts, r @@ -1000,7 +1000,7 @@ static rpmRC rpmPackageErase(rpmts ts, r
} }
if (rc) break; if (rc) break;
@ -66,8 +66,8 @@
/* Prepare post transaction uninstall triggers */ /* Prepare post transaction uninstall triggers */
rpmtriggersPrepPostUnTransFileTrigs(psm->ts, psm->te); rpmtriggersPrepPostUnTransFileTrigs(psm->ts, psm->te);
} }
--- lib/rpminstall.c.orig 2023-09-19 10:10:10.000000000 +0000 --- lib/rpminstall.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/rpminstall.c 2023-10-12 11:43:59.662617302 +0000 +++ lib/rpminstall.c 2024-12-16 09:31:12.446494695 +0000
@@ -6,6 +6,8 @@ @@ -6,6 +6,8 @@
#include <string.h> #include <string.h>
@ -98,7 +98,7 @@
+ goto exit; + goto exit;
+ } + }
+ while ((s = fgets(line, sizeof(line) - 1, f)) != 0) { + while ((s = fgets(line, sizeof(line) - 1, f)) != 0) {
+ if (p = strrchr(s, '\n')) + if ((p = strrchr(s, '\n')) != 0)
+ *p = 0; + *p = 0;
+ argvAdd(&manifest, s); + argvAdd(&manifest, s);
+ } + }
@ -110,8 +110,8 @@
+ argvFree(manifest); + argvFree(manifest);
+ return rc; + return rc;
+} +}
--- lib/rpmtriggers.c.orig 2023-09-19 10:10:10.000000000 +0000 --- lib/rpmtriggers.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/rpmtriggers.c 2023-10-12 11:43:59.662617302 +0000 +++ lib/rpmtriggers.c 2024-12-16 09:31:12.446494695 +0000
@@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
#include "system.h" #include "system.h"
@ -128,7 +128,7 @@
unsigned int tix, unsigned int priority) unsigned int tix, unsigned int priority)
{ {
if (trigs->count == trigs->alloced) { if (trigs->count == trigs->alloced) {
@@ -178,6 +179,14 @@ int runPostUnTransFileTrigs(rpmts ts) @@ -190,6 +191,14 @@ int runPostUnTransFileTrigs(rpmts ts)
if (trigH == NULL) if (trigH == NULL)
continue; continue;
@ -143,7 +143,7 @@
/* Prepare and run script */ /* Prepare and run script */
script = rpmScriptFromTriggerTag(trigH, script = rpmScriptFromTriggerTag(trigH,
triggertag(RPMSENSE_TRIGGERPOSTUN), triggertag(RPMSENSE_TRIGGERPOSTUN),
@@ -587,6 +596,16 @@ rpmRC runImmedFileTriggers(rpmts ts, rpm @@ -610,6 +619,16 @@ rpmRC runImmedFileTriggers(rpmts ts, rpm
rpmTagVal priorityTag; rpmTagVal priorityTag;
rpmtriggers triggers; rpmtriggers triggers;
@ -160,9 +160,9 @@
if (tm == RPMSCRIPT_FILETRIGGER) { if (tm == RPMSCRIPT_FILETRIGGER) {
priorityTag = RPMTAG_FILETRIGGERPRIORITIES; priorityTag = RPMTAG_FILETRIGGERPRIORITIES;
} else { } else {
--- lib/rpmtriggers.h.orig 2023-09-19 10:10:10.000000000 +0000 --- lib/rpmtriggers.h.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/rpmtriggers.h 2023-10-12 11:43:59.662617302 +0000 +++ lib/rpmtriggers.h 2024-12-16 09:31:12.446494695 +0000
@@ -27,6 +27,10 @@ rpmtriggers rpmtriggersCreate(unsigned i @@ -24,6 +24,10 @@ rpmtriggers rpmtriggersCreate(unsigned i
RPM_GNUC_INTERNAL RPM_GNUC_INTERNAL
rpmtriggers rpmtriggersFree(rpmtriggers triggers); rpmtriggers rpmtriggersFree(rpmtriggers triggers);
@ -173,9 +173,9 @@
/* /*
* Prepare post trans uninstall file triggers. After transcation uninstalled * Prepare post trans uninstall file triggers. After transcation uninstalled
* files are not saved anywhere. So we need during uninstalation of every * files are not saved anywhere. So we need during uninstalation of every
--- lib/rpmts_internal.h.orig 2023-09-19 10:10:10.000000000 +0000 --- lib/rpmts_internal.h.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/rpmts_internal.h 2023-10-12 11:43:59.662617302 +0000 +++ lib/rpmts_internal.h 2024-12-16 09:31:12.446494695 +0000
@@ -94,6 +94,8 @@ struct rpmts_s { @@ -83,6 +83,8 @@ struct rpmts_s {
int min_writes; /*!< macro minimize_writes used */ int min_writes; /*!< macro minimize_writes used */
time_t overrideTime; /*!< Time value used when overriding system clock. */ time_t overrideTime; /*!< Time value used when overriding system clock. */
@ -183,9 +183,9 @@
+ int dump_posttrans; /*!< macro dump_posttrans used */ + int dump_posttrans; /*!< macro dump_posttrans used */
}; };
#ifdef __cplusplus /** \ingroup rpmts
--- lib/transaction.c.orig 2023-09-19 10:10:10.000000000 +0000 --- lib/transaction.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ lib/transaction.c 2023-10-12 11:44:28.398560689 +0000 +++ lib/transaction.c 2024-12-16 09:37:17.425742632 +0000
@@ -1475,6 +1475,8 @@ static int rpmtsSetup(rpmts ts, rpmprobF @@ -1475,6 +1475,8 @@ static int rpmtsSetup(rpmts ts, rpmprobF
/* Get available space on mounted file systems. */ /* Get available space on mounted file systems. */
(void) rpmtsInitDSI(ts); (void) rpmtsInitDSI(ts);
@ -195,44 +195,23 @@
return 0; return 0;
} }
@@ -1858,27 +1860,31 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rp @@ -1858,6 +1860,15 @@ int rpmtsRun(rpmts ts, rpmps okProbs, rp
/* Actually install and remove packages */ /* Actually install and remove packages */
nfailed = rpmtsProcess(ts); nfailed = rpmtsProcess(ts);
+ if (ts->dump_posttrans) { + if (ts->dump_posttrans) {
+ rpmlog(RPMLOG_NOTICE, "dump_posttrans: enabled\n"); + rpmlog(RPMLOG_NOTICE, "dump_posttrans: enabled\n");
+ runPostUnTransFileTrigs(ts);
+ runTransScripts(ts, PKG_TRANSFILETRIGGERIN);
+ /* Final exit code */
+ rc = nfailed ? -1 : 0;
+ goto exit;
+ } + }
+ +
/* Run %posttrans scripts unless disabled */ /* Run %posttrans scripts unless disabled */
- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS))) { if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS))) {
+ if (!ts->dump_posttrans && !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS))) {
rpmlog(RPMLOG_DEBUG, "running %%posttrans scripts\n"); rpmlog(RPMLOG_DEBUG, "running %%posttrans scripts\n");
runTransScripts(ts, PKG_POSTTRANS); @@ -1901,3 +1912,117 @@ exit:
}
/* Run %postuntrans scripts unless disabled */
- if (!(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOSTUNTRANS)) {
+ if (!ts->dump_posttrans && !(rpmtsFlags(ts) & RPMTRANS_FLAG_NOPOSTUNTRANS)) {
rpmlog(RPMLOG_DEBUG, "running %%postuntrans scripts\n");
runTransScripts(ts, PKG_POSTUNTRANS);
}
/* Run %transfiletriggerpostun scripts unless disabled */
- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) {
+ if (!ts->dump_posttrans && !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) {
runFileTriggers(ts, NULL, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0);
}
- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) {
+ if (ts->dump_posttrans || !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERPOSTUN))) {
runPostUnTransFileTrigs(ts);
}
/* Run %transfiletriggerin scripts unless disabled */
- if (!(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) {
+ if (ts->dump_posttrans || !(rpmtsFlags(ts) & (RPMTRANS_FLAG_NOPOSTTRANS|RPMTRANS_FLAG_NOTRIGGERIN))) {
runTransScripts(ts, PKG_TRANSFILETRIGGERIN);
}
/* Final exit code */
@@ -1901,3 +1907,117 @@ exit:
sigaction(SIGPIPE, &oact, NULL); sigaction(SIGPIPE, &oact, NULL);
return rc; return rc;
} }
@ -336,7 +315,7 @@
+ runTransScripts(ts, PKG_POSTTRANS); + runTransScripts(ts, PKG_POSTTRANS);
+ runTransScripts(ts, PKG_POSTUNTRANS); + runTransScripts(ts, PKG_POSTUNTRANS);
+ /* run %transfiletriggerin scripts */ + /* run %transfiletriggerin scripts */
+ runFileTriggers(ts, NULL, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0); + runFileTriggers(ts, NULL, -1, RPMSENSE_TRIGGERIN, RPMSCRIPT_TRANSFILETRIGGER, 0);
+ /* run %transfiletriggerpostun scrips */ + /* run %transfiletriggerpostun scrips */
+ runPostUnTransFileTrigs(ts); + runPostUnTransFileTrigs(ts);
+ /* Run immed %transfiletriggerin scripts */ + /* Run immed %transfiletriggerin scripts */
@ -350,8 +329,8 @@
+ rpmtsEmpty(ts); + rpmtsEmpty(ts);
+ return rc; + return rc;
+} +}
--- tools/rpm.c.orig 2023-09-19 10:10:10.000000000 +0000 --- tools/rpm.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ tools/rpm.c 2023-10-12 11:43:59.662617302 +0000 +++ tools/rpm.c 2024-12-16 09:31:12.446494695 +0000
@@ -21,6 +21,7 @@ enum modes { @@ -21,6 +21,7 @@ enum modes {
MODE_ERASE = (1 << 2), MODE_ERASE = (1 << 2),
MODE_RESTORE = (1 << 4), MODE_RESTORE = (1 << 4),

View File

@ -1,3 +1,8 @@
-------------------------------------------------------------------
Mon Dec 16 11:55:23 CET 2024 - mls@suse.de
- update to rpm-4.20.0
------------------------------------------------------------------- -------------------------------------------------------------------
Fri Feb 9 11:34:31 CET 2024 - mls@suse.de Fri Feb 9 11:34:31 CET 2024 - mls@suse.de
@ -36,7 +41,7 @@ Fri Dec 2 15:09:55 CET 2022 - mls@suse.de
- update to rpm-4.18.0 - update to rpm-4.18.0
------------------------------------------------------------------ -------------------------------------------------------------------
Thu Jul 21 16:11:22 CEST 2022 - mls@suse.de Thu Jul 21 16:11:22 CEST 2022 - mls@suse.de
- update to rpm-4.17.1 - update to rpm-4.17.1

View File

@ -1,7 +1,7 @@
# #
# spec file for package python-rpm # spec file for package python-rpm
# #
# Copyright (c) 2024 SUSE LLC # Copyright (c) 2025 SUSE LLC
# Copyright (c) 2017 Neal Gompa <ngompa13@gmail.com>. # Copyright (c) 2017 Neal Gompa <ngompa13@gmail.com>.
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
@ -20,7 +20,7 @@
# Enable Python build sourced from rpm spec # Enable Python build sourced from rpm spec
%global with_python 1 %global with_python 1
Name: python-rpm Name: python-rpm
Version: 4.19.1.1 Version: 4.20.0
Release: 0 Release: 0
Summary: Python Bindings for Manipulating RPM Packages Summary: Python Bindings for Manipulating RPM Packages
License: GPL-2.0-or-later License: GPL-2.0-or-later
@ -32,6 +32,7 @@ BuildRequires: cmake
BuildRequires: fdupes BuildRequires: fdupes
BuildRequires: file-devel BuildRequires: file-devel
BuildRequires: libacl-devel BuildRequires: libacl-devel
BuildRequires: libarchive-devel
BuildRequires: libbz2-devel BuildRequires: libbz2-devel
BuildRequires: libcap-devel BuildRequires: libcap-devel
BuildRequires: libdw-devel BuildRequires: libdw-devel

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:874091b80efe66f9de8e3242ae2337162e2d7131e3aa4ac99ac22155e9c521e5
size 5849649

3
rpm-4.20.0.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:56ff7638cff98b56d4a7503ff59bc79f281a6ddffcda0d238c082bedfb5fbe7b
size 5984513

View File

@ -1,3 +1,100 @@
-------------------------------------------------------------------
Wed Feb 12 13:36:45 CET 2025 - mls@suse.de
- make the rpm package not depend on libarchive
* move the rpmuncompress tool to rpm-build
* rewrite rpm2archive to not use libarchive for cpio/tar writing
* new patch: rpm2archive.diff
- revert buildroot macro setting that did more harm than good
- add set_to_buildtime and set_to_source_date_epoch mtime policy
support
* new patch: mtime_policy_set.diff
- drop unused 0001-Add-option-to-set-mtime-of-files-in-rpms.patch
patch
- do not output debug messages in rpmspec -q if a buildsystem is
used
* new patch: buildsys.diff
-------------------------------------------------------------------
Mon Feb 3 13:13:27 CET 2025 - mls@suse.de
- allow to have the primary binding signature in the unhashed area
* updated rpmpgp_legacy-1.0.tar.gz to rpmpgp_legacy-1.1.tar.gz
-------------------------------------------------------------------
Thu Jan 30 12:17:34 CET 2025 - mls@suse.de
- Split unshare plugin configuration into a new "rpm-plugin-unshare"
subpackage. This disables the plugin unless the new package
is installed.
-------------------------------------------------------------------
Thu Jan 30 12:03:40 CET 2025 - Adrian Schröter <adrian@suse.de>
- enable config.guess/sub update also for loongarch64 architecture
- update config.guess/sub files to current state from autoconf-2.72
-------------------------------------------------------------------
Tue Jan 7 10:58:17 CET 2025 - mls@suse.de
- make misuses of %global with %buildroot work again
* new patch: undefbuildroot.diff
-------------------------------------------------------------------
Thu Dec 19 14:29:49 CET 2024 - mls@suse.de
- backport debug_package regression fix from upstream
* new patch: debugpackage.diff
- fix segfault in rpmtsNextFiles
* new patch: nextfiles.diff
-------------------------------------------------------------------
Tue Dec 17 10:59:26 CET 2024 - mls@suse.de
- allow the buildroot to be a symbolic link in check-files
(needed for pesign-obs-integration)
* new patch: buildroot-symlink.diff
-------------------------------------------------------------------
Mon Dec 16 11:55:23 CET 2024 - mls@suse.de
- update to rpm-4.20.0
* new BuildSystem directive
* support for build scriptley augmenting
* per-package build directory available as %builddir
* --build-in-place automatically sets --noprep
* new -C option for autosetup
* better support for reproducible builds
* support for group membership lines
* new rpm.spawn() lua function
* support indentation in spec tags
* new rpmdump tool
- switch to rpmpgp-legacy-1.0
- disable buildroot check in rpmlintrc for now
- refreshed patches:
* brp.diff macrosin.diff rpmqpack.diff specfilemacro.diff
* noprereqdeprec.diff fileattrs.diff assumeexec.diff
* enable-postin-scripts-error.diff findsupplements.diff
* db_conversion.diff canongnu.diff cmake_python_version.diff
* zstdpool.diff posttrans.diff
* auto-config-update-aarch64-ppc64le.diff
* 0002-log-build-time-if-it-is-set-from-SOURCE_DATE_EPOCH.patch
* 0003-Error-out-on-a-missing-changelog-date.patch
- add compatibility %buildroot definition
- backport unshare fix from upstream and extend it a bit
* new patch: unshare.diff
-------------------------------------------------------------------
Mon Nov 11 08:43:56 UTC 2024 - Michal Suchanek <msuchanek@suse.de>
- Bump debugedit version (bsc#1233156)
-------------------------------------------------------------------
Wed Sep 4 09:27:50 UTC 2024 - Dirk Stoecker <opensuse@dstoecker.de>
- move perl packaging to own package
adapt fileattrs.diff
------------------------------------------------------------------- -------------------------------------------------------------------
Fri Mar 1 12:55:27 UTC 2024 - Marcus Meissner <meissner@suse.com> Fri Mar 1 12:55:27 UTC 2024 - Marcus Meissner <meissner@suse.com>
@ -4813,4 +4910,3 @@ Thu Jun 26 19:10:48 MEST 1997 - ma@suse.de
- introducing rpm, version 2.4.1 - introducing rpm, version 2.4.1
- documentation (ascii,html) in usr/doc/packages/rpm - documentation (ascii,html) in usr/doc/packages/rpm

View File

@ -1,7 +1,7 @@
# #
# spec file for package rpm # spec file for package rpm
# #
# Copyright (c) 2024 SUSE LLC # Copyright (c) 2025 SUSE LLC
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed # remain the property of their copyright owners, unless otherwise agreed
@ -32,6 +32,7 @@ BuildRequires: gettext-devel
BuildRequires: glibc-devel BuildRequires: glibc-devel
BuildRequires: gzip BuildRequires: gzip
BuildRequires: libacl-devel BuildRequires: libacl-devel
BuildRequires: libarchive-devel
BuildRequires: libbz2-devel BuildRequires: libbz2-devel
BuildRequires: libcap-devel BuildRequires: libcap-devel
BuildRequires: libdw-devel BuildRequires: libdw-devel
@ -57,11 +58,13 @@ Requires: rpm-config-SUSE
Summary: The RPM Package Manager Summary: The RPM Package Manager
License: GPL-2.0-or-later License: GPL-2.0-or-later
Group: System/Packages Group: System/Packages
Version: 4.19.1.1 Version: 4.20.0
Release: 0 Release: 0
URL: https://rpm.org/ URL: https://rpm.org/
#Git-Clone: https://github.com/rpm-software-management/rpm #Git-Clone: https://github.com/rpm-software-management/rpm
Source: https://ftp.osuosl.org/pub/rpm/releases/rpm-4.19.x/rpm-%{version}.tar.bz2 Source: https://ftp.osuosl.org/pub/rpm/releases/rpm-4.19.x/rpm-%{version}.tar.bz2
#Git-Clone: https://github.com/rpm-software-management/rpmpgp_legacy
Source1: rpmpgp_legacy-1.1.tar.gz
Source5: rpmsort Source5: rpmsort
Source8: rpmconfigcheck Source8: rpmconfigcheck
Source9: sysconfig.services-rpm Source9: sysconfig.services-rpm
@ -113,9 +116,16 @@ Patch135: selinux_transactional_update.patch
Patch136: rpmsort_reverse.diff Patch136: rpmsort_reverse.diff
Patch138: canongnu.diff Patch138: canongnu.diff
Patch139: cmake_python_version.diff Patch139: cmake_python_version.diff
Patch140: 0001-Add-option-to-set-mtime-of-files-in-rpms.patch
Patch141: 0002-log-build-time-if-it-is-set-from-SOURCE_DATE_EPOCH.patch Patch141: 0002-log-build-time-if-it-is-set-from-SOURCE_DATE_EPOCH.patch
Patch142: 0003-Error-out-on-a-missing-changelog-date.patch Patch142: 0003-Error-out-on-a-missing-changelog-date.patch
Patch150: unshare.diff
Patch151: buildroot-symlink.diff
Patch152: debugpackage.diff
Patch153: nextfiles.diff
Patch154: undefbuildroot.diff
Patch155: rpm2archive.diff
Patch156: mtime_policy_set.diff
Patch157: buildsys.diff
Patch6464: auto-config-update-aarch64-ppc64le.diff Patch6464: auto-config-update-aarch64-ppc64le.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRoot: %{_tmppath}/%{name}-%{version}-build
# #
@ -187,7 +197,7 @@ Requires: util-linux
Requires: which Requires: which
Requires: xz Requires: xz
# needed for debuginfo generation # needed for debuginfo generation
Requires: debugedit = 5.0 Requires: debugedit >= 5.0
# drop candidates # drop candidates
Requires: cpio Requires: cpio
Requires: file Requires: file
@ -201,19 +211,22 @@ Conflicts: rpm < 4.15.0
If you want to build a rpm, you need this package. It provides rpmbuild If you want to build a rpm, you need this package. It provides rpmbuild
and requires some packages that are usually required. and requires some packages that are usually required.
%package build-perl %package plugin-unshare
Summary: RPM dependency generator for Perl Summary: Rpm plugin for Linux namespace isolation functionality
Group: Development/Languages/Perl Requires: rpm = %{version}
Requires: perl-base
%description build-perl %description plugin-unshare
Provides and requires generator for .pl files and modules. Rpm plugin for Linux namespace isolation functionality.
%prep %prep
%setup -q -n rpm-%{version} %setup -q -n rpm-%{version}
%ifarch aarch64 ppc64le riscv64 %ifarch aarch64 ppc64le riscv64 loongarch64
tar xf %{SOURCE14} tar xf %{SOURCE14}
%endif %endif
pushd rpmio
tar xf %{SOURCE1}
ln -s rpmpgp_legacy-* rpmpgp_legacy
popd
rm -rf sqlite rm -rf sqlite
%patch -P 5 -P 12 -P 13 -P 18 %patch -P 5 -P 12 -P 13 -P 18
@ -230,9 +243,10 @@ rm -rf sqlite
%patch -P 122 -P 123 %patch -P 122 -P 123
%patch -P 131 -P 133 -P 134 -P 135 -P 136 -P 138 %patch -P 131 -P 133 -P 134 -P 135 -P 136 -P 138
%patch -P 139 %patch -P 139
%patch -P 140 -P 141 -P 142 -p1 %patch -P 141 -P 142
%patch -P 150 -P 151 -P 152 -P 153 -P 154 -P 155 -P 156 -P 157
%ifarch aarch64 ppc64le riscv64 %ifarch aarch64 ppc64le riscv64 loongarch64
%patch -P 6464 %patch -P 6464
%endif %endif
@ -270,10 +284,11 @@ cmake .. \
-DCMAKE_INSTALL_FULL_SHAREDSTATEDIR:PATH=/var/lib \ -DCMAKE_INSTALL_FULL_SHAREDSTATEDIR:PATH=/var/lib \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DRPM_VENDOR=suse \ -DRPM_VENDOR=suse \
-DWITH_ARCHIVE=OFF \ -DWITH_ARCHIVE=ON \
-DWITH_READLINE=OFF \ -DWITH_READLINE=OFF \
-DWITH_SELINUX=ON \ -DWITH_SELINUX=ON \
-DWITH_INTERNAL_OPENPGP=ON \ -DWITH_SEQUOIA=OFF \
-DWITH_LEGACY_OPENPGP=ON \
-DENABLE_NDB=ON \ -DENABLE_NDB=ON \
-DENABLE_BDB_RO=ON \ -DENABLE_BDB_RO=ON \
-DENABLE_SQLITE=OFF \ -DENABLE_SQLITE=OFF \
@ -345,7 +360,7 @@ for i in /usr/share/automake-*/*; do
fi fi
done done
popd popd
%ifarch aarch64 ppc64le riscv64 %ifarch aarch64 ppc64le riscv64 loongarch64
install -m 755 build-aux/config.guess %{buildroot}/usr/lib/rpm install -m 755 build-aux/config.guess %{buildroot}/usr/lib/rpm
install -m 755 build-aux/config.sub %{buildroot}/usr/lib/rpm install -m 755 build-aux/config.sub %{buildroot}/usr/lib/rpm
%endif %endif
@ -404,12 +419,15 @@ fi
%license COPYING %license COPYING
%doc %{_datadir}/doc/packages/rpm %doc %{_datadir}/doc/packages/rpm
%exclude %{_datadir}/doc/packages/rpm/API %exclude %{_datadir}/doc/packages/rpm/API
%exclude /usr/lib/rpm/macros.d/macros.transaction_unshare
%exclude %{_mandir}/man8/rpm-plugin-unshare*
/etc/rpm /etc/rpm
%if 0%{?suse_version} < 1550 %if 0%{?suse_version} < 1550
/bin/rpm /bin/rpm
%endif %endif
%{_bindir}/gendiff %{_bindir}/gendiff
%{_bindir}/rpm %{_bindir}/rpm
%{_bindir}/rpm2archive
%{_bindir}/rpm2cpio %{_bindir}/rpm2cpio
%{_bindir}/rpmdb %{_bindir}/rpmdb
%{_bindir}/rpmgraph %{_bindir}/rpmgraph
@ -431,7 +449,7 @@ fi
/usr/lib/rpm/rpmpopt-* /usr/lib/rpm/rpmpopt-*
/usr/lib/rpm/rpmrc /usr/lib/rpm/rpmrc
/usr/lib/rpm/rpmsort /usr/lib/rpm/rpmsort
/usr/lib/rpm/rpmuncompress /usr/lib/rpm/rpmdump
/usr/lib/rpm/suse /usr/lib/rpm/suse
/usr/lib/rpm/tgpg /usr/lib/rpm/tgpg
%{_libdir}/rpm-plugins %{_libdir}/rpm-plugins
@ -463,27 +481,19 @@ fi
/usr/lib/rpm/rpm_macros_provides.sh /usr/lib/rpm/rpm_macros_provides.sh
/usr/lib/rpm/elfdeps /usr/lib/rpm/elfdeps
/usr/lib/rpm/rpmdeps /usr/lib/rpm/rpmdeps
/usr/lib/rpm/rpmuncompress
/usr/bin/rpmspec /usr/bin/rpmspec
/usr/lib/rpm/brp-* /usr/lib/rpm/brp-*
/usr/lib/rpm/check-* /usr/lib/rpm/check-*
/usr/lib/rpm/*find* /usr/lib/rpm/*find*
/usr/lib/rpm/fileattrs/ /usr/lib/rpm/fileattrs/
%exclude /usr/lib/rpm/fileattrs/perl*.attr
/usr/lib/rpm/*.prov /usr/lib/rpm/*.prov
%exclude /usr/lib/rpm/perl.prov
/usr/lib/rpm/*.req /usr/lib/rpm/*.req
%exclude /usr/lib/rpm/perl.req %ifarch aarch64 ppc64le riscv64 loongarch64
%ifarch aarch64 ppc64le riscv64
/usr/lib/rpm/config.guess /usr/lib/rpm/config.guess
/usr/lib/rpm/config.sub /usr/lib/rpm/config.sub
%endif %endif
%files build-perl
%defattr(-,root,root)
/usr/lib/rpm/fileattrs/perl*.attr
/usr/lib/rpm/perl.prov
/usr/lib/rpm/perl.req
%files devel %files devel
%defattr(644,root,root,755) %defattr(644,root,root,755)
/usr/include/rpm /usr/include/rpm
@ -495,4 +505,9 @@ fi
%{_libdir}/cmake/rpm %{_libdir}/cmake/rpm
%doc %{_datadir}/doc/packages/rpm/API %doc %{_datadir}/doc/packages/rpm/API
%files plugin-unshare
%defattr(-,root,root)
/usr/lib/rpm/macros.d/macros.transaction_unshare
%doc %{_mandir}/man8/rpm-plugin-unshare*
%changelog %changelog

612
rpm2archive.diff Normal file
View File

@ -0,0 +1,612 @@
--- tools/CMakeLists.txt.orig 2025-02-13 09:56:00.257085875 +0000
+++ tools/CMakeLists.txt 2025-02-13 09:56:11.433064235 +0000
@@ -40,11 +40,8 @@ if (READLINE_FOUND)
target_link_libraries(rpmlua PRIVATE PkgConfig::READLINE)
endif()
-if (WITH_ARCHIVE)
- add_executable(rpm2archive rpm2archive.c)
- target_link_libraries(rpm2archive PRIVATE PkgConfig::LIBARCHIVE)
- install(TARGETS rpm2archive)
-endif()
+add_executable(rpm2archive rpm2archive.c)
+install(TARGETS rpm2archive)
# Everything links to these
get_property(executables DIRECTORY PROPERTY BUILDSYSTEM_TARGETS)
@@ -60,12 +57,10 @@ foreach(cmd rpmverify rpmquery)
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${cmd} TYPE BIN)
endforeach()
-if (WITH_ARCHIVE)
- add_custom_target(rpm2cpio ALL COMMAND
- ${CMAKE_COMMAND} -E create_symlink rpm2archive rpm2cpio
- )
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/rpm2cpio TYPE BIN)
-endif()
+add_custom_target(rpm2cpio ALL COMMAND
+ ${CMAKE_COMMAND} -E create_symlink rpm2archive rpm2cpio
+ )
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/rpm2cpio TYPE BIN)
if (WITH_CXX)
set (cxx_sources
--- tools/rpm2archive.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ tools/rpm2archive.c 2025-02-13 11:50:46.533098005 +0000
@@ -2,6 +2,14 @@
#include "system.h"
+#if defined(MAJOR_IN_MKDEV)
+#include <sys/mkdev.h>
+#elif defined(MAJOR_IN_SYSMACROS)
+#include <sys/sysmacros.h>
+#else
+#include <sys/types.h> /* already included from system.h */
+#endif
+
#include <rpm/rpmlib.h> /* rpmReadPackageFile .. */
#include <rpm/rpmfi.h>
#include <rpm/rpmstring.h>
@@ -12,8 +20,11 @@
#include <popt.h>
+#if 0
#include <archive.h>
#include <archive_entry.h>
+#endif
+
#include <unistd.h>
#include <errno.h>
#include <libgen.h>
@@ -36,6 +47,8 @@ static struct poptOption optionsTable[]
POPT_TABLEEND
};
+#if 0
+
static void fill_archive_entry(struct archive_entry * entry, rpmfi fi,
char **hardlink)
{
@@ -282,6 +295,540 @@ static int process_package(rpmts ts, con
return rc;
}
+#else
+
+static int do_fwrite(FD_t fdo, const void *p, size_t l)
+{
+ if (Fwrite(p, l, 1, fdo) != l) {
+ fprintf(stderr, "Error writing archive: %s\n", Fstrerror(fdo));
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+static int do_fwrite_content(FD_t fdo, char * buf, rpmfi fi)
+{
+ rpm_loff_t left = rpmfiFSize(fi);
+ size_t len, read;
+
+ while (left) {
+ len = (left > BUFSIZE ? BUFSIZE : left);
+ read = rpmfiArchiveRead(fi, buf, len);
+ if (read != len) {
+ fprintf(stderr, "Error reading file from rpm payload\n");
+ break;
+ }
+ if (do_fwrite(fdo, buf, len)) {
+ fprintf(stderr, "Error writing archive: %s\n", Fstrerror(fdo));
+ break;
+ }
+ left -= len;
+ }
+ return (left > 0);
+}
+
+/* cpio support */
+
+static inline void write_cpio_entry_num(unsigned char *p, unsigned long val)
+{
+ char space[64];
+ sprintf(space, "%8.8lx", val);
+ memcpy(p, space, 8);
+}
+
+static int write_cpio_entry(FD_t fdo, rpmfi fi, const char *filename, struct stat *st, const char *flink, const char *hlink, char *buf)
+{
+ unsigned char cpioh[110];
+ memcpy(cpioh, "070701", 6);
+ if (!fi) {
+ memset(cpioh + 6, '0', sizeof(cpioh) - 6);
+ write_cpio_entry_num(cpioh + 38, 1);
+ write_cpio_entry_num(cpioh + 94, 11);
+ if (do_fwrite(fdo, cpioh, sizeof(cpioh)))
+ return RPMRC_FAIL;
+ if (do_fwrite(fdo, "TRAILER!!!\0\0\0", 11 + 3))
+ return RPMRC_FAIL;
+ return RPMRC_OK;
+ }
+ if (st->st_size > UINT32_MAX) {
+ fprintf(stderr, "Warning: file too large for format, skipping: %s\n", filename);
+ return RPMRC_OK;
+ }
+ size_t fnl = strlen(filename);
+ write_cpio_entry_num(cpioh + 6, st->st_ino);
+ write_cpio_entry_num(cpioh + 14, st->st_mode);
+ write_cpio_entry_num(cpioh + 22, st->st_uid);
+ write_cpio_entry_num(cpioh + 30, st->st_gid);
+ write_cpio_entry_num(cpioh + 38, st->st_nlink);
+ write_cpio_entry_num(cpioh + 46, st->st_mtime);
+ write_cpio_entry_num(cpioh + 54, st->st_size);
+ write_cpio_entry_num(cpioh + 62, major(st->st_dev));
+ write_cpio_entry_num(cpioh + 70, minor(st->st_dev));
+ write_cpio_entry_num(cpioh + 78, major(st->st_rdev));
+ write_cpio_entry_num(cpioh + 86, minor(st->st_rdev));
+ write_cpio_entry_num(cpioh + 94, fnl + 1);
+ write_cpio_entry_num(cpioh + 102, 0);
+ if (do_fwrite(fdo, cpioh, sizeof(cpioh)))
+ return RPMRC_FAIL;
+ if (do_fwrite(fdo, filename, fnl + 1))
+ return RPMRC_FAIL;
+ fnl = (110 + fnl + 1) & 3;
+ if (fnl && do_fwrite(fdo, "\0\0\0", 4 - fnl))
+ return RPMRC_FAIL;
+ if (S_ISLNK(st->st_mode)) {
+ if (st->st_size != strlen(flink))
+ return RPMRC_FAIL;
+ if (do_fwrite(fdo, flink, st->st_size))
+ return RPMRC_FAIL;
+ } else if (S_ISREG(st->st_mode)) {
+ if (st->st_size && do_fwrite_content(fdo, buf, fi))
+ return RPMRC_FAIL;
+ } else {
+ return RPMRC_OK;
+ }
+ fnl = (st->st_size) & 3;
+ if (fnl && do_fwrite(fdo, "\0\0\0", 4 - fnl))
+ return RPMRC_FAIL;
+ return RPMRC_OK;
+}
+
+/* pax support */
+
+static void add_pax_attrib(char **paxbuf, const char *pax, const char *val)
+{
+ size_t ten, len = 1 + strlen(pax) + 1 + strlen(val) + 1;
+ for (ten = 1; ten <= len; ten *= 10)
+ len++;
+ if (*paxbuf)
+ *paxbuf = realloc(*paxbuf, strlen(*paxbuf) + len + 1);
+ else {
+ *paxbuf = xmalloc(len + 1);
+ **paxbuf = 0;
+ }
+ sprintf(*paxbuf + strlen(*paxbuf), "%llu %s=%s\n", (unsigned long long)len, pax, val);
+}
+
+static void set_pax_entry_num_base256(unsigned char *p, unsigned long long val, int size)
+{
+ /* use base-256 encoding */
+ unsigned char *pe = p + size;
+ for (; pe > p; val >>= 8)
+ *pe-- = (unsigned char)(val & 255);
+ *p |= 0x80;
+}
+
+static inline void set_pax_entry_num(unsigned char *p, unsigned long long val, int size, char *pax, char **paxbuf)
+{
+ char space[64];
+ int sz = size == 12 ? size - 1 : size - 2;
+ if (paxbuf && val >= (unsigned long long)1 << (sz * 3)) {
+ /* add pax header */
+ sprintf(space, "%llu", val);
+ add_pax_attrib(paxbuf, pax, space);
+ }
+ if (val >= (unsigned long long)1 << (size * 3)) {
+ set_pax_entry_num_base256(p, val, size);
+ return;
+ }
+ sprintf(space, "%0*llo ", sz, val);
+ memcpy(p, space, size);
+}
+
+static int pax_is_ascii(const char *val)
+{
+ for (; *val; val++)
+ if (*(const unsigned char *)val >= 0x80)
+ return 0;
+ return 1;
+}
+
+static inline void set_pax_entry_str(unsigned char *p, const char *val, int size, char *pax, char **paxbuf)
+{
+ size_t l = strlen(val);
+ if (paxbuf && (l > size || !pax_is_ascii(val)))
+ add_pax_attrib(paxbuf, pax, val);
+ memcpy(p, val, l < size ? l : size);
+}
+
+static void set_pax_path_mangle(unsigned char *paxh, const char *filename, const char *insert)
+{
+ size_t l = strlen(filename);
+ size_t ilen = insert ? strlen(insert) + 1 : 0;
+ const char *p, *p2, *bn;
+ int isdir = 0;
+ /* strip trailing '/' and '/.' components */
+ while (l && (filename[l - 1] == '/' || (filename[l - 1] == '.' && l > 1 && filename[l - 2] == '/'))) {
+ l--;
+ isdir = 1;
+ }
+ if (ilen) {
+ isdir = 0; /* no trailing slash for a PaxHeader */
+ if (l == 0) {
+ filename = "/rootdir";
+ l = 8;
+ } else if (l == 1 && filename[0] == '.') {
+ filename = "currentdir";
+ l = 10;
+ } else if (l == 2 && filename[0] == '.' && filename[1] == '.') {
+ filename = "parrentdir";
+ l = 10;
+ }
+ }
+ /* find the basename */
+ bn = filename + l;
+ while (bn > filename && bn[-1] != '/')
+ bn--;
+ /* truncate basename (we use 99 like libarchive so we can add a '/' if the prefix is empty) */
+ l -= bn - filename;
+ if (l > 99 - (ilen + isdir))
+ l = 99 - (ilen + isdir);
+ /* calculate prefix */
+ if (bn - filename <= 100 - (l + ilen + isdir)) {
+ p = filename; /* no need for a prefix */
+ } else {
+ p = bn - filename > 155 ? filename + 155 : bn;
+ while (p > filename && *p != '/')
+ p--;
+ /* move as much of the prefix into name as possible */
+ if (p > filename && bn - p < 99 - (l + ilen + isdir)) {
+ p2 = strchr(bn - (99 - (l + ilen + isdir)), '/');
+ if (p2 && p2 < p)
+ p = p2;
+ }
+ }
+ /* copy the prefix */
+ if (p != filename) {
+ memcpy(paxh + 345, filename, p - filename);
+ p++; /* skip the '/' */
+ }
+ /* copy rest of the dir */
+ p2 = p + (99 - (l + ilen + isdir)) > bn ? bn : p + (99 - (l + ilen + isdir));
+ while (p2 > p && *p2 != '/')
+ p2--;
+ if (p2 < bn && *p2 == '/')
+ p2++; /* always fits as we used 99 as size limit above */
+ memcpy(paxh, p, p2 - p);
+ /* copy the insert */
+ if (ilen) {
+ memcpy(paxh + (p2 - p), insert, ilen);
+ paxh[p2 - p + ilen - 1] = '/';
+ }
+ /* copy the basename */
+ memcpy(paxh + (p2 - p) + ilen, bn, l);
+ if (isdir)
+ paxh[p2 - p + ilen + l] = '/';
+}
+
+static int set_pax_path(unsigned char *paxh, const char *filename)
+{
+ size_t l = strlen(filename);
+ if (l <= 100) {
+ memcpy(paxh, filename, l);
+ return 0;
+ }
+ const char *p = strchr(filename + l - 100 - 1, '/');
+ if (p == filename)
+ p = strchr(filename + 1, '/');
+ if (p && p[1] && p - filename <= 155) {
+ memcpy(paxh, p + 1, l - (p + 1 - filename));
+ memcpy(paxh + 345, filename, p - filename);
+ return 0;
+ }
+ set_pax_path_mangle(paxh, filename, NULL);
+ return 1;
+}
+
+static int write_pax_entry_pax(FD_t fdo, rpmfi fi, const char *filename, struct stat *st, char *paxbuf);
+
+static int write_pax_entry(FD_t fdo, rpmfi fi, const char *filename, struct stat *st, const char *flink, const char *hlink, char *buf)
+{
+ unsigned char paxh[512];
+ int tartype = -1;
+ rpm_loff_t size = 0;
+
+ memset(paxh, 0, sizeof(paxh));
+ if (!fi) {
+ if (do_fwrite(fdo, paxh, sizeof(paxh)))
+ return RPMRC_FAIL;
+ if (do_fwrite(fdo, paxh, sizeof(paxh)))
+ return RPMRC_FAIL;
+ return RPMRC_OK;
+ }
+ if (filename == NULL && flink)
+ tartype = 'x';
+ else if (S_ISREG(st->st_mode))
+ tartype = st->st_nlink > 1 && !rpmfiArchiveHasContent(fi) ? '1' : '0';
+ else if (S_ISLNK(st->st_mode))
+ tartype = '2';
+ else if (S_ISCHR(st->st_mode))
+ tartype = '3';
+ else if (S_ISBLK(st->st_mode))
+ tartype = '4';
+ else if (S_ISDIR(st->st_mode))
+ tartype = '5';
+ else if (S_ISFIFO(st->st_mode))
+ tartype = '6';
+ if (tartype == -1) {
+ fprintf(stderr, "Warning: unsupported file type, skipping: %s\n", filename);
+ return RPMRC_OK;
+ }
+ if (tartype == '5') {
+ size_t l = strlen(filename);
+ if (!l || filename[l - 1] != '/') {
+ char *dirfilename = rstrscat(NULL, filename, "/", NULL);
+ int r = write_pax_entry(fdo, fi, dirfilename, st, flink, hlink, buf);
+ _free(dirfilename);
+ return r;
+ }
+ }
+ if (tartype == '0' || tartype == '1')
+ size = rpmfiFSize(fi);
+ else if (tartype == 'x')
+ size = (rpm_loff_t)strlen(buf);
+
+ /* fill entry header */
+ char *paxbuf = NULL;
+ char **paxbufp = tartype == 'x' ? NULL : &paxbuf;
+ if (tartype == 'x') {
+ set_pax_path_mangle(paxh, flink, "PaxHeader");
+ } else {
+ if (set_pax_path(paxh, filename) || !pax_is_ascii(filename))
+ add_pax_attrib(paxbufp, "path", filename);
+ }
+ set_pax_entry_num(paxh + 100, st->st_mode & 07777, 8, NULL, NULL);
+ set_pax_entry_num(paxh + 108, st->st_uid, 8, "uid", paxbufp);
+ set_pax_entry_num(paxh + 116, st->st_gid, 8, "gid", paxbufp);
+ set_pax_entry_num(paxh + 124, size, 12, "size", paxbufp);
+ set_pax_entry_num(paxh + 136, st->st_mtime, 12, "mtime", paxbufp);
+ memset(paxh + 148, ' ', 8);
+ paxh[156] = tartype;
+ if (tartype == '1' || tartype == '2')
+ set_pax_entry_str(paxh + 157, tartype == '1' ? hlink : flink, 100, "linkpath", paxbufp);
+ memcpy(paxh + 257, "ustar\00000", 8);
+ set_pax_entry_str(paxh + 265, rpmfiFUser(fi), 32, "user", paxbufp);
+ set_pax_entry_str(paxh + 297, rpmfiFGroup(fi), 32, "group", paxbufp);
+ set_pax_entry_num(paxh + 329, major(st->st_rdev), 8, "SCHILY.devmajor", paxbufp);
+ set_pax_entry_num(paxh + 337, minor(st->st_rdev), 8, "SCHILY.devminor", paxbufp);
+ int i, checksum = 0;
+ for (i = 0; i < 512; i++)
+ checksum += paxh[i];
+ set_pax_entry_num(paxh + 148, checksum, 8, NULL, NULL);
+ paxh[148 + 6] = 0;
+ paxh[148 + 7] = ' ';
+ /* write pax header if we need it */
+ if (paxbuf) {
+ int r = write_pax_entry_pax(fdo, fi, filename, st, paxbuf);
+ free(paxbuf);
+ if (r)
+ return RPMRC_FAIL;
+ }
+ /* write entry header */
+ if (do_fwrite(fdo, paxh, 512))
+ return RPMRC_FAIL;
+ if (tartype != '0' && tartype != 'x')
+ return RPMRC_OK; /* no content for those types */
+ /* write content */
+ if (tartype == '0' && size && do_fwrite_content(fdo, buf, fi))
+ return RPMRC_FAIL;
+ if (tartype == 'x' && size && do_fwrite(fdo, buf, size))
+ return RPMRC_FAIL;
+ /* write padding */
+ size &= 511;
+ if (size) {
+ memset(paxh, 0, sizeof(paxh));
+ if (do_fwrite(fdo, paxh, 512 - size))
+ return RPMRC_FAIL;
+ }
+ return RPMRC_OK;
+}
+
+static int write_pax_entry_pax(FD_t fdo, rpmfi fi, const char *filename, struct stat *st, char *paxbuf)
+{
+ /* tweak stat data and filename */
+ struct stat paxst = *st;
+ paxst.st_size = strlen(paxbuf);
+ paxst.st_mode = paxst.st_mode & 0777;
+ if (paxst.st_uid >= (1 << 18))
+ paxst.st_uid = (1 << 18) - 1;
+ if (paxst.st_gid >= (1 << 18))
+ paxst.st_gid = (1 << 18) - 1;
+ if (paxst.st_mtime < 0)
+ paxst.st_mtime = 0;
+ if ((unsigned long long)paxst.st_mtime >= 1ULL << 33)
+ paxst.st_mtime = (time_t)((1ULL << 33) - 1);
+ return write_pax_entry(fdo, fi, NULL, &paxst, filename, NULL, paxbuf);
+}
+
+static int process_package(rpmts ts, const char * filename)
+{
+ FD_t fdi;
+ FD_t gzdi;
+ FD_t fdo;
+ Header h;
+ int rc = 0;
+ char * rpmio_flags = NULL;
+ int iscpio = 0;
+
+ if (!strcmp(filename, "-")) {
+ if(isatty(STDIN_FILENO)) {
+ fprintf(stderr, "Error: missing input RPM package\n");
+ exit(EXIT_FAILURE);
+ }
+ fdi = fdDup(STDIN_FILENO);
+ } else {
+ fdi = Fopen(filename, "r.ufdio");
+ }
+
+ if (Ferror(fdi)) {
+ fprintf(stderr, "rpm2archive: %s: %s\n",
+ filename, Fstrerror(fdi));
+ exit(EXIT_FAILURE);
+ }
+
+ rc = rpmReadPackageFile(ts, fdi, "rpm2cpio", &h);
+
+ switch (rc) {
+ case RPMRC_OK:
+ case RPMRC_NOKEY:
+ case RPMRC_NOTTRUSTED:
+ break;
+ case RPMRC_NOTFOUND:
+ fprintf(stderr, _("argument is not an RPM package\n"));
+ exit(EXIT_FAILURE);
+ break;
+ case RPMRC_FAIL:
+ default:
+ fprintf(stderr, _("error reading header from package\n"));
+ exit(EXIT_FAILURE);
+ break;
+ }
+
+
+ /* Retrieve payload size and compression type. */
+ { const char *compr = headerGetString(h, RPMTAG_PAYLOADCOMPRESSOR);
+ rpmio_flags = rstrscat(NULL, "r.", compr ? compr : "gzip", NULL);
+ }
+
+ gzdi = Fdopen(fdi, rpmio_flags); /* XXX gzdi == fdi */
+ free(rpmio_flags);
+
+ if (gzdi == NULL) {
+ fprintf(stderr, _("cannot re-open payload: %s\n"), Fstrerror(gzdi));
+ exit(EXIT_FAILURE);
+ }
+
+ if (rstreq(format, "pax")) {
+ iscpio = 0;
+ } else if (rstreq(format, "cpio")) {
+ iscpio = 1;
+ } else {
+ fprintf(stderr, "Error: Format %s is not supported\n", format);
+ exit(EXIT_FAILURE);
+ }
+
+ if (!isatty(STDOUT_FILENO)) {
+ fdo = fdDup(STDOUT_FILENO);
+ } else {
+ if (!strcmp(filename, "-")) {
+ fprintf(stderr, "Error: refusing to output archive data to a terminal.\n");
+ exit(EXIT_FAILURE);
+ }
+ char * outname;
+ if (urlIsURL(filename)) {
+ const char * fname = strrchr(filename, '/');
+ if (fname != NULL) {
+ fname++;
+ } else {
+ fname = filename;
+ }
+ outname = rstrscat(NULL, fname, NULL);
+ } else {
+ outname = rstrscat(NULL, filename, NULL);
+ }
+ if (compress) {
+ outname = rstrscat(&outname, ".tgz", NULL);
+ } else {
+ outname = rstrscat(&outname, ".tar", NULL);
+ }
+ fdo = Fopen(outname, "w.ufdio");
+ if (!fdo) {
+ fprintf(stderr, "Error: Can't open output file: %s\n", outname);
+ exit(EXIT_FAILURE);
+ }
+ _free(outname);
+ }
+ if (compress && fdo)
+ fdo = Fdopen(fdo, "w.gzdio");
+ if (!fdo) {
+ fprintf(stderr, "Error: Can't setup output file\n");
+ exit(EXIT_FAILURE);
+ }
+
+ char * buf = (char *)xmalloc(BUFSIZE);
+ char * hardlink = NULL;
+
+ rpmfiles files = rpmfilesNew(NULL, h, 0, RPMFI_KEEPHEADER);
+ rpmfi fi = rpmfiNewArchiveReader(gzdi, files, iscpio ? RPMFI_ITER_READ_ARCHIVE : RPMFI_ITER_READ_ARCHIVE_CONTENT_FIRST);
+
+ while ((rc = rpmfiNext(fi)) >= 0) {
+ struct stat st;
+ const char *dn, *flink;
+ char *filename;
+ if (rpmfiStat(fi, 0, &st)) {
+ break;
+ }
+ dn = rpmfiDN(fi);
+ if (!strcmp(dn, "")) dn = "/";
+ filename = rstrscat(NULL, ".", dn, rpmfiBN(fi), NULL);
+ flink = S_ISLNK(st.st_mode) ? rpmfiFLink(fi) : NULL;
+ if (st.st_nlink > 1 && !iscpio) {
+ if (rpmfiArchiveHasContent(fi)) {
+ /* hardlink sizes are special, see rpmfiStat() */
+ _free(hardlink);
+ hardlink = xstrdup(filename);
+ }
+ }
+ if (iscpio)
+ rc = write_cpio_entry(fdo, fi, filename, &st, flink, st.st_nlink > 1 ? hardlink : NULL, buf);
+ else
+ rc = write_pax_entry(fdo, fi, filename, &st, flink, st.st_nlink > 1 ? hardlink : NULL, buf);
+ _free(filename);
+ if (rc == RPMRC_FAIL)
+ break;
+ }
+ /* End of iteration is not an error, everything else is */
+ if (rc == RPMERR_ITER_END) {
+ rc = 0;
+ } else {
+ rc = 1;
+ }
+
+ /* write trailer */
+ if (!rc) {
+ if (iscpio)
+ rc = write_cpio_entry(fdo, NULL, NULL, NULL, NULL, NULL, buf);
+ else
+ rc = write_pax_entry(fdo, NULL, NULL, NULL, NULL, NULL, buf);
+ rc = rc == RPMRC_FAIL ? 1 : 0;
+ }
+
+ if (Fclose(fdo) && !rc) {
+ fprintf(stderr, "Error writing archive\n");
+ rc = 1;
+ }
+
+ _free(hardlink);
+
+ Fclose(gzdi); /* XXX gzdi == fdi */
+ buf = _free(buf);
+ rpmfilesFree(files);
+ rpmfiFree(fi);
+ headerFree(h);
+ return rc;
+}
+#endif
+
+
int main(int argc, char *argv[])
{
int rc = 0;

3
rpmpgp_legacy-1.1.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5e123301a48b8d64e97f1c168097e023baa68f5f352adb3e8c954d4ac7efd0cf
size 33987

View File

@ -1,5 +1,5 @@
--- docs/man/CMakeLists.txt.orig 2024-02-07 13:36:51.000000000 +0000 --- docs/man/CMakeLists.txt.orig 2024-10-07 09:35:46.000000000 +0000
+++ docs/man/CMakeLists.txt 2024-02-09 10:36:43.300952115 +0000 +++ docs/man/CMakeLists.txt 2024-12-16 09:17:15.684229047 +0000
@@ -2,6 +2,7 @@ set(core @@ -2,6 +2,7 @@ set(core
gendiff.1 rpm2cpio.8 gendiff.1 rpm2cpio.8
rpm.8 rpmbuild.8 rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8 rpm.8 rpmbuild.8 rpmdb.8 rpmkeys.8 rpmsign.8 rpmspec.8
@ -8,8 +8,8 @@
) )
set(extra set(extra
rpm2archive.8 rpm-plugins.8 rpm-plugin-prioreset.8 rpm-plugin-syslog.8 rpm2archive.8 rpm-plugins.8 rpm-plugin-prioreset.8 rpm-plugin-syslog.8
--- docs/man/rpmqpack.8.orig 2024-02-09 10:36:43.300952115 +0000 --- docs/man/rpmqpack.8.orig 2024-12-16 09:17:15.684229047 +0000
+++ docs/man/rpmqpack.8 2024-02-09 10:36:43.300952115 +0000 +++ docs/man/rpmqpack.8 2024-12-16 09:17:15.684229047 +0000
@@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
+.TH RPMQPACK 8 "Mar 2002" +.TH RPMQPACK 8 "Mar 2002"
+.SH NAME +.SH NAME
@ -36,9 +36,9 @@
+ +
+.SH AUTHOR +.SH AUTHOR
+Michael Schroeder <mls@suse.de> +Michael Schroeder <mls@suse.de>
--- tools/CMakeLists.txt.orig 2024-02-07 13:36:51.000000000 +0000 --- tools/CMakeLists.txt.orig 2024-10-07 09:35:46.000000000 +0000
+++ tools/CMakeLists.txt 2024-02-09 10:37:32.932875459 +0000 +++ tools/CMakeLists.txt 2024-12-16 09:18:57.764016162 +0000
@@ -7,6 +7,7 @@ add_executable(rpm2cpio rpm2cpio.c cliut @@ -6,6 +6,7 @@ add_executable(rpmkeys rpmkeys.c cliutil
add_executable(rpmsign rpmsign.c cliutils) add_executable(rpmsign rpmsign.c cliutils)
add_executable(rpmbuild rpmbuild.c cliutils) add_executable(rpmbuild rpmbuild.c cliutils)
add_executable(rpmspec rpmspec.c cliutils) add_executable(rpmspec rpmspec.c cliutils)
@ -46,17 +46,17 @@
add_executable(rpmdeps rpmdeps.c) add_executable(rpmdeps rpmdeps.c)
add_executable(rpmgraph rpmgraph.c) add_executable(rpmgraph rpmgraph.c)
@@ -60,7 +61,7 @@ foreach(cmd rpmverify rpmquery) @@ -77,7 +78,7 @@ endif()
endforeach()
install(TARGETS install(TARGETS
rpm rpmdb rpmkeys rpm2cpio rpmsign rpmbuild rpmspec rpm rpmdb rpmkeys rpmsign rpmbuild rpmspec
- rpmlua rpmgraph - rpmlua rpmgraph
+ rpmlua rpmgraph rpmqpack + rpmlua rpmgraph rpmqpack
) )
install(TARGETS rpmdeps rpmuncompress DESTINATION ${RPM_CONFIGDIR}) install(TARGETS rpmdeps rpmdump rpmuncompress DESTINATION ${RPM_CONFIGDIR})
--- tools/rpmqpack.c.orig 2024-02-09 10:36:43.300952115 +0000 --- tools/rpmqpack.c.orig 2024-12-16 09:17:15.688229038 +0000
+++ tools/rpmqpack.c 2024-02-09 10:36:43.300952115 +0000 +++ tools/rpmqpack.c 2024-12-16 09:17:15.688229038 +0000
@@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
+#include <sys/types.h> +#include <sys/types.h>
+#include <limits.h> +#include <limits.h>

View File

@ -1,10 +1,10 @@
--- build/parseSpec.c.orig 2013-06-10 15:55:10.000000000 +0000 --- build/parseSpec.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ build/parseSpec.c 2013-07-12 12:04:11.000000000 +0000 +++ build/parseSpec.c 2024-12-16 09:19:43.511920745 +0000
@@ -561,6 +561,7 @@ static rpmSpec parseSpec(const char *spe @@ -1309,6 +1309,7 @@ static rpmSpec parseSpec(const char *spe
spec = newSpec(); spec = newSpec();
spec->specFile = rpmGetPath(specFile, NULL); spec->specFile = rpmGetPath(specFile, NULL);
+ addMacro(spec->macros, "_specfile", NULL, spec->specFile, RMIL_SPEC); + addMacro(spec->macros, "_specfile", NULL, spec->specFile, RMIL_SPEC);
pushOFI(spec, spec->specFile); pushOFI(spec, spec->specFile);
/* If buildRoot not specified, use default %{buildroot} */ /* If explicit --buildroot was passed, grab hold of it */
if (buildRoot) { if (buildRoot)

15
undefbuildroot.diff Normal file
View File

@ -0,0 +1,15 @@
--- build/parseSpec.c.orig 2025-01-07 09:55:58.006136886 +0000
+++ build/parseSpec.c 2025-01-07 09:56:23.618086661 +0000
@@ -1321,9 +1321,11 @@ static rpmSpec parseSpec(const char *spe
rpmPushMacroFlags(spec->macros, "_top_builddir", NULL,
top_builddir, RMIL_GLOBAL, RPMMACRO_LITERAL);
- /* Undefine (!!) %_builddir so %global misuses fall through */
+ /* Undefine (!!) %_builddir and %buildroot so %global misuses fall through */
while (rpmMacroIsDefined(spec->macros, "_builddir"))
rpmPopMacro(spec->macros, "_builddir");
+ while (rpmMacroIsDefined(spec->macros, "buildroot"))
+ rpmPopMacro(spec->macros, "buildroot");
free(top_builddir);
}

65
unshare.diff Normal file
View File

@ -0,0 +1,65 @@
--- docs/man/rpm-plugin-unshare.8.md.orig 2024-10-07 09:35:46.000000000 +0000
+++ docs/man/rpm-plugin-unshare.8.md 2024-12-16 13:28:44.597787315 +0000
@@ -27,6 +27,11 @@ This plugin implements the following con
execution. Typical examples would be `/tmp` to protect against
insecure temporary file usage inside scriptlets, and `/home` to
prevent scriptlets from accessing user home directories.
+ When path unsharing is enabled, any mounts made from scriptlets
+ are also private to the scriptlet (and vice versa, mount changes
+ on the host are not visible to the scriptlet).
+
+ Private mounts in chroot-operations is unimplemented.
`%__transaction_unshare_nonet`
--- plugins/unshare.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ plugins/unshare.c 2024-12-16 13:52:31.530793880 +0000
@@ -15,12 +15,32 @@
static ARGV_t private_mounts = NULL;
static int unshare_flags = 0;
+static int in_chroot()
+{
+ struct stat sta, stb;
+ if (stat("/", &sta))
+ return 0;
+ if (stat("/proc/1/root", &stb))
+ return 1; /* proc not mounted, assume chroot */
+ return sta.st_dev == stb.st_dev && sta.st_ino == stb.st_ino ? 0 : 1;
+}
+
static rpmRC unshare_init(rpmPlugin plugin, rpmts ts)
{
char *paths = rpmExpand("%{?__transaction_unshare_paths}", NULL);
private_mounts = argvSplitString(paths, ":", ARGV_SKIPEMPTY);
- if (private_mounts)
- unshare_flags |= CLONE_NEWNS;
+ if (private_mounts) {
+ /*
+ * Changing mount propagation from inside a chroot fails if the root
+ * is not also a mount point, disable for now.
+ */
+ if (strcmp(rpmtsRootDir(ts), "/") || in_chroot()) {
+ rpmlog(RPMLOG_WARNING,
+ "private mounts in chroot not implemented\n");
+ } else {
+ unshare_flags |= CLONE_NEWNS;
+ }
+ }
free(paths);
if (rpmExpandNumeric("%{?__transaction_unshare_nonet}"))
@@ -47,9 +67,10 @@ static rpmRC unshare_scriptlet_fork_post
goto exit;
}
- if (private_mounts) {
- if (mount("/", "/", NULL, MS_REC | MS_PRIVATE, NULL) == -1) {
- rpmlog(RPMLOG_ERR, _("failed to mount private %s: %s\n"),
+ if (unshare_flags & CLONE_NEWNS) {
+ if (mount(NULL, "/", NULL, MS_REC | MS_PRIVATE, NULL) == -1) {
+ rpmlog(RPMLOG_ERR,
+ _("failed to change mount propagation %s: %s\n"),
"/", strerror(errno));
goto exit;
}

View File

@ -1,5 +1,5 @@
--- rpmio/rpmio.c.orig 2023-09-19 10:10:10.000000000 +0000 --- rpmio/rpmio.c.orig 2024-10-07 09:35:46.000000000 +0000
+++ rpmio/rpmio.c 2023-10-10 12:09:28.171040124 +0000 +++ rpmio/rpmio.c 2024-12-16 09:42:02.197155600 +0000
@@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
#include <ctype.h> #include <ctype.h>
#include <dirent.h> #include <dirent.h>
@ -8,7 +8,7 @@
#include <sys/resource.h> #include <sys/resource.h>
#include <rpm/rpmlog.h> #include <rpm/rpmlog.h>
@@ -997,6 +998,7 @@ static const FDIO_t lzdio = &lzdio_s; @@ -996,6 +997,7 @@ const FDIO_t lzdio = &lzdio_s;
/* Support for ZSTD library. */ /* Support for ZSTD library. */
#ifdef HAVE_ZSTD #ifdef HAVE_ZSTD
@ -16,7 +16,7 @@
#include <zstd.h> #include <zstd.h>
typedef struct rpmzstd_s { typedef struct rpmzstd_s {
@@ -1011,6 +1013,29 @@ typedef struct rpmzstd_s { @@ -1013,6 +1015,29 @@ typedef struct rpmzstd_s {
ZSTD_outBuffer zob; /*!< ZSTD_outBuffer */ ZSTD_outBuffer zob; /*!< ZSTD_outBuffer */
} * rpmzstd; } * rpmzstd;
@ -45,21 +45,21 @@
+ +
static rpmzstd rpmzstdNew(int fdno, const char *fmode) static rpmzstd rpmzstdNew(int fdno, const char *fmode)
{ {
int flags = 0; rpmzstd zstd = NULL;
@@ -1116,8 +1141,18 @@ static rpmzstd rpmzstdNew(int fdno, cons @@ -1119,8 +1144,18 @@ static rpmzstd rpmzstdNew(int fdno, cons
} }
if (threads > 0) { if (threads > 0) {
- if (ZSTD_isError (ZSTD_CCtx_setParameter(_stream, ZSTD_c_nbWorkers, threads))) - if (ZSTD_isError (ZSTD_CCtx_setParameter(zstd->stream.c, ZSTD_c_nbWorkers, threads)))
+ if (ZSTD_isError (ZSTD_CCtx_setParameter(_stream, ZSTD_c_nbWorkers, threads))) { + if (ZSTD_isError (ZSTD_CCtx_setParameter(zstd->stream.c, ZSTD_c_nbWorkers, threads))) {
rpmlog(RPMLOG_DEBUG, "zstd library does not support multi-threading\n"); rpmlog(RPMLOG_DEBUG, "zstd library does not support multi-threading\n");
+ } else { + } else {
+#if ZSTD_VERSION_NUMBER >= 10407 +#if ZSTD_VERSION_NUMBER >= 10407
+ pthread_once(&zstdThreadPoolCreated, zstdCreateThreadPool); + pthread_once(&zstdThreadPoolCreated, zstdCreateThreadPool);
+ if (zstdThreadPool) { + if (zstdThreadPool) {
+ if (threads > zstdThreadPoolThreads) + if (threads > zstdThreadPoolThreads)
+ ZSTD_CCtx_setParameter(_stream, ZSTD_c_nbWorkers, zstdThreadPoolThreads); + ZSTD_CCtx_setParameter(zstd->stream.c, ZSTD_c_nbWorkers, zstdThreadPoolThreads);
+ ZSTD_CCtx_refThreadPool(_stream, zstdThreadPool); + ZSTD_CCtx_refThreadPool(zstd->stream.c, zstdThreadPool);
+ } + }
+#endif +#endif
+ } + }