diff --git a/pkgs/tools/typesetting/scdoc/default.nix b/pkgs/tools/typesetting/scdoc/default.nix index 5789f51abd9..a5bf2d261e1 100644 --- a/pkgs/tools/typesetting/scdoc/default.nix +++ b/pkgs/tools/typesetting/scdoc/default.nix @@ -9,6 +9,8 @@ stdenv.mkDerivation rec { sha256 = "0a9sxifzsbj24kjnpc0525i91ni2vkwizhgvwx1m9shvfkiisnc6"; }; + patches = [ ./use-source-date-epoch.patch ]; + postPatch = '' substituteInPlace Makefile \ --replace "-static" "" \ 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 00000000000..5a2496d6358 --- /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 + #include + #include ++#define __USE_XOPEN + #include + #include + #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 </dev/null ++scdoc </dev/null + test(8) + EOF + end 0 + + begin "Preserves dashes" +-scdoc </dev/null ++scdoc </dev/null + test-manual(8) + EOF + end 0 + + begin "Handles extra footer field" +-scdoc </dev/null ++scdoc </dev/null + test-manual(8) "Footer" + EOF + end 0 + + begin "Handles both extra fields" +-scdoc </dev/null ++scdoc </dev/null + test-manual(8) "Footer" "Header" + EOF + end 0 + + begin "Emits empty footer correctly" +-scdoc </dev/null ++scdoc </dev/null + test-manual(8) "" "Header" + EOF + end 0