Skip to content

Commit

Permalink
Ensure binary pkg headers are identified as such after a spec parse
Browse files Browse the repository at this point in the history
Contrary to expectations, there's a perfectly logical place to
initialize the source rpm name: initSourceHeader(). This gets called
early enough to let use insert RPMTAG_SOURCERPM right after spec
parse for proper binary package identification in headerIsSource().
The only special case is buildreqs.nosrc.rpm generation that doesn't
follow the normal process, so remember to free the normal name there.

Fixes: rpm-software-management#2819
  • Loading branch information
pmatilai committed Apr 2, 2024
1 parent 2831368 commit f824484
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 14 deletions.
1 change: 1 addition & 0 deletions build/build.c
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,7 @@ static int buildSpec(rpmts ts, BTA_t buildArgs, rpmSpec spec, int what)
!(spec->flags & RPMSPEC_FORCE)) {
/* Create buildreqs package */
char *nvr = headerGetAsString(spec->packages->header, RPMTAG_NVR);
free(spec->sourceRpmName);
rasprintf(&spec->sourceRpmName, "%s.buildreqs.nosrc.rpm", nvr);
free(nvr);
/* free sources to not include them in the buildreqs package */
Expand Down
14 changes: 0 additions & 14 deletions build/files.c
Original file line number Diff line number Diff line change
Expand Up @@ -2661,16 +2661,6 @@ static rpmRC processPackageFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
return fl.processingFailed ? RPMRC_FAIL : RPMRC_OK;
}

static void genSourceRpmName(rpmSpec spec)
{
if (spec->sourceRpmName == NULL) {
char *nvr = headerGetAsString(spec->packages->header, RPMTAG_NVR);
rasprintf(&spec->sourceRpmName, "%s.%ssrc.rpm", nvr,
spec->noSource ? "no" : "");
free(nvr);
}
}

rpmRC processSourceFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags)
{
struct Source *srcPtr;
Expand All @@ -2688,7 +2678,6 @@ rpmRC processSourceFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags)
oneshot = 1;
}

genSourceRpmName(spec);
/* Construct the file list and source entries */
argvAdd(&files, spec->specFile);
for (srcPtr = spec->sources; srcPtr != NULL; srcPtr = srcPtr->next) {
Expand Down Expand Up @@ -3130,7 +3119,6 @@ rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
elf_version (EV_CURRENT);
#endif
check_fileList = newStringBuf();
genSourceRpmName(spec);
buildroot = rpmGenPath(spec->rootDir, spec->buildRoot, NULL);

if (rpmExpandNumeric("%{?_debuginfo_subpackages}")) {
Expand Down Expand Up @@ -3186,8 +3174,6 @@ rpmRC processBinaryFiles(rpmSpec spec, rpmBuildPkgFlags pkgFlags,
if (pkg->fileList == NULL)
continue;

headerPutString(pkg->header, RPMTAG_SOURCERPM, spec->sourceRpmName);

nvr = headerGetAsString(pkg->header, RPMTAG_NVRA);
rpmlog(RPMLOG_NOTICE, _("Processing files: %s\n"), nvr);
free(nvr);
Expand Down
8 changes: 8 additions & 0 deletions build/parseSpec.c
Original file line number Diff line number Diff line change
Expand Up @@ -731,6 +731,12 @@ static void initSourceHeader(rpmSpec spec)
}
}
}
if (spec->sourceRpmName == NULL) {
char *nvr = headerGetAsString(spec->packages->header, RPMTAG_NVR);
rasprintf(&spec->sourceRpmName, "%s.%ssrc.rpm", nvr,
spec->noSource ? "no" : "");
free(nvr);
}
}

static void finalizeSourceHeader(rpmSpec spec)
Expand Down Expand Up @@ -1309,6 +1315,8 @@ static rpmRC finalizeSpec(rpmSpec spec)
headerPutString(pkg->header, RPMTAG_OS, os);
headerPutString(pkg->header, RPMTAG_PLATFORM, platform);
headerPutString(pkg->header, RPMTAG_OPTFLAGS, optflags);
headerPutString(pkg->header, RPMTAG_SOURCERPM, spec->sourceRpmName);


if (pkg != spec->packages) {
copyInheritedTags(pkg->header, spec->packages->header);
Expand Down
21 changes: 21 additions & 0 deletions tests/rpmspec.at
Original file line number Diff line number Diff line change
Expand Up @@ -361,3 +361,24 @@ make DESTDIR=$RPM_BUILD_ROOT install
]],
[])
RPMTEST_CLEANUP

AT_SETUP([rpmspec -q --rpms and --srpm])
AT_KEYWORDS([rpmspec query])
RPMTEST_CHECK([
runroot rpmspec -q --rpms --target s390x \
/data/SPECS/hello.spec
],
[0],
[hello-1.0-1.s390x
],
[])

RPMTEST_CHECK([
runroot rpmspec -q --srpm \
/data/SPECS/hello.spec
],
[0],
[hello-1.0-1.src
],
[])
RPMTEST_CLEANUP

0 comments on commit f824484

Please sign in to comment.