gnu: ocaml: Build reproducibly.
* gnu/packages/patches/ocaml-enable-ocamldoc-reproducibility.patch: New file. * gnu/packages/ocaml.scm (ocaml)[origin]: Use it. * gnu/local.mk (dist_patch_DATA): Add it.
This commit is contained in:
parent
aed4944d51
commit
6a8d338158
|
@ -964,6 +964,7 @@ dist_patch_DATA = \
|
||||||
%D%/packages/patches/ocaml-bitstring-fix-configure.patch \
|
%D%/packages/patches/ocaml-bitstring-fix-configure.patch \
|
||||||
%D%/packages/patches/ocaml-CVE-2015-8869.patch \
|
%D%/packages/patches/ocaml-CVE-2015-8869.patch \
|
||||||
%D%/packages/patches/ocaml-Add-a-.file-directive.patch \
|
%D%/packages/patches/ocaml-Add-a-.file-directive.patch \
|
||||||
|
%D%/packages/patches/ocaml-enable-ocamldoc-reproducibility.patch \
|
||||||
%D%/packages/patches/ocaml-findlib-make-install.patch \
|
%D%/packages/patches/ocaml-findlib-make-install.patch \
|
||||||
%D%/packages/patches/ocaml-graph-honor-source-date-epoch.patch \
|
%D%/packages/patches/ocaml-graph-honor-source-date-epoch.patch \
|
||||||
%D%/packages/patches/omake-fix-non-determinism.patch \
|
%D%/packages/patches/omake-fix-non-determinism.patch \
|
||||||
|
|
|
@ -135,7 +135,8 @@
|
||||||
(patches
|
(patches
|
||||||
(search-patches
|
(search-patches
|
||||||
"ocaml-CVE-2015-8869.patch"
|
"ocaml-CVE-2015-8869.patch"
|
||||||
"ocaml-Add-a-.file-directive.patch"))))
|
"ocaml-Add-a-.file-directive.patch"
|
||||||
|
"ocaml-enable-ocamldoc-reproducibility.patch"))))
|
||||||
(build-system gnu-build-system)
|
(build-system gnu-build-system)
|
||||||
(native-search-paths
|
(native-search-paths
|
||||||
(list (search-path-specification
|
(list (search-path-specification
|
||||||
|
|
|
@ -0,0 +1,149 @@
|
||||||
|
From a87c3f20e846c00e53d695497dba7038edbd12f0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Valentin Lorentz <progval@progval.net>
|
||||||
|
Date: Thu, 13 Aug 2015 11:59:04 +0200
|
||||||
|
Subject: [PATCH] Enable ocamldoc to build reproducible manpages
|
||||||
|
|
||||||
|
Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=794586
|
||||||
|
Signed-off-by: Stephane Glondu <steph@glondu.net>
|
||||||
|
---
|
||||||
|
ocamldoc/odoc_man.ml | 15 +++++----------
|
||||||
|
ocamldoc/odoc_misc.ml | 12 ++++++++++--
|
||||||
|
ocamldoc/odoc_misc.mli | 7 ++++++-
|
||||||
|
3 files changed, 21 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/ocamldoc/odoc_man.ml b/ocamldoc/odoc_man.ml
|
||||||
|
index 615c5e172..3c85aa32a 100644
|
||||||
|
--- a/ocamldoc/odoc_man.ml
|
||||||
|
+++ b/ocamldoc/odoc_man.ml
|
||||||
|
@@ -864,14 +864,13 @@ class man =
|
||||||
|
(** Generate the man page for the given class.*)
|
||||||
|
method generate_for_class cl =
|
||||||
|
Odoc_info.reset_type_names () ;
|
||||||
|
- let date = Unix.time () in
|
||||||
|
let file = self#file_name cl.cl_name in
|
||||||
|
try
|
||||||
|
let chanout = self#open_out file in
|
||||||
|
let b = new_buf () in
|
||||||
|
bs b (".TH \""^cl.cl_name^"\" ");
|
||||||
|
bs b !man_section ;
|
||||||
|
- bs b (" "^(Odoc_misc.string_of_date ~hour: false date)^" ");
|
||||||
|
+ bs b (" source: "^Odoc_misc.current_date^" ");
|
||||||
|
bs b "OCamldoc ";
|
||||||
|
bs b ("\""^(match !Global.title with Some t -> t | None -> "")^"\"\n");
|
||||||
|
|
||||||
|
@@ -923,14 +922,13 @@ class man =
|
||||||
|
(** Generate the man page for the given class type.*)
|
||||||
|
method generate_for_class_type ct =
|
||||||
|
Odoc_info.reset_type_names () ;
|
||||||
|
- let date = Unix.time () in
|
||||||
|
let file = self#file_name ct.clt_name in
|
||||||
|
try
|
||||||
|
let chanout = self#open_out file in
|
||||||
|
let b = new_buf () in
|
||||||
|
bs b (".TH \""^ct.clt_name^"\" ");
|
||||||
|
bs b !man_section ;
|
||||||
|
- bs b (" "^(Odoc_misc.string_of_date ~hour: false date)^" ");
|
||||||
|
+ bs b (" source: "^Odoc_misc.current_date^" ");
|
||||||
|
bs b "OCamldoc ";
|
||||||
|
bs b ("\""^(match !Global.title with Some t -> t | None -> "")^"\"\n");
|
||||||
|
|
||||||
|
@@ -1016,14 +1014,13 @@ class man =
|
||||||
|
(** Generate the man file for the given module type.
|
||||||
|
@raise Failure if an error occurs.*)
|
||||||
|
method generate_for_module_type mt =
|
||||||
|
- let date = Unix.time () in
|
||||||
|
let file = self#file_name mt.mt_name in
|
||||||
|
try
|
||||||
|
let chanout = self#open_out file in
|
||||||
|
let b = new_buf () in
|
||||||
|
bs b (".TH \""^mt.mt_name^"\" ");
|
||||||
|
bs b !man_section ;
|
||||||
|
- bs b (" "^(Odoc_misc.string_of_date ~hour: false date)^" ");
|
||||||
|
+ bs b (" source: "^Odoc_misc.current_date^" ");
|
||||||
|
bs b "OCamldoc ";
|
||||||
|
bs b ("\""^(match !Global.title with Some t -> t | None -> "")^"\"\n");
|
||||||
|
|
||||||
|
@@ -1099,14 +1096,13 @@ class man =
|
||||||
|
(** Generate the man file for the given module.
|
||||||
|
@raise Failure if an error occurs.*)
|
||||||
|
method generate_for_module m =
|
||||||
|
- let date = Unix.time () in
|
||||||
|
let file = self#file_name m.m_name in
|
||||||
|
try
|
||||||
|
let chanout = self#open_out file in
|
||||||
|
let b = new_buf () in
|
||||||
|
bs b (".TH \""^m.m_name^"\" ");
|
||||||
|
bs b !man_section ;
|
||||||
|
- bs b (" "^(Odoc_misc.string_of_date ~hour: false date)^" ");
|
||||||
|
+ bs b (" source: "^Odoc_misc.current_date^" ");
|
||||||
|
bs b "OCamldoc ";
|
||||||
|
bs b ("\""^(match !Global.title with Some t -> t | None -> "")^"\"\n");
|
||||||
|
|
||||||
|
@@ -1206,14 +1202,13 @@ class man =
|
||||||
|
| Res_const (_,f) -> f.vc_name
|
||||||
|
)
|
||||||
|
in
|
||||||
|
- let date = Unix.time () in
|
||||||
|
let file = self#file_name name in
|
||||||
|
try
|
||||||
|
let chanout = self#open_out file in
|
||||||
|
let b = new_buf () in
|
||||||
|
bs b (".TH \""^name^"\" ");
|
||||||
|
bs b !man_section ;
|
||||||
|
- bs b (" "^(Odoc_misc.string_of_date ~hour: false date)^" ");
|
||||||
|
+ bs b (" source: "^Odoc_misc.current_date^" ");
|
||||||
|
bs b "OCamldoc ";
|
||||||
|
bs b ("\""^(match !Global.title with Some t -> t | None -> "")^"\"\n");
|
||||||
|
bs b ".SH NAME\n";
|
||||||
|
diff --git a/ocamldoc/odoc_misc.ml b/ocamldoc/odoc_misc.ml
|
||||||
|
index 4c74476da..456225f62 100644
|
||||||
|
--- a/ocamldoc/odoc_misc.ml
|
||||||
|
+++ b/ocamldoc/odoc_misc.ml
|
||||||
|
@@ -223,9 +223,9 @@ let apply_opt f v_opt =
|
||||||
|
None -> None
|
||||||
|
| Some v -> Some (f v)
|
||||||
|
|
||||||
|
-let string_of_date ?(hour=true) d =
|
||||||
|
+let string_of_date ?(absolute=false) ?(hour=true) d =
|
||||||
|
let add_0 s = if String.length s < 2 then "0"^s else s in
|
||||||
|
- let t = Unix.localtime d in
|
||||||
|
+ let t = (if absolute then Unix.gmtime else Unix.localtime) d in
|
||||||
|
(string_of_int (t.Unix.tm_year + 1900))^"-"^
|
||||||
|
(add_0 (string_of_int (t.Unix.tm_mon + 1)))^"-"^
|
||||||
|
(add_0 (string_of_int t.Unix.tm_mday))^
|
||||||
|
@@ -238,6 +238,14 @@ let string_of_date ?(hour=true) d =
|
||||||
|
""
|
||||||
|
)
|
||||||
|
|
||||||
|
+let current_date =
|
||||||
|
+ let time =
|
||||||
|
+ try
|
||||||
|
+ float_of_string (Sys.getenv "SOURCE_DATE_EPOCH")
|
||||||
|
+ with
|
||||||
|
+ Not_found -> Unix.time ()
|
||||||
|
+ in string_of_date ~absolute: true ~hour: false time
|
||||||
|
+
|
||||||
|
|
||||||
|
let rec text_list_concat sep l =
|
||||||
|
match l with
|
||||||
|
diff --git a/ocamldoc/odoc_misc.mli b/ocamldoc/odoc_misc.mli
|
||||||
|
index dd5a7fcb9..38ff0612b 100644
|
||||||
|
--- a/ocamldoc/odoc_misc.mli
|
||||||
|
+++ b/ocamldoc/odoc_misc.mli
|
||||||
|
@@ -62,7 +62,12 @@ val apply_opt : ('a -> 'b) -> 'a option -> 'b option
|
||||||
|
|
||||||
|
(** Return a string representing a date given as a number of seconds
|
||||||
|
since 1970. The hour is optionnaly displayed. *)
|
||||||
|
-val string_of_date : ?hour:bool -> float -> string
|
||||||
|
+val string_of_date : ?absolute:bool -> ?hour:bool -> float -> string
|
||||||
|
+
|
||||||
|
+(* Value returned by string_of_date for current time.
|
||||||
|
+ * Uses environment variable SOURCE_DATE_EPOCH if set; falls back to
|
||||||
|
+ * current timestamp otherwise. *)
|
||||||
|
+val current_date : string
|
||||||
|
|
||||||
|
(** Return the first sentence (until the first dot) of a text.
|
||||||
|
Don't stop in the middle of [Code], [Verbatim], [List], [Lnum],
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
Loading…
Reference in New Issue