RFR: JDK-8244592 Start supporting SOURCE_DATE_EPOCH

Erik Joelsson erik.joelsson at oracle.com
Thu May 7 15:34:51 UTC 2020


Looks good.

What tools do we know are picking up this variable today?

/Erik

On 2020-05-07 07:29, Magnus Ihse Bursie wrote:
> As a part of the effort of creating a reproducible build, the build 
> system should know about SOURCE_DATE_EPOCH and allow it to be set 
> using different methods.
>
> This fix is needed to unblock JDK-8241616. With this patch, the 
> SOURCE_DATE_EPOCH variable will be available in the environment during 
> the build.
>
> I have added two options, --with-source-date and 
> --enable-reproducible-build. The former controls what value 
> SOURCE_DATE_EPOCH will get. The latter is a currently just a 
> placeholder, but my intention is to continue adding functionality for 
> making reproducible builds. (The reason that you might not always want 
> to have reproducible builds enabled is that, for instance, one thing 
> reproducible builds will do is set the timestamp for all created 
> files, and this is not generally a good idea.) The idea is still that 
> build changes that result in reproducible builds should be enabled 
> always, if there is no downside to them.
>
> If --with-source-date is specified on the command line, 
> --enable-reproducible-build will be turned on by default, otherwise it 
> will be turned off.
>
> The --with-source-date option takes either a keyword option, an 
> integer option, or a date/time string.
> * If "updated" is specified (this is also the default), 
> SOURCE_DATE_EPOCH will be set to the time when make is run.
> * If "current" is specified, the value is "hard-coded" to the time 
> when configure was run.
> * If "version" is specified, the value is from DEFAULT_VERSION_DATE in 
> make/autoconf/version-numbers is used. (This is probably not as good 
> an idea as it might sound, but it can be used as a simple way to get 
> the same value between different runs/points in time of the source 
> code, but for the same version.)
> * If an integer is used, that very number is used as the epoch-based 
> timestamp.
> * And finally, if an ISO-8059 date string (like "2020-05-07") is used, 
> it will be converted to a timestamp. (On systems with GNU date, the 
> parsing of the string is rather forgiving, on other systems (read: 
> macOS) it will be more strict.)
>
> Finally, this patch carries two unrelated changes.
> * In make/autoconf/jdk-version.m4, I noticed an error with the bash 
> regexp (which I used as starting point for parsing the timestamp 
> number). It would have accepted e.g. "123banana" as a number, but not 
> 000 (even though 001 was accepted).
> * In UTIL_ARG_ENABLE, I added a new argument IF_NOT_GIVEN. In the end, 
> I did not need this, but I still think the functionality is worth 
> keeping.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8244592
> WebRev: 
> http://cr.openjdk.java.net/~ihse/JDK-8244592-add-SOURCE_DATE_EPOCH/webrev.01
>
> /Magnus



More information about the build-dev mailing list