Package: guix-patches;
Reported by: Ryan Prior <rprior <at> protonmail.com>
Date: Fri, 1 Jan 2021 19:24:02 UTC
Severity: normal
Tags: moreinfo, patch
View this message in rfc822 format
From: Ryan Prior <rprior <at> protonmail.com> To: 45601 <at> debbugs.gnu.org Subject: [bug#45601] [PATCH 6/6] gnu: vlang: Fix v tools. Date: Fri, 01 Jan 2021 19:27:34 +0000
--- gnu/local.mk | 1 + .../vlang-accommodate-timestamps.patch | 50 +++++++++++++++++++ gnu/packages/vlang.scm | 7 +++ 3 files changed, 58 insertions(+) create mode 100644 gnu/packages/patches/vlang-accommodate-timestamps.patch diff --git a/gnu/local.mk b/gnu/local.mk index 2402b1e349..168c499976 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1702,6 +1702,7 @@ dist_patch_DATA = \ %D%/packages/patches/vinagre-newer-freerdp.patch \ %D%/packages/patches/vinagre-newer-rdp-parameters.patch \ %D%/packages/patches/virglrenderer-CVE-2017-6386.patch \ + %D%/packages/patches/vlang-accommodate-timestamps.patch \ %D%/packages/patches/vorbis-tools-CVE-2014-9638+CVE-2014-9639.patch \ %D%/packages/patches/vorbis-tools-CVE-2014-9640.patch \ %D%/packages/patches/vorbis-tools-CVE-2015-6749.patch \ diff --git a/gnu/packages/patches/vlang-accommodate-timestamps.patch b/gnu/packages/patches/vlang-accommodate-timestamps.patch new file mode 100644 index 0000000000..02171ac6cf --- /dev/null +++ b/gnu/packages/patches/vlang-accommodate-timestamps.patch @@ -0,0 +1,50 @@ +From 64e7c548843c7938fcfa6b697108d28aa26f4d69 Mon Sep 17 00:00:00 2001 +From: Ryan Prior <rprior <at> protonmail.com> +Date: Thu, 31 Dec 2020 02:31:38 -0600 +Subject: [PATCH] v.util: accomodate reproducible build environments like guix, + by not recompiling cmd/tools when mtime < 1024 (#7702) + +--- + vlib/v/util/util.v | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +diff --git a/vlib/v/util/util.v b/vlib/v/util/util.v +index 811b71585..1ed32bacf 100644 +--- a/vlib/v/util/util.v ++++ b/vlib/v/util/util.v +@@ -179,7 +179,10 @@ pub fn should_recompile_tool(vexe string, tool_source string) bool { + if !os.exists(tool_exe) { + should_compile = true + } else { +- if os.file_last_mod_unix(tool_exe) <= os.file_last_mod_unix(vexe) { ++ mtime_vexe := os.file_last_mod_unix(vexe) ++ mtime_tool_exe := os.file_last_mod_unix(tool_exe) ++ mtime_tool_source := os.file_last_mod_unix(tool_source) ++ if mtime_tool_exe <= mtime_vexe { + // v was recompiled, maybe after v up ... + // rebuild the tool too just in case + should_compile = true +@@ -192,10 +195,19 @@ pub fn should_recompile_tool(vexe string, tool_source string) bool { + should_compile = false + } + } +- if os.file_last_mod_unix(tool_exe) <= os.file_last_mod_unix(tool_source) { ++ if mtime_tool_exe <= mtime_tool_source { + // the user changed the source code of the tool, or git updated it: + should_compile = true + } ++ // GNU Guix and possibly other environments, have bit for bit reproducibility in mind, ++ // including filesystem attributes like modification times, so they set the modification ++ // times of executables to a small number like 0, 1 etc. In this case, we should not ++ // recompile even if other heuristics say that we should. Users in such environments, ++ // have to explicitly do: `v cmd/tools/vfmt.v`, and/or install v from source, and not ++ // use the system packaged one, if they desire to develop v itself. ++ if mtime_vexe < 1024 && mtime_tool_exe < 1024 { ++ should_compile = false ++ } + } + return should_compile + } +-- +2.29.2 + diff --git a/gnu/packages/vlang.scm b/gnu/packages/vlang.scm index 92d178a3e1..3bdbf36f9d 100644 --- a/gnu/packages/vlang.scm +++ b/gnu/packages/vlang.scm @@ -30,6 +30,7 @@ #:use-module (gnu packages version-control) #:use-module (gnu packages javascript) #:use-module (gnu packages xorg) + #:use-module (gnu packages) #:use-module (guix build-system gnu) #:use-module (guix git-download) #:use-module ((guix licenses) #:prefix license:) @@ -61,6 +62,12 @@ (sha256 (base32 "1x2sf2j6xl11kjvv0i0anjqwsfb1la11xr7yhdnbix9808442wm2")) (modules '((guix build utils))) + ;; This patch is already accepted upstream but is required for version + ;; 0.2. The package will build without it, but it will fail to run any v + ;; tools afterwards because of how Guix changes modified timestamps in + ;; the package files. + (patches (search-patches + "vlang-accommodate-timestamps.patch")) (snippet '(begin ;; Eventually remove the whole thirdparty directory. -- 2.29.2
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.