From 8a8d9e190533ee41e8b231b18c7837f98f1ae231 Mon Sep 17 00:00:00 2001 From: Rich Salz Date: Mon, 27 Nov 2017 14:28:15 -0500 Subject: [PATCH] Fix SOURCE_DATE_EPOCH bug; use UTC Thanks to Juro Bystricky for the suggestion and prototype. Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/4644) --- crypto/cversion.c | 35 ++++++++--------------------------- util/mkbuildinf.pl | 33 ++++++++++++++++++++++++--------- 2 files changed, 32 insertions(+), 36 deletions(-) diff --git a/crypto/cversion.c b/crypto/cversion.c index 4c9e2c241c..534e7eba55 100644 --- a/crypto/cversion.c +++ b/crypto/cversion.c @@ -18,41 +18,22 @@ unsigned long OpenSSL_version_num(void) const char *OpenSSL_version(int t) { - if (t == OPENSSL_VERSION) + switch (t) { + case OPENSSL_VERSION: return OPENSSL_VERSION_TEXT; - if (t == OPENSSL_BUILT_ON) { -#ifdef DATE -# ifdef OPENSSL_USE_BUILD_DATE + case OPENSSL_BUILT_ON: return DATE; -# else - return "built on: reproducible build, date unspecified"; -# endif -#else - return "built on: date not available"; -#endif - } - if (t == OPENSSL_CFLAGS) { -#ifdef CFLAGS - return CFLAGS; -#else - return "compiler: information not available"; -#endif - } - if (t == OPENSSL_PLATFORM) { -#ifdef PLATFORM + case OPENSSL_CFLAGS: + return compiler_flags; + case OPENSSL_PLATFORM: return PLATFORM; -#else - return "platform: information not available"; -#endif - } - if (t == OPENSSL_DIR) { + case OPENSSL_DIR: #ifdef OPENSSLDIR return "OPENSSLDIR: \"" OPENSSLDIR "\""; #else return "OPENSSLDIR: N/A"; #endif - } - if (t == OPENSSL_ENGINES_DIR) { + case OPENSSL_ENGINES_DIR: #ifdef ENGINESDIR return "ENGINESDIR: \"" ENGINESDIR "\""; #else diff --git a/util/mkbuildinf.pl b/util/mkbuildinf.pl index 5bf0168b6a..c9324a9ded 100755 --- a/util/mkbuildinf.pl +++ b/util/mkbuildinf.pl @@ -1,26 +1,43 @@ #! /usr/bin/env perl -# Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2014-2017 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy # in the file LICENSE in the source distribution or at # https://www.openssl.org/source/license.html +use strict; +use warnings; my ($cflags, $platform) = @ARGV; - $cflags = "compiler: $cflags"; -$date = localtime(); + +my $date = gmtime($ENV{'SOURCE_DATE_EPOCH'} || time()) . " UTC"; + print <<"END_OUTPUT"; -/* auto-generated by util/mkbuildinf.pl for crypto/cversion.c */ -#define CFLAGS cflags /* - * Generate CFLAGS as an array of individual characters. This is a + * WARNING: do not edit! + * Generated by util/mkbuildinf.pl + * + * Copyright 2014-2017 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#define PLATFORM "platform: $platform" +#define DATE "built on: $date" + +/* + * Generate compiler_flags as an array of individual characters. This is a * workaround for the situation where CFLAGS gets too long for a C90 string * literal */ -static const char cflags[] = { +static const char compiler_flags[] = { END_OUTPUT + my $ctr = 0; foreach my $c (split //, $cflags) { $c =~ s|([\\'])|\\$1|; @@ -36,6 +53,4 @@ foreach my $c (split //, $cflags) { print <<"END_OUTPUT"; '\\0' }; -#define PLATFORM "platform: $platform" -#define DATE "built on: $date" END_OUTPUT -- 2.34.1