> This pull request allows for reproducible builds of JavaFX on Linux, macOS,
> and Windows by defining the `SOURCE_DATE_EPOCH` environment variable. For
> example, the following commands create a reproducible build:
>
>
> $ export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)
> $ bash gradlew sdk jmods javadoc
> $ strip-nondeterminism -v -T $SOURCE_DATE_EPOCH build/jmods/*.jmod
>
>
> The three commands:
>
> 1. set the build timestamp to the date of the latest source code change,
> 2. build the JavaFX SDK libraries, JMOD archives, and API documentation, and
> 3. recreate the JMOD files with stable file modification times and ordering.
>
> The third command won't be necessary once Gradle can build the JMOD archives
> or the `jmod` tool itself has the required support. For more information on
> the environment variable, see the [`SOURCE_DATE_EPOCH`][1] page. For more
> information on the command to recreate the JMOD files, see the
> [`strip-nondeterminism`][2] repository. I'd like to propose that we allow for
> reproducible builds in JavaFX 17 and consider making them the default in
> JavaFX 18.
>
> #### Fixes
>
> There are at least four sources of non-determinism in the JavaFX builds:
>
> 1. Build timestamp
>
> The class `com.sun.javafx.runtime.VersionInfo` in the JavaFX Base module
> stores the time of the build. Furthermore, for builds that don't run on the
> Hudson continuous integration tool, the class adds the build time to the
> system property `javafx.runtime.version`.
>
> 2. Modification times
>
> The JAR, JMOD, and ZIP archives store the modification time of each file.
>
> 3. File ordering
>
> The JAR, JMOD, and ZIP archives store their files in the order returned
> by the file system. The native shared libraries also store their object files
> in the order returned by the file system. Most file systems, though, do not
> guarantee the order of a directory's file listing.
>
> 4. Build path
>
> The class `com.sun.javafx.css.parser.Css2Bin` in the JavaFX Graphics
> module stores the absolute path of its `.css` input file in the corresponding
> `.bss` output file, which is then included in the JavaFX Controls module.
>
> This pull request modifies the Gradle and Groovy build files to fix the first
> three sources of non-determinism. A later pull request can modify the Java
> files to fix the fourth.
>
> [1]: https://reproducible-builds.org/docs/source-date-epoch/
> [2]: https://salsa.debian.org/reproducible-builds/strip-nondeterminism
John Neffenger has updated the pull request with a new target base due to a
merge or a rebase. The incremental webrev excludes the unrelated changes
brought in by the merge/rebase. The pull request contains five additional
commits since the last revision:
- 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
-------------
Changes:
- all: https://git.openjdk.java.net/jfx/pull/446/files
- new: https://git.openjdk.java.net/jfx/pull/446/files/cb8510c6..c17eb491
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jfx&pr=446&range=03
- incr: https://webrevs.openjdk.java.net/?repo=jfx&pr=446&range=02-03
Stats: 90189 lines in 1212 files changed: 52172 ins; 13953 del; 24064 mod
Patch: https://git.openjdk.java.net/jfx/pull/446.diff
Fetch: git fetch https://git.openjdk.java.net/jfx pull/446/head:pull/446
PR: https://git.openjdk.java.net/jfx/pull/446