> On Thu, Aug 3, 2017 at 12:45 PM, Ximin Luo <infini...@pwned.gg> wrote:
>> Yury Gribov:
>>> Shouldn't -fdebug-prefix-map be updated to use the same syntax as
>> -fdebug-prefix-map is a CLI option and can be given multiple times, each
>> flag given is in the form of $from=$to where $from can't contain a '='.
>> BUILD_PATH_PREFIX_MAP is a single envvar that encodes a list-of-pairs of the
>> form $to=$from:$to=$from with some escaping for flexibility and to support
>> things like windows paths. Since it's a new envvar, Ian Jackson suggested
>> $to=$from to emphasise the reproducible ($to) part. I liked the idea so I
>> implemented it like that. (We did a lot of bikeshedding over on the
>> rb-general mailing list about the exact format and this is what we settled
>> on, I'd like to avoid getting into that again but would nevertheless do it,
>> if it's necessary to get this patch accepted.)
>> Because -fdebug-prefix-map currently only encodes one $from=$to pair, it
>> would be a very disruptive and highly backward-incompatible change to make
>> it use the same syntax as B_P_P_M. A slightly less disruptive but still
>> backward-incompatible change would be to make it encode a single $to=$from
>> pair, but I don't really see the advantage to doing so - what were your
>> thoughts on this?
> I believe it would much easier to reason about environment variable
> behavior when it boils down to "prepend some standard flag to
> command-line flags". It would also simplify maintenance of local
> compiler patch as core functionality can be merged to mainline GCC
> whereas debatable environment variable part stays in the distro.
[answered in another email together with other related points]
>> If by "first class option" you meant a command-line flag, GCC *already has*
>> that (-fdebug-prefix-map) and it wasn't enough to achieve reproducibility in
>> many cases we tested.
>> dpkg-buildflags actually already adds these flags to CFLAGS CXXFLAGS etc on
>> Debian. However, with this patch using the environment variable, we are able
>> to reproduce 1800 more packages out of 26000.
> Just curious, why -fdebug-prefix-map (maybe modified to support
> multiple renames) was not enough for these packages (and why they
> can't be fixed instead)?
One important reason is that some packages embed CFLAGS/CXXFLAGS in build
output such as pkg-config files or Makefiles to be installed as examples. To
fix this, we'd have to add buildsystem-specific logic to strip out
-fdebug-prefix-map when it was writing such output. This does not affect all of
these 1800 packages, but I saw enough cases that I was convinced that the use
of a new envvar was a better approach - I don't think buildsystems should be
burdened with having to know "which flag values are reproducible vs not", this
is not the case with other CFLAGS.