summary refs log tree commit diff
path: root/pkgs/build-support/release/functions.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/build-support/release/functions.sh')
-rw-r--r--pkgs/build-support/release/functions.sh23
1 files changed, 23 insertions, 0 deletions
diff --git a/pkgs/build-support/release/functions.sh b/pkgs/build-support/release/functions.sh
index 8ac67a196721..efc4e7970cc5 100644
--- a/pkgs/build-support/release/functions.sh
+++ b/pkgs/build-support/release/functions.sh
@@ -8,6 +8,29 @@ findTarballs() {
     echo "$1"
 }
 
+canonicalizeJarManifest() {
+	local input=$1
+	# http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#Notes_on_Manifest_and_Signature_Files
+	(head -n 1 $input && tail -n +2 $input | sort | grep -v '^\s*$') > $input-tmp
+	mv $input-tmp $input
+}
+
+# Post-process a jar file to contain canonical timestamps and metadata ordering
+canonicalizeJar() {
+	local input=$1
+	local outer=$(pwd)
+	unzip -qq $input -d $input-tmp
+	canonicalizeJarManifest $input-tmp/META-INF/MANIFEST.MF
+	# Set all timestamps to Jan 1 1980, which is the earliest date the zip format supports...
+	find $input-tmp -exec touch -t 198001010000.00 {} +
+	rm $input
+	pushd $input-tmp
+	zip -q -r -o -X $outer/tmp-out.jar . 2> /dev/null
+	popd
+	rm -rf $input-tmp
+	mv $outer/tmp-out.jar $input
+}
+
 propagateImageName() {
     mkdir -p $out/nix-support
     cat "$diskImage"/nix-support/full-name > $out/nix-support/full-name