summary refs log tree commit diff
path: root/pkgs/tools/typesetting/scdoc/use-source-date-epoch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/typesetting/scdoc/use-source-date-epoch.patch')
-rw-r--r--pkgs/tools/typesetting/scdoc/use-source-date-epoch.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/pkgs/tools/typesetting/scdoc/use-source-date-epoch.patch b/pkgs/tools/typesetting/scdoc/use-source-date-epoch.patch
new file mode 100644
index 000000000000..5a2496d63583
--- /dev/null
+++ b/pkgs/tools/typesetting/scdoc/use-source-date-epoch.patch
@@ -0,0 +1,75 @@
+diff --git a/src/main.c b/src/main.c
+index 14b08d2..e2cc33e 100644
+--- a/src/main.c
++++ b/src/main.c
+@@ -3,6 +3,7 @@
+ #include <stdbool.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#define __USE_XOPEN
+ #include <time.h>
+ #include <unistd.h>
+ #include "string.h"
+@@ -66,10 +67,17 @@ static void parse_preamble(struct parser *p) {
+ 	int section = -1;
+ 	uint32_t ch;
+ 	char date[256];
+-	time_t now;
+-	time(&now);
+-	struct tm *now_tm = localtime(&now);
+-	strftime(date, sizeof(date), "%F", now_tm);
++	char *source_date_epoch = getenv("SOURCE_DATE_EPOCH");
++	if (source_date_epoch != NULL) {
++		struct tm source_date_epoch_tm;
++		strptime(source_date_epoch, "%s", &source_date_epoch_tm);
++		strftime(date, sizeof(date), "%F", &source_date_epoch_tm);
++	} else {
++		time_t now;
++		time(&now);
++		struct tm *now_tm = localtime(&now);
++		strftime(date, sizeof(date), "%F", now_tm);
++	}
+ 	while ((ch = parser_getch(p)) != UTF8_INVALID) {
+ 		if ((ch < 0x80 && isalnum(ch)) || ch == '_' || ch == '-' || ch == '.') {
+ 			assert(str_append_ch(name, ch) != -1);
+diff --git a/test/preamble b/test/preamble
+index 03e2d0c..eeb734b 100755
+--- a/test/preamble
++++ b/test/preamble
+@@ -38,31 +38,31 @@ EOF
+ end 0
+ 
+ begin "Writes the appropriate header"
+-scdoc <<EOF | grep '^\.TH "test" "8" "'"$(date +'%F')"'"' >/dev/null
++scdoc <<EOF | grep '^\.TH "test" "8" "'"$(date +'%F' --date=@${SOURCE_DATE_EPOCH:-$(date +'%s')})"'"' >/dev/null
+ test(8)
+ EOF
+ end 0
+ 
+ begin "Preserves dashes"
+-scdoc <<EOF | grep '^\.TH "test-manual" "8" "'"$(date +'%F')"'"' >/dev/null
++scdoc <<EOF | grep '^\.TH "test-manual" "8" "'"$(date +'%F' --date=@${SOURCE_DATE_EPOCH:-$(date +'%s')})"'"' >/dev/null
+ test-manual(8)
+ EOF
+ end 0
+ 
+ begin "Handles extra footer field"
+-scdoc <<EOF | grep '^\.TH "test-manual" "8" "'"$(date +'%F')"'" "Footer"' >/dev/null
++scdoc <<EOF | grep '^\.TH "test-manual" "8" "'"$(date +'%F' --date=@${SOURCE_DATE_EPOCH:-$(date +'%s')})"'" "Footer"' >/dev/null
+ test-manual(8) "Footer"
+ EOF
+ end 0
+ 
+ begin "Handles both extra fields"
+-scdoc <<EOF | grep '^\.TH "test-manual" "8" "'"$(date +'%F')"'" "Footer" "Header"' >/dev/null
++scdoc <<EOF | grep '^\.TH "test-manual" "8" "'"$(date +'%F' --date=@${SOURCE_DATE_EPOCH:-$(date +'%s')})"'" "Footer" "Header"' >/dev/null
+ test-manual(8) "Footer" "Header"
+ EOF
+ end 0
+ 
+ begin "Emits empty footer correctly"
+-scdoc <<EOF | grep '^\.TH "test-manual" "8" "'"$(date +'%F')"'" "" "Header"' >/dev/null
++scdoc <<EOF | grep '^\.TH "test-manual" "8" "'"$(date +'%F' --date=@${SOURCE_DATE_EPOCH:-$(date +'%s')})"'" "" "Header"' >/dev/null
+ test-manual(8) "" "Header"
+ EOF
+ end 0