On Sep 1, 2008, at 4:58 PM, Joe Pruett wrote:
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.
Yup. too bad for you & Centos.
FWIW, adding %dump at the very end of spec file, and grep'ping out the used macros which are marked in the %dump spewage (unused macros look like "^-14:..." while used macros look like ("-14=..." iirc) will work with all versions of rpm I've ever touched.
FYI, the "-14" is "the level of macro recursion", and negative numbers are global. The value identifies where the macro was defined. Not useful at all, but that's what the "-14" is and does.
Porting --macrosused to rpm-4.5.6.7.8.9. ain't rocket science either ...
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?
I'd guess that all the --with/--without "stuff" is hard wired into a macro config file (or perhaps done directly by mock), another reason why "No --define in mock ..." Simply Does Not Matter.
73 de Jeff