Add ability to create reproducible source tarballs.
authorNick Clifton <nickc@redhat.com>
Mon, 10 Oct 2022 10:28:45 +0000 (11:28 +0100)
committerNick Clifton <nickc@redhat.com>
Mon, 10 Oct 2022 10:28:45 +0000 (11:28 +0100)
* src-release.sh: Add "-r <date>" option to create reproducible
tarballs based upon a fixed timestamp of <date>.
* binutils/README-how-to-make-a-release: Add a line showing how to
use -r <date> when creating a binutils release.

ChangeLog
binutils/README-how-to-make-a-release
src-release.sh

index 927e0eed7d86e47de68cf1a894b3a3e854c39049..73c3a00688160222e28f9f2d5f5ae2867efbc96c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2022-10-10  Nick Clifton  <nickc@redhat.com>
+
+       * src-release.sh: Add "-r <date>" option to create reproducible
+       tarballs based upon a fixed timestamp of <date>.
+       * binutils/README-how-to-make-a-release: Add a line showing how to
+       use -r <date> when creating a binutils release.
+
 2022-10-04  Nick Clifton  <nickc@redhat.com>
 
        * README-maintainer-mode: Add a minimum version of dejagnu
index 9fcebf5f0a4b335ee7a8c2fe6b0b47951676c5e5..3d7f6cec4142d76ccdd25ba93b1b00564431d9cf 100644 (file)
@@ -251,6 +251,10 @@ When the time comes to actually make the release....
   
             ./src-release.sh -b -g -l -x binutils
 
+      OR ... for a more reproducible tarball:
+
+            ./src-release.sh -b -g -l -x -r `git log -1 --format=%cd --date=format:%F bfd/version.m4` binutils
+
   24. Check that the files in the tarballs have the correct
       permissions.
 
index 079b545ae7cec242defd6ac7c0644ca35e9255e6..76c355a583c22712cf7c24176ae58b95f37e2b5a 100755 (executable)
@@ -30,6 +30,7 @@ SHA256PROG=sha256sum
 MAKE=make
 CC=gcc
 CXX=g++
+release_date=
 
 # Default to avoid splitting info files by setting the threshold high.
 MAKEINFOFLAGS=--split-size=5000000
@@ -184,9 +185,17 @@ do_tar()
     ver=$2
     echo "==> Making $package-$ver.tar"
     rm -f $package-$ver.tar
-    find $package-$ver -follow \( $CVS_NAMES \) -prune \
-       -o -type f -print \
-       | tar cTfh - $package-$ver.tar
+    if test x$release_date == "x" ; then
+       find $package-$ver -follow \( $CVS_NAMES \) -prune -o -type f -print \
+          | tar cTfh - $package-$ver.tar
+    else
+       # Attempt to create a consistent, reproducible tarball using the
+       # specified date.
+       find $package-$ver -follow \( $CVS_NAMES \) -prune -o -type f -print \
+           | LC_ALL=C sort \
+           | tar cTfh - $package-$ver.tar \
+                 --mtime=$release_date --group=0 --owner=0
+    fi
 }
 
 # Compress the output with bzip2
@@ -340,6 +349,7 @@ usage()
     echo "  -g: Compress with gzip"
     echo "  -l: Compress with lzip"
     echo "  -x: Compress with xz"
+    echo "  -r <date>: Create a reproducible tarball using <date> as the mtime"
     exit 1
 }
 
@@ -363,7 +373,7 @@ build_release()
 
 compressors=""
 
-while getopts ":bglx" opt; do
+while getopts ":bglr:x" opt; do
     case $opt in
        b)
            compressors="$compressors bz2";;
@@ -371,6 +381,8 @@ while getopts ":bglx" opt; do
            compressors="$compressors gz";;
        l)
            compressors="$compressors lz";;
+       r)
+           release_date=$OPTARG;;
        x)
            compressors="$compressors xz";;
        \?)