From: Julian Gilbey Date: Wed, 17 Apr 2024 12:24:58 +0000 (+0200) Subject: jlink: Hash of module differs to expected hash recorded in java.base X-Git-Tag: archive/raspbian/17.0.11+9-1_deb12u1+rpi1^2^2~13 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=52c2827bd5320a9810b8ced1c283e9a8e0349ee5;p=openjdk-17.git jlink: Hash of module differs to expected hash recorded in java.base Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=944738 Forwarded: not-needed The cause is the use of dh_strip_nondeterminism late in the build process. This reorganises the jmod files, which in turn changes their SHA256 checksums. This would not be a problem, except that the checksums are saved in java.base.jmod *before* the use of dh_strip_nondeterminism. Performing this stripping immediately after each jmod file is created results in the checksums being consistent throughout. Gbp-Pq: Name reproducible-build-jmod.diff --- diff --git a/make/CreateJmods.gmk b/make/CreateJmods.gmk index e1f184590..4fd9294e6 100644 --- a/make/CreateJmods.gmk +++ b/make/CreateJmods.gmk @@ -230,6 +230,15 @@ endif # Create jmods in the support dir and then move them into place to keep the # module path in $(IMAGES_OUTPUTDIR)/jmods valid at all times. +# strip-nondeterminism requires the same timestamp as +# dh_strip_nondeterminism uses, so we determine this first. +# Fall back to the original behavior if the tools are missing for backports +DSN_TIMESTAMP := $(shell perl -MDebian::Debhelper::Dh_Lib -e 'print get_source_date_epoch()' 2>/dev/null) +ifneq (,$(DSN_TIMESTAMP)) + ifneq (,$(wildcard /bin/strip-nondeterminism /usr/bin/strip-nondeterminism)) + use_strip_ndt = yes + endif +endif $(eval $(call SetupExecute, create_$(JMOD_FILE), \ WARN := Creating $(INTERIM_MSG)$(JMOD_FILE), \ DEPS := $(DEPS), \ @@ -241,7 +250,7 @@ $(eval $(call SetupExecute, create_$(JMOD_FILE), \ --module-path $(JMODS_DIR) $(JMOD_FLAGS) \ $(JMOD_SOURCE_DATE) \ $(JMODS_SUPPORT_DIR)/$(JMOD_FILE), \ - POST_COMMAND := $(MV) $(JMODS_SUPPORT_DIR)/$(JMOD_FILE) $(JMODS_DIR)/$(JMOD_FILE), \ + POST_COMMAND := $(if $(use_strip_ndt),strip-nondeterminism --timestamp $(DSN_TIMESTAMP) $(JMODS_SUPPORT_DIR)/$(JMOD_FILE) && )$(MV) $(JMODS_SUPPORT_DIR)/$(JMOD_FILE) $(JMODS_DIR)/$(JMOD_FILE), \ )) TARGETS += $(create_$(JMOD_FILE))