<p>This is a work-in-progress PR for what will become 4.15.0-rc1. We're a bit late from the original schedule, we need to get this out by the end of August. Not much time left, in other words.</p>
<p>So far this consists of everything that has gone into master branch since the beta release, <em>except</em> for dropping Python 2 support.</p>

<hr>

<h4>You can view, comment on, or merge this pull request online at:</h4>
<p>  <a href='https://github.com/rpm-software-management/rpm/pull/822'>https://github.com/rpm-software-management/rpm/pull/822</a></p>

<h4>Commit Summary</h4>
<ul>
  <li>rpmbuild: Generate src.rpm with dynamic BRs with --force</li>
  <li>Change %set_build_flags to check the existance of the %build_XXX macros</li>
  <li>Parse multiline conditional and %include parameters correctly (#775)</li>
  <li>Raise an error if reading a file during rpmbuild fails (#776)</li>
  <li>Print newline after "failed to load macro file" error is emitted</li>
  <li>Do not set RPMTAG_BUILDTIME to SOURCE_DATE_EPOCH when defined by default</li>
  <li>Describe conditionally expanded macros in manual</li>
  <li>Add support for 'patch -Z'</li>
  <li>rpmsign man page: Add line about rpmsign requiring a valid checksum</li>
  <li>rpmbuild: Generate buildreqs.nosrc.rpm even if no output</li>
  <li>Use an erase element to delete packages with same NEVRA</li>
  <li>Test %dnl such that its contents influences its expansion</li>
  <li>Prefer '[] && []' to '[ -a ]' in test in find-debuginfo.sh (RhBug:1720590)</li>
  <li>Fix off-by-one in hdrblobGet() making last entry unreachable (RhBug:1722921)</li>
  <li>Split verbose make flags to a separate macro</li>
  <li>Fix memleak during transaction verify step in the NOKEY case.</li>
  <li>rpmpgp: Handle EOF without EOL better at END PGP</li>
  <li>Add a testcases for filenames with weird + invalid characters</li>
  <li>Eliminate use of ambiguous logical operators in script conditionals</li>
  <li>Drop %_lto_cflags macro afterall</li>
  <li>Fix segfault regression on empty script or description at end of spec</li>
  <li>Resurrect parseExpressionString()</li>
  <li>Support running rpmfcExec() without any piped input/output</li>
  <li>Restore strict order of build scriptlet stdout/stderr output (#794)</li>
  <li>Drop the no longer needed rpmfcExec() output duplication support</li>
  <li>Add a dummy line to CI setup to allow controlling dnf gpgcheck per build</li>
  <li>Export the expression parsing functions and move to librpmio</li>
  <li>Move %if tests where they belong and fix their keywords</li>
  <li>Improve expression error messages</li>
  <li>Add %{expr:...} macro for parsing expressions</li>
</ul>

<h4>File Changes</h4>
<ul>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-0">build/Makefile.am</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-1">build/build.c</a>
    (26)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-2">build/files.c</a>
    (4)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-3">build/parseDescription.c</a>
    (9)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-4">build/parsePrep.c</a>
    (15)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-5">build/parseScript.c</a>
    (9)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-6">build/parseSpec.c</a>
    (27)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-7">build/rpmbuild_internal.h</a>
    (11)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-8">build/rpmfc.c</a>
    (19)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-9">build/spec.c</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-10">ci/Dockerfile</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-11">doc/manual/macros</a>
    (44)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-12">doc/rpmsign.8</a>
    (3)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-13">lib/depends.c</a>
    (38)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-14">lib/header.c</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-15">lib/rpmte.c</a>
    (9)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-16">lib/rpmte_internal.h</a>
    (12)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-17">lib/transaction.c</a>
    (10)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-18">lib/verify.c</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-19">macros.in</a>
    (23)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-20">platform.in</a>
    (3)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-21">po/POTFILES.in</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-22">rpmio/Makefile.am</a>
    (2)
  </li>
  <li>
    <strong>R</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-23">rpmio/expression.c</a>
    (92)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-24">rpmio/macro.c</a>
    (11)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-25">rpmio/rpmmacro.h</a>
    (15)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-26">rpmio/rpmpgp.c</a>
    (5)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-27">scripts/brp-compress</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-28">scripts/brp-java-gcjcompile</a>
    (4)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-29">scripts/brp-python-bytecompile</a>
    (12)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-30">scripts/brp-python-hardlink</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-31">scripts/brp-strip</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-32">scripts/brp-strip-comment-note</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-33">scripts/brp-strip-shared</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-34">scripts/brp-strip-static-archive</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-35">scripts/check-buildroot</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-36">scripts/check-rpaths</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-37">scripts/find-debuginfo.sh</a>
    (8)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-38">scripts/find-lang.sh</a>
    (6)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-39">scripts/gendiff</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-40">scripts/rpm2cpio.sh</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-41">scripts/rpmdb_loadcvt</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-42">scripts/tgpg</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-43">tests/Makefile.am</a>
    (3)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-44">tests/data/SPECS/ifmultiline.spec</a>
    (28)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-45">tests/data/SPECS/mini.spec</a>
    (7)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-46">tests/data/SPECS/weirdnames.spec</a>
    (37)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-47">tests/data/macros.testfile</a>
    (6)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-48">tests/rpmbuild.at</a>
    (175)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-49">tests/rpmdb.at</a>
    (1)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/rpm-software-management/rpm/pull/822/files#diff-50">tests/rpmmacro.at</a>
    (143)
  </li>
</ul>

<h4>Patch Links:</h4>
<ul>
  <li><a href='https://github.com/rpm-software-management/rpm/pull/822.patch'>https://github.com/rpm-software-management/rpm/pull/822.patch</a></li>
  <li><a href='https://github.com/rpm-software-management/rpm/pull/822.diff'>https://github.com/rpm-software-management/rpm/pull/822.diff</a></li>
</ul>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/rpm-software-management/rpm/pull/822?email_source=notifications&email_token=ADLPZU723VC3I7SCCN3SKYTQF6IJNA5CNFSM4IO4UVTKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4HG7BGMQ">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/ADLPZU3PVFBY7RIJP7K7L2DQF6IJNANCNFSM4IO4UVTA">mute the thread</a>.<img src="https://github.com/notifications/beacon/ADLPZU5C3XQQZALBVCVX55TQF6IJNA5CNFSM4IO4UVTKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4HG7BGMQ.gif" height="1" width="1" alt="" /></p>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/rpm-software-management/rpm/pull/822?email_source=notifications\u0026email_token=ADLPZU723VC3I7SCCN3SKYTQF6IJNA5CNFSM4IO4UVTKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4HG7BGMQ",
"url": "https://github.com/rpm-software-management/rpm/pull/822?email_source=notifications\u0026email_token=ADLPZU723VC3I7SCCN3SKYTQF6IJNA5CNFSM4IO4UVTKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4HG7BGMQ",
"name": "View Pull Request"
},
"description": "View this Pull Request on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>