On Fri, 17 Sep 2021 22:10:41 GMT, Kevin Rushforth <k...@openjdk.org> wrote:
>> John Neffenger has updated the pull request with a new target base due to a >> merge or a rebase. The pull request now contains seven commits: >> >> - Make build of SDK ZIP bundle reproducible >> - Merge branch 'master' into allow-reproducible-builds >> - Merge branch 'master' into allow-reproducible-builds >> - Include WebKit shared library for Windows >> >> Enable reproducible builds of the native WebKit shared library for >> Windows (jfxwebkit.dll) when SOURCE_DATE_EPOCH is defined. >> - Include media shared libraries for Windows >> >> Enable reproducible builds of the native media shared libraries for >> Windows when SOURCE_DATE_EPOCH is defined. The libraries are: >> >> fxplugins.dll >> glib-lite.dll >> gstreamer-lite.dll >> jfxmedia.dll >> - Enable reproducible builds with SOURCE_DATE_EPOCH >> - 8238650: Allow to override buildDate with SOURCE_DATE_EPOCH > > build.gradle line 559: > >> 557: buildDate = new java.util.Date(ms) >> 558: } >> 559: def buildTimestamp = new >> java.text.SimpleDateFormat("yyyy-MM-dd-HHmmss").format(buildDate) > > I think it would be useful to format `buildDate` using UTC as the time zone > when `SOURCE_DATE_EPOCH` is set. Indeed. The build now uses the new `java.time.Instant` class to get the instant on the time-line, whether or not `SOURCE_DATE_EPOCH` is set, and creates the timestamp in UTC using the ISO 8601 date and time format. > build.gradle line 3518: > >> 3516: def lFlags = >> webkitProperties.linkFlags?.join(' ') ?: '' >> 3517: cmakeArgs = "$cmakeArgs >> -DCMAKE_C_FLAGS='${cFlags}' -DCMAKE_CXX_FLAGS='${cFlags}'" >> 3518: cmakeArgs = "$cmakeArgs >> -DCMAKE_SHARED_LINKER_FLAGS='${lFlags}'" > > I presume you've tested this both with and without `SOURCE_DATE_EPOCH`? Well, now I have! 😄 Thanks. > build.gradle line 3914: > >> 3912: tasks.withType(AbstractArchiveTask) { >> 3913: if (sourceDateEpoch != null) { >> 3914: preserveFileTimestamps = false > > This is a problem given how gradle generates a zip archive when this is set. > How hard would it be to force all time stamps to be `SOURCE_DATE_EPOCH`? It was harder than I had hoped, but I think I found a good solution. The only changes in the ZIP and JAR archives are shown in the `diff` extract below (from `zipinfo -v`): 29c29 < minimum software version required to extract: 1.0 --- > minimum software version required to extract: 2.0 33,34c33,34 < extended local header: no < file last modified on (DOS date/time): 1980 Feb 1 00:00:00 --- > extended local header: yes > file last modified on (DOS date/time): 2021 Nov 16 17:55:42 44c44 < MS-DOS file attributes (10 hex): dir --- > MS-DOS file attributes (00 hex): none where: * The minimum software version required to extract is now set to the correct value of 2.0, which is the minimum for file entries compressed with DEFLATE. * The extended local header is defined but with length zero. * The timestamp is set to the local date and time in UTC of the instant of the build. * The MS-DOS file attribute for a directory is not set. It does not appear to be useful, as an entry in a ZIP file is a directory if and only if its name ends with a slash ("/"). These changes are due to Gradle using the Apache Ant `org.apache.tools.zip.ZipEntry` class, while the build now uses the `java.util.zip.ZipEntry` class in OpenJDK to create the archives. ------------- PR: https://git.openjdk.java.net/jfx/pull/446