* [v2 0/1] Erlang @ 2016-03-31 19:35 Leo Famulari 2016-03-31 19:35 ` [v2 1/1] gnu: Add erlang Leo Famulari 2016-04-01 8:19 ` [v2 0/1] Erlang Pjotr Prins 0 siblings, 2 replies; 16+ messages in thread From: Leo Famulari @ 2016-03-31 19:35 UTC (permalink / raw) To: guix-devel This adds Erlang. Originally written by Steve Sprang, I added the man pages and fixed all the "FHS bugs" I noticed. Pjotr used it to build a working Elixir: http://lists.gnu.org/archive/html/guix-devel/2016-03/msg00999.html Any feedback? Steve Sprang (1): gnu: Add erlang. gnu-system.am | 1 + gnu/packages/erlang.scm | 116 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 gnu/packages/erlang.scm -- 2.7.3 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [v2 1/1] gnu: Add erlang. 2016-03-31 19:35 [v2 0/1] Erlang Leo Famulari @ 2016-03-31 19:35 ` Leo Famulari 2016-04-01 8:19 ` [v2 0/1] Erlang Pjotr Prins 1 sibling, 0 replies; 16+ messages in thread From: Leo Famulari @ 2016-03-31 19:35 UTC (permalink / raw) To: guix-devel; +Cc: Steve Sprang From: Steve Sprang <scs@stevesprang.com> * gnu/packages/erlang.scm: New file. * gnu-system.am (GNU_SYSTEM_MODULES): Add it. Co-authored by: Leo Famulari <leo@famulari.name> --- gnu-system.am | 1 + gnu/packages/erlang.scm | 116 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 gnu/packages/erlang.scm diff --git a/gnu-system.am b/gnu-system.am index 6cdc1e3..e782c66 100644 --- a/gnu-system.am +++ b/gnu-system.am @@ -102,6 +102,7 @@ GNU_SYSTEM_MODULES = \ gnu/packages/enchant.scm \ gnu/packages/engineering.scm \ gnu/packages/enlightenment.scm \ + gnu/packages/erlang.scm \ gnu/packages/fcitx.scm \ gnu/packages/feh.scm \ gnu/packages/figlet.scm \ diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm new file mode 100644 index 0000000..4c0bc33 --- /dev/null +++ b/gnu/packages/erlang.scm @@ -0,0 +1,116 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 Steve Sprang <scs@stevesprang.com> +;;; Copyright © 2016 Leo Famulari <leo@famulari.name> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages erlang) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages perl) + #:use-module (gnu packages tls)) + +(define-public erlang + (package + (name "erlang") + ;; When updating, remember to update the hash of erlang-manpages! + (version "18.3") + (source (origin + (method url-fetch) + (uri (string-append + "http://erlang.org/download/otp_src_" + version + ".tar.gz")) + (sha256 + (base32 + "1hy9slq9gjvwdb504dmvp6rax90isnky6chqkyq5v4ybl4lq3azx")))) + (build-system gnu-build-system) + (native-inputs + `(("perl" ,perl) + + ;; Erlang's documentation is distributed in a separate tarball. + ("erlang-manpages" + ,(origin + (method url-fetch) + (uri (string-append "http://erlang.org/download/otp_doc_man_" + version ".tar.gz")) + (sha256 + (base32 + "1hpcr7a3dx2y9gnb53bvb4g6lyvbwigadl9s3f978s01x40f32wp")))))) + (inputs + `(("ncurses" ,ncurses) + ("openssl" ,openssl))) + (arguments + `(#:test-target "release_tests" + #:configure-flags + (list (string-append "--with-ssl=" (assoc-ref %build-inputs "openssl"))) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'path-to-rm + (lambda _ + (substitute* "erts/configure" + (("/bin/rm") (which "rm"))) + (substitute* "lib/odbc/configure" + (("/bin/rm") (which "rm"))))) + (add-after 'patch-source-shebangs 'patch-source-env + (lambda _ + (let ((escripts + (append + (find-files "." "\\.escript") + (find-files "lib/stdlib/test/escript_SUITE_data/") + '("erts/lib_src/utils/make_atomics_api" + "erts/preloaded/src/add_abstract_code" + "lib/diameter/bin/diameterc" + "lib/reltool/examples/display_args" + "lib/reltool/examples/mnesia_core_dump_viewer" + "lib/snmp/src/compile/snmpc.src" + "make/verify_runtime_dependencies" + "make/emd2exml.in")))) + (substitute* escripts + (("/usr/bin/env") (which "env")))))) + (add-before 'configure 'set-erl-top + (lambda _ + (setenv "ERL_TOP" (getcwd)))) + (add-after 'install 'patch-erl + ;; This only works after install. + (lambda _ + (substitute* (string-append (assoc-ref %outputs "out") "/bin/erl") + (("sed") (which "sed"))))) + (add-after 'install 'install-doc + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (manpages (assoc-ref inputs "erlang-manpages")) + (share (string-append out "/share/"))) + (mkdir-p share) + (with-directory-excursion share + (and + (zero? (system* "tar" "xvf" manpages)) + ;; Delete superfluous files. + (for-each delete-file '("COPYRIGHT" + "PR.template" + "README")))))))))) + (home-page "http://erlang.org/") + (synopsis "The Erlang programming language") + (description + "Erlang is a programming language used to build massively +scalable soft real-time systems with requirements on high +availability. Some of its uses are in telecoms, banking, e-commerce, +computer telephony and instant messaging. Erlang's runtime system has +built-in support for concurrency, distribution and fault tolerance.") + (license license:asl2.0))) -- 2.7.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [v2 0/1] Erlang 2016-03-31 19:35 [v2 0/1] Erlang Leo Famulari 2016-03-31 19:35 ` [v2 1/1] gnu: Add erlang Leo Famulari @ 2016-04-01 8:19 ` Pjotr Prins 2016-04-02 2:20 ` Leo Famulari 1 sibling, 1 reply; 16+ messages in thread From: Pjotr Prins @ 2016-04-01 8:19 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel On Thu, Mar 31, 2016 at 03:35:44PM -0400, Leo Famulari wrote: > This adds Erlang. > > Originally written by Steve Sprang, I added the man pages and fixed all > the "FHS bugs" I noticed. > > Pjotr used it to build a working Elixir: > http://lists.gnu.org/archive/html/guix-devel/2016-03/msg00999.html Better even, I am actually using that Elixir and Erlang :). Please push when there are no other issues. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [v2 0/1] Erlang 2016-04-01 8:19 ` [v2 0/1] Erlang Pjotr Prins @ 2016-04-02 2:20 ` Leo Famulari 2016-04-03 21:26 ` Ludovic Courtès 0 siblings, 1 reply; 16+ messages in thread From: Leo Famulari @ 2016-04-02 2:20 UTC (permalink / raw) To: Pjotr Prins; +Cc: guix-devel On Fri, Apr 01, 2016 at 10:19:11AM +0200, Pjotr Prins wrote: > > On Thu, Mar 31, 2016 at 03:35:44PM -0400, Leo Famulari wrote: > > This adds Erlang. > > > > Originally written by Steve Sprang, I added the man pages and fixed all > > the "FHS bugs" I noticed. > > > > Pjotr used it to build a working Elixir: > > http://lists.gnu.org/archive/html/guix-devel/2016-03/msg00999.html > > Better even, I am actually using that Elixir and Erlang :). Please > push when there are no other issues. Cool! From my point of view, there are no blocking issues. There are two sources of non-determinism when building repeatedly on the same machine. All the .beam files have timestamps and build paths embedded [0]. This is a known issue without a clear solution. The build paths don't seem so bad to me, since my understanding is that they are set deterministically by the Guix builder. There are also some .script files that also embed timestamps in a human readable string. Grepping for the string makes it easy to find the source of this. We could patch the timestamp format string with the value of SOURCE_DATE_EPOCH. Thoughts? [0] https://wiki.debian.org/ReproducibleBuilds/TimestampsInBeamFiles ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [v2 0/1] Erlang 2016-04-02 2:20 ` Leo Famulari @ 2016-04-03 21:26 ` Ludovic Courtès 2016-04-04 3:39 ` [v3] Erlang Leo Famulari 0 siblings, 1 reply; 16+ messages in thread From: Ludovic Courtès @ 2016-04-03 21:26 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel Leo Famulari <leo@famulari.name> skribis: > On Fri, Apr 01, 2016 at 10:19:11AM +0200, Pjotr Prins wrote: >> >> On Thu, Mar 31, 2016 at 03:35:44PM -0400, Leo Famulari wrote: >> > This adds Erlang. >> > >> > Originally written by Steve Sprang, I added the man pages and fixed all >> > the "FHS bugs" I noticed. >> > >> > Pjotr used it to build a working Elixir: >> > http://lists.gnu.org/archive/html/guix-devel/2016-03/msg00999.html >> >> Better even, I am actually using that Elixir and Erlang :). Please >> push when there are no other issues. > > Cool! From my point of view, there are no blocking issues. > > There are two sources of non-determinism when building repeatedly on the > same machine. > > All the .beam files have timestamps and build paths embedded [0]. This > is a known issue without a clear solution. The build paths don't seem so > bad to me, since my understanding is that they are set deterministically > by the Guix builder. > > There are also some .script files that also embed timestamps in a human > readable string. Grepping for the string makes it easy to find the > source of this. We could patch the timestamp format string with the > value of SOURCE_DATE_EPOCH. > > Thoughts? > > [0] > https://wiki.debian.org/ReproducibleBuilds/TimestampsInBeamFiles A patch along the lines of the one of the page above should do the work for beam files, no? We’d have to change DEB_BUILD_DATE to SOURCE_DATE_EPOCH, and remove regexp-matching from there. Ludo’ (who’s never written Erlang code ;-)). ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [v3] Erlang 2016-04-03 21:26 ` Ludovic Courtès @ 2016-04-04 3:39 ` Leo Famulari 2016-04-04 8:28 ` Pjotr Prins 0 siblings, 1 reply; 16+ messages in thread From: Leo Famulari @ 2016-04-04 3:39 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 2388 bytes --] On Sun, Apr 03, 2016 at 11:26:48PM +0200, Ludovic Courtès wrote: > Leo Famulari <leo@famulari.name> skribis: > > All the .beam files have timestamps and build paths embedded [0]. This > > is a known issue without a clear solution. The build paths don't seem so > > bad to me, since my understanding is that they are set deterministically > > by the Guix builder. > A patch along the lines of the one of the page above should do the work > for beam files, no? We’d have to change DEB_BUILD_DATE to > SOURCE_DATE_EPOCH, and remove regexp-matching from there. There is a more generic patch applied to the actual Debian package [0], and I've applied it to ours in the attached revision. It will allow us to build Erlang packages without the timestamp. Unfortunately, it seems to have no effect when building Erlang itself. > > There are also some .script files that also embed timestamps in a human > > readable string. Grepping for the string makes it easy to find the > > source of this. We could patch the timestamp format string with the > > value of SOURCE_DATE_EPOCH. Debian's package exhibits this problem. The timestamps are generated in the following places in the source code. I don't know how to approach this problem. lib/kernel/test/global_SUITE_data/global_trace.erl: io:format("The trace was generated at ~p~n", [EndTime]), lib/reltool/bin/reltool.escript: lists:flatten(io_lib:format("%% ~s generated at ~w ~w\n~p.\n\n", lib/reltool/src/reltool_server.erl: IoList = io_lib:format("%% config generated at ~w ~w\n~p.\n\n", lib/reltool/src/reltool_target.erl: RelIoList = io_lib:format("%% rel generated at ~w ~w\n~p.\n\n", lib/reltool/src/reltool_target.erl: ScriptIoList = io_lib:format("%% script generated at ~w ~w\n~p.\n\n", lib/reltool/src/reltool_target.erl: AppIoList = io_lib:format("%% app generated at ~w ~w\n~p.\n\n", lib/reltool/src/reltool_target.erl: AppIoList = io_lib:format("%% app generated at ~w ~w\n~p.\n\n", lib/runtime_tools/src/erts_alloc_config.erl: "generated at ~w-~2..0w-~2..0w ~2..0w:~2..0w.~2..0w by " lib/sasl/src/systools_make.erl: io:format(Fd, "%% script generated at ~w ~w\n~p.\n", lib/wx/src/gen/gl.erl:%% The program object's information log is updated and the program is generated at the time [0] https://sources.debian.net/src/erlang/1:18.3-dfsg-1/debian/patches/reproducible-build.patch/ [-- Attachment #2: 0001-gnu-Add-erlang.patch --] [-- Type: text/x-diff, Size: 8525 bytes --] From 180f142a3f67f80aa029fc34c38f21cd8988eefe Mon Sep 17 00:00:00 2001 Message-Id: <180f142a3f67f80aa029fc34c38f21cd8988eefe.1459741136.git.leo@famulari.name> From: Steve Sprang <scs@stevesprang.com> Date: Sat, 6 Feb 2016 12:40:53 -0800 Subject: [v3 1/1] gnu: Add erlang. * gnu/packages/erlang.scm: New file. * gnu-system.am (GNU_SYSTEM_MODULES): Add it. * gnu/packages/patches/erlang-reproducible-build.patch: New file. * gnu-system.am (dist_PATCH_DATA): Add it. Co-authored by: Leo Famulari <leo@famulari.name> --- gnu-system.am | 2 + gnu/packages/erlang.scm | 119 +++++++++++++++++++++ .../patches/erlang-reproducible-build.patch | 30 ++++++ 3 files changed, 151 insertions(+) create mode 100644 gnu/packages/erlang.scm create mode 100644 gnu/packages/patches/erlang-reproducible-build.patch diff --git a/gnu-system.am b/gnu-system.am index d45b3d1..498910f 100644 --- a/gnu-system.am +++ b/gnu-system.am @@ -102,6 +102,7 @@ GNU_SYSTEM_MODULES = \ gnu/packages/enchant.scm \ gnu/packages/engineering.scm \ gnu/packages/enlightenment.scm \ + gnu/packages/erlang.scm \ gnu/packages/fcitx.scm \ gnu/packages/feh.scm \ gnu/packages/figlet.scm \ @@ -459,6 +460,7 @@ dist_patch_DATA = \ gnu/packages/patches/emacs-exec-path.patch \ gnu/packages/patches/emacs-scheme-complete-scheme-r5rs-info.patch \ gnu/packages/patches/emacs-source-date-epoch.patch \ + gnu/packages/patches/erlang-reproducible-build.patch \ gnu/packages/patches/eudev-rules-directory.patch \ gnu/packages/patches/evilwm-lost-focus-bug.patch \ gnu/packages/patches/expat-CVE-2015-1283.patch \ diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm new file mode 100644 index 0000000..b241961 --- /dev/null +++ b/gnu/packages/erlang.scm @@ -0,0 +1,119 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 Steve Sprang <scs@stevesprang.com> +;;; Copyright © 2016 Leo Famulari <leo@famulari.name> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages erlang) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix build-system gnu) + #:use-module (guix download) + #:use-module (guix packages) + #:use-module (gnu packages) + #:use-module (gnu packages ncurses) + #:use-module (gnu packages perl) + #:use-module (gnu packages tls)) + +(define-public erlang + (package + (name "erlang") + ;; When updating, remember to update the hash of erlang-manpages! + (version "18.3") + (source (origin + (method url-fetch) + (uri (string-append + "http://erlang.org/download/otp_src_" + version + ".tar.gz")) + (sha256 + (base32 + "1hy9slq9gjvwdb504dmvp6rax90isnky6chqkyq5v4ybl4lq3azx")) + (patches (map search-patch + '("erlang-reproducible-build.patch"))))) + (build-system gnu-build-system) + (native-inputs + `(("perl" ,perl) + + ;; Erlang's documentation is distributed in a separate tarball. + ("erlang-manpages" + ,(origin + (method url-fetch) + (uri (string-append "http://erlang.org/download/otp_doc_man_" + version ".tar.gz")) + (sha256 + (base32 + "1hpcr7a3dx2y9gnb53bvb4g6lyvbwigadl9s3f978s01x40f32wp")))))) + (inputs + `(("ncurses" ,ncurses) + ("openssl" ,openssl))) + (arguments + `(#:test-target "release_tests" + #:configure-flags + (list (string-append "--with-ssl=" (assoc-ref %build-inputs "openssl"))) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'path-to-rm + (lambda _ + (substitute* "erts/configure" + (("/bin/rm") (which "rm"))) + (substitute* "lib/odbc/configure" + (("/bin/rm") (which "rm"))))) + (add-after 'patch-source-shebangs 'patch-source-env + (lambda _ + (let ((escripts + (append + (find-files "." "\\.escript") + (find-files "lib/stdlib/test/escript_SUITE_data/") + '("erts/lib_src/utils/make_atomics_api" + "erts/preloaded/src/add_abstract_code" + "lib/diameter/bin/diameterc" + "lib/reltool/examples/display_args" + "lib/reltool/examples/mnesia_core_dump_viewer" + "lib/snmp/src/compile/snmpc.src" + "make/verify_runtime_dependencies" + "make/emd2exml.in")))) + (substitute* escripts + (("/usr/bin/env") (which "env")))))) + (add-before 'configure 'set-erl-top + (lambda _ + (setenv "ERL_TOP" (getcwd)))) + (add-after 'install 'patch-erl + ;; This only works after install. + (lambda _ + (substitute* (string-append (assoc-ref %outputs "out") "/bin/erl") + (("sed") (which "sed"))))) + (add-after 'install 'install-doc + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (manpages (assoc-ref inputs "erlang-manpages")) + (share (string-append out "/share/"))) + (mkdir-p share) + (with-directory-excursion share + (and + (zero? (system* "tar" "xvf" manpages)) + ;; Delete superfluous files. + (for-each delete-file '("COPYRIGHT" + "PR.template" + "README")))))))))) + (home-page "http://erlang.org/") + (synopsis "The Erlang programming language") + (description + "Erlang is a programming language used to build massively +scalable soft real-time systems with requirements on high +availability. Some of its uses are in telecoms, banking, e-commerce, +computer telephony and instant messaging. Erlang's runtime system has +built-in support for concurrency, distribution and fault tolerance.") + (license license:asl2.0))) diff --git a/gnu/packages/patches/erlang-reproducible-build.patch b/gnu/packages/patches/erlang-reproducible-build.patch new file mode 100644 index 0000000..7e874a5 --- /dev/null +++ b/gnu/packages/patches/erlang-reproducible-build.patch @@ -0,0 +1,30 @@ +Copied from Debian [0]. + +[0] +https://sources.debian.net/src/erlang/1:18.3-dfsg-1/debian/patches/reproducible-build.patch/ + +--- + +Author: Chris Lamb <lamby@debian.org> +Description: Patch makes erlang compiler honor the SOURCE_DATE_EPOCH + environment variable and use its value in build results instead of the + current timestamp. The goal is to maintain reproducible builds. More info: + https://wiki.debian.org/ReproducibleBuilds +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=795834 +Last-modified: Mon, 17 Aug 2015 14:32:15 +0300 + +--- a/lib/compiler/src/beam_asm.erl ++++ b/lib/compiler/src/beam_asm.erl +@@ -226,7 +226,11 @@ + build_attributes(Opts, SourceFile, Attr, MD5) -> + Misc = case member(slim, Opts) of + false -> +- {{Y,Mo,D},{H,Mi,S}} = erlang:universaltime(), ++ {{Y,Mo,D},{H,Mi,S}} = case string:to_integer(os:getenv("SOURCE_DATE_EPOCH")) of ++ {N,[]} ->calendar:gregorian_seconds_to_datetime(N + ++ calendar:datetime_to_gregorian_seconds({{1970,1,1},{0,0,0}})); ++ {_,_} -> erlang:universaltime() ++ end, + [{time,{Y,Mo,D,H,Mi,S}},{source,SourceFile}]; + true -> [] + end, -- 2.7.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [v3] Erlang 2016-04-04 3:39 ` [v3] Erlang Leo Famulari @ 2016-04-04 8:28 ` Pjotr Prins 2016-04-04 16:50 ` Leo Famulari 0 siblings, 1 reply; 16+ messages in thread From: Pjotr Prins @ 2016-04-04 8:28 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel On Sun, Apr 03, 2016 at 11:39:24PM -0400, Leo Famulari wrote: > Debian's package exhibits this problem. The timestamps are generated in > the following places in the source code. I don't know how to approach > this problem. > > lib/kernel/test/global_SUITE_data/global_trace.erl: io:format("The trace was generated at ~p~n", [EndTime]), > lib/reltool/bin/reltool.escript: lists:flatten(io_lib:format("%% ~s generated at ~w ~w\n~p.\n\n", > lib/reltool/src/reltool_server.erl: IoList = io_lib:format("%% config generated at ~w ~w\n~p.\n\n", > lib/reltool/src/reltool_target.erl: RelIoList = io_lib:format("%% rel generated at ~w ~w\n~p.\n\n", > lib/reltool/src/reltool_target.erl: ScriptIoList = io_lib:format("%% script generated at ~w ~w\n~p.\n\n", > lib/reltool/src/reltool_target.erl: AppIoList = io_lib:format("%% app generated at ~w ~w\n~p.\n\n", > lib/reltool/src/reltool_target.erl: AppIoList = io_lib:format("%% app generated at ~w ~w\n~p.\n\n", > lib/runtime_tools/src/erts_alloc_config.erl: "generated at ~w-~2..0w-~2..0w ~2..0w:~2..0w.~2..0w by " > lib/sasl/src/systools_make.erl: io:format(Fd, "%% script generated at ~w ~w\n~p.\n", > lib/wx/src/gen/gl.erl:%% The program object's information log is updated and the program is generated at the time If there is no easy work around I suggest simply patching them. Fortunately the Erlang compiler does not change much at this level. We can also contact Joe Armstrong, the author of Erlang, to discuss this point. He appears to be approachable. I am sure he is open to the idea of deterministic builds in a deterministic build system ;) Pj. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [v3] Erlang 2016-04-04 8:28 ` Pjotr Prins @ 2016-04-04 16:50 ` Leo Famulari 2016-04-04 17:49 ` Leo Famulari 0 siblings, 1 reply; 16+ messages in thread From: Leo Famulari @ 2016-04-04 16:50 UTC (permalink / raw) To: Pjotr Prins; +Cc: guix-devel On Mon, Apr 04, 2016 at 10:28:02AM +0200, Pjotr Prins wrote: > On Sun, Apr 03, 2016 at 11:39:24PM -0400, Leo Famulari wrote: > > Debian's package exhibits this problem. The timestamps are generated in > > the following places in the source code. I don't know how to approach > > this problem. > > > > lib/kernel/test/global_SUITE_data/global_trace.erl: io:format("The trace was generated at ~p~n", [EndTime]), > > lib/reltool/bin/reltool.escript: lists:flatten(io_lib:format("%% ~s generated at ~w ~w\n~p.\n\n", > > lib/reltool/src/reltool_server.erl: IoList = io_lib:format("%% config generated at ~w ~w\n~p.\n\n", > > lib/reltool/src/reltool_target.erl: RelIoList = io_lib:format("%% rel generated at ~w ~w\n~p.\n\n", > > lib/reltool/src/reltool_target.erl: ScriptIoList = io_lib:format("%% script generated at ~w ~w\n~p.\n\n", > > lib/reltool/src/reltool_target.erl: AppIoList = io_lib:format("%% app generated at ~w ~w\n~p.\n\n", > > lib/reltool/src/reltool_target.erl: AppIoList = io_lib:format("%% app generated at ~w ~w\n~p.\n\n", > > lib/runtime_tools/src/erts_alloc_config.erl: "generated at ~w-~2..0w-~2..0w ~2..0w:~2..0w.~2..0w by " > > lib/sasl/src/systools_make.erl: io:format(Fd, "%% script generated at ~w ~w\n~p.\n", > > lib/wx/src/gen/gl.erl:%% The program object's information log is updated and the program is generated at the time > > If there is no easy work around I suggest simply patching them. Fortunately > the Erlang compiler does not change much at this level. The ideal solution would be to use the value of the environment variable SOURCE_DATE_EPOCH if it is set, and else to behave as it does now. > We can also contact Joe Armstrong, the author of Erlang, to discuss > this point. He appears to be approachable. I am sure he is open to > the idea of deterministic builds in a deterministic build system ;) I could go to the Erlang IRC channel or forums (whatever they use) and ask for advice. Since you are actually using Erlang, I think you would be the better person to contact Joe Armstrong himself, if we decide to do that. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [v3] Erlang 2016-04-04 16:50 ` Leo Famulari @ 2016-04-04 17:49 ` Leo Famulari 2016-04-04 18:15 ` Pjotr Prins 2016-04-04 18:32 ` Pjotr Prins 0 siblings, 2 replies; 16+ messages in thread From: Leo Famulari @ 2016-04-04 17:49 UTC (permalink / raw) To: Pjotr Prins; +Cc: guix-devel On Mon, Apr 04, 2016 at 12:50:12PM -0400, Leo Famulari wrote: > On Mon, Apr 04, 2016 at 10:28:02AM +0200, Pjotr Prins wrote: > > On Sun, Apr 03, 2016 at 11:39:24PM -0400, Leo Famulari wrote: > > > Debian's package exhibits this problem. The timestamps are generated in > > > the following places in the source code. I don't know how to approach > > > this problem. > > > > > > lib/kernel/test/global_SUITE_data/global_trace.erl: io:format("The trace was generated at ~p~n", [EndTime]), > > > lib/reltool/bin/reltool.escript: lists:flatten(io_lib:format("%% ~s generated at ~w ~w\n~p.\n\n", > > > lib/reltool/src/reltool_server.erl: IoList = io_lib:format("%% config generated at ~w ~w\n~p.\n\n", > > > lib/reltool/src/reltool_target.erl: RelIoList = io_lib:format("%% rel generated at ~w ~w\n~p.\n\n", > > > lib/reltool/src/reltool_target.erl: ScriptIoList = io_lib:format("%% script generated at ~w ~w\n~p.\n\n", > > > lib/reltool/src/reltool_target.erl: AppIoList = io_lib:format("%% app generated at ~w ~w\n~p.\n\n", > > > lib/reltool/src/reltool_target.erl: AppIoList = io_lib:format("%% app generated at ~w ~w\n~p.\n\n", > > > lib/runtime_tools/src/erts_alloc_config.erl: "generated at ~w-~2..0w-~2..0w ~2..0w:~2..0w.~2..0w by " > > > lib/sasl/src/systools_make.erl: io:format(Fd, "%% script generated at ~w ~w\n~p.\n", > > > lib/wx/src/gen/gl.erl:%% The program object's information log is updated and the program is generated at the time > > > > If there is no easy work around I suggest simply patching them. Fortunately > > the Erlang compiler does not change much at this level. > > The ideal solution would be to use the value of the environment variable > SOURCE_DATE_EPOCH if it is set, and else to behave as it does now. > > > We can also contact Joe Armstrong, the author of Erlang, to discuss > > this point. He appears to be approachable. I am sure he is open to > > the idea of deterministic builds in a deterministic build system ;) > > I could go to the Erlang IRC channel or forums (whatever they use) and > ask for advice. Since you are actually using Erlang, I think you would > be the better person to contact Joe Armstrong himself, if we decide to > do that. I presented the situation on IRC and it was recommended that I start the discussion on a mailing list. I think that the erlang-questions list [0] could be a good place to start. Pjotr, would you like to start the conversation? I can do it if you are too busy or something. [0] http://www.erlang.org/community ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [v3] Erlang 2016-04-04 17:49 ` Leo Famulari @ 2016-04-04 18:15 ` Pjotr Prins 2016-04-05 10:02 ` Pjotr Prins 2016-04-04 18:32 ` Pjotr Prins 1 sibling, 1 reply; 16+ messages in thread From: Pjotr Prins @ 2016-04-04 18:15 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel On Mon, Apr 04, 2016 at 01:49:44PM -0400, Leo Famulari wrote: > I think that the erlang-questions list [0] could be a good place to > start. Possibly, though I think it is more user-oriented. > Pjotr, would you like to start the conversation? I can do it if you are > too busy or something. I'll try and approach Joe Armstrong directly and you can do the ML at the same time. Cc this list. I don't think, however, that we should wait for that fix. It may take a while before it reaches 'stable', or something other tools can depend upon. I had the same thing with ldc (the LLVM D compiler now in Guix) and patched tests for the time being (for ldc I'll probably be able to resolve it at Dconf in May). If we want something usable within 3-6 months I suggest we patch a hard coded date in. It is only the compiler itself we are talking about. A patch may also help explain things ;) I would love to have Erlang and Elixir in GNU Guix. GNU Guix targeting programmers makes a load of sense. Pj. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [v3] Erlang 2016-04-04 18:15 ` Pjotr Prins @ 2016-04-05 10:02 ` Pjotr Prins 2016-04-05 18:46 ` Leo Famulari 0 siblings, 1 reply; 16+ messages in thread From: Pjotr Prins @ 2016-04-05 10:02 UTC (permalink / raw) To: Pjotr Prins; +Cc: guix-devel I received a nice reply from Joe Armstrong. Basically he agrees with the idea of deterministic builds and hashes for content of source files http://joearms.github.io/2015/03/12/The_web_of_names.html and will support us if we raise our issue on the mailing list. Leo, do you want to have a go - essentially sending the E-mail I wrote to Joe? I can do it if you want me to. I'll sign up to the ML too. http://erlang.org/mailman/listinfo/erlang-questions Pj. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [v3] Erlang 2016-04-05 10:02 ` Pjotr Prins @ 2016-04-05 18:46 ` Leo Famulari 2016-04-09 10:56 ` Pjotr Prins 0 siblings, 1 reply; 16+ messages in thread From: Leo Famulari @ 2016-04-05 18:46 UTC (permalink / raw) To: Pjotr Prins; +Cc: guix-devel On Tue, Apr 05, 2016 at 12:02:28PM +0200, Pjotr Prins wrote: > I received a nice reply from Joe Armstrong. Basically he agrees with > the idea of deterministic builds and hashes for content of source > files > > http://joearms.github.io/2015/03/12/The_web_of_names.html > > and will support us if we raise our issue on the mailing list. Leo, do > you want to have a go - essentially sending the E-mail I wrote to Joe? > I can do it if you want me to. I'm more than happy to test things, but I think it's best if you send the message since you are actually using Erlang. But like I said before, if it's too much of a burden, I'll do it. Please let me know! ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [v3] Erlang 2016-04-05 18:46 ` Leo Famulari @ 2016-04-09 10:56 ` Pjotr Prins 2016-05-23 11:48 ` Pjotr Prins 0 siblings, 1 reply; 16+ messages in thread From: Pjotr Prins @ 2016-04-09 10:56 UTC (permalink / raw) To: Leo Famulari; +Cc: guix-devel On Tue, Apr 05, 2016 at 02:46:42PM -0400, Leo Famulari wrote: > On Tue, Apr 05, 2016 at 12:02:28PM +0200, Pjotr Prins wrote: > > I received a nice reply from Joe Armstrong. Basically he agrees with > > the idea of deterministic builds and hashes for content of source > > files > > > > http://joearms.github.io/2015/03/12/The_web_of_names.html > > > > and will support us if we raise our issue on the mailing list. Leo, do > > you want to have a go - essentially sending the E-mail I wrote to Joe? > > I can do it if you want me to. > > I'm more than happy to test things, but I think it's best if you send > the message since you are actually using Erlang. But like I said before, > if it's too much of a burden, I'll do it. Please let me know! A quick update: the Erlang authors are going to fix this issue as can be followed in http://erlang.org/pipermail/erlang-questions/2016-April/088721.html Pj. -- ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [v3] Erlang 2016-04-09 10:56 ` Pjotr Prins @ 2016-05-23 11:48 ` Pjotr Prins 2016-05-23 18:59 ` Leo Famulari 0 siblings, 1 reply; 16+ messages in thread From: Pjotr Prins @ 2016-05-23 11:48 UTC (permalink / raw) To: Pjotr Prins; +Cc: guix-devel, Joe Armstrong On Sat, Apr 09, 2016 at 12:56:49PM +0200, Pjotr Prins wrote: > On Tue, Apr 05, 2016 at 02:46:42PM -0400, Leo Famulari wrote: > > On Tue, Apr 05, 2016 at 12:02:28PM +0200, Pjotr Prins wrote: > > > I received a nice reply from Joe Armstrong. Basically he agrees with > > > the idea of deterministic builds and hashes for content of source > > > files > > > > > > http://joearms.github.io/2015/03/12/The_web_of_names.html > > > > > > and will support us if we raise our issue on the mailing list. Leo, do > > > you want to have a go - essentially sending the E-mail I wrote to Joe? > > > I can do it if you want me to. > > > > I'm more than happy to test things, but I think it's best if you send > > the message since you are actually using Erlang. But like I said before, > > if it's too much of a burden, I'll do it. Please let me know! > > A quick update: the Erlang authors are going to fix this issue as can > be followed in > > http://erlang.org/pipermail/erlang-questions/2016-April/088721.html Good news. The changelog for http://erlang.org/download/OTP-19.0-rc1.README says that OTP-13504 Application(s): compiler The compiler will no longer put the compilation date and time into BEAM files. That means that two BEAM files compiled on the same computer from the same source code and compilation options will be identical. Note: If you want to find out whether a BEAM file on disk is different from the loaded code, compared the MD5 value obtained from Mod:module_info(md5) with the MD5 value obtained from beam_lib:md5(BeamFileForMod)` This means that Erlang and Elixir may go into GNU Guix :) Pj. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [v3] Erlang 2016-05-23 11:48 ` Pjotr Prins @ 2016-05-23 18:59 ` Leo Famulari 0 siblings, 0 replies; 16+ messages in thread From: Leo Famulari @ 2016-05-23 18:59 UTC (permalink / raw) To: Pjotr Prins; +Cc: guix-devel, Joe Armstrong On Mon, May 23, 2016 at 01:48:11PM +0200, Pjotr Prins wrote: > Good news. The changelog for > > http://erlang.org/download/OTP-19.0-rc1.README > > says that > > OTP-13504 Application(s): compiler > > The compiler will no longer put the compilation date > and time into BEAM files. That means that two BEAM > files compiled on the same computer from the same > source code and compilation options will be identical. > > Note: If you want to find out whether a BEAM file on > disk is different from the loaded code, compared the > MD5 value obtained from Mod:module_info(md5) with the > MD5 value obtained from beam_lib:md5(BeamFileForMod)` > > This means that Erlang and Elixir may go into GNU Guix :) Indeed, great news :) I will try building it with Guix today. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [v3] Erlang 2016-04-04 17:49 ` Leo Famulari 2016-04-04 18:15 ` Pjotr Prins @ 2016-04-04 18:32 ` Pjotr Prins 1 sibling, 0 replies; 16+ messages in thread From: Pjotr Prins @ 2016-04-04 18:32 UTC (permalink / raw) To: joearms; +Cc: guix-devel Dear Mr Armstrong, First of, thanks for the hard work on Erlang. I read your book when it came out and it is cool to see how use is exploding. My latest project is actually written in Elixir. You may have heard of GNU Guix, the modern (functional) package manager of the GNU project. We are trying to add Erlang and Elixir to Guix, but we are running into the problem that building the Erlang compiler is not deterministic and therefore not reproducible, i.e. the beam files contain time stamps. For normal software built by Erlang this can be overriden with SOURCE_DATE_EPOCH, but for the compiler itself we have not found how to do this. Do you have a suggestion how to bootstrap the compiler with SOURCE_DATE_EPOCH set or disable the time stamps? I am sure as a FP compiler designer you can appreciate determinism. Because GNU Guix is deterministic there is no need to keep track of time stamps. For hot reloading we can assume the start of EPOCH will do the trick, right? Pj. On Mon, Apr 04, 2016 at 01:49:44PM -0400, Leo Famulari wrote: > On Mon, Apr 04, 2016 at 12:50:12PM -0400, Leo Famulari wrote: > > On Mon, Apr 04, 2016 at 10:28:02AM +0200, Pjotr Prins wrote: > > > On Sun, Apr 03, 2016 at 11:39:24PM -0400, Leo Famulari wrote: > > > > Debian's package exhibits this problem. The timestamps are generated in > > > > the following places in the source code. I don't know how to approach > > > > this problem. > > > > > > > > lib/kernel/test/global_SUITE_data/global_trace.erl: io:format("The trace was generated at ~p~n", [EndTime]), > > > > lib/reltool/bin/reltool.escript: lists:flatten(io_lib:format("%% ~s generated at ~w ~w\n~p.\n\n", > > > > lib/reltool/src/reltool_server.erl: IoList = io_lib:format("%% config generated at ~w ~w\n~p.\n\n", > > > > lib/reltool/src/reltool_target.erl: RelIoList = io_lib:format("%% rel generated at ~w ~w\n~p.\n\n", > > > > lib/reltool/src/reltool_target.erl: ScriptIoList = io_lib:format("%% script generated at ~w ~w\n~p.\n\n", > > > > lib/reltool/src/reltool_target.erl: AppIoList = io_lib:format("%% app generated at ~w ~w\n~p.\n\n", > > > > lib/reltool/src/reltool_target.erl: AppIoList = io_lib:format("%% app generated at ~w ~w\n~p.\n\n", > > > > lib/runtime_tools/src/erts_alloc_config.erl: "generated at ~w-~2..0w-~2..0w ~2..0w:~2..0w.~2..0w by " > > > > lib/sasl/src/systools_make.erl: io:format(Fd, "%% script generated at ~w ~w\n~p.\n", > > > > lib/wx/src/gen/gl.erl:%% The program object's information log is updated and the program is generated at the time > > > > > > If there is no easy work around I suggest simply patching them. Fortunately > > > the Erlang compiler does not change much at this level. > > > > The ideal solution would be to use the value of the environment variable > > SOURCE_DATE_EPOCH if it is set, and else to behave as it does now. > > > > > We can also contact Joe Armstrong, the author of Erlang, to discuss > > > this point. He appears to be approachable. I am sure he is open to > > > the idea of deterministic builds in a deterministic build system ;) > > > > I could go to the Erlang IRC channel or forums (whatever they use) and > > ask for advice. Since you are actually using Erlang, I think you would > > be the better person to contact Joe Armstrong himself, if we decide to > > do that. > > I presented the situation on IRC and it was recommended that I start the > discussion on a mailing list. > > I think that the erlang-questions list [0] could be a good place to > start. > > Pjotr, would you like to start the conversation? I can do it if you are > too busy or something. > > [0] > http://www.erlang.org/community > -- ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2016-05-23 18:59 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-03-31 19:35 [v2 0/1] Erlang Leo Famulari 2016-03-31 19:35 ` [v2 1/1] gnu: Add erlang Leo Famulari 2016-04-01 8:19 ` [v2 0/1] Erlang Pjotr Prins 2016-04-02 2:20 ` Leo Famulari 2016-04-03 21:26 ` Ludovic Courtès 2016-04-04 3:39 ` [v3] Erlang Leo Famulari 2016-04-04 8:28 ` Pjotr Prins 2016-04-04 16:50 ` Leo Famulari 2016-04-04 17:49 ` Leo Famulari 2016-04-04 18:15 ` Pjotr Prins 2016-04-05 10:02 ` Pjotr Prins 2016-04-05 18:46 ` Leo Famulari 2016-04-09 10:56 ` Pjotr Prins 2016-05-23 11:48 ` Pjotr Prins 2016-05-23 18:59 ` Leo Famulari 2016-04-04 18:32 ` Pjotr Prins
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).