OBS-URL: https://build.opensuse.org/package/show/devel:languages:php/php8?expand=0&rev=214
110 lines
3.7 KiB
Diff
110 lines
3.7 KiB
Diff
From 485e2a4e43458a417603d4ed219af3e79854ef46 Mon Sep 17 00:00:00 2001
|
|
From: Arjen de Korte <build+github@de-korte.org>
|
|
Date: Sat, 2 Jan 2021 17:57:18 +0100
|
|
Subject: [PATCH 1/1] phar: honor SOURCE_DATE_EPOCH for timestamps
|
|
|
|
In order to build reproducible phars, honor SOURCE_DATE_EPOCH
|
|
if set
|
|
|
|
Signed-off-by: Arjen de Korte <build+github@de-korte.org>
|
|
---
|
|
ext/phar/phar.c | 2 +-
|
|
ext/phar/phar_internal.h | 15 +++++++++++++++
|
|
ext/phar/stream.c | 2 +-
|
|
ext/phar/tar.c | 2 +-
|
|
ext/phar/util.c | 2 +-
|
|
ext/phar/zip.c | 2 +-
|
|
6 files changed, 18 insertions(+), 5 deletions(-)
|
|
|
|
Index: php-8.4.10/ext/phar/phar.c
|
|
===================================================================
|
|
--- php-8.4.10.orig/ext/phar/phar.c
|
|
+++ php-8.4.10/ext/phar/phar.c
|
|
@@ -2965,7 +2965,7 @@ void phar_flush_ex(phar_archive_data *ph
|
|
4: metadata-len
|
|
+: metadata
|
|
*/
|
|
- mytime = time(NULL);
|
|
+ mytime = source_date_epoch_time(NULL);
|
|
phar_set_32(entry_buffer, entry->uncompressed_filesize);
|
|
phar_set_32(entry_buffer+4, mytime);
|
|
phar_set_32(entry_buffer+8, entry->compressed_filesize);
|
|
Index: php-8.4.10/ext/phar/phar_internal.h
|
|
===================================================================
|
|
--- php-8.4.10.orig/ext/phar/phar_internal.h
|
|
+++ php-8.4.10/ext/phar/phar_internal.h
|
|
@@ -315,6 +315,21 @@ static inline php_stream *phar_get_pharf
|
|
return PHAR_G(cached_fp)[phar->phar_pos].fp;
|
|
}
|
|
|
|
+static inline time_t source_date_epoch_time(time_t *tloc)
|
|
+{
|
|
+ const char *sde;
|
|
+ time_t ts;
|
|
+
|
|
+ tsrm_env_lock();
|
|
+ sde = getenv("SOURCE_DATE_EPOCH");
|
|
+ ts = (sde) ? strtoul(sde, NULL, 10) : time(0);
|
|
+ tsrm_env_unlock();
|
|
+ if (tloc) {
|
|
+ *tloc = ts;
|
|
+ }
|
|
+ return ts;
|
|
+}
|
|
+
|
|
static inline enum phar_fp_type phar_get_fp_type(const phar_entry_info *entry)
|
|
{
|
|
if (!entry->is_persistent) {
|
|
Index: php-8.4.10/ext/phar/stream.c
|
|
===================================================================
|
|
--- php-8.4.10.orig/ext/phar/stream.c
|
|
+++ php-8.4.10/ext/phar/stream.c
|
|
@@ -474,7 +474,7 @@ static int phar_stream_flush(php_stream
|
|
phar_entry_data *data = (phar_entry_data *) stream->abstract;
|
|
|
|
if (data->internal_file->is_modified) {
|
|
- data->internal_file->timestamp = time(0);
|
|
+ data->internal_file->timestamp = source_date_epoch_time(0);
|
|
phar_flush(data->phar, &error);
|
|
if (error) {
|
|
php_stream_wrapper_log_error(stream->wrapper, REPORT_ERRORS, "%s", error);
|
|
Index: php-8.4.10/ext/phar/tar.c
|
|
===================================================================
|
|
--- php-8.4.10.orig/ext/phar/tar.c
|
|
+++ php-8.4.10/ext/phar/tar.c
|
|
@@ -972,7 +972,7 @@ void phar_tar_flush(phar_archive_data *p
|
|
char *buf, *signature, sigbuf[8];
|
|
|
|
entry.flags = PHAR_ENT_PERM_DEF_FILE;
|
|
- entry.timestamp = time(NULL);
|
|
+ entry.timestamp = source_date_epoch_time(NULL);
|
|
entry.is_modified = 1;
|
|
entry.is_crc_checked = 1;
|
|
entry.is_tar = 1;
|
|
Index: php-8.4.10/ext/phar/util.c
|
|
===================================================================
|
|
--- php-8.4.10.orig/ext/phar/util.c
|
|
+++ php-8.4.10/ext/phar/util.c
|
|
@@ -701,7 +701,7 @@ phar_entry_data *phar_get_or_create_entr
|
|
|
|
phar_add_virtual_dirs(phar, path, path_len);
|
|
etemp.is_modified = 1;
|
|
- etemp.timestamp = time(0);
|
|
+ etemp.timestamp = source_date_epoch_time(0);
|
|
etemp.is_crc_checked = 1;
|
|
etemp.phar = phar;
|
|
etemp.filename = estrndup(path, path_len);
|
|
Index: php-8.4.10/ext/phar/zip.c
|
|
===================================================================
|
|
--- php-8.4.10.orig/ext/phar/zip.c
|
|
+++ php-8.4.10/ext/phar/zip.c
|
|
@@ -1271,7 +1271,7 @@ void phar_zip_flush(phar_archive_data *p
|
|
|
|
pass.error = &temperr;
|
|
entry.flags = PHAR_ENT_PERM_DEF_FILE;
|
|
- entry.timestamp = time(NULL);
|
|
+ entry.timestamp = source_date_epoch_time(NULL);
|
|
entry.is_modified = 1;
|
|
entry.is_zip = true;
|
|
entry.phar = phar;
|