Jeff Law: > On 08/02/2017 08:06 PM, Ximin Luo wrote: >> Jeff Law: >>> On 07/21/2017 10:15 AM, Ximin Luo wrote: >>>> (Please keep me on CC, I am not subscribed) >>>> >>>> >>>> Proposal >>>> ======== >>>> >>>> This patch series adds a new environment variable BUILD_PATH_PREFIX_MAP. >>>> When >>>> this is set, GCC will treat this as extra implicit >>>> "-fdebug-prefix-map=$value" >>>> command-line arguments that precede any explicit ones. This makes the final >>>> binary output reproducible, and also hides the unreproducible value (the >>>> source >>>> path prefixes) from CFLAGS et. al. which many build tools (understandably) >>>> embed as-is into their build output. >>> I'd *really* avoid doing this with magic environment variables. Make it >>> a first class option to the compiler. Yes, it means projects that want >>> this behavior have to arrange to pass that flag to their compiler, but >>> IMHO that's much preferred over environment variables. >>> >>> Jeff >>> >> >> Hi Jeff, >> >> 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. > Then take what you've done with the environment variable and instead > implement it on top of a switch. An environment variable is absolutely the > wrong thing to do here. > >> >> GCC already supports a similar environment variable SOURCE_DATE_EPOCH, which >> was accepted about 2 years ago in a patch written by one of our GSoC >> students. We are not planning any more environment variables like this, and >> are committed to fixing other sources of non-determinism by patching the >> relevant build scripts. > I would have rejected that as well :-) One of the few times I would > have disagreed with Bernd. > >
Could you go into some more detail on why you think an envvar is absolutely the wrong thing to do here? X -- GPG: ed25519/56034877E1F87C35 GPG: rsa4096/1318EFAC5FBBDBCE https://github.com/infinity0/pubkeys.git