rpm/rpm-4.6.0-anyarch-actions-fix.patch
Jindrich Novy 84fa912e75 - inherit group tag from the main package (#470714)
- ignore BuildArch tags for anyarch actions (#442105)
- don't check package BuildRequires when doing --rmsource (#452477)
- don't fail because of missing sources when only spec removal is requested
    (#472427)
2009-02-16 17:31:31 +00:00

120 lines
3.7 KiB
Diff

diff -up rpm-4.6.0/build/build.c.anyarch-actions-fix rpm-4.6.0/build/build.c
--- rpm-4.6.0/build/build.c.anyarch-actions-fix 2008-12-05 12:49:22.000000000 +0100
+++ rpm-4.6.0/build/build.c 2009-02-16 13:19:43.000000000 +0100
@@ -15,21 +15,18 @@ static int _build_debug = 0;
/**
*/
-static void doRmSource(rpmSpec spec)
+rpmRC doRmSource(rpmSpec spec)
{
struct Source *p;
Package pkg;
- int rc;
+ int rc = 0;
-#if 0
- rc = unlink(spec->specFile);
-#endif
-
for (p = spec->sources; p != NULL; p = p->next) {
if (! (p->flags & RPMBUILD_ISNO)) {
char *fn = rpmGetPath("%{_sourcedir}/", p->source, NULL);
rc = unlink(fn);
fn = _free(fn);
+ if (rc) goto exit;
}
}
@@ -39,9 +36,12 @@ static void doRmSource(rpmSpec spec)
char *fn = rpmGetPath("%{_sourcedir}/", p->source, NULL);
rc = unlink(fn);
fn = _free(fn);
+ if (rc) goto exit;
}
}
}
+exit:
+ return !rc ? RPMRC_OK : RPMRC_FAIL;
}
/*
diff -up rpm-4.6.0/build.c.anyarch-actions-fix rpm-4.6.0/build.c
--- rpm-4.6.0/build.c.anyarch-actions-fix 2008-12-05 12:49:16.000000000 +0100
+++ rpm-4.6.0/build.c 2009-02-16 13:19:43.000000000 +0100
@@ -240,6 +240,12 @@ static int buildForTarget(rpmts ts, cons
goto exit;
}
+ /* Don't parse spec if only its removal is requested */
+ if (ba->buildAmount == RPMBUILD_RMSPEC) {
+ rc = unlink(specFile);
+ goto exit;
+ }
+
/* Parse the spec file */
#define _anyarch(_f) \
(((_f)&(RPMBUILD_PREP|RPMBUILD_BUILD|RPMBUILD_INSTALL|RPMBUILD_PACKAGEBINARY)) == 0)
@@ -253,6 +259,13 @@ static int buildForTarget(rpmts ts, cons
goto exit;
}
+ if ( ba->buildAmount&RPMBUILD_RMSOURCE && !(ba->buildAmount&~(RPMBUILD_RMSOURCE|RPMBUILD_RMSPEC)) ) {
+ rc = doRmSource(spec);
+ if ( rc == RPMRC_OK && ba->buildAmount&RPMBUILD_RMSPEC )
+ rc = unlink(specFile);
+ goto exit;
+ }
+
/* Assemble source header from parsed components */
initSourceHeader(spec);
diff -up rpm-4.6.0/build/parsePreamble.c.anyarch-actions-fix rpm-4.6.0/build/parsePreamble.c
--- rpm-4.6.0/build/parsePreamble.c.anyarch-actions-fix 2009-02-16 13:19:43.000000000 +0100
+++ rpm-4.6.0/build/parsePreamble.c 2009-02-16 13:19:43.000000000 +0100
@@ -859,8 +859,14 @@ int parsePreamble(rpmSpec spec, int init
goto exit;
}
if (spec->BANames && !spec->recursing) {
- res = PART_BUILDARCHITECTURES;
- goto exit;
+ /* Ignore BuildArch tags for anyarch actions */
+ if (spec->anyarch) {
+ spec->BANames = _free(spec->BANames);
+ spec->BACount = 0;
+ } else {
+ res = PART_BUILDARCHITECTURES;
+ goto exit;
+ }
}
}
if ((rc =
@@ -895,8 +901,8 @@ int parsePreamble(rpmSpec spec, int init
addMacro(spec->macros, "buildroot", NULL, spec->buildRoot, RMIL_SPEC);
}
- /* XXX Skip valid arch check if not building binary package */
- if (!spec->anyarch && checkForValidArchitectures(spec)) {
+ /* This check is harmless as BuildArch tags are ignored in case of anyarch != 0 */
+ if (checkForValidArchitectures(spec)) {
goto exit;
}
diff -up rpm-4.6.0/build/rpmbuild.h.anyarch-actions-fix rpm-4.6.0/build/rpmbuild.h
--- rpm-4.6.0/build/rpmbuild.h.anyarch-actions-fix 2008-12-05 12:49:22.000000000 +0100
+++ rpm-4.6.0/build/rpmbuild.h 2009-02-16 13:19:43.000000000 +0100
@@ -273,6 +273,13 @@ int parseExpressionBoolean(rpmSpec spec,
char * parseExpressionString(rpmSpec spec, const char * expr);
/** \ingroup rpmbuild
+ * Remove all sources assigned to spec file.
+ *
+ * @param spec spec file control structure
+ * @return RPMRC_OK on success
+ */
+rpmRC doRmSource(rpmSpec spec);
+/** \ingroup rpmbuild
* Run a build script, assembled from spec file scriptlet section.
*
* @param spec spec file control structure