guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: gnu: ocaml: Build reproducibly.


From: julien lepiller
Subject: 01/01: gnu: ocaml: Build reproducibly.
Date: Wed, 20 Jun 2018 15:27:07 -0400 (EDT)

roptat pushed a commit to branch master
in repository guix.

commit 6a8d3381588ad335d14ad8e7d68bcd8530a68252
Author: Julien Lepiller <address@hidden>
Date:   Wed Jun 20 20:33:31 2018 +0200

    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.
---
 gnu/local.mk                                       |   1 +
 gnu/packages/ocaml.scm                             |   3 +-
 .../ocaml-enable-ocamldoc-reproducibility.patch    | 149 +++++++++++++++++++++
 3 files changed, 152 insertions(+), 1 deletion(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index dfd25c7..9057826 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -964,6 +964,7 @@ dist_patch_DATA =                                           
\
   %D%/packages/patches/ocaml-bitstring-fix-configure.patch \
   %D%/packages/patches/ocaml-CVE-2015-8869.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-graph-honor-source-date-epoch.patch       \
   %D%/packages/patches/omake-fix-non-determinism.patch \
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 864038f..f21c2b2 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -135,7 +135,8 @@
               (patches
                (search-patches
                 "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)
     (native-search-paths
      (list (search-path-specification
diff --git a/gnu/packages/patches/ocaml-enable-ocamldoc-reproducibility.patch 
b/gnu/packages/patches/ocaml-enable-ocamldoc-reproducibility.patch
new file mode 100644
index 0000000..39fb7aa
--- /dev/null
+++ b/gnu/packages/patches/ocaml-enable-ocamldoc-reproducibility.patch
@@ -0,0 +1,149 @@
+From a87c3f20e846c00e53d695497dba7038edbd12f0 Mon Sep 17 00:00:00 2001
+From: Valentin Lorentz <address@hidden>
+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 <address@hidden>
+---
+ 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
+



reply via email to

[Prev in Thread] Current Thread [Next in Thread]