Whilst working on the Reproducible Builds effort [0], we noticed that
liblopsub generates output that is not reproducible. The lopsubgen
utility does not respect SOURCE_DATE_EPOCH [1] and thus packages such
as src:tfortune are rendered unreproducible as they then encode the
build date and time.
This patch makes lopsubgen honour SOURCE_DATE_EPOCH.
[0] https://reproducible-builds.org/
[1] https://reproducible-builds.org/specs/source-date-epoch/
Signed-off-by: Andre Noll <maan@tuebingen.mpg.de>
static void gen_man(struct lls_parse_result *lpr, const char *cmdline)
{
int i;
static void gen_man(struct lls_parse_result *lpr, const char *cmdline)
{
int i;
struct tm *tmp;
FILE *out;
char *outpath = get_output_path("man",
struct tm *tmp;
FILE *out;
char *outpath = get_output_path("man",
if (suite.commands[0].name.orig) {
char date[200];
const char *version_string;
if (suite.commands[0].name.orig) {
char date[200];
const char *version_string;
- t = time(NULL);
- tmp = localtime(&t);
+ /*
+ * If the SOURCE_DATE_EPOCH environment variable
+ * contains a positive integer in the time_t range, use
+ * that instead of the current time. See:
+ * <https://reproducible-builds.org/specs/source-date-epoch/>
+ * for more information.
+ */
+ char *source_date_epoch = getenv("SOURCE_DATE_EPOCH");
+ if (source_date_epoch != NULL)
+ t = strtoll(source_date_epoch, NULL, 10);
+ if (t <= 0)
+ t = time(NULL);
+ tmp = gmtime(&t);
exit(EXIT_FAILURE);
}
if (strftime(date, sizeof(date), "%B %Y", tmp) == 0) {
exit(EXIT_FAILURE);
}
if (strftime(date, sizeof(date), "%B %Y", tmp) == 0) {