[Reproducible-commits] [dpkg] 101/105: dpkg-deb: Allow to set the build timestamp using SOURCE_DATE_EPOCH

Niko Tyni ntyni at moszumanska.debian.org
Mon May 2 13:50:00 UTC 2016


This is an automated email from the git hooks/post-receive script.

ntyni pushed a commit to branch ntyni/reproducible_builds
in repository dpkg.

commit a9d3ab244778f20fa6a9f7951ead2193d9011601
Author: Jérémy Bobbio <lunar at debian.org>
Date:   Thu Oct 8 15:02:12 2015 +0000

    dpkg-deb: Allow to set the build timestamp using SOURCE_DATE_EPOCH
    
    In order to allow Debian packages to be built reproducibly, we need a way for
    users to reproduce the dates captured in the .deb archives.
    
    dpkg-deb now support the SOURCE_DATE_EPOCH environment variable. If set we will
    use its value for the build timestamp instead of the current time. The build
    timestamp is used to set the modification time in ar headers, and for archived
    files created later than the build timestamp.
    
    SOURCE_DATE_EPOCH specification is available at:
    https://reproducible-builds.org/specs/source-date-epoch/
---
 dpkg-deb/build.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/dpkg-deb/build.c b/dpkg-deb/build.c
index fc29b59..b8a00d8 100644
--- a/dpkg-deb/build.c
+++ b/dpkg-deb/build.c
@@ -414,6 +414,24 @@ gen_dest_pathname_from_pkg(const char *dir, struct pkginfo *pkg)
                  pkg->available.arch->name, DEBEXT);
 }
 
+static time_t
+get_build_timestamp(void)
+{
+  time_t timestamp;
+  const char *value;
+  char *end;
+
+  errno = 0;
+  value = getenv("SOURCE_DATE_EPOCH");
+  if (!value)
+    return time(NULL);
+
+  timestamp = strtol(value, &end, 10);
+  if (value == end || *end || errno != 0)
+    ohshite(_("unable to parse SOURCE_DATE_EPOCH"));
+  return timestamp;
+}
+
 typedef void filenames_feed_func(const char *dir, int fd_out);
 
 /**
@@ -558,7 +576,7 @@ do_build(const char *const *argv)
 
   tar_supports_clamp_mtime = does_tar_support("--clamp-mtime");
 
-  build_timestamp = time(NULL);
+  build_timestamp = get_build_timestamp();
 
   /* Now that we have verified everything its time to actually
    * build something. Let's start by making the ar-wrapper. */

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/dpkg.git



More information about the Reproducible-commits mailing list