[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: RFR: 8264449: Enable reproducible builds with SOURCE_DATE_EPOCH [v4]
From:       John Neffenger <jgneff () openjdk ! java ! net>
Date:       2021-04-30 0:11:47
Message-ID: 9nOTouhNVCwpAfp6u6v1SY50i6Pkh6cSotKKKkfjwxc=.b36e4337-8b90-46fb-8d13-22c7dfd2ca53 () github ! com
[Download RAW message or body]

> 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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic