54 lines
2.1 KiB
Diff
54 lines
2.1 KiB
Diff
From b1c99cc21dd8dc984734cd2a66e48a5676280dee Mon Sep 17 00:00:00 2001
|
|
Message-ID: <b1c99cc21dd8dc984734cd2a66e48a5676280dee.1692617135.git.pmatilai@redhat.com>
|
|
From: Panu Matilainen <pmatilai@redhat.com>
|
|
Date: Mon, 21 Aug 2023 13:42:43 +0300
|
|
Subject: [PATCH] Behave more consistently when target arch %optflags are not
|
|
defined
|
|
|
|
You're about to fall into a deep dark hole, proceed at your own risk.
|
|
|
|
When building for a target architecture with no defined %optflags
|
|
(such as noarch), one would think that %optflags would be empty. Not so in
|
|
rpm, instead we get %optflags for the detected architecture, and there
|
|
are packages which rely on this behavior. And in this particular dark
|
|
corner, buildarchtranslate is not applied so one can get drastically
|
|
different %optflags than you'd get without an explicit --target, on the
|
|
same system. Which can break builds.
|
|
|
|
None of this makes any sense whatsoever, but lets at least try to be
|
|
consistent about it. When we fall back to detected architecture
|
|
%optflags, at least use the ones after buildarchtranslate to return
|
|
consistent data within a host.
|
|
|
|
This supposedly fixes the case where our newly added x86_64
|
|
subarchitecture definitions haven't been overridden in vendor config and
|
|
somebody's noarch package uses cmake to install data, and falls over due
|
|
to nonsensical optflags from rpm. Or something like that.
|
|
|
|
Initial report: https://bugzilla.redhat.com/show_bug.cgi?id=2231727
|
|
---
|
|
lib/rpmrc.c | 7 +++++++
|
|
1 file changed, 7 insertions(+)
|
|
|
|
diff --git a/lib/rpmrc.c b/lib/rpmrc.c
|
|
index 8a829709b..f8a7aee8c 100644
|
|
--- a/lib/rpmrc.c
|
|
+++ b/lib/rpmrc.c
|
|
@@ -1685,6 +1685,13 @@ static void rpmRebuildTargetVars(rpmrcCtx ctx,
|
|
* XXX Make sure that per-arch optflags is initialized correctly.
|
|
*/
|
|
{ const char *optflags = rpmGetVarArch(ctx, RPMVAR_OPTFLAGS, ca);
|
|
+ /*
|
|
+ * If not defined for the target arch, fall back to current arch
|
|
+ * definitions, with buildarchtranslate applied.
|
|
+ */
|
|
+ if (optflags == NULL) {
|
|
+ optflags = rpmGetVarArch(ctx, RPMVAR_OPTFLAGS, NULL);
|
|
+ }
|
|
if (optflags != NULL) {
|
|
rpmPopMacro(NULL, "optflags");
|
|
rpmPushMacro(NULL, "optflags", NULL, optflags, RMIL_RPMRC);
|
|
--
|
|
2.41.0
|
|
|