What's implied when people say mock is being used, is that there are no special '--define', etc. flags passed to rpmbuild from within mock.
Hmmm, and why is passing --define (or not) relevant to anything in the real world?
Yes, the CentOS issue is trying to identify a "reproducible build", as defined by the RHEL build system, and rpm macros are often different and continuously changing.
If the macros used were the only part of the "reproducible build" problem, then --macrosused (and the RPMTAG_BUILDMACROS header extension) solves the problem by spewing the list of all macros used by rpmbuild (or any other rpm command) at termination, and/or by including the equivalent list of used macros (and definitions) within a *.src.rpm header.
But the real problem is that all build systems contain versions of compilers and toolchains that are different. That's a whole different class of problem.
So not passing --define is hardly relevant imho, the tool chains used for building are what is very tricky to identify and attempt to "reproduce".
a lot of rpms use --define to control how the package is built, what functions to enable in the package. postgresql is a good example. it has 47 %if clauses in the spec file that directly or indirectly rely on --define switches at rpmbuild time.
this --macrosused/RPMTAG_BUILDMACROS sounds like exactly what i'm looking for, but it doesn't appear to be part of the rpm system used by rh/centos.
but without the newer rpm system, how do the centos builders know what flags to use to build an rpm? are they all built without any --define flags? do we know that is how rh does it?