--- rpm-5.4.10/build/files.c.twice_terminate~ 2012-07-10 20:18:14.613329633 +0200 +++ rpm-5.4.10/build/files.c 2012-07-10 20:18:14.677328833 +0200 @@ -1329,7 +1329,7 @@ static rpmuint32_t getDigestAlgo(Header * @param h * @param isSrc */ -static void genCpioListAndHeader(/*@partial@*/ FileList fl, +static rpmRC genCpioListAndHeader(/*@partial@*/ FileList fl, rpmfi * fip, Header h, int isSrc) /*@globals rpmGlobalMacroContext, h_errno, fileSystem, internalState @*/ /*@modifies h, *fip, fl->processingFailed, fl->fileList, @@ -1349,6 +1349,7 @@ static void genCpioListAndHeader(/*@part rpmuint32_t dalgo = getDigestAlgo(h, isSrc); char buf[BUFSIZ]; int i, xx; + rpmRC rc = RPMRC_OK; memset(buf, 0, sizeof(buf)); /* XXX valgrind on rhel6 beta pickier */ @@ -1377,9 +1378,14 @@ memset(buf, 0, sizeof(buf)); /* XXX valg /* file flags */ flp[1].flags |= flp->flags; - if (!(flp[1].flags & RPMFILE_EXCLUDE)) - rpmlog(RPMLOG_WARNING, _("File listed twice: %s\n"), + if (!(flp[1].flags & RPMFILE_EXCLUDE)) { + int terminate = rpmExpandNumeric("%{?_files_listed_twice_terminate_build}"); + + rpmlog(terminate ? RPMLOG_ERR : RPMLOG_WARNING, _("File listed twice: %s\n"), flp->fileURL); + if (terminate) + rc = RPMRC_FAIL; + } /* file mode */ if (S_ISDIR(flp->fl_mode)) { @@ -1792,6 +1798,8 @@ if (_rpmbuildFlags & 4) { fi = rpmfiFree(fi); /*@=compdef@*/ } + + return rc; } /** @@ -2514,7 +2522,8 @@ static rpmRC processPackageFiles(Spec sp "PartialHardlinkSets", "4.0.4-1"); /* XXX should tags be added if filelist is empty? */ - genCpioListAndHeader(&fl, &pkg->fi, pkg->header, 0); + if (genCpioListAndHeader(&fl, &pkg->fi, pkg->header, 0) != RPMRC_OK) + fl.processingFailed = 1; if (spec->timeCheck) timeCheck(spec->timeCheck, pkg->header); @@ -2828,7 +2837,7 @@ int processSourceFiles(Spec spec) /* XXX should tags be added if filelist is empty? */ spec->fi = NULL; - genCpioListAndHeader(&fl, &spec->fi, spec->sourceHeader, 1); + rc = genCpioListAndHeader(&fl, &spec->fi, spec->sourceHeader, 1); exit: *sfp = rpmiobFree(*sfp); --- rpm-5.4.10/macros/mandriva.in.twice_terminate~ 2012-07-10 20:18:14.000000000 +0200 +++ rpm-5.4.10/macros/mandriva.in 2012-07-10 20:18:32.060111516 +0200 @@ -128,6 +128,7 @@ end\ %_duplicate_files_terminate_build 1 %_unpackaged_subdirs_terminate_build 0 +%_files_listed_twice_terminate_build 1 %_build_pkgcheck_set /usr/bin/rpmlint -T -f %{_sourcedir}/%{name}.rpmlintrc %_build_pkgcheck_srpm /usr/bin/rpmlint -T -f %{_sourcedir}/%{name}.rpmlintrc