Package: guix-patches;
Reported by: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>
Date: Sat, 28 Oct 2023 20:21:02 UTC
Severity: normal
Tags: patch
Done: Liliana Marie Prikler <liliana.prikler <at> gmail.com>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 66801 in the body.
You can then email your comments to 66801 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
andrew <at> trop.in, cox.katherine.e+guix <at> gmail.com, liliana.prikler <at> gmail.com, guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sat, 28 Oct 2023 20:21:02 GMT) Full text and rfc822 format available.Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>
:andrew <at> trop.in, cox.katherine.e+guix <at> gmail.com, liliana.prikler <at> gmail.com, guix-patches <at> gnu.org
.
(Sat, 28 Oct 2023 20:21:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: guix-patches <at> gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH] mix-build-system: draft 1 Date: Sat, 28 Oct 2023 22:19:10 +0200
This commit introduces a mix-build-system. The provided code ensures that the following code runs without errors: ./pre-inst-env guix build elixir-machete A key challenge is the lack of bit reproducibility, in part due to rebar3's lack of bit reproducibility. Future patches may address this, and I welcome feedback. Given the changes, splitting them into focused patches might be best. As a first-time contributor, I seek advice on a suitable patch sequence. I also request guidance from the Guix community for a seamless integration. Please suggest next steps for the mix-build-system integration. Thank you. --- gnu/packages/elixir-xyz.scm | 327 ++++++++++ gnu/packages/elixir.scm | 164 +++-- gnu/packages/emacs-xyz.scm | 20 + gnu/packages/erlang-xyz.scm | 650 +++++++++++++++++++ gnu/packages/erlang.scm | 996 +++++++++--------------------- guix/build-system/mix.scm | 185 ++++++ guix/build-system/rebar.scm | 320 +++++++--- guix/build/mix-build-system.scm | 373 +++++++++++ guix/build/rebar-build-system.scm | 302 +++++---- 9 files changed, 2377 insertions(+), 960 deletions(-) create mode 100644 gnu/packages/elixir-xyz.scm create mode 100644 gnu/packages/erlang-xyz.scm create mode 100644 guix/build-system/mix.scm create mode 100644 guix/build/mix-build-system.scm diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm new file mode 100644 index 00000000..767f9db7 --- /dev/null +++ b/gnu/packages/elixir-xyz.scm @@ -0,0 +1,327 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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 elixir-xyz) + #:use-module ((guix licenses) + #:prefix license:) + #:use-module (gnu packages) + #:use-module (gnu packages erlang-xyz) + #:use-module (gnu packages linux) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (guix build-system mix) + #:use-module (guix download)) + +(define-public elixir-nimble-parsec + (package + (name "elixir-nimble-parsec") + (version "1.3.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0rxiw6jzz77v0j460wmzcprhdgn71g1hrz3mcc6djn7bnb0f70i6")))) + (build-system mix-build-system) + (arguments + (list + #:tests? #f)) + (synopsis "Text-based parser combinators") + (description + "This library provides primitives for efficient parser combinators, allowing +for higher-level combinators through composition.") + (home-page "https://hexdocs.pm/nimble_parsec/") + (license license:asl2.0))) + +(define-public elixir-makeup + (package + (name "elixir-makeup") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "19jpprryixi452jwhws3bbks6ki3wni9kgzah3srg22a3x8fsi8a")))) + (build-system mix-build-system) + (propagated-inputs (list elixir-nimble-parsec)) + (arguments + (list + #:tests? #f)) + (synopsis "Syntax highlighter for source code") + (description + "Makeup is a generic syntax highlighter in the style of Pygments suitable for use in code hosting, +forums, wikis or other applications that need to prettify source code.") + (home-page "https://hexdocs.pm/makeup/") + (license license:bsd-2))) + +(define-public elixir-telemetry-metrics + (package + (name "elixir-telemetry-metrics") + (version "0.6.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1iilk2n75kn9i95fdp8mpxvn3rcn3ghln7p77cijqws13j3y1sbv")))) + (build-system mix-build-system) + ;; There is no test/ in the source. + (arguments + (list + #:tests? #f)) + (propagated-inputs (list erlang-telemetry)) + (synopsis + "Provides a common interface for defining metrics based on Telemetry events") + (description + "Common interface for defining metrics based on :telemetry events. Metrics are +aggregations of Telemetry events with specific name, providing a +view of the system's behaviour over time.") + (home-page "https://hexdocs.pm/telemetry_metrics/") + (license license:asl2.0))) + +(define-public elixir-jason + (package + (name "elixir-jason") + (version "1.4.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "18d70i31bz11nr6vgsjn5prvhkvwqbyf3xq22ck5cnsnzp6ixc7v")))) + (build-system mix-build-system) + ;; There is no test/ in the source. + (arguments + (list + #:tests? #f)) + (synopsis "JSON parser and generator") + (description + "Parser and generator are written in pure Elixir and optimized for speed. They +are at least twice as fast as other Elixir/Erlang libraries (e.g. +Poison). The performance is comparable to jiffy, which is implemented in C as +a NIF.") + (home-page "https://hexdocs.pm/jason/") + (license license:asl2.0))) + +(define-public elixir-file-system + (package + (name "elixir-file-system") + (version "0.2.10") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1p0myxmnjjds8bbg69dd6fvhk8q3n7lb78zd4qvmjajnzgdmw6a1")))) + (build-system mix-build-system) + (inputs (list inotify-tools)) + (arguments + (list + #:tests? #f ;There is no test/ in the source. + #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'rm-priv + (lambda _ + ;; This directory represents source code not needed on UNIX systems. + ;; Since we aim at UNIX systems, it is deleted. + (delete-file-recursively "priv")))))) + (synopsis "File system change watcher") + (description "Provides a file system change watcher wrapper based on +[fs](https://github.com/synrc/fs).") + (home-page "https://hexdocs.pm/file_system/") + (license license:wtfpl2))) + +(define-public elixir-bunt + (package + (name "elixir-bunt") + (version "0.2.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "19bp6xh052ql3ha0v3r8999cvja5d2p6cph02mxphfaj4jsbyc53")))) + (build-system mix-build-system) + (arguments + (list + #:tests? #f)) + (synopsis "256 color ANSI coloring in the terminal") + (description "256 color ANSI coloring in the terminal.") + (home-page "https://hexdocs.pm/bunt/") + (license license:expat))) + +(define-public elixir-inch-ex + (package + (name "elixir-inch-ex") + (version "2.0.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1a4rjcy3hn5pc40si1d1y7qg0b0mnxx6pw825la67ky8r9gfrl4n")))) + (build-system mix-build-system) + (arguments + (list + #:tests? #f)) + (propagated-inputs (list elixir-bunt elixir-jason)) + (synopsis + "Offers a Mix task for suggestions on enhancing your inline documentation") + (description + "This package provides a Mix task that gives you hints where to improve your +inline docs.") + (home-page "https://hex.pm/packages/inch_ex") + (license license:expat))) + +(define-public elixir-castore + (package + (name "elixir-castore") + (version "1.0.4") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1y44amb8falsmrfzpkmf7qp6215g9kdl76g91dpna4af2jwc264l")))) + (build-system mix-build-system) + ;; There is no test/ in the source. + (arguments + (list + #:tests? #f)) + (synopsis "Up-to-date CA certificate store") + (description "Up-to-date CA certificate store.") + (home-page "https://hexdocs.pm/castore/") + (license license:asl2.0))) + +(define-public elixir-excoveralls + (package + (name "elixir-excoveralls") + (version "0.18.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "02x69ll5scvraky0k5gacvnnmldv5k04kgk02x087d9w3y8vn28i")))) + (build-system mix-build-system) + (propagated-inputs (list elixir-castore elixir-jason)) + ;; No test/ folder. + (arguments + (list + #:tests? #f)) + (synopsis "Coverage report tool with coveralls.io integration") + (description + "Library that reports test coverage statistics, with the option to +post to coveralls.io service. It uses Erlang's cover to generate coverage +information, and posts the test coverage results to coveralls.io through the +JSON API.") + (home-page "https://hexdocs.pm/excoveralls/") + (license license:expat))) + +(define-public elixir-credo + (package + (name "elixir-credo") + (version "1.7.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "18jqi9s9r1587njzdxycvmmbma30cay9iamni4f3ih54jmh1r1z9")))) + (build-system mix-build-system) + (propagated-inputs (list elixir-bunt elixir-file-system elixir-jason)) + (native-inputs (list elixir-excoveralls elixir-inch-ex)) + (synopsis "Static code analysis tool") + (description + "Credo is a static code analysis tool for the Elixir language with a focus on +teaching and code consistency. Credo can show you refactoring opportunities in +your code, complex code fragments, warn you about common mistakes, show +inconsistencies in your naming scheme and - if needed - help you enforce a +desired coding style.") + (home-page "https://hexdocs.pm/credo/") + (license license:expat))) + +(define-public elixir-erlex + (package + (name "elixir-erlex") + (version "0.2.6") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0x8c1j62y748ldvlh46sxzv5514rpzm809vxn594vd7y25by5lif")))) + (build-system mix-build-system) + (arguments + (list + #:tests? #f)) + (synopsis + "Convert Erlang style structs and error messages to equivalent Elixir") + (description + "Converted structs and error messages are useful for pretty printing things +like Dialyzer errors and Observer .state. NOTE: Because this code calls the +Elixir formatter, it requires Elixir 1.6+.") + (home-page "https://hexdocs.pm/erlex/") + (license license:asl2.0))) + +(define-public elixir-dialyxir + (package + (name "elixir-dialyxir") + (version "1.4.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "00cqwhd1wabwds44jz94rvvr8z8cp12884d3lp69fqkrszb9bdw4")))) + (build-system mix-build-system) + (arguments + (list + #:tests? #f)) + (propagated-inputs (list elixir-erlex)) + (synopsis "Mix tasks to simplify use of Dialyzer") + (description + "Mix Tasks are usable from the directory of the mix project you want to analyze.") + (home-page "https://hexdocs.pm/dialyxir/") + (license license:asl2.0))) + +(define-public elixir-machete + (package + (name "elixir-machete") + (version "0.2.8") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0952603bmqsf6v3ja99zpbnbx5d52i4xksjkfj3irl45ccq5pgq9")))) + (build-system mix-build-system) + (native-inputs (list elixir-credo elixir-dialyxir)) + (synopsis "Literate test matchers for ExUnit") + (description + "Machete provides ergonomic match operators that act as building blocks to let +you define test expectations that can match data against any combination of +literals, variables, or parametrically defined matchers.") + (home-page "https://hexdocs.pm/machete/") + (license license:expat))) + +;;; +;;; Avoid adding new packages to the end of this file. To reduce the chances +;;; of a merge conflict, place them above by existing packages with similar +;;; functionality or similar names. +;;; diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index 724b4251..d1ac1d07 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -7,6 +7,7 @@ ;;; Copyright © 2018 Nikita <nikita <at> n0.is> ;;; Copyright © 2021 Oskar Köök <oskar <at> maatriks.ee> ;;; Copyright © 2021 Cees de Groot <cg <at> evrl.com> +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -24,14 +25,21 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (gnu packages elixir) - #:use-module ((guix licenses) #:prefix license:) + #:use-module ((guix licenses) + #:prefix license:) + #:use-module (gnu packages compression) + #:use-module (gnu packages erlang) + #:use-module (gnu packages version-control) + #:use-module (gnu packages) + #:use-module (guix build utils) + #:use-module (guix build-system copy) #:use-module (guix build-system gnu) + #:use-module (guix download) #:use-module (guix gexp) #:use-module (guix git-download) #:use-module (guix packages) - #:use-module (gnu packages) - #:use-module (gnu packages erlang) - #:use-module (gnu packages version-control)) + #:use-module (guix search-paths) + #:use-module (guix utils)) (define-public elixir (package @@ -52,57 +60,109 @@ (define-public elixir (list #:test-target "test" #:parallel-tests? #f ;see <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32171#23> - #:make-flags #~(list (string-append "PREFIX=" #$output)) - #:phases - #~(modify-phases %standard-phases - (add-after 'unpack 'make-git-checkout-writable - (lambda _ - (for-each make-file-writable (find-files ".")))) - (add-after 'make-git-checkout-writable 'replace-paths - (lambda* (#:key inputs #:allow-other-keys) - ;; Note: references end up obfuscated in binary BEAM files where - ;; they may be invisible to the GC and graft code: - ;; <https://issues.guix.gnu.org/54304#11>. - (substitute* '("lib/mix/lib/mix/release.ex" - "lib/mix/lib/mix/tasks/release.init.ex") - (("#!/bin/sh") - (string-append "#!" (search-input-file inputs "/bin/sh")))) - (substitute* "bin/elixir" - (("ERTS_BIN=\n") - (string-append - "ERTS_BIN=" - ;; Elixir Releases will prepend to ERTS_BIN the path of - ;; a copy of erl. We detect if a release is being generated - ;; by checking the initial ERTS_BIN value: if it's empty, we - ;; are not in release mode and can point to the actual erl - ;; binary in Guix store. - "\nif [ -z \"$ERTS_BIN\" ]; then ERTS_BIN=" - (string-drop-right (search-input-file inputs "/bin/erl") 3) - "; fi\n"))) - (substitute* "bin/mix" - (("#!/usr/bin/env elixir") - (string-append "#!" #$output "/bin/elixir"))))) - (add-before 'build 'make-current - ;; The Elixir compiler checks whether or not to compile files by - ;; inspecting their timestamps. When the timestamp is equal to the - ;; epoch no compilation will be performed. Some tests fail when - ;; files are older than Jan 1, 2000. - (lambda _ - (for-each (lambda (file) - (let ((recent 1400000000)) - (utime file recent recent 0 0))) - (find-files "." ".*")))) - (add-before 'check 'set-home - (lambda* (#:key inputs #:allow-other-keys) - ;; Some tests require access to a home directory. - (setenv "HOME" "/tmp"))) - (delete 'configure)))) - (inputs - (list erlang git)) + #:make-flags #~(list (string-append "PREFIX=" + #$output)) + #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'make-git-checkout-writable + (lambda _ + (for-each make-file-writable + (find-files ".")))) + (add-after 'make-git-checkout-writable 'replace-paths + (lambda* (#:key inputs #:allow-other-keys) + ;; Note: references end up obfuscated in binary BEAM files where + ;; they may be invisible to the GC and graft code: + ;; <https://issues.guix.gnu.org/54304#11>. + (substitute* '("lib/mix/lib/mix/release.ex" + "lib/mix/lib/mix/tasks/release.init.ex") + (("#!/bin/sh") + (string-append "#!" + (search-input-file inputs "/bin/sh")))) + (substitute* "bin/elixir" + (("ERTS_BIN=\n") + (string-append "ERTS_BIN=" + ;; Elixir Releases will prepend to ERTS_BIN the path of + ;; a copy of erl. We detect if a release is being generated + ;; by checking the initial ERTS_BIN value: if it's empty, we + ;; are not in release mode and can point to the actual erl + ;; binary in Guix store. + "\nif [ -z \"$ERTS_BIN\" ]; then ERTS_BIN=" + (string-drop-right (search-input-file inputs + "/bin/erl") 3) + "; fi\n"))) + (substitute* "bin/mix" + (("#!/usr/bin/env elixir") + (string-append "#!" + #$output "/bin/elixir"))))) + (add-before 'build 'make-current + ;; The Elixir compiler checks whether or not to compile files by + ;; inspecting their timestamps. When the timestamp is equal to the + ;; epoch no compilation will be performed. Some tests fail when + ;; files are older than Jan 1, 2000. + (lambda _ + (for-each (lambda (file) + (let ((recent 1400000000)) + (utime file recent recent 0 0))) + (find-files "." ".*")))) + (add-before 'check 'set-home + (lambda* (#:key inputs #:allow-other-keys) + ;; Some tests require access to a home directory. + (setenv "HOME" "/tmp"))) + (delete 'configure) + (add-after 'install 'wrap-programs + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (programs '("elixir" "elixirc" "iex" "mix"))) + (for-each (lambda (program) + (wrap-program (string-append out "/bin/" + program) + '("ERL_LIBS" prefix + ("${GUIX_ERL_LIBS}")))) programs))))))) + (inputs (list erlang git)) + (native-search-paths + (list (search-path-specification + (variable "GUIX_ERL_LIBS") + (files (list "lib/erlang/lib" + (string-append "lib/elixir/" + (version-major+minor version))))))) (home-page "https://elixir-lang.org/") (synopsis "Elixir programming language") - (description "Elixir is a dynamic, functional language used to build + (description + "Elixir is a dynamic, functional language used to build scalable and maintainable applications. Elixir leverages the Erlang VM, known for running low-latency, distributed and fault-tolerant systems, while also being successfully used in web development and the embedded software domain.") (license license:asl2.0))) + +(define-public mix-hex + (package + (name "mix-hex") + (version "2.0.5") + (source + (origin + (method url-fetch) + (uri "https://builds.hex.pm/installs/1.14.0/hex-2.0.5.ez") + (sha256 + (base32 "0j4s17zsshq9hv3qxflcqrfwh4p27d2rv7xmgdmfdfxp086mfvry")))) + (build-system copy-build-system) + (native-inputs (list unzip)) + (arguments + (list + #:phases #~(modify-phases %standard-phases + (replace 'unpack + (lambda* (#:key source #:allow-other-keys) + ;; A *.ez file is a kind of *.zip file. + ;; See: https://www.erlang.org/doc/man/code#loading-of-code-from-archive-files + (invoke "unzip" source)))) + #:install-plan #~'(("hex-2.0.5" "lib/")))) + (synopsis "Package manager for the Erlang VM") + (description + "This project currently provides tasks that integrate with Mix, Elixir's build +tool.") + (home-page "https://hexdocs.pm/makeup_elixir/") + (license license:bsd-2))) + +;;; +;;; Avoid adding new packages to the end of this file. To reduce the chances +;;; of a merge conflict, place them above by existing packages with similar +;;; functionality or similar names. +;;; diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 10c4b0a6..13f07f20 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -135,6 +135,7 @@ ;;; Copyright © 2023 Sergiu Ivanov <sivanov <at> colimite.fr> ;;; Copyright © 2023 Camilo Q.S. (Distopico) <distopico <at> riseup.net> ;;; Copyright © 2023 Thanos Apollo <public <at> thanosapollo.com> +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -7578,6 +7579,25 @@ (define-public emacs-org-fragtog your cursor steps onto them, and re-enabled when the cursor leaves.") (license license:gpl3+))) +(define-public emacs-erlang + (package + (name "emacs-erlang") + (version (package-version erlang)) + (source + (package-source erlang)) + (build-system emacs-build-system) + (arguments + `(#:phases (modify-phases %standard-phases + (add-before 'expand-load-path 'change-working-directory + (lambda _ + (chdir "lib/tools/emacs") #t))))) + (home-page "https://www.erlang.org/") + (synopsis "Erlang major mode for Emacs") + (description + "This package provides an Emacs major mode for editing Erlang source +files.") + (license license:asl2.0))) + (define-public emacs-ob-erlang (let ((revision "1") (commit "a029c23902b4ad73b84f262a7fc5b98d87b63dfd")) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm new file mode 100644 index 00000000..e1f1a77e --- /dev/null +++ b/gnu/packages/erlang-xyz.scm @@ -0,0 +1,650 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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-xyz) + #:use-module ((guix licenses) + #:prefix license:) + #:use-module (gnu packages base) + #:use-module (gnu packages) + #:use-module (guix build-system rebar) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix git-download) + #:use-module (guix hg-download) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module (srfi srfi-1) + #:use-module (guix git-download) + #:use-module (gnu packages version-control) + #:use-module (srfi srfi-26)) + +(define-public erlang-unicode-util-compat + (package + (name "erlang-unicode-util-compat") + (version "0.7.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "08952lw8cjdw8w171lv8wqbrxc4rcmb3jhkrdb7n06gngpbfdvi5")))) + (build-system rebar-build-system) + (synopsis "Unicode compatibility library for Erlang < 20") + (description "Unicode compatibility library for Erlang < 20.") + (home-page "https://hex.pm/packages/unicode_util_compat") + (license license:asl2.0))) + +(define-public erlang-idna + (package + (name "erlang-idna") + (version "6.1.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1sjcjibl34sprpf1dgdmzfww24xlyy34lpj7mhcys4j4i6vnwdwj")))) + (build-system rebar-build-system) + (propagated-inputs (list erlang-unicode-util-compat)) + (synopsis + "Erlang Internationalized Domain Names in Applications (IDNA) protocol") + (description + "Library to register and look up IDNs in a way + that does not require changes to the DNS itself. IDNA is only meant for +processing domain names, not free text. See: RFC 5891.") + (home-page "https://hexdocs.pm/idna/") + (license license:expat))) + +(define-public erlang-bear + (package + (name "erlang-bear") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1nsri73b50n5v1a8252mm8car84j2b53bq7alq6zz16z3a86fyqm")))) + (build-system rebar-build-system) + (synopsis "Statistics functions for Erlang") + (description + "This package provides a set of statistics functions for erlang.") + (home-page "https://hex.pm/packages/bear") + (license license:asl2.0))) + +(define-public erlang-erlang-color + (package + (name "erlang-erlang-color") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0f707vxihn3f9m3zxal38ajcihnfcwms77jcax0gbzn8i7jya5vb")))) + (build-system rebar-build-system) + (synopsis "ANSI colors for your Erlang") + (description "ANSI colors for your Erlang.") + (home-page "https://hex.pm/packages/erlang_color") + (license license:expat))) + +(define-public erlang-tdiff + (package + (name "erlang-tdiff") + (version "0.1.2") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0xbq7p9ii2kp49ms1kylj92ih2jiwvqwimb8jy4aalljz5lf3hp0")))) + (build-system rebar-build-system) + (synopsis "Library to compute the difference between two strings") + (description + "Erlang implementation of the O(ND) differnence algorithm by EUGENE W. MYERS.") + (home-page "https://hex.pm/packages/tdiff") + (license license:lgpl2.0))) + +(define-public erlang-rebar3-ex-doc + (package + (name "erlang-rebar3-ex-doc") + (version "0.2.21") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0c720shjf03y4slj56q5nxgyhqif0926cs3pvl3zbv1i64qh8wdm")))) + (build-system rebar-build-system) + (synopsis "rebar3 plugin for generating docs with ex_doc") + (description + "rebar3_ex_doc is a rebar3 plugin for creating documentation with ex_doc. It +includes ex_doc as an escript, eliminating the need for Elixir installation or +compiling ex_doc dependencies.") + (home-page "https://hexdocs.pm/rebar3_ex_doc/") + (license license:asl2.0))) + +(define-public erlang-samovar + (package + (name "erlang-samovar") + (version "1.0.2") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1nfw5vbzcvqzpsahwxz7zjlshg31pa9f306g3hzm1kfx5rsyvry4")))) + (build-system rebar-build-system) + (synopsis "SEMVER library for Erlang") + (description "SEMVER library for Erlang") + (home-page "https://hexdocs.pm/samovar/") + (license license:isc))) + +(define-public erlang-geas + (package + (name "erlang-geas") + (version "2.7.14") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1maxv5zg2ckrikr8xpxgg9kpfaxvahqilbkl9dl9ibchlgrbj6i4")))) + (build-system rebar-build-system) + (propagated-inputs (list erlang-samovar)) + (synopsis + "Tool to detect the runnable official Erlang release window for your project") + (description + "Geas will tell you also what are the offending functions in the beam/source +files that reduce the available window, if some beam files are compiled native +and the installed patches and recommend patches that should be installed +depending your code.") + (home-page "https://hexdocs.pm/geas/") + (license license:isc))) + +(define-public erlang-covertool + (package + (name "erlang-covertool") + (version "2.0.4") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1p0c1n3nl4063xwi1sv176l1x68xqf07qwvj444a5z888fx6i5aw")))) + (build-system rebar-build-system) + (home-page "https://github.com/covertool/covertool") + (synopsis "Convert code-coverage data generated by @code{cover} into +Cobertura XML reports") + (description + "This package provides a build tool and plugin to convert +exported Erlang @code{cover} data sets into Cobertura XML reports, which can +then be feed to the Jenkins Cobertura plug-in. On @emph{hex.pm}, this plugin +was previously called @code{rebar_covertool}.") + (license license:bsd-2))) + +(define-public erlang-telemetry + (package + (name "erlang-telemetry") + (version "1.2.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1mgyx9zw92g6w8fp9pblm3b0bghwxwwcbslrixq23ipzisfwxnfs")))) + (build-system rebar-build-system) + (native-inputs (list erlang-covertool)) + (synopsis "Dynamic dispatching library for metrics and instrumentations") + (description + "Telemetry is a lightweight library for dynamic dispatching of events, with a +focus on metrics and instrumentation. Any Erlang or Elixir library can use +telemetry to emit events. Application code and other libraries can then hook +into those events and run custom handlers.") + (home-page "https://hexdocs.pm/telemetry/") + (license license:asl2.0))) + +(define-public erlang-rebar3-git-vsn + (package + (name "erlang-rebar3-git-vsn") + (version "1.1.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1dfz56034pa25axly9vqdzv3phkn8ll0qwrkws96pbgcprhky1hx")))) + (build-system rebar-build-system) + (inputs (list git-minimal/pinned)) + (arguments + `( + ;; Running the tests require binary artifact (tar-file containing + ;; samples git repos) TODO: remove these from the source + #:tests? #f + #:phases (modify-phases %standard-phases + (add-after 'unpack 'patch-path + (lambda* (#:key inputs #:allow-other-keys) + (let ((git (assoc-ref inputs "git-minimal"))) + (substitute* "src/rebar3_git_vsn.erl" + (("rebar_utils:sh\\(\"git " _) + (string-append "rebar_utils:sh(\"" git "/bin/git "))))))))) + (home-page "https://github.com/soranoba/rebar3_git_vsn") + (synopsis "Rebar3 plugin for generating the version from git") + (description "This plugin adds support for generating the version from +a git checkout.") + (license license:expat))) + +(define-public erlang-getopt + (package + (name "erlang-getopt") + (version "1.0.2") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "09pasi7ki1rivw9sl7xndj5qgjbdqvcscxk83yk85yr28gm9l0m0")))) + (build-system rebar-build-system) + (home-page "https://github.com/jcomellas/getopt") + (synopsis "Command-line options parser for Erlang") + (description "This package provides an Erlang module to parse command line +arguments using the GNU getopt syntax.") + (license license:bsd-3))) + +(define-public erlang-edown + (package + (name "erlang-edown") + (version "0.8.4") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0ij47gvgs6yfqphj0f54qjzj18crj8y1dsjjlzpp3dp8pscqzbqw")))) + (build-system rebar-build-system) + (home-page "https://github.com/uwiger/edown") + (synopsis "Markdown extension for EDoc") + (description "This package provides an extension for EDoc for generating +Markdown.") + (license license:asl2.0))) + +(define-public erlang-bbmustache + (package + (name "erlang-bbmustache") + (version "1.12.2") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0fvvaxdpziygxl30j59g98qkh2n47xlb7w5dfpsm2bfcsnj372v8")))) + (build-system rebar-build-system) + (inputs (list erlang-getopt erlang-rebar3-git-vsn erlang-edown)) ;for building the docs + (arguments + `(#:tests? #f ;requires mustache specification file + #:phases (modify-phases %standard-phases + (add-before 'build 'build-more + (lambda _ + (invoke "rebar3" "as" "dev" "escriptize"))) + (add-after 'install 'install-escript + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out"))) + (install-file "_build/dev/bin/bbmustache" + (string-append out "/bin")))))))) + (home-page "https://github.com/soranoba/bbmustache/") + (synopsis "Binary pattern match Based Mustache template engine for Erlang") + (description "This Erlang library provides a Binary pattern match Based +Mustache template engine") + (license license:expat))) + +(define-public erlang-certifi + (package + (name "erlang-certifi") + (version "2.9.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0ha6vmf5p3xlbf5w1msa89frhvfk535rnyfybz9wdmh6vdms8v96")))) + (build-system rebar-build-system) + (arguments + `(#:tests? #f)) ;have not been updated for latest cert bundle + (home-page "https://github.com/certifi/erlang-certifi/") + (synopsis "Erlang CA certificate bundle") + (description + "This Erlang library contains a CA bundle that you can +reference in your Erlang application. This is useful for systems that do not +have CA bundles that Erlang can find itself, or where a uniform set of CAs is +valuable. + +This an Erlang specific port of certifi. The CA bundle is derived from +Mozilla's canonical set.") + (license license:bsd-3))) + +(define-public erlang-cf + (package + (name "erlang-cf") + (version "0.3.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0wknz4xkqkhgvlx4vx5619p8m65v7g87lfgsvfy04jrsgm28spii")))) + (build-system rebar-build-system) + (home-page "https://github.com/project-fifo/cf") + (synopsis "Terminal colour helper for Erlang io and io_lib") + (description "This package provides a helper library for termial colour +printing extending the io:format syntax to add colours.") + (license license:expat))) + +(define-public erlang-yamerl + (package + (name "erlang-yamerl") + (version "0.10.0") + (source + (origin + (method git-fetch) + (uri (git-reference + ;; There are no tests included on Hex. + (url "https://github.com/yakaz/yamerl") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0if8abgmispcfk7zhd0a5dndzwzbsmqrbyrm5shk375r2dbbwak6")))) + (build-system rebar-build-system) + (synopsis "YAML and JSON parser in pure Erlang") + (description + "Erlang application to parse YAML 1.1 and YAML 1.2 documents, as well as +JSON documents.") + (home-page "https://hexdocs.pm/yamerl/") + (license license:bsd-2))) + +(define-public erlang-cth-readable + (package + (name "erlang-cth-readable") + (version "1.5.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "104xgybb6iciy6i28pyyrarqzliddi8kjyq43ajaav7y5si42rb8")))) + (build-system rebar-build-system) + (propagated-inputs (list erlang-cf)) + (arguments + `(#:tests? #f)) ;no test-suite in hex-pm package + (home-page "https://github.com/ferd/cth_readable") + (synopsis "Common Test hooks for more readable logs for Erlang") + (description + "This package provides an OTP library to be used for CT log +outputs you want to be readable around all that noise they contain.") + (license license:bsd-3))) + +(define-public erlang-erlware-commons + (package + (name "erlang-erlware-commons") + (version "1.6.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "18qam9xdzi74wppb0cj4zc8161i0i8djr79z8662m6d276f2jz5m")))) + (build-system rebar-build-system) + (propagated-inputs (list erlang-cf)) + (native-inputs (list git-minimal/pinned)) ;Required for tests + (arguments + `(#:phases (modify-phases %standard-phases + (add-before 'check 'check-setup + (lambda _ + (setenv "TERM" "xterm")))))) ;enable color in logs + (home-page "https://erlware.github.io/erlware_commons/") + (synopsis "Additional standard library for Erlang") + (description "Erlware Commons is an Erlware project focused on all aspects +of reusable Erlang components.") + (license license:expat))) + +(define-public erlang-eunit-formatters + (package + (name "erlang-eunit-formatters") + (version "0.5.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1jb3hzb216r29x2h4pcjwfmx1k81431rgh5v0mp4x5146hhvmj6n")))) + (build-system rebar-build-system) + (home-page "https://github.com/seancribbs/eunit_formatters") + (synopsis "Better output for eunit suites") + (description "This package provides a better output for Erlang eunits.") + (license license:asl2.0))) + +(define-public erlang-hex-core + (package + (name "erlang-hex-core") + (version "0.8.4") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "06p65hlm29ky03vs3fq3qz6px2ylwp8b0f2y75wdf5cm0kx2332b")))) + (build-system rebar-build-system) + (arguments + `(#:phases (modify-phases %standard-phases + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "rebar3" "as" "test" "proper"))))))) + (inputs (list erlang-proper erlang-rebar3-proper)) + (home-page "https://github.com/hexpm/hex_core") + (synopsis "Reference implementation of Hex specifications") + (description "This package provides the reference implementation of Hex +specifications.") + (license license:asl2.0))) + +(define-public erlang-jsone + (package + (name "erlang-jsone") + (version "1.7.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1gaxiw76syjp3s9rygskm32y9799b917q752rw8bxj3bxq93g8x3")))) + (build-system rebar-build-system) + (arguments + `(#:phases (modify-phases %standard-phases + (add-after 'unpack 'disable-covertool + ;; no need to generate a coverage report + (lambda _ + (substitute* "rebar.config" + (("\\{project_plugins, \\[covertool\\]\\}\\." _) + ""))))))) + (home-page "https://github.com/sile/jsone/") + (synopsis "Erlang JSON Library") + (description "An Erlang library for encoding and decoding JSON data.") + (license license:expat))) + +(define-public erlang-parse-trans + (package + (name "erlang-parse-trans") + (version "3.4.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "16p4c2xjrvz16kzpr9pmcvi6nxq6rwckqi9fp0ksibaxwxn402k2")))) + (build-system rebar-build-system) + (inputs (list erlang-getopt)) + (home-page "https://github.com/uwiger/parse_trans") + (synopsis "Parse transform utilities for Erlang") + (description + "This package captures some useful patterns in parse +transformation and code generation for Erlang. + +For example generating standardized accessor functions for records or +evaluating an expression at compile-time and substitute the result as a +compile-time constant.") + (license license:asl2.0))) + +(define-public erlang-proper + (package + (name "erlang-proper") + (version "1.4.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1fwcas4a9kz3w3z1jqdk9lw8822srfjk9lcpvbxkxlsv3115ha0q")))) + (build-system rebar-build-system) + (arguments + `(#:phases (modify-phases %standard-phases + (add-after 'unpack 'disable-covertool + ;; no need to generate a coverage report + (lambda _ + (substitute* "rebar.config" + (("\\{plugins, \\[covertool\\]\\}\\." _) + ""))))))) + (home-page "https://proper-testing.github.io/") + (synopsis "QuickCheck-inspired property-based testing tool for Erlang") + (description + "PropEr is a tool for the automated, semi-random, +property-based testing of Erlang programs. It is fully integrated with +Erlang's type language, and can also be used for the model-based random +testing of stateful systems.") + (license license:gpl3+))) + +(define-public erlang-jsx + (package + (name "erlang-jsx") + (version "3.1.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1wr7jkxm6nlgvd52xhniav64xr9rml2ngb35rwjwqlqvq7ywhp0c")))) + (build-system rebar-build-system) + (synopsis "Streaming, evented JSON parsing toolkit") + (description + "An Erlang application for consuming, producing and manipulating json.") + (home-page "https://github.com/talentdeficit/jsx") + (license license:expat))) + +(define-public erlang-providers + (package + (name "erlang-providers") + (version "1.9.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "05y0kz3xgx77hzn1l05byaisvmk8bgds7c22hrh0a5ba81sfi1yj")))) + (build-system rebar-build-system) + (propagated-inputs (list erlang-erlware-commons erlang-getopt)) + (home-page "https://github.com/tsloughter/providers") + (synopsis "Erlang providers library") + (description "This package provides an Erlang providers library.") + (license license:asl2.0))) + +(define-public erlang-relx + (package + (name "erlang-relx") + (version "4.6.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "02gmfx1vxg9m3mq4njsqhs4972l4nb8m5p1pdcf64g09ccf17y1g")))) + (build-system rebar-build-system) + (propagated-inputs (list erlang-bbmustache)) + (home-page "https://erlware.github.io/relx/") + (synopsis "Release assembler for Erlang/OTP Releases") + (description + "Relx assembles releases for an Erlang/OTP release. Given a +release specification and a list of directories in which to search for OTP +applications it will generate a release output. That output depends heavily on +what plugins available and what options are defined, but usually it is simply +a well configured release directory.") + (license license:asl2.0))) + +(define-public erlang-ssl-verify-fun + (package + (name "erlang-ssl-verify-fun") + (version "1.1.6") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1026l1z1jh25z8bfrhaw0ryk5gprhrpnirq877zqhg253x3x5c5x")))) + (build-system rebar-build-system) + (home-page "https://github.com/deadtrickster/ssl_verify_fun.erl") + (synopsis "SSL verification functions for Erlang") + (description "This package provides SSL verification functions for +Erlang.") + (license license:expat))) + +(define-public erlang-rebar3-raw-deps + (package + (name "erlang-rebar3-raw-deps") + (version "2.0.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1pzmm3m8gb2s9jn8fp6shzgfmy4mvh2vdci0z6nsm74ma3ffh1i3")))) + (build-system rebar-build-system) + (home-page "https://github.com/soranoba/rebar3_raw_deps") + (synopsis "Rebar3 plugin for supporting \"raw\" dependencies") + (description "This plugin provides support for handling non-OTP +applications as a dependent libraries.") + (license license:expat))) + +(define-public erlang-rebar3-proper + (package + (name "erlang-rebar3-proper") + (version "0.12.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1f174fb6h2071wr7qbw9aqqvnglzsjlylmyi8215fhrmi38w94b6")))) + (build-system rebar-build-system) + (home-page "https://github.com/ferd/rebar3_proper") + (synopsis "Rebar3 PropEr plugin") + (description "This plugin allows running PropEr test suites from within +rebar3.") + (license license:bsd-3))) + +;;; +;;; Avoid adding new packages to the end of this file. To reduce the chances +;;; of a merge conflict, place them above by existing packages with similar +;;; functionality or similar names. +;;; diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index c53cb72c..df17558b 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -10,6 +10,7 @@ ;;; Copyright © 2022 jgart <jgart <at> dismail.de> ;;; Copyright © 2023 wrobell <wrobell <at> riseup.net> ;;; Copyright © 2023 Tim Johann <t1m <at> phrogstar.de> +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -27,160 +28,182 @@ ;;; 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 gexp) - #:use-module (guix build-system gnu) - #:use-module (guix build-system emacs) - #:use-module (guix build-system rebar) - #:use-module (guix download) - #:use-module (guix git-download) - #:use-module (guix packages) - #:use-module (guix utils) - #:use-module (gnu packages) + #:use-module ((guix licenses) + #:prefix license:) + #:use-module (gnu packages elixir) #:use-module (gnu packages fontutils) #:use-module (gnu packages gl) #:use-module (gnu packages ncurses) #:use-module (gnu packages perl) - #:use-module (gnu packages version-control) #:use-module (gnu packages tls) - #:use-module (gnu packages wxwidgets)) + #:use-module (gnu packages erlang-xyz) + #:use-module (gnu packages version-control) + #:use-module (gnu packages wxwidgets) + #:use-module (gnu packages) + #:use-module (guix build utils) + #:use-module (guix build-system emacs) + #:use-module (guix build-system gnu) + #:use-module (guix build-system rebar) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix git-download) + #:use-module (guix packages) + #:use-module (guix utils)) (define-public erlang (package (name "erlang") (version "25.3.2") - (source (origin - (method git-fetch) - ;; The tarball from http://erlang.org/download contains many - ;; pre-compiled files, so we use this snapshot of the source - ;; repository. - (uri (git-reference - (url "https://github.com/erlang/otp") - (commit (string-append "OTP-" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "092lym5a181gz89nscw7kqhw1wa6qvgcpkj80q4i9p79mxmsr1nj")) - (patches (search-patches "erlang-man-path.patch")))) + (source + (origin + (method git-fetch) + ;; The tarball from http://erlang.org/download contains many + ;; pre-compiled files, so we use this snapshot of the source + ;; repository. + (uri (git-reference + (url "https://github.com/erlang/otp") + (commit (string-append "OTP-" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "092lym5a181gz89nscw7kqhw1wa6qvgcpkj80q4i9p79mxmsr1nj")) + (patches (search-patches "erlang-man-path.patch")))) (build-system gnu-build-system) - (native-inputs - `(("perl" ,perl) + (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-major+minor version) ".tar.gz")) - (sha256 - (base32 - "0vnpds5q17xc4jjj3sbsllpx68wyhgvx70714vkzyd68rbjmhmk7")))))) - (inputs - (list ncurses openssl wxwidgets)) - (propagated-inputs - (list fontconfig glu mesa)) + ;; 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-major+minor version) + ".tar.gz")) + (sha256 (base32 + "0vnpds5q17xc4jjj3sbsllpx68wyhgvx70714vkzyd68rbjmhmk7")))))) + (inputs (list ncurses openssl wxwidgets)) + (propagated-inputs (list fontconfig glu mesa)) (arguments `(#:test-target "release_tests" - #:configure-flags - (list "--disable-saved-compile-time" - "--enable-dynamic-ssl-lib" - "--enable-native-libs" - "--enable-shared-zlib" - "--enable-smp-support" - "--enable-threads" - "--enable-wx" - (string-append "--with-ssl=" (assoc-ref %build-inputs "openssl"))) - #:modules ((srfi srfi-19) ; make-time, et cetera. + #:configure-flags (list "--disable-saved-compile-time" + "--enable-dynamic-ssl-lib" + "--enable-native-libs" + "--enable-shared-zlib" + "--enable-smp-support" + "--enable-threads" + "--enable-wx" + (string-append "--with-ssl=" + (assoc-ref %build-inputs + "openssl"))) + #:modules ((srfi srfi-19) + ;make-time, et cetera. (guix build utils) (guix build gnu-build-system)) - #:phases - (modify-phases %standard-phases - (delete 'bootstrap) - ;; The are several code fragments that embed timestamps into the - ;; output. Here, we alter those fragments to use the value of - ;; SOURCE_DATE_EPOCH instead. - (add-after 'unpack 'remove-timestamps - (lambda _ - (let ((source-date-epoch - (time-utc->date - (make-time time-utc 0 (string->number - (getenv "SOURCE_DATE_EPOCH")))))) - (substitute* "lib/reltool/src/reltool_target.erl" - (("Date = date\\(\\),") - (string-append "Date = " - (date->string source-date-epoch - "'{~Y,~m,~d}',")))) - (substitute* "lib/reltool/src/reltool_target.erl" - (("Time = time\\(\\),") - (string-append "Time = " - (date->string source-date-epoch - "'{~H,~M,~S}',")))) - (substitute* '("lib/reltool/src/reltool_target.erl" - "lib/sasl/src/systools_make.erl") - (("date\\(\\), time\\(\\),") - (date->string source-date-epoch - "{~Y,~m,~d}, {~H,~M,~S},"))) - (substitute* "lib/dialyzer/test/small_SUITE_data/src/gs_make.erl" - (("tuple_to_list\\(date\\(\\)\\),tuple_to_list\\(time\\(\\)\\)") - (date->string - source-date-epoch - "tuple_to_list({~Y,~m,~d}), tuple_to_list({~H,~M,~S})"))) - (substitute* "lib/snmp/src/compile/snmpc_mib_to_hrl.erl" - (("\\{Y,Mo,D\\} = date\\(\\),") - (date->string source-date-epoch - "{Y,Mo,D} = {~Y,~m,~d},"))) - (substitute* "lib/snmp/src/compile/snmpc_mib_to_hrl.erl" - (("\\{H,Mi,S\\} = time\\(\\),") - (date->string source-date-epoch - "{H,Mi,S} = {~H,~M,~S},")))))) - (add-after 'unpack 'patch-/bin/sh - (lambda* (#:key inputs #:allow-other-keys) - (let ((sh (search-input-file inputs "/bin/sh"))) - (substitute* "erts/etc/unix/run_erl.c" - (("sh = \"/bin/sh\";") - (string-append "sh = \"" sh "\";"))) - (substitute* "erts/emulator/sys/unix/sys_drivers.c" - (("SHELL \"/bin/sh\"") - (string-append "SHELL \"" sh "\""))) - (substitute* "erts/emulator/sys/unix/erl_child_setup.c" - (("SHELL \"/bin/sh\"") - (string-append "SHELL \"" sh "\""))) - (substitute* "lib/kernel/src/os.erl" - (("/bin/sh") sh))))) - (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* (#:key outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out"))) - (substitute* (string-append out "/bin/erl") - (("basename") (which "basename")) - (("dirname") (which "dirname")))))) - (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 - (invoke "tar" "xvf" manpages)))))))) + #:phases (modify-phases %standard-phases + (delete 'bootstrap) + ;; The are several code fragments that embed timestamps into the + ;; output. Here, we alter those fragments to use the value of + ;; SOURCE_DATE_EPOCH instead. + (add-after 'unpack 'remove-timestamps + (lambda _ + (let ((source-date-epoch (time-utc->date (make-time + time-utc 0 + (string->number + (getenv + "SOURCE_DATE_EPOCH")))))) + (substitute* "lib/reltool/src/reltool_target.erl" + (("Date = date\\(\\),") + (string-append "Date = " + (date->string source-date-epoch + "'{~Y,~m,~d}',")))) + (substitute* "lib/reltool/src/reltool_target.erl" + (("Time = time\\(\\),") + (string-append "Time = " + (date->string source-date-epoch + "'{~H,~M,~S}',")))) + (substitute* '("lib/reltool/src/reltool_target.erl" + "lib/sasl/src/systools_make.erl") + (("date\\(\\), time\\(\\),") + (date->string source-date-epoch + "{~Y,~m,~d}, {~H,~M,~S},"))) + (substitute* "lib/dialyzer/test/small_SUITE_data/src/gs_make.erl" + (("tuple_to_list\\(date\\(\\)\\),tuple_to_list\\(time\\(\\)\\)") + (date->string source-date-epoch + "tuple_to_list({~Y,~m,~d}), tuple_to_list({~H,~M,~S})"))) + (substitute* "lib/snmp/src/compile/snmpc_mib_to_hrl.erl" + (("\\{Y,Mo,D\\} = date\\(\\),") + (date->string source-date-epoch + "{Y,Mo,D} = {~Y,~m,~d},"))) + (substitute* "lib/snmp/src/compile/snmpc_mib_to_hrl.erl" + (("\\{H,Mi,S\\} = time\\(\\),") + (date->string source-date-epoch + "{H,Mi,S} = {~H,~M,~S},")))))) + (add-after 'unpack 'patch-/bin/sh + (lambda* (#:key inputs #:allow-other-keys) + (let ((sh (search-input-file inputs "/bin/sh"))) + (substitute* "erts/etc/unix/run_erl.c" + (("sh = \"/bin/sh\";") + (string-append "sh = \"" sh "\";"))) + (substitute* "erts/emulator/sys/unix/sys_drivers.c" + (("SHELL \"/bin/sh\"") + (string-append "SHELL \"" sh "\""))) + (substitute* "erts/emulator/sys/unix/erl_child_setup.c" + (("SHELL \"/bin/sh\"") + (string-append "SHELL \"" sh "\""))) + (substitute* "lib/kernel/src/os.erl" + (("/bin/sh") + sh))))) + (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* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (substitute* (string-append out "/bin/erl") + (("basename") + (which "basename")) + (("dirname") + (which "dirname")))))) + (add-after 'patch-erl 'wrap-programs + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (programs '("erl" "erlc" "escript"))) + (for-each (lambda (program) + (wrap-program (string-append out "/bin/" + program) + '("ERL_LIBS" ":" prefix + ("${GUIX_ERL_LIBS}")))) programs)))) + (add-after 'wrap-programs '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 + (invoke "tar" "xvf" manpages)))))))) + (native-search-paths + (list (search-path-specification + (variable "GUIX_ERL_LIBS") + (files (list "lib/erlang/lib" + (string-append "lib/elixir/" + (version-major+minor (package-version + elixir)))))))) (home-page "https://www.erlang.org/") (synopsis "The Erlang programming language") (description @@ -191,414 +214,13 @@ (define-public erlang built-in support for concurrency, distribution and fault tolerance.") ;; Erlang is distributed under the Apache License 2.0, but some components ;; have other licenses. See 'system/COPYRIGHT' in the source distribution. - (license (list license:asl2.0 license:bsd-2 license:bsd-3 license:expat - license:lgpl2.0+ license:tcl/tk license:zlib)))) - -(define-public emacs-erlang - (package - (name "emacs-erlang") - (version (package-version erlang)) - (source (package-source erlang)) - (build-system emacs-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-before 'expand-load-path 'change-working-directory - (lambda _ (chdir "lib/tools/emacs") #t))))) - (home-page "https://www.erlang.org/") - (synopsis "Erlang major mode for Emacs") - (description - "This package provides an Emacs major mode for editing Erlang source -files.") - (license license:asl2.0))) - -(define-public erlang-bbmustache - (package - (name "erlang-bbmustache") - (version "1.12.2") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "bbmustache" version)) - (sha256 - (base32 "0fvvaxdpziygxl30j59g98qkh2n47xlb7w5dfpsm2bfcsnj372v8")))) - (build-system rebar-build-system) - (inputs - (list erlang-getopt rebar3-git-vsn - erlang-edown)) ; for building the docs - (arguments - `(#:tests? #f ;; requires mustache specification file - #:phases - (modify-phases %standard-phases - (add-before 'build 'build-more - (lambda _ - (invoke "rebar3" "as" "dev" "escriptize"))) - (add-after 'install 'install-escript - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out"))) - (install-file "_build/dev/bin/bbmustache" - (string-append out "/bin")))))))) - (home-page "https://github.com/soranoba/bbmustache/") - (synopsis "Binary pattern match Based Mustache template engine for Erlang") - (description "This Erlang library provides a Binary pattern match Based -Mustache template engine") - (license license:expat))) - -(define-public erlang-certifi - (package - (name "erlang-certifi") - (version "2.9.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "certifi" version)) - (sha256 - (base32 "0ha6vmf5p3xlbf5w1msa89frhvfk535rnyfybz9wdmh6vdms8v96")))) - (build-system rebar-build-system) - (arguments - `(#:tests? #f)) ;; have not been updated for latest cert bundle - (home-page "https://github.com/certifi/erlang-certifi/") - (synopsis "Erlang CA certificate bundle") - (description "This Erlang library contains a CA bundle that you can -reference in your Erlang application. This is useful for systems that do not -have CA bundles that Erlang can find itself, or where a uniform set of CAs is -valuable. - -This an Erlang specific port of certifi. The CA bundle is derived from -Mozilla's canonical set.") - (license license:bsd-3))) - -(define-public erlang-cf - (package - (name "erlang-cf") - (version "0.3.1") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "cf" version)) - (sha256 - (base32 "0wknz4xkqkhgvlx4vx5619p8m65v7g87lfgsvfy04jrsgm28spii")))) - (build-system rebar-build-system) - (home-page "https://github.com/project-fifo/cf") - (synopsis "Terminal colour helper for Erlang io and io_lib") - (description "This package provides a helper library for termial colour -printing extending the io:format syntax to add colours.") - (license license:expat))) - -(define-public erlang-yamerl - (package - (name "erlang-yamerl") - (version "0.10.0") - (source - (origin - (method git-fetch) - (uri (git-reference - ;; There are no tests included on Hex. - (url "https://github.com/yakaz/yamerl") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "0if8abgmispcfk7zhd0a5dndzwzbsmqrbyrm5shk375r2dbbwak6")))) - (build-system rebar-build-system) - (synopsis "YAML and JSON parser in pure Erlang") - (description - "Erlang application to parse YAML 1.1 and YAML 1.2 documents, as well as -JSON documents.") - (home-page "https://hexdocs.pm/yamerl/") - (license license:bsd-2))) - -(define-public erlang-covertool - (package - (name "erlang-covertool") - (version "2.0.4") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "covertool" version)) - (sha256 - (base32 "1p0c1n3nl4063xwi1sv176l1x68xqf07qwvj444a5z888fx6i5aw")))) - (build-system rebar-build-system) - (home-page "https://github.com/covertool/covertool") - (synopsis "Convert code-coverage data generated by @code{cover} into -Cobertura XML reports") - (description "This package provides a build tool and plugin to convert -exported Erlang @code{cover} data sets into Cobertura XML reports, which can -then be feed to the Jenkins Cobertura plug-in. - -On @emph{hex.pm}, this plugin was previously called @code{rebar_covertool}.") - (license license:bsd-2))) - -(define-public erlang-cth-readable - (package - (name "erlang-cth-readable") - (version "1.5.1") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "cth_readable" version)) - (sha256 - (base32 "104xgybb6iciy6i28pyyrarqzliddi8kjyq43ajaav7y5si42rb8")))) - (build-system rebar-build-system) - (propagated-inputs - (list erlang-cf)) - (arguments - `(#:tests? #f)) ;; no test-suite in hex-pm package - (home-page "https://github.com/ferd/cth_readable") - (synopsis "Common Test hooks for more readable logs for Erlang") - (description "This package provides an OTP library to be used for CT log -outputs you want to be readable around all that noise they contain.") - (license license:bsd-3))) - -(define-public erlang-edown - (package - (name "erlang-edown") - (version "0.8.4") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "edown" version)) - (sha256 - (base32 "0ij47gvgs6yfqphj0f54qjzj18crj8y1dsjjlzpp3dp8pscqzbqw")))) - (build-system rebar-build-system) - (home-page "https://github.com/uwiger/edown") - (synopsis "Markdown extension for EDoc") - (description "This package provides an extension for EDoc for generating -Markdown.") - (license license:asl2.0))) - -(define-public erlang-erlware-commons - (package - (name "erlang-erlware-commons") - (version "1.6.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "erlware_commons" version)) - (sha256 - (base32 "18qam9xdzi74wppb0cj4zc8161i0i8djr79z8662m6d276f2jz5m")))) - (build-system rebar-build-system) - (propagated-inputs - (list erlang-cf)) - (native-inputs - (list git-minimal/pinned)) ;; Required for tests - (arguments - `(#:phases - (modify-phases %standard-phases - (add-before 'check 'check-setup - (lambda _ - (setenv "TERM" "xterm")))))) ; enable color in logs - (home-page "https://erlware.github.io/erlware_commons/") - (synopsis "Additional standard library for Erlang") - (description "Erlware Commons is an Erlware project focused on all aspects -of reusable Erlang components.") - (license license:expat))) - -(define-public erlang-eunit-formatters - (package - (name "erlang-eunit-formatters") - (version "0.5.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "eunit_formatters" version)) - (sha256 - (base32 "1jb3hzb216r29x2h4pcjwfmx1k81431rgh5v0mp4x5146hhvmj6n")))) - (build-system rebar-build-system) - (home-page "https://github.com/seancribbs/eunit_formatters") - (synopsis "Better output for eunit suites") - (description "This package provides a better output for Erlang eunits.") - (license license:asl2.0))) - -(define-public erlang-getopt - (package - (name "erlang-getopt") - (version "1.0.2") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "getopt" version)) - (sha256 - (base32 "09pasi7ki1rivw9sl7xndj5qgjbdqvcscxk83yk85yr28gm9l0m0")))) - (build-system rebar-build-system) - (home-page "https://github.com/jcomellas/getopt") - (synopsis "Command-line options parser for Erlang") - (description "This package provides an Erlang module to parse command line -arguments using the GNU getopt syntax.") - (license license:bsd-3))) - -(define-public erlang-hex-core - (package - (name "erlang-hex-core") - (version "0.8.4") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "hex_core" version)) - (sha256 - (base32 "06p65hlm29ky03vs3fq3qz6px2ylwp8b0f2y75wdf5cm0kx2332b")))) - (build-system rebar-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (replace 'check - (lambda* (#:key tests? #:allow-other-keys) - (when tests? - (invoke "rebar3" "as" "test" "proper"))))))) - (inputs - (list erlang-proper rebar3-proper)) - (home-page "https://github.com/hexpm/hex_core") - (synopsis "Reference implementation of Hex specifications") - (description "This package provides the reference implementation of Hex -specifications.") - (license license:asl2.0))) - -(define-public erlang-jsone - (package - (name "erlang-jsone") - (version "1.7.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "jsone" version)) - (sha256 - (base32 "1gaxiw76syjp3s9rygskm32y9799b917q752rw8bxj3bxq93g8x3")))) - (build-system rebar-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'unpack 'disable-covertool - ;; no need to generate a coverage report - (lambda _ - (substitute* "rebar.config" - (("\\{project_plugins, \\[covertool\\]\\}\\." _) ""))))))) - (home-page "https://github.com/sile/jsone/") - (synopsis "Erlang JSON Library") - (description "An Erlang library for encoding and decoding JSON data.") - (license license:expat))) - -(define-public erlang-parse-trans - (package - (name "erlang-parse-trans") - (version "3.4.1") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "parse_trans" version)) - (sha256 - (base32 "16p4c2xjrvz16kzpr9pmcvi6nxq6rwckqi9fp0ksibaxwxn402k2")))) - (build-system rebar-build-system) - (inputs - (list erlang-getopt)) - (home-page "https://github.com/uwiger/parse_trans") - (synopsis "Parse transform utilities for Erlang") - (description "This package captures some useful patterns in parse -transformation and code generation for Erlang. - -For example generating standardized accessor functions for records or -evaluating an expression at compile-time and substitute the result as a -compile-time constant.") - (license license:asl2.0))) - -(define-public erlang-proper - (package - (name "erlang-proper") - (version "1.4.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "proper" version)) - (sha256 - (base32 "1fwcas4a9kz3w3z1jqdk9lw8822srfjk9lcpvbxkxlsv3115ha0q")))) - (build-system rebar-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'unpack 'disable-covertool - ;; no need to generate a coverage report - (lambda _ - (substitute* "rebar.config" - (("\\{plugins, \\[covertool\\]\\}\\." _) ""))))))) - (home-page "https://proper-testing.github.io/") - (synopsis "QuickCheck-inspired property-based testing tool for Erlang") - (description "PropEr is a tool for the automated, semi-random, -property-based testing of Erlang programs. It is fully integrated with -Erlang's type language, and can also be used for the model-based random -testing of stateful systems.") - (license license:gpl3+))) - -(define-public erlang-jsx - (package - (name "erlang-jsx") - (version "3.1.0") - (source (origin - (method url-fetch) - (uri (hexpm-uri "jsx" version)) - (sha256 - (base32 - "1wr7jkxm6nlgvd52xhniav64xr9rml2ngb35rwjwqlqvq7ywhp0c")))) - (build-system rebar-build-system) - (synopsis "Streaming, evented JSON parsing toolkit") - (description - "An Erlang application for consuming, producing and manipulating json.") - (home-page "https://github.com/talentdeficit/jsx") - (license license:expat))) - -(define-public erlang-providers - (package - (name "erlang-providers") - (version "1.9.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "providers" version)) - (sha256 - (base32 "05y0kz3xgx77hzn1l05byaisvmk8bgds7c22hrh0a5ba81sfi1yj")))) - (build-system rebar-build-system) - (propagated-inputs - (list erlang-erlware-commons erlang-getopt)) - (home-page "https://github.com/tsloughter/providers") - (synopsis "Erlang providers library") - (description "This package provides an Erlang providers library.") - (license license:asl2.0))) - -(define-public erlang-relx - (package - (name "erlang-relx") - (version "4.6.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "relx" version)) - (sha256 - (base32 "02gmfx1vxg9m3mq4njsqhs4972l4nb8m5p1pdcf64g09ccf17y1g")))) - (build-system rebar-build-system) - (propagated-inputs - (list erlang-bbmustache)) - (home-page "https://erlware.github.io/relx/") - (synopsis "Release assembler for Erlang/OTP Releases") - (description "Relx assembles releases for an Erlang/OTP release. Given a -release specification and a list of directories in which to search for OTP -applications it will generate a release output. That output depends heavily on -what plugins available and what options are defined, but usually it is simply -a well configured release directory.") - (license license:asl2.0))) - -(define-public erlang-ssl-verify-fun - (package - (name "erlang-ssl-verify-fun") - (version "1.1.6") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "ssl_verify_fun" version)) - (sha256 - (base32 "1026l1z1jh25z8bfrhaw0ryk5gprhrpnirq877zqhg253x3x5c5x")))) - (build-system rebar-build-system) - (home-page "https://github.com/deadtrickster/ssl_verify_fun.erl") - (synopsis "SSL verification functions for Erlang") - (description "This package provides SSL verification functions for -Erlang.") - (license license:expat))) + (license (list license:asl2.0 + license:bsd-2 + license:bsd-3 + license:expat + license:lgpl2.0+ + license:tcl/tk + license:zlib)))) (define-public rebar3 (package @@ -616,56 +238,71 @@ (define-public rebar3 (build-system gnu-build-system) ;; TODO: remove vendored modules, install man-page, install lib(?) (arguments - `(#:phases - (modify-phases %standard-phases - (delete 'bootstrap) - (add-after 'unpack 'unpack-dependency-sources - (lambda* (#:key inputs #:allow-other-keys) - (for-each - (lambda (pkgname) - (let* ((src (string-append pkgname "-source")) - (input (assoc-ref inputs src)) - (checkouts-dir (string-append "_checkouts/" pkgname)) - (lib-dir (string-append "_build/default/lib/" pkgname))) - (mkdir-p checkouts-dir) - (invoke "tar" "-xf" input "-C" checkouts-dir) - (invoke "tar" "-xzf" - (pk (string-append checkouts-dir "/contents.tar.gz")) - "-C" checkouts-dir) - (mkdir-p lib-dir) - (copy-recursively checkouts-dir lib-dir))) - (list "bbmustache" "certifi" "cf" "cth_readable" - "eunit_formatters" "getopt" "hex_core" "erlware_commons" - "parse_trans" "relx" "ssl_verify_fun" "providers")))) - (delete 'configure) - (replace 'build - (lambda _ - (setenv "HOME" (getcwd)) - (invoke "./bootstrap"))) - (replace 'install - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out"))) - (install-file "rebar3" (string-append out "/bin"))))) - (delete 'check)))) - (native-inputs - (list erlang)) - (inputs - `(("bbmustache-source" ,(package-source erlang-bbmustache)) - ("certifi-source" ,(package-source erlang-certifi)) - ("cf-source" ,(package-source erlang-cf)) - ("cth_readable-source" ,(package-source erlang-cth-readable)) - ("erlware_commons-source" ,(package-source erlang-erlware-commons)) - ("eunit_formatters-source" ,(package-source erlang-eunit-formatters)) - ("getopt-source" ,(package-source erlang-getopt)) - ("hex_core-source" ,(package-source erlang-hex-core)) - ("parse_trans-source" ,(package-source erlang-parse-trans)) - ("relx-source" ,(package-source erlang-relx)) - ("ssl_verify_fun-source" ,(package-source erlang-ssl-verify-fun)) - ("providers-source" ,(package-source erlang-providers)))) + `(#:phases (modify-phases %standard-phases + (delete 'bootstrap) + (add-after 'unpack 'unpack-dependency-sources + (lambda* (#:key inputs #:allow-other-keys) + (for-each (lambda (pkgname) + (let* ((src (string-append pkgname "-source")) + (input (assoc-ref inputs src)) + (checkouts-dir (string-append + "_checkouts/" pkgname)) + (lib-dir (string-append + "_build/default/lib/" + pkgname))) + (mkdir-p checkouts-dir) + (invoke "tar" "-xf" input "-C" + checkouts-dir) + (invoke "tar" "-xzf" + (pk (string-append checkouts-dir + "/contents.tar.gz")) "-C" + checkouts-dir) + (mkdir-p lib-dir) + (copy-recursively checkouts-dir lib-dir))) + (list "bbmustache" + "certifi" + "cf" + "cth_readable" + "eunit_formatters" + "getopt" + "hex_core" + "erlware_commons" + "parse_trans" + "relx" + "ssl_verify_fun" + "providers")))) + (delete 'configure) + (replace 'build + (lambda _ + (setenv "HOME" + (getcwd)) + (invoke "./bootstrap"))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out"))) + (install-file "rebar3" + (string-append out "/bin"))))) + (delete 'check)))) + (native-inputs (list erlang)) + (inputs `(("bbmustache-source" ,(package-source erlang-bbmustache)) + ("certifi-source" ,(package-source erlang-certifi)) + ("cf-source" ,(package-source erlang-cf)) + ("cth_readable-source" ,(package-source erlang-cth-readable)) + ("erlware_commons-source" ,(package-source + erlang-erlware-commons)) + ("eunit_formatters-source" ,(package-source + erlang-eunit-formatters)) + ("getopt-source" ,(package-source erlang-getopt)) + ("hex_core-source" ,(package-source erlang-hex-core)) + ("parse_trans-source" ,(package-source erlang-parse-trans)) + ("relx-source" ,(package-source erlang-relx)) + ("ssl_verify_fun-source" ,(package-source erlang-ssl-verify-fun)) + ("providers-source" ,(package-source erlang-providers)))) (home-page "https://rebar3.org/") (synopsis "Sophisticated build-tool for Erlang projects that follows OTP principles") - (description "@code{rebar3} is an Erlang build tool that makes it easy to + (description + "@code{rebar3} is an Erlang build tool that makes it easy to compile and test Erlang applications, port drivers and releases. @code{rebar3} is a self-contained Erlang script, so it's easy to distribute or @@ -676,84 +313,19 @@ (define-public rebar3 of locations (git, hg, etc).") (license license:asl2.0))) -(define-public rebar3-raw-deps - (package - (name "rebar3-raw-deps") - (version "2.0.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "rebar3_raw_deps" version)) - (sha256 - (base32 "1pzmm3m8gb2s9jn8fp6shzgfmy4mvh2vdci0z6nsm74ma3ffh1i3")))) - (build-system rebar-build-system) - (home-page "https://github.com/soranoba/rebar3_raw_deps") - (synopsis "Rebar3 plugin for supporting \"raw\" dependencies") - (description "This plugin provides support for handling non-OTP -applications as a dependent libraries.") - (license license:expat))) - -(define-public rebar3-git-vsn - (package - (name "rebar3-git-vsn") - (version "1.1.1") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "rebar3_git_vsn" version)) - (sha256 - (base32 "1dfz56034pa25axly9vqdzv3phkn8ll0qwrkws96pbgcprhky1hx")))) - (build-system rebar-build-system) - (inputs - (list git-minimal/pinned)) - (arguments - `(;; Running the tests require binary artifact (tar-file containing - ;; samples git repos) TODO: remove these from the source - #:tests? #f - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'patch-path - (lambda* (#:key inputs #:allow-other-keys) - (let ((git (assoc-ref inputs "git-minimal"))) - (substitute* "src/rebar3_git_vsn.erl" - (("rebar_utils:sh\\(\"git " _) - (string-append "rebar_utils:sh(\"" git "/bin/git "))))))))) - (home-page "https://github.com/soranoba/rebar3_git_vsn") - (synopsis "Rebar3 plugin for generating the version from git") - (description "This plugin adds support for generating the version from -a git checkout.") - (license license:expat))) - -(define-public rebar3-proper - (package - (name "rebar3-proper") - (version "0.12.1") - (source - (origin - (method url-fetch) - (uri (hexpm-uri "rebar3_proper" version)) - (sha256 - (base32 "1f174fb6h2071wr7qbw9aqqvnglzsjlylmyi8215fhrmi38w94b6")))) - (build-system rebar-build-system) - (home-page "https://github.com/ferd/rebar3_proper") - (synopsis "Rebar3 PropEr plugin") - (description "This plugin allows running PropEr test suites from within -rebar3.") - (license license:bsd-3))) - (define-public erlang-lfe (package (name "erlang-lfe") (version "2.1.2") - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/lfe/lfe") - (commit "v2.1.2"))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "180hz1p2v3vb6yyzcfwircmljlnd86ln8z80lzy3mwlyrcxblvxy")))) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/lfe/lfe") + (commit "v2.1.2"))) + (file-name (git-file-name name version)) + (sha256 + (base32 "180hz1p2v3vb6yyzcfwircmljlnd86ln8z80lzy3mwlyrcxblvxy")))) (build-system gnu-build-system) (arguments (list @@ -761,49 +333,47 @@ (define-public erlang-lfe (srfi srfi-26) (guix build gnu-build-system) (guix build utils)) - #:make-flags #~(list (string-append "PREFIX=" #$output) "CC=gcc") - #:phases - #~(modify-phases %standard-phases - (delete 'configure) - ;; The following is inspired by rebar-build-system.scm - (add-before 'check 'erlang-depends - (lambda* (#:key inputs #:allow-other-keys) - (define input-directories - (list #$(this-package-native-input "rebar3-proper") - #$(this-package-native-input "erlang-proper"))) - (mkdir-p "_checkouts") - (for-each - (lambda (input-dir) - (let ((elibdir (string-append input-dir "/lib/erlang/lib"))) - (when (directory-exists? elibdir) - (for-each - (lambda (dirname) - (let ((src (string-append elibdir "/" dirname)) - (dest (string-append "_checkouts/" dirname))) - (when (not (file-exists? dest)) - ;; Symlinking will not work, since rebar3 will try - ;; to overwrite the _build directory several times - ;; with the contents of _checkout, so we copy the - ;; directory tree to _checkout and make it - ;; writable. - (copy-recursively src dest #:follow-symlinks? #t) - (for-each (cut chmod <> #o777) - (find-files dest))))) - (scandir elibdir (lambda (file) - (and (not (member file '("." ".."))) - (file-is-directory? - (string-append elibdir - "/" - file))))))))) - input-directories))) - (replace 'check - (lambda* (#:key tests? #:allow-other-keys) - (when tests? - (begin - (setenv "REBAR_CACHE_DIR" "/tmp") - (invoke "make" "-j" (number->string (parallel-job-count)) - "tests")))))))) - (native-inputs (list rebar3 rebar3-proper erlang-proper)) + #:make-flags #~(list (string-append "PREFIX=" + #$output) "CC=gcc") + #:phases #~(modify-phases %standard-phases + (delete 'configure) + ;; The following is inspired by rebar-build-system.scm + (add-before 'check 'erlang-depends + (lambda* (#:key inputs #:allow-other-keys) + (define input-directories + (list #$(this-package-native-input "rebar3-proper") + #$(this-package-native-input "erlang-proper"))) + (mkdir-p "_checkouts") + (for-each + (lambda (input-dir) + (let ((elibdir (string-append input-dir "/lib/erlang/lib"))) + (when (directory-exists? elibdir) + (for-each + (lambda (dirname) + (let ((src (string-append elibdir "/" dirname)) + (dest (string-append "_checkouts/" dirname))) + (when (not (file-exists? dest)) + ;; Symlinking will not work, since rebar3 will try + ;; to overwrite the _build directory several times + ;; with the contents of _checkout, so we copy the + ;; directory tree to _checkout and make it + ;; writable. + (copy-recursively src dest #:follow-symlinks? #t) + (for-each (cut chmod <> 511) (find-files dest))))) + (scandir elibdir + (lambda (file) + (and (not (member file '("." ".."))) + (file-is-directory? (string-append elibdir "/" file))))))))) + input-directories))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (begin + (setenv "REBAR_CACHE_DIR" "/tmp") + (invoke "make" "-j" + (number->string (parallel-job-count)) + "tests")))))))) + (native-inputs (list rebar3 erlang-rebar3-proper erlang-proper)) (propagated-inputs (list erlang)) (home-page "https://github.com/lfe/lfe") (synopsis "Lisp Flavoured Erlang") @@ -812,3 +382,9 @@ (define-public erlang-lfe compiler. Code produced with it is compatible with \"normal\" Erlang code. An LFE evaluator and shell is also included.") (license license:asl2.0))) + +;;; +;;; Avoid adding new packages to the end of this file. To reduce the chances +;;; of a merge conflict, place them above by existing packages with similar +;;; functionality or similar names. +;;; diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm new file mode 100644 index 00000000..8201b715 --- /dev/null +++ b/guix/build-system/mix.scm @@ -0,0 +1,185 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Standard build procedure for Elixir packages using 'mix'. This is +;; implemented as an extension of 'gnu-build-system'. +;; +;; Code: + +(define-module (guix build-system mix) + #:use-module (gnu packages base) + #:use-module (gnu packages elixir) + #:use-module (guix build mix-build-system) + #:use-module (guix build-system gnu) + #:use-module (guix build-system) + #:use-module (guix search-paths) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix store) + #:use-module (guix gexp) + #:use-module (guix utils) + #:export (mix-build-system hexpm-uri)) + +;; +;; hexpm +;; + +(define (hexpm-uri name version) + "Return the URI where to fetch the sources of a Hex package NAME at VERSION. + +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" + (string-append "https://repo.hex.pm/tarballs/" + (string-replace-substring (strip-elixir-prefix name) "-" "_") + "-" version ".tar")) + +;; +;; utils +;; + +(define utils-locales + (make-glibc-utf8-locales glibc + #:locales (list "en_US") + #:name "glibc-utf8-locales")) + +(define (utils-elixir-default) + "Return the default Elixir package." + ;; Lazily resolve the binding to avoid a circular dependency. + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir + 'elixir))) + +(define utils-imported-modules + `((guix build mix-build-system) + ,@%gnu-build-system-modules)) + +(define utils-modules + '((guix build mix-build-system) + (guix build utils))) + +;; +;; mix +;; + +(define* (mix-build name + inputs + #:key source + (tests? #t) + (phases '%standard-phases) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules utils-imported-modules) + (modules utils-modules)) + "Build SOURCE using Elixir, and with INPUTS." + + (define builder + (with-imported-modules imported-modules + #~(begin + + (use-modules #$@(sexp->gexp modules)) + + #$(with-build-variables inputs outputs + #~(mix-build #:name #$name + #:source #+source + #:system #$system + #:tests? #$tests? + #:phases #$(if (pair? + phases) + (sexp->gexp + phases) + phases) + #:outputs %outputs + #:search-paths '#$(sexp->gexp + (map + search-path-specification->sexp + search-paths)) + #:inputs + %build-inputs))))) + + (mlet %store-monad + ((guile (package->derivation (or guile + (default-guile)) system + #:graft? #f))) + (gexp->derivation name + builder + #:system system + #:graft? #f ;consistent with 'gnu-build' + #:target #f + #:guile-for-build guile))) + +(define* (mix-lower name + #:key source + inputs + native-inputs + outputs + system + target + (elixir (utils-elixir-default)) + #:allow-other-keys #:rest arguments) + "Return a bag for NAME." + + ;; The value associated to these keywords are used in the bag below and are + ;; not to be used in the arguments. + (define private-keywords + '(#:inputs #:native-inputs #:outputs #:system #:target #:elixir)) + + ;; All that is necessary to complete the build. + (define build-inputs + ;; If these packages are not present, then Elixir emits these errors: + ;; dirname: command not found + ;; basename: command not found + `(,@(standard-packages) + + ;; If no UTF-8 is present, then Elixir emits this warning: + ;; + ;; warning: the VM is running with native name encoding of latin1 + ;; which may cause Elixir to malfunction as it expects utf8. Please + ;; ensure your locale is set to UTF-8 (which can be verified by + ;; running "locale" in your shell) + ("glibc-utf8-locales" ,utils-locales) + + ("elixir" ,elixir) + + ;; If Hex is not present, mix cannot build packages. + ("mix-hex" ,mix-hex) + + ,@native-inputs + + ,@inputs)) + + (define host-inputs + (if target inputs + '())) + + (bag (name name) + (system system) + (build-inputs build-inputs) + (host-inputs host-inputs) + (outputs outputs) + (build mix-build) + (arguments (strip-keyword-arguments private-keywords arguments)))) + +(define mix-build-system + (build-system (name 'mix) + (description "The standard Mix build system") + (lower mix-lower))) + +;;; mix.scm ends here diff --git a/guix/build-system/rebar.scm b/guix/build-system/rebar.scm index de1294ec..e1258a78 100644 --- a/guix/build-system/rebar.scm +++ b/guix/build-system/rebar.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 Ricardo Wurmus <rekado <at> elephly.net> ;;; Copyright © 2020 Hartmut Goebel <h.goebel <at> crazy-compilers.com> +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,99 +22,171 @@ (define-module (guix build-system rebar) #:use-module (guix store) #:use-module (guix utils) #:use-module (guix gexp) + #:use-module (ice-9 regex) #:use-module (guix packages) #:use-module (guix monads) #:use-module (guix search-paths) + #:use-module (ice-9 match) #:use-module (guix build-system) #:use-module (guix build-system gnu) - #:export (hexpm-uri - hexpm-package-url - %rebar-build-system-modules - rebar-build - rebar-build-system)) + #:use-module (srfi srfi-1) + #:export (hexpm-uri hexpm-package-url %rebar-build-system-modules + rebar-build rebar-build-system)) ;;; -;;; Definitions for the hex.pm repository, +;;; pkg-name ;;; -;; URL and paths from -;; https://github.com/hexpm/specifications/blob/master/endpoints.md -(define %hexpm-repo-url +(define pkg-name-prefix + "erlang-") + +;; Pattern that an Erlang Guix package is expected to match. +(define pkg-name-prefix-re + (format #f "^~a(.*)" pkg-name-prefix)) + +(define (pkg-name->match name) + "Return the match object from NAME if NAME starts with pkg-name-prefix." + (string-match pkg-name-prefix-re name)) + +(define (pkg-name? name) + "Test if NAME is the name of an Erlang Guix package. + +Example: erlang-ssl-verify-fun is the name of an Erlang Guix package." + (or (pkg-name->match name) #f)) + +(define (pkg-name->suffix name) + "Return the suffix of the name of an Erlang Guix package." + (regexp-substitute #f + (pkg-name->match name) 1)) + +(define* (pkg-name->library-directory-name name + #:key (version "")) + "Return the name of the library directory associated to NAME. + +Example: if an Erlang Guix package name is \"erlang-ssl-verify-fun\" and its +version is 1.2.3, then the associated library directory name is: +\"ssl_verify_fun-1.2.3\". + +See: + - \"Library directory\" description: https://www.erlang.org/doc/man/code#code-path +" + (string-append (string-replace-substring (pkg-name->suffix name) "-" "_") + (if (string= version "") "" + (string-append "-" version)))) + +;;; +;;; hexpm +;;; + +;; See: https://github.com/hexpm/specifications/blob/master/endpoints.md +(define hexpm (make-parameter "https://repo.hex.pm")) -(define hexpm-package-url - (string-append (%hexpm-repo-url) "/tarballs/")) +(define hexpm-tarballs + (string-append (hexpm) "/tarballs/")) -(define (hexpm-uri name version) +(define (hexpm->uri name version) "Return a URI string for the package hosted at hex.pm corresponding to NAME -and VERSION." - (string-append hexpm-package-url name "-" version ".tar")) +and VERSION. + +XXX: should a warning be emitted? +If NAME is not an Erlang Guix package name, then emit a warning. The download +will fail if it is not correct anyway." + + (define (warn-about name) + (format #t "AssertionWarning 4dcbff27 + Assertion: re matches name. + re = ~a + name = ~a +" pkg-name-prefix-re name) name) + + (define (name->archive-name name) + (if (pkg-name? name) + (string-append (pkg-name->library-directory-name name + #:version version) + ".tar") + (string-append (warn-about name) "-" version ".tar"))) + + (string-append hexpm-tarballs + (name->archive-name name))) ;; -;; Standard build procedure for Erlang packages using Rebar. +;; utils ;; -(define %rebar-build-system-modules - ;; Build-side modules imported by default. - `((guix build rebar-build-system) - ,@%gnu-build-system-modules)) - -(define (default-rebar3) - "Return the default Rebar3 package." +(define (utils-rebar-default) ;; Lazily resolve the binding to avoid a circular dependency. (let ((erlang-mod (resolve-interface '(gnu packages erlang)))) - (module-ref erlang-mod 'rebar3))) + (module-ref erlang-mod + 'rebar3))) -(define (default-erlang) - "Return the default Erlang package." +(define (utils-erlang-default) ;; Lazily resolve the binding to avoid a circular dependency. (let ((erlang-mod (resolve-interface '(gnu packages erlang)))) - (module-ref erlang-mod 'erlang))) - -(define* (lower name - #:key source inputs native-inputs outputs system target - (rebar (default-rebar3)) - (erlang (default-erlang)) - #:allow-other-keys - #:rest arguments) - "Return a bag for NAME from the given arguments." - (define private-keywords - '(#:target #:rebar #:erlang #:inputs #:native-inputs)) - - (and (not target) ;XXX: no cross-compilation - (bag - (name name) - (system system) - (host-inputs `(,@(if source - `(("source" ,source)) - '()) - ,@inputs)) - (build-inputs `(("rebar" ,rebar) - ("erlang" ,erlang) ;; for escriptize - ,@native-inputs - ;; Keep the standard inputs of 'gnu-build-system'. - ,@(standard-packages))) - (outputs outputs) - (build rebar-build) - (arguments (strip-keyword-arguments private-keywords arguments))))) - -(define* (rebar-build name inputs - #:key - guile source - (rebar-flags ''("skip_deps=true" "-vv")) - (tests? #t) - (test-target "eunit") - ;; TODO: install-name ; default: based on guix package name - (install-profile "default") - (phases '(@ (guix build rebar-build-system) - %standard-phases)) - (outputs '("out")) - (search-paths '()) - (native-search-paths '()) - (system (%current-system)) - (imported-modules %rebar-build-system-modules) - (modules '((guix build rebar-build-system) - (guix build utils)))) + (module-ref erlang-mod + 'erlang))) + +(define utils-imported-modules + `((guix build rebar-build-system) + ,@%gnu-build-system-modules)) + +;; +;; source +;; +;; If s is a Source, then s has the form (list <name> <source>) where: +;; <name> is a string representing the name of a library directory. +;; <origin> is an origin (see: guix/packages.scm) which represents the +;; source code associated to this library. +;; + +(define source->name + car) +(define source->origin + cadr) + +;; +;; input +;; +;; If i is an Input, then i has the form (list <name> <package>) where: +;; <name> is a string representing the name of a package. +;; <package> is a package with the associated name. + +(define input->name + car) +(define input->package + cadr) + +(define (input->source input) + "Return a Source associated to the Input INPUT." + (match input + ((name package) + (list (pkg-name->library-directory-name name) + (package-source package))))) + +;; +;; rebar +;; + +(define* (rebar-build name + inputs + #:key guile + source + ;; XXX: these are useless. + (rebar-flags ''("skip_deps=true" "-vv")) + (tests? #t) + (test-target "eunit") + ;; TODO: install-name ; default: based on guix package name + (install-profile "default") + (phases '(@ (guix build rebar-build-system) + %standard-phases)) + (outputs '("out")) + (search-paths '()) + (native-search-paths '()) + (system (%current-system)) + (imported-modules utils-imported-modules) + (modules '((guix build rebar-build-system) + (guix build utils))) + (sources-erlang '())) "Build SOURCE with INPUTS." (define builder @@ -122,35 +195,94 @@ (define* (rebar-build name inputs (use-modules #$@(sexp->gexp modules)) #$(with-build-variables inputs outputs + #~(rebar-build #:source #+source - #:system #$system - #:name #$name - #:rebar-flags #$rebar-flags - #:tests? #$tests? - #:test-target #$test-target - ;; TODO: #:install-name #$install-name - #:install-profile #$install-profile - #:phases #$(if (pair? phases) - (sexp->gexp phases) - phases) - #:outputs %outputs - #:search-paths '#$(sexp->gexp - (map search-path-specification->sexp - search-paths)) - #:inputs %build-inputs))))) - - (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) - system #:graft? #f))) + #:sources-erlang '#$sources-erlang + #:system #$system + #:name #$name + #:rebar-flags #$rebar-flags + #:tests? #$tests? + #:test-target #$test-target + ;; TODO: #:install-name #$install-name + #:install-profile #$install-profile + #:phases #$(if (pair? + phases) + (sexp->gexp + phases) + phases) + #:outputs %outputs + #:search-paths '#$(sexp->gexp + (map + search-path-specification->sexp + search-paths)) + #:inputs + %build-inputs))))) + + (mlet %store-monad + ((guile (package->derivation (or guile + (default-guile)) system + #:graft? #f))) + ;; Note: Always pass #:graft? #f. Without it, ALLOWED-REFERENCES & ;; co. would be interpreted as referring to grafted packages. - (gexp->derivation name builder + (gexp->derivation name + builder #:system system #:target #f #:graft? #f #:guile-for-build guile))) +(define* (rebar-lower name + #:key (erlang (utils-erlang-default)) + inputs + native-inputs + outputs + (rebar (utils-rebar-default)) + source + system + target + #:allow-other-keys #:rest arguments) + "Return a bag for NAME from the given arguments." + + (let* ((erlang-packages ;List of Erlang packages. + (filter (lambda (input) + (pkg-name? (input->name input))) + (append inputs native-inputs))) + + (erlang-sources (map (lambda (input) + (input->source input)) erlang-packages))) + + (define private-keywords + '(#:target #:rebar #:erlang #:inputs #:native-inputs #:sources-erlang)) + + (and (not target) ;XXX: no cross-compilation + (bag (name name) + (system system) + (host-inputs inputs) + (build-inputs `(,@(standard-packages) ("erlang" ,erlang) + ("rebar" ,rebar) + ,@inputs + ,@native-inputs)) + (outputs outputs) + (build rebar-build) + (arguments (append (list #:sources-erlang erlang-sources) + (strip-keyword-arguments private-keywords + arguments))))))) + (define rebar-build-system - (build-system - (name 'rebar) - (description "The standard Rebar build system") - (lower lower))) + (build-system (name 'rebar) + (description "The standard Rebar build system") + (lower rebar-lower))) + +;;; +;;; Exports +;;; + +(define hexpm-uri + hexpm->uri) + +(define hexpm-package-url + hexpm-tarballs) + +(define %rebar-build-system-modules + utils-imported-modules) diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build-system.scm new file mode 100644 index 00000000..1d17ae49 --- /dev/null +++ b/guix/build/mix-build-system.scm @@ -0,0 +1,373 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Builder-side code of the standard Mix package build procedure. +;; +;; The standard procedure is presented here: +;; https://elixir-lang.org/getting-started/mix-otp/introduction-to-mix.html#project-compilation +;; +;; It boils down to: +;; 1) MIX_ENV=prod mix compile +;; 2) mix test +;; +;; Most of the code here comes from the necessity to convince mix to compile +;; without accessing the network. Here is the procedure adapted for Guix: +;; if: +;; 1) `<source>' is an archive of a package downloaded from hex.pm. +;; See: https://github.com/hexpm/specifications/blob/main/package_tarball.md +;; 2) `<hex-lib>' is the name of the Hex library, e.g. hex-2.0.5. +;; `<hex-path>' is the path in the store of Hex. +;; See: `(gnu packages elixir)' +;; +;; then the steps to build a package pkg are: +;; 1) tar <source> +;; 2) tar contents.tar.gz +;; 3) export MIX_ENV=prod +;; 4) export MIX_HOME=.mix +;; 5) export MIX_ARCHIVES="$(MIX_HOME)"/archives +;; 6) mkdir -p "$(MIX_ARCHIVES)" +;; 7) ln -snd <hex-path>/lib/<hex-lib> "$(MIX_ARCHIVES)"/<hex-lib>/<hex-lib> +;; 8) <profile> is either `prod' or `shared' depending on mix.exs +;; see: `build_per_environment' in mix documentation. +;; 9) For all Elixir or Erlang package p in inputs, we have <p-name> the name +;; of the associated library (e.g. hex-2.0.5). We must: +;; install p under _build/<profile>/lib/<p-name> +;; install p source _build/<profile>/lib/<p-name> +;; 10) mix compile --no-deps-check +;; 11) mix test --no-deps-check +;; 12) install build artifacts under #$out/lib/elixir/X.Y/ +;; where X and Y are the major and minor version numbers of Elixir. +;; +;; Code: + +(define-module (guix build mix-build-system) + #:use-module (guix build utils) + #:use-module ((guix build gnu-build-system) + #:prefix gnu:) + #:use-module (ice-9 regex) + #:use-module (ice-9 ftw) + #:use-module (srfi srfi-1) + #:export (mix-build strip-elixir-prefix %standard-phases)) + +;; +;; version +;; + +;; XXX: copied from (guix utils) since not available from the build side. +;; XXX: There may be a way to avoid this duplicated code? +(define (version-prefix version-string num-parts) + "Truncate version-string to the first num-parts components of the version. +For example, (version-prefix \"2.1.47.4.23\" 3) returns \"2.1.47\"" + (string-join (take (string-split version-string #\.) num-parts) ".")) + +;; XXX: copied from (guix utils) since not available from the build side. +;; XXX: There may be a way to avoid this duplicated code? +(define (version-major+minor version-string) + "Return \"<major>.<minor>\", where major and minor are the major and +minor version numbers from version-string." + (version-prefix version-string 2)) + +;; +;; pkg +;; + +;; The prefix of Elixir packages as a regular expression. +(define pkg-elixir-prefix + "^elixir-") + +;; The prefix of Erlang packages as a regular expression. +(define pkg-erlang-prefix + "^erlang-") + +(define (pkg-name->library-name name) + "Return the name of the Mix project deduced from the name of the Guix package. + +For example: elixir-a-pkg-1.0.2 → a_pkg" + + (let* ((re (format #f "~a(.*)" pkg-elixir-prefix)) + (re-match (string-match re name)) + (name-version (if re-match + (regexp-substitute #f re-match 1) + (error (format #f "AssertionError d722a480 + Assertion: re matches name. + re = ~a + name = ~a" re + name))))) + + ;; A snake_case name. + (string-join (drop-right (string-split name-version #\-) 1) "_"))) + +(define (pkg->dir-install elixir-store pkg-store pkg-name) + "Return the path under the path PKG-STORE where to install the package named PKG-NAME given the path of the Elixir used to build ELIXIR-STORE. + +Example: + - if: + - elixir-store = /gnu/store/…elixir-1.14.0 + - pkg-store = /gnu/store/…kv-1.0.0 + - pkg-name = elixir-kv + - then: + - (pkg->dir-install elixir-store pkg-store pkg-name) = /gnu/store/…kv-1.0.0/lib/elixir/1.14/kv" + (let ((X.Y (path->elixir-X.Y elixir-store)) + (lib-name (pkg-name->library-name pkg-name))) + (string-append (path->elixir-lib pkg-store X.Y) "/" lib-name))) + +;; +;; mix +;; + +;; See: https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments +(define mix-MIX_HOME + "MIX_HOME") +(define mix-MIX_ENV + "MIX_ENV") +(define mix-MIX_ENV-prod + "prod") + +(define (mix-target-dir) + "Return the directory where build artifacts are to be installed according to +MIX_ENV in the current directory." + + (format #f "_build/~a/lib" + (getenv mix-MIX_ENV))) + +;; +;; path +;; + +(define (path->elixir-lib path X.Y) + "Return the path of the directory where libraries of an Elixir package are installed in the store." + (string-append path "/lib/elixir/" X.Y)) + +(define (path->erlang-lib path) + "Return the path of the directory where libraries of an Erlang package are installed in the store." + (string-append path "/lib/erlang/lib")) + +(define (path->elixir-X.Y elixir) + "Given a path in the store where elixir has been installed, return its +version as X.Y where X and Y are its major and minor versions." + (let ((version (last (string-split elixir #\-)))) + (version-major+minor version))) + +;; +;; phase +;; + +(define* (phase-unpack #:key source #:allow-other-keys) + "Unpack SOURCE." + (invoke "tar" "xvf" source) + (invoke "tar" "xvf" "contents.tar.gz")) + +(define* (phase-configure-mix-env #:key (mix-env mix-MIX_ENV-prod) + #:allow-other-keys) + "Set default MIX_ENV." + + (let ((values (list mix-MIX_ENV-prod "shared"))) + (when (not (member mix-env values string=?)) + (error (format #f "AssertionError 45f9a67d + Assertion: mix-env is one of values. + values = ~a +" values))) + (setenv mix-MIX_ENV mix-env))) + +(define* (phase-install-hex #:key inputs name #:allow-other-keys) + "Install Hex." + + (let* ((hex-lib (string-append (assoc-ref inputs "mix-hex") "/lib")) + (hex-name (last (scandir hex-lib))) + (MIX_ARCHIVES "MIX_ARCHIVES") + (hex-archive-path "")) + + (setenv mix-MIX_HOME ".mix") + (setenv MIX_ARCHIVES + (string-append (getenv mix-MIX_HOME) "/archives")) + (set! hex-archive-path + (string-append (getenv MIX_ARCHIVES) "/" hex-name)) + (mkdir-p hex-archive-path) + (symlink (string-append hex-lib "/" hex-name) + (string-append hex-archive-path "/" hex-name)))) + +;; Below are definitions useful to understand the following code. +;; +;; - « p : StorePath » means that « p is a String that represents a path of a +;; package in the store ». +;; +;; - « i : Input » means that i has the form (key . path) where key : String that +;; represent the name of a package and path : StorePath. +;; +;; - « al : AList » means that « al is an Association List ». +;; +;; - « al : AList Input » means that « al is an Association List of Input ». +;; +;; - « p : Pkg » means that p has the form (type . path) where type is either +;; 'erlang or 'elixir and path : StorePath. +;; +;; - « l : Lib » means that p has the form (lib-name . lib-path) where +;; lib-name is the name of an Erlang or Elixir library and lib-path is its path. +(define* (phase-install-dependencies #:key inputs #:allow-other-keys) + "Install dependencies." + + (let ((target-dir (mix-target-dir)) + (X.Y (path->elixir-X.Y (assoc-ref inputs "elixir")))) + + ;; Where to install the dependencies. + (mkdir-p target-dir) + + (define (install-lib lib) + "Install a Lib LIB under target-dir." + ;; XXX: use match + (let ((lib-name (car lib)) + (lib-path (cdr lib))) + (let ((target (string-append target-dir "/" lib-name))) + (symlink lib-path target)))) + + (define (install-libs libraries) + "Install the set of the list of Lib LIBRARIES under target-dir." + (for-each (lambda (lib) + (install-lib lib)) libraries)) + + (define (pkg->libraries pkg) + "Return the list of Lib libraries associated to a Pkg." + ;; XXX: use match + (let* ((pkg-type (car pkg)) + (pkg-path (cdr pkg)) + (lib-folder (cond + ((eq? pkg-type + 'elixir) + (path->elixir-lib pkg-path X.Y)) + ((eq? pkg-type + 'erlang) + (path->erlang-lib pkg-path))))) + (map (lambda (lib-name) + (cons lib-name + (string-append lib-folder "/" lib-name))) + (drop (scandir lib-folder) 2)))) + + (define (install-pkg-libraries pkg) + "Install all libraries of a given Pkg PKG under target-dir." + (install-libs (pkg->libraries pkg))) + + (define (input->pkg input) + "Return a Pkg if Input INPUT is an Erlang or Elixir Input else #f." + (let ((type? (cond + ((string-match pkg-erlang-prefix + (car input)) + 'erlang) + ((string-match pkg-elixir-prefix + (car input)) + 'elixir) + (#t #f)))) + (if type? + (cons type? + (cdr input)) #f))) + + (define (inputs->pkgs inputs) + "Return the a list of Pkg, one for each Erlang or Elixir Input in INPUTS." + (filter pair? + (map input->pkg inputs))) + + (for-each (lambda (pkg) + (install-pkg-libraries pkg)) + (inputs->pkgs inputs)))) + +(define* (phase-build . args_ignored) + "Builds the Mix project according to MIX_ENV." + (invoke "mix" "compile" "--no-deps-check")) + +(define* (phase-check #:key (tests? #t) name #:allow-other-keys) + "Test the Mix project." + (if tests? + (begin + (let ((mix-env (getenv mix-MIX_ENV))) + (setenv mix-MIX_ENV "test") + (invoke "mix" "test" "--no-deps-check") + (setenv mix-MIX_ENV mix-env))) + (format #t "Tests have been skipped since test? parameter value was: ~a. +" + tests?))) + +(define* (phase-remove-mix-dirs . ignored_args) + "Remove all .mix/ directories." + (let ((mix-dirs (find-files "." + (file-name-predicate (format #f "\\~a$" + (getenv + mix-MIX_HOME))) + #:directories? #t))) + (for-each (lambda (mix-dir) + (delete-file-recursively mix-dir)) mix-dirs))) + +(define* (phase-install #:key inputs outputs name #:allow-other-keys) + "Install build artifacts in the store." + (let ((dir-build (string-append (mix-target-dir) "/" + (pkg-name->library-name name))) + (dir-install (pkg->dir-install (assoc-ref inputs "elixir") + (assoc-ref outputs "out") name))) + (mkdir-p dir-install) + (copy-recursively dir-build dir-install + #:follow-symlinks? #t))) + +(define mix-%standard-phases + (modify-phases gnu:%standard-phases + (delete 'bootstrap) + (delete 'configure) + (replace 'unpack + phase-unpack) + (add-after 'unpack 'condifure-mix-env + phase-configure-mix-env) + (add-after 'patch-generated-file-shebangs 'install-hex + phase-install-hex) + (add-after 'install-hex 'install-dependencies + phase-install-dependencies) + (replace 'build + phase-build) + (replace 'check + phase-check) + (add-before 'install 'remove-mix-dirs + phase-remove-mix-dirs) + (replace 'install + phase-install))) + +(define* (mix-build #:key inputs + (phases mix-%standard-phases) + #:allow-other-keys #:rest args) + "Build the given Mix package, applying all of PHASES in order." + (apply gnu:gnu-build + #:inputs inputs + #:phases phases + args)) + +;; +;; This section gather exports. +;; + +(define (strip-elixir-prefix name) + (let* ((re (format #f "~a(.*)" pkg-elixir-prefix)) + (re-match (string-match re name))) + + (if re-match + (regexp-substitute #f re-match 1) + (error (format #f "AssertionError d722a480 + Assertion: re matches name. + re = ~a + name = ~a" re name))))) + +(define %standard-phases + mix-%standard-phases) + +;;; mix-build-system.scm ends here diff --git a/guix/build/rebar-build-system.scm b/guix/build/rebar-build-system.scm index fb664228..80813225 100644 --- a/guix/build/rebar-build-system.scm +++ b/guix/build/rebar-build-system.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado <at> elephly.net> ;;; Copyright © 2019 Björn Höfling <bjoern.hoefling <at> bjoernhoefling.de> ;;; Copyright © 2020, 2022 Hartmut Goebel <h.goebel <at> crazy-compilers.com> +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -19,129 +20,222 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (guix build rebar-build-system) - #:use-module ((guix build gnu-build-system) #:prefix gnu:) - #:use-module ((guix build utils) #:hide (delete)) + #:use-module ((guix build gnu-build-system) + #:prefix gnu:) + #:use-module ((guix build utils) + #:hide (delete)) #:use-module (ice-9 match) #:use-module (ice-9 ftw) + #:use-module (ice-9 string-fun) + #:use-module (ice-9 receive) + #:use-module (ice-9 regex) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) - #:export (rebar-build - %standard-phases)) + #:export (rebar-build %standard-phases)) ;; ;; Builder-side code of the standard build procedure for Erlang packages using ;; rebar3. ;; -;; TODO: Think about whether bindir ("ebin"), libdir ("priv") and includedir -;; "(include") need to be configurable -(define %erlang-libdir "/lib/erlang/lib") - -(define* (erlang-depends #:key inputs #:allow-other-keys) - (define input-directories - (match inputs - (((_ . dir) ...) - dir))) - (mkdir-p "_checkouts") - - (for-each - (lambda (input-dir) - (let ((elibdir (string-append input-dir %erlang-libdir))) - (when (directory-exists? elibdir) - (for-each - (lambda (dirname) - (let ((dest (string-append elibdir "/" dirname)) - (link (string-append "_checkouts/" dirname))) - (when (not (file-exists? link)) - ;; RETHINK: Maybe better copy and make writable to avoid some - ;; error messages e.g. when using with rebar3-git-vsn. - (symlink dest link)))) - (list-directories elibdir))))) - input-directories)) - -(define* (unpack #:key source #:allow-other-keys) - "Unpack SOURCE in the working directory, and change directory within the -source. When SOURCE is a directory, copy it in a sub-directory of the current -working directory." - (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) - (gnu-unpack #:source source) - ;; Packages from hex.pm typically have a contents.tar.gz containing the - ;; actual source. If this tar file exists, extract it. - (when (file-exists? "contents.tar.gz") - (invoke "tar" "xvf" "contents.tar.gz")))) - -(define* (build #:key (rebar-flags '()) #:allow-other-keys) - (apply invoke `("rebar3" "compile" ,@rebar-flags))) - -(define* (check #:key target (rebar-flags '()) (tests? (not target)) - (test-target "eunit") - #:allow-other-keys) - (if tests? - (apply invoke `("rebar3" ,test-target ,@rebar-flags)) - (format #t "test suite not run~%"))) +;; +;; utils +;; -(define (erlang-package? name) - "Check if NAME correspond to the name of an Erlang package." - (string-prefix? "erlang-" name)) - -(define (package-name-version->erlang-name name+ver) - "Convert the Guix package NAME-VER to the corresponding Erlang name-version -format. Essentially drop the prefix used in Guix and replace dashes by -underscores." - (let* ((name- (package-name->name+version name+ver))) - (string-join - (string-split - (if (erlang-package? name-) ; checks for "erlang-" prefix - (string-drop name- (string-length "erlang-")) - name-) - #\-) - "_"))) - -(define (list-directories directory) +(define (utils-list-directories directory) "Return file names of the sub-directory of DIRECTORY." (scandir directory (lambda (file) - (and (not (member file '("." ".."))) + (and (not (member file + '("." ".."))) (file-is-directory? (string-append directory "/" file)))))) -(define* (install #:key name outputs - (install-name (package-name-version->erlang-name name)) - (install-profile "default") ; build profile outputs to install - #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (pkg-dir (string-append out %erlang-libdir "/" install-name))) - (let ((bin-dir (string-append "_build/" install-profile "/bin")) - (lib-dir (string-append "_build/" install-profile "/lib"))) - ;; install _build/PROFILE/bin - (when (file-exists? bin-dir) - (copy-recursively bin-dir out #:follow-symlinks? #t)) - ;; install _build/PROFILE/lib/*/{ebin,include,priv} - (for-each - (lambda (*) - (for-each - (lambda (dirname) - (let ((src-dir (string-append lib-dir "/" * "/" dirname)) - (dst-dir (string-append pkg-dir "/" dirname))) - (when (file-exists? src-dir) - (copy-recursively src-dir dst-dir #:follow-symlinks? #t)) - (false-if-exception - (delete-file (string-append dst-dir "/.gitignore"))))) - '("ebin" "include" "priv"))) - (list-directories lib-dir)) - (false-if-exception - (delete-file (string-append pkg-dir "/priv/Run-eunit-loop.expect")))))) - -(define %standard-phases +;; +;; source +;; + +(define source->name + car) +(define source->tar + cadr) + +;; +;; tar +;; + +(define* (tar-unpack tar) + (invoke "tar" "xvf" tar) + (invoke "tar" "xvf" "contents.tar.gz") + + ;; Prevent an error message at install phase. + ;; . + ;; rebar3 compile produces a symlinks like so in _build/: + ;; priv -> ../../../../priv + ;; priv -> ../../../../include + ;; + ;; The install phase copies whatever has been built to the output directory. + ;; If the priv/ directory is absent, then an error `i/o error: + ;; _build/…/priv: No such file or directory' occurs. So, we make sure that a + ;; directory exists. + (for-each (lambda (dir) + (mkdir-p dir)) + (list "priv" "include"))) + +;;; +;;; pkg-name +;;; + +(define pkg-name-prefix + "erlang-") + +(define pkg-name-prefix-re + (format #f "^~a(.*)" pkg-name-prefix)) + +(define (pkg-name? name) + (string-match (format #f "^~a" pkg-name-prefix) name)) + +(define (pkg-name->name name) + (regexp-substitute #f + (string-match pkg-name-prefix-re name) 1)) + +(define* (pkg-name->lib-name name) + "erlang-a-b-1.0.2 -> a_b-1.0.2" + + (let ((elements (string-split (pkg-name->name name) #\-))) + (string-append (string-join (drop-right elements 1) "_") "-" + (last elements)))) + +(define* (pkg-name->build-dir name + #:key (profile "default")) + (string-append (format #f "_build/~a/lib/" profile) + (car (string-split (pkg-name->lib-name name) #\-)))) + +(define (lib-name-no-version lib-name) + (car (string-split lib-name #\-))) + +;; +;; phase +;; + +(define* (phase-unpack #:key source #:allow-other-keys) + (tar-unpack source)) + +(define (phase-configure-HOME . ignored_args) + "In some cases, it is needed for the environment variable HOME to be defined +as a directory with write permission. + +Examples of errors: + - Could not write to \"/homeless-shelter/.cache/rebar3/hex\". Please ensure the path is writeable. +" + + (let ((HOME "HOME") + (tmp "/tmp")) + (setenv HOME tmp) + (format #t "~a=~a\n" HOME tmp))) + +(define* (phase-configure-dependencies #:key name + version + inputs + sources-erlang + (install-profile "default") + #:allow-other-keys) + + ;; If source in sources-erlang, then install it under _checkouts/. + ;; see: https://rebar3.org/docs/configuration/dependencies/#checkout-dependencies + (let ((_checkouts "_checkouts")) + (mkdir-p _checkouts) + (for-each (lambda (source) + (match source + ((name tar) + (let ((src (string-append _checkouts "/" name))) + (mkdir-p src) + (with-directory-excursion src + (tar-unpack tar)))) + (_ #f))) sources-erlang)) + + ;; If input in inputs is an Erlang package, then install it under _build/. + (let ((_build (format #f "_build/~a/checkouts" install-profile))) + (mkdir-p _build) + (match inputs + (((_ . dirs) ..1) + (for-each (lambda (dir) + (let ((elib (string-append dir "/lib/erlang/lib"))) + (when (directory-exists? elib) + (for-each (lambda (dirname) + (let ((src (string-append elib "/" dirname)) + (dest (string-append _build "/" + (lib-name-no-version + dirname)))) + (copy-recursively src dest + #:log #f) + (mkdir-p (string-append dest "/priv")))) + (utils-list-directories elib))))) dirs)) + (_ #f)))) + +(define* (phase-build #:key name + (rebar-flags '()) #:allow-other-keys) + (apply invoke + `("rebar3" "compile" + ,@rebar-flags))) + +(define* (phase-check #:key target + (rebar-flags '()) + (tests? (not target)) + (test-target "eunit") + #:allow-other-keys) + (if tests? + (apply invoke + `("rebar3" ,test-target + ,@rebar-flags)) + (format #t "test suite not run~%"))) + +(define* (phase-install #:key name outputs + (install-profile "default") #:allow-other-keys) + (let* ((build-dir (pkg-name->build-dir name + #:profile install-profile)) + (out-build-dir (string-append (assoc-ref outputs "out") + "/lib/erlang/lib/" + (pkg-name->lib-name name)))) + + (mkdir-p out-build-dir) + (copy-recursively build-dir out-build-dir + #:follow-symlinks? #t))) + +;; +;; rebar +;; + +(define rebar-%standard-phases (modify-phases gnu:%standard-phases - (replace 'unpack unpack) + (replace 'unpack + phase-unpack) + (add-after 'unpack 'configure-HOME + phase-configure-HOME) (delete 'bootstrap) (delete 'configure) - (add-before 'build 'erlang-depends erlang-depends) - (replace 'build build) - (replace 'check check) - (replace 'install install))) + (add-before 'build 'configure-dependencies + phase-configure-dependencies) + (replace 'build + phase-build) + (replace 'check + phase-check) + (replace 'install + phase-install))) -(define* (rebar-build #:key inputs (phases %standard-phases) +(define* (rebar-build #:key inputs + (phases rebar-%standard-phases) #:allow-other-keys #:rest args) "Build the given Erlang package, applying all of PHASES in order." - (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + (apply gnu:gnu-build + #:inputs inputs + #:phases phases + args)) + +;; +;; Exported bindings. +;; + +(define %standard-phases rebar-%standard-phases) + + +;;; rebar-build-system.scm ends here base-commit: 4dfbc536689b07e56aead3dd864b8af54613d091 -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sat, 28 Oct 2023 21:45:02 GMT) Full text and rfc822 format available.Message #8 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>, 66801 <at> debbugs.gnu.org Cc: Katherine Cox-Buday <cox.katherine.e+guix <at> gmail.com>, Andrew Tropin <andrew <at> trop.in> Subject: Re: [bug#66801] [PATCH] mix-build-system: draft 1 Date: Sat, 28 Oct 2023 23:43:46 +0200
Am Samstag, dem 28.10.2023 um 22:19 +0200 schrieb Pierre-Henry Fröhring: > This commit introduces a mix-build-system. The provided code ensures > that the following code runs without errors: > > ./pre-inst-env guix build elixir-machete > > A key challenge is the lack of bit reproducibility, in part due to > rebar3's lack of bit reproducibility. Future patches may address > this, and I welcome feedback. > > Given the changes, splitting them into focused patches might be best. > As a first-time contributor, I seek advice on a suitable patch > sequence. > > I also request guidance from the Guix community for a seamless > integration. Please suggest next steps for the mix-build-system > integration. > > Thank you. > --- I'd suggest the following order: 1. Clean up your changes for rebar-build-system 2. Add all the packages that can be built with rebar-build-system 3. Add mix-build-system 4. Add all the packages that need to be built with mix-build-system Steps 2 and 4 should be further split in one patch per package with each package only requiring the previous ones to build. > +(define* (tar-unpack tar) > + [...]) > +(define* (phase-unpack #:key source #:allow-other-keys) > + (tar-unpack source)) That's a little silly, isn't it? Stick with a single procedure please. Also, we're not doing Hungarian variable names. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:41:02 GMT) Full text and rfc822 format available.Message #11 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 01/32] rebar-build-system and packages. Date: Sun, 29 Oct 2023 15:36:54 +0100
The builder now accepts the `#:sources-erlang` parameter, which expects a list of "Source" items. Each "Source" corresponds to the source code of a library directory, which is where Erlang looks for compiled modules. Documentation: https://www.erlang.org/doc/man/code#code-path. Each Source is installed as a "Checkout", which are local dependencies linked to directories managed by rebar. For more information, see https://rebar3.org/docs/configuration/dependencies/#checkout-dependencies. Lacking checkouts, rebar3 will not compile if there is no network access. Change-Id: Idc3aa8bb204f55d0594c1669399845cd9b9e86ab --- guix/build-system/rebar.scm | 274 +++++++++++++++++++----------- guix/build/rebar-build-system.scm | 255 +++++++++++++++++---------- 2 files changed, 339 insertions(+), 190 deletions(-) diff --git a/guix/build-system/rebar.scm b/guix/build-system/rebar.scm index de1294ec..862721ee 100644 --- a/guix/build-system/rebar.scm +++ b/guix/build-system/rebar.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 Ricardo Wurmus <rekado <at> elephly.net> ;;; Copyright © 2020 Hartmut Goebel <h.goebel <at> crazy-compilers.com> +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -18,102 +19,117 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (guix build-system rebar) - #:use-module (guix store) - #:use-module (guix utils) + #:use-module (guix build-system gnu) + #:use-module (guix build-system) #:use-module (guix gexp) - #:use-module (guix packages) #:use-module (guix monads) + #:use-module (guix packages) #:use-module (guix search-paths) - #:use-module (guix build-system) - #:use-module (guix build-system gnu) - #:export (hexpm-uri - hexpm-package-url - %rebar-build-system-modules - rebar-build - rebar-build-system)) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module (srfi srfi-1) + #:export (hexpm-uri hexpm-package-url %rebar-build-system-modules + rebar-build rebar-build-system)) -;;; -;;; Definitions for the hex.pm repository, -;;; +;; Source +;; A « Source » reprensents the source code to a library directory. It is +;; defined as (list <name> <origin>) where: <name> is a string representing +;; the name of a library directory and <origin> is an origin as defined +;; (guix packages). + + +;; Pattern that an Erlang Guix package name is expected to match. +(define pkg-name-re "^erlang-(.*)") + +(define (pkg-name->match name) + "Return the match object from NAME if NAME starts with pkg-name-prefix." + (string-match pkg-name-re name)) + +(define (pkg-name? name) + "Test if NAME is the name of an Erlang Guix package." + (or (pkg-name->match name) #f)) -;; URL and paths from -;; https://github.com/hexpm/specifications/blob/master/endpoints.md -(define %hexpm-repo-url - (make-parameter "https://repo.hex.pm")) +(define (pkg-name->suffix name) + "Return the suffix of the name of an Erlang Guix package." + (regexp-substitute #f (pkg-name->match name) 1)) -(define hexpm-package-url - (string-append (%hexpm-repo-url) "/tarballs/")) +(define* (pkg-name->library-directory-name name #:key (version "")) + "Return the name of the library directory associated with the Erlang Guix package name NAME." + (string-append (string-replace-substring (pkg-name->suffix name) "-" "_") + (if (string= version "") "" (string-append "-" version)))) + +;; See: https://github.com/hexpm/specifications/blob/master/endpoints.md +(define hexpm (make-parameter "https://repo.hex.pm")) + +(define hexpm-tarballs (string-append (hexpm) "/tarballs/")) (define (hexpm-uri name version) "Return a URI string for the package hosted at hex.pm corresponding to NAME -and VERSION." - (string-append hexpm-package-url name "-" version ".tar")) +and VERSION. -;; -;; Standard build procedure for Erlang packages using Rebar. -;; +XXX: should a warning be emitted? +If NAME is not an Erlang Guix package name, then emit a warning. The download +will fail if it is not correct anyway." -(define %rebar-build-system-modules - ;; Build-side modules imported by default. - `((guix build rebar-build-system) - ,@%gnu-build-system-modules)) + (define (warn-about name) + (format #t "AssertionWarning 4dcbff27 + Assertion: re matches name. + re = ~a + name = ~a +" pkg-name-re name) + + name) -(define (default-rebar3) - "Return the default Rebar3 package." + (define (name->archive-name name) + (if (pkg-name? name) + (string-append (pkg-name->library-directory-name name #:version version) ".tar") + (string-append (warn-about name) "-" version ".tar"))) + + (string-append hexpm-tarballs (name->archive-name name))) + +(define (rebar-default) ;; Lazily resolve the binding to avoid a circular dependency. (let ((erlang-mod (resolve-interface '(gnu packages erlang)))) (module-ref erlang-mod 'rebar3))) -(define (default-erlang) - "Return the default Erlang package." +(define (erlang-default) ;; Lazily resolve the binding to avoid a circular dependency. (let ((erlang-mod (resolve-interface '(gnu packages erlang)))) (module-ref erlang-mod 'erlang))) -(define* (lower name - #:key source inputs native-inputs outputs system target - (rebar (default-rebar3)) - (erlang (default-erlang)) - #:allow-other-keys - #:rest arguments) - "Return a bag for NAME from the given arguments." - (define private-keywords - '(#:target #:rebar #:erlang #:inputs #:native-inputs)) - - (and (not target) ;XXX: no cross-compilation - (bag - (name name) - (system system) - (host-inputs `(,@(if source - `(("source" ,source)) - '()) - ,@inputs)) - (build-inputs `(("rebar" ,rebar) - ("erlang" ,erlang) ;; for escriptize - ,@native-inputs - ;; Keep the standard inputs of 'gnu-build-system'. - ,@(standard-packages))) - (outputs outputs) - (build rebar-build) - (arguments (strip-keyword-arguments private-keywords arguments))))) - -(define* (rebar-build name inputs - #:key - guile source - (rebar-flags ''("skip_deps=true" "-vv")) - (tests? #t) - (test-target "eunit") - ;; TODO: install-name ; default: based on guix package name - (install-profile "default") - (phases '(@ (guix build rebar-build-system) - %standard-phases)) - (outputs '("out")) - (search-paths '()) - (native-search-paths '()) - (system (%current-system)) - (imported-modules %rebar-build-system-modules) - (modules '((guix build rebar-build-system) - (guix build utils)))) +(define imported-modules + `((guix build rebar-build-system) + ,@%gnu-build-system-modules)) + +(define (input->source input) + "Return a Source associated to the Input INPUT." + (match input + ((name package) + (list (pkg-name->library-directory-name name) + (package-source package))))) + +(define* (rebar-build name + inputs + #:key + guile + source + (rebar-flags ''()) + (tests? #t) + (test-target "eunit") + ;; TODO: install-name ; default: based on guix package name + (install-profile "default") + (phases '(@ (guix build rebar-build-system) + %standard-phases)) + (outputs '("out")) + (search-paths '()) + (native-search-paths '()) + (system (%current-system)) + (imported-modules imported-modules) + (modules '((guix build rebar-build-system) + (guix build utils))) + (sources-erlang '())) "Build SOURCE with INPUTS." (define builder @@ -122,35 +138,95 @@ (define* (rebar-build name inputs (use-modules #$@(sexp->gexp modules)) #$(with-build-variables inputs outputs + #~(rebar-build #:source #+source - #:system #$system - #:name #$name - #:rebar-flags #$rebar-flags - #:tests? #$tests? - #:test-target #$test-target - ;; TODO: #:install-name #$install-name - #:install-profile #$install-profile - #:phases #$(if (pair? phases) - (sexp->gexp phases) - phases) - #:outputs %outputs - #:search-paths '#$(sexp->gexp - (map search-path-specification->sexp - search-paths)) - #:inputs %build-inputs))))) - - (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) - system #:graft? #f))) + #:sources-erlang '#$sources-erlang + #:system #$system + #:name #$name + #:rebar-flags #$rebar-flags + #:tests? #$tests? + #:test-target #$test-target + ;; TODO: #:install-name #$install-name + #:install-profile #$install-profile + #:phases #$(if (pair? + phases) + (sexp->gexp + phases) + phases) + #:outputs %outputs + #:search-paths '#$(sexp->gexp + (map + search-path-specification->sexp + search-paths)) + #:inputs + %build-inputs))))) + + (mlet %store-monad + ((guile (package->derivation (or guile + (default-guile)) system + #:graft? #f))) + ;; Note: Always pass #:graft? #f. Without it, ALLOWED-REFERENCES & ;; co. would be interpreted as referring to grafted packages. - (gexp->derivation name builder + (gexp->derivation name + builder #:system system #:target #f #:graft? #f #:guile-for-build guile))) +(define* (lower name + #:key + (erlang (erlang-default)) + inputs + native-inputs + outputs + (rebar (rebar-default)) + source + system + target + #:allow-other-keys #:rest arguments) + "Return a bag for NAME from the given arguments." + + (let* ((erlang-packages + (filter (lambda (input) + (match input + ((name _) (pkg-name? name)))) + (append inputs native-inputs))) + + (erlang-sources (map input->source erlang-packages))) + + (define private-keywords + '(#:target #:rebar #:erlang #:inputs #:native-inputs #:sources-erlang)) + + (and (not target) ;XXX: no cross-compilation + (bag (name name) + (system system) + (host-inputs inputs) + (build-inputs `(,@(standard-packages) + ("erlang" ,erlang) + ("rebar" ,rebar) + ,@inputs + ,@native-inputs)) + (outputs outputs) + (build rebar-build) + (arguments (append (list #:sources-erlang erlang-sources) + (strip-keyword-arguments private-keywords + arguments))))))) + (define rebar-build-system - (build-system - (name 'rebar) - (description "The standard Rebar build system") - (lower lower))) + (build-system (name 'rebar) + (description "The standard Rebar build system") + (lower lower))) + + +;;; +;;; Exports +;;; + +(define hexpm-package-url hexpm-tarballs) + +(define %rebar-build-system-modules imported-modules) + + +;;; rebar.scm ends here diff --git a/guix/build/rebar-build-system.scm b/guix/build/rebar-build-system.scm index fb664228..b68348bd 100644 --- a/guix/build/rebar-build-system.scm +++ b/guix/build/rebar-build-system.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado <at> elephly.net> ;;; Copyright © 2019 Björn Höfling <bjoern.hoefling <at> bjoernhoefling.de> ;;; Copyright © 2020, 2022 Hartmut Goebel <h.goebel <at> crazy-compilers.com> +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -23,125 +24,197 @@ (define-module (guix build rebar-build-system) #:use-module ((guix build utils) #:hide (delete)) #:use-module (ice-9 match) #:use-module (ice-9 ftw) + #:use-module (ice-9 string-fun) + #:use-module (ice-9 receive) + #:use-module (ice-9 regex) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) - #:export (rebar-build - %standard-phases)) + #:export (rebar-build %standard-phases)) ;; ;; Builder-side code of the standard build procedure for Erlang packages using ;; rebar3. ;; -;; TODO: Think about whether bindir ("ebin"), libdir ("priv") and includedir -;; "(include") need to be configurable +;; Library directory +;; A « library directory » is a directory where Erlang searches for compiled +;; code. Its name should look like: `a_name-1.2.3' where the suffix `-1.2.3' +;; is optional. See: https://www.erlang.org/doc/man/code#code-path. +;; +;; Package name +;; A « package name » is the value of the name field of a package +;; definition. It looks like: `prefix-a-name-1.2.3'. See: +;; https://guix.gnu.org/manual/en/html_node/Package-Naming.html +;; +;; Profile +;; For Rebar3, a « profile » is a name associated to a set of configuration +;; settings overriding or complementing the regular configuration. See: +;; https://rebar3.org/docs/configuration/profiles +;; +;; Source +;; A « source » represents the source code associated to a Guix package as +;; defined by its `source' field. Here, the data sctructure used to +;; represent a source has the form `(list name path)' where `name' is a +;; library directory name and `path' is the store path where to find the +;; source code. +;; +;; Checkout +;; A « checkout » is a locally defined dependency related to a directory +;; managed by rebar. See: +;; https://rebar3.org/docs/configuration/dependencies/#checkout-dependencies -(define %erlang-libdir "/lib/erlang/lib") +(define sep "/") -(define* (erlang-depends #:key inputs #:allow-other-keys) - (define input-directories - (match inputs - (((_ . dir) ...) - dir))) - (mkdir-p "_checkouts") - - (for-each - (lambda (input-dir) - (let ((elibdir (string-append input-dir %erlang-libdir))) - (when (directory-exists? elibdir) - (for-each - (lambda (dirname) - (let ((dest (string-append elibdir "/" dirname)) - (link (string-append "_checkouts/" dirname))) - (when (not (file-exists? link)) - ;; RETHINK: Maybe better copy and make writable to avoid some - ;; error messages e.g. when using with rebar3-git-vsn. - (symlink dest link)))) - (list-directories elibdir))))) - input-directories)) +;; Where Erlang libraries are installed relative to a package path in the store. +(define lib-erlang-lib "lib/erlang/lib") + +(define (list-directories directory) + "Return file names of the sub-directory of DIRECTORY." + (scandir directory + (lambda (file) + (and (not (member file '("." ".."))) + (file-is-directory? (string-append directory sep file)))))) + +(define* (pkg-name->libdir-name name) + "Return the library name deduced from the Erlang package name NAME." + (let* ((suffix (regexp-substitute #f (string-match "^erlang-(.*)" name) 1)) + (elements (string-split suffix #\-))) + (string-append (string-join (drop-right elements 1) "_") "-" (last elements)))) + +(define (libdir-name->prefix name) + "Return the prefix of a library directory name NAME." + (car (string-split name #\-))) + +(define (rebar-build-dir profile) + "Return the path where rebar builds libraries given the profile PROFILE." + (format #f "_build/~a/lib" profile)) + +(define* (pkg-name->build-dir name #:key (profile "default")) + "Return the path of library directory where rebar3 builds code of an Erlang package named NAME given the profile PROFILE." + (string-append (rebar-build-dir profile) sep (libdir-name->prefix (pkg-name->libdir-name name)))) (define* (unpack #:key source #:allow-other-keys) - "Unpack SOURCE in the working directory, and change directory within the -source. When SOURCE is a directory, copy it in a sub-directory of the current -working directory." - (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) - (gnu-unpack #:source source) - ;; Packages from hex.pm typically have a contents.tar.gz containing the - ;; actual source. If this tar file exists, extract it. - (when (file-exists? "contents.tar.gz") - (invoke "tar" "xvf" "contents.tar.gz")))) - -(define* (build #:key (rebar-flags '()) #:allow-other-keys) + (if (file-is-directory? source) + ;; If source is a checkout: + (begin + ;; Preserve timestamps (set to the Epoch) on the copied tree so that + ;; things work deterministically. + (copy-recursively source "." #:keep-mtime? #t) + ;; Make the source checkout files writable, for convenience. + (for-each (lambda (f) + (false-if-exception (make-file-writable f))) + (find-files "."))) + + ;; If source is an hex.pm archive: + (begin + (invoke "tar" "xvf" source) + (invoke "tar" "xvf" "contents.tar.gz") + + ;; Prevent an error message during the install phase. + ;; `rebar3 compile' produces symlinks like so in _build/: + ;; priv -> ../../../../priv + ;; include -> ../../../../include + ;; + ;; The install phase copies whatever has been built to the output directory. + ;; If the priv/ directory is absent, then an error `i/o error: + ;; _build/…/priv: No such file or directory' occurs. So, we make sure that a + ;; directory exists. + (for-each (lambda (dir) (mkdir-p dir)) (list "priv" "include"))))) + +(define (configure-HOME . ignored_args) + "In some cases, it is needed for the environment variable HOME to be defined +as a directory with write permission. Examples of errors: + +Could not write to \"/homeless-shelter/.cache/rebar3/hex\". Please ensure the path is writeable. +" + (let ((HOME "HOME") + (tmp "/tmp")) + (setenv HOME tmp) + (format #t "~a=~a\n" HOME tmp))) + +(define* (configure-dependencies #:key + (install-profile "default") + inputs + name + sources-erlang ;List of Source. + version + #:allow-other-keys) + "Rebar3 refuses to compile without network access unless its dependencies are +present as source checkouts. To prevent unnecessary compilations, we must « +pre-install » dependencies in Rebar's build directory." + + ;; If source in sources-erlang, then install it under _checkouts/. + (let ((_checkouts "_checkouts")) + (mkdir-p _checkouts) + + (define (install-source source) + "Install the Source SOURCE in _checkouts." + (match source + ((name path) + (let ((src (string-append _checkouts sep name))) + (mkdir-p src) + (with-directory-excursion src (unpack #:source path)))) + (_ #f))) + + (for-each install-source sources-erlang)) + + ;; If input in inputs is an Erlang package, then install it under _build/. + (let ((_build (format #f "_build/~a/checkouts" install-profile))) + (mkdir-p _build) + + (define (install-libdir elib name dest) + "Install the library directory named NAME from ELIB to DEST." + (let ((src (string-append elib sep name)) + (dest (string-append dest sep (libdir-name->prefix name)))) + (copy-recursively src dest) + (mkdir-p (string-append dest "/priv")))) + + (define (install-all-libdirs dir dest) + "Install in DEST all library directories in DIR." + (let ((elib (string-append dir sep lib-erlang-lib))) + (when (directory-exists? elib) + (for-each (lambda (name) (install-libdir elib name dest)) + (list-directories elib))))) + + (match inputs + (((_ . dirs) ..1) + (for-each + (lambda (dir) (install-all-libdirs dir _build)) + dirs)) + (_ #f)))) + +(define* (build #:key name (rebar-flags '()) #:allow-other-keys) (apply invoke `("rebar3" "compile" ,@rebar-flags))) -(define* (check #:key target (rebar-flags '()) (tests? (not target)) +(define* (check #:key target + (rebar-flags '()) + (tests? (not target)) (test-target "eunit") #:allow-other-keys) (if tests? (apply invoke `("rebar3" ,test-target ,@rebar-flags)) (format #t "test suite not run~%"))) -(define (erlang-package? name) - "Check if NAME correspond to the name of an Erlang package." - (string-prefix? "erlang-" name)) - -(define (package-name-version->erlang-name name+ver) - "Convert the Guix package NAME-VER to the corresponding Erlang name-version -format. Essentially drop the prefix used in Guix and replace dashes by -underscores." - (let* ((name- (package-name->name+version name+ver))) - (string-join - (string-split - (if (erlang-package? name-) ; checks for "erlang-" prefix - (string-drop name- (string-length "erlang-")) - name-) - #\-) - "_"))) - -(define (list-directories directory) - "Return file names of the sub-directory of DIRECTORY." - (scandir directory - (lambda (file) - (and (not (member file '("." ".."))) - (file-is-directory? (string-append directory "/" file)))))) - -(define* (install #:key name outputs - (install-name (package-name-version->erlang-name name)) - (install-profile "default") ; build profile outputs to install - #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (pkg-dir (string-append out %erlang-libdir "/" install-name))) - (let ((bin-dir (string-append "_build/" install-profile "/bin")) - (lib-dir (string-append "_build/" install-profile "/lib"))) - ;; install _build/PROFILE/bin - (when (file-exists? bin-dir) - (copy-recursively bin-dir out #:follow-symlinks? #t)) - ;; install _build/PROFILE/lib/*/{ebin,include,priv} - (for-each - (lambda (*) - (for-each - (lambda (dirname) - (let ((src-dir (string-append lib-dir "/" * "/" dirname)) - (dst-dir (string-append pkg-dir "/" dirname))) - (when (file-exists? src-dir) - (copy-recursively src-dir dst-dir #:follow-symlinks? #t)) - (false-if-exception - (delete-file (string-append dst-dir "/.gitignore"))))) - '("ebin" "include" "priv"))) - (list-directories lib-dir)) - (false-if-exception - (delete-file (string-append pkg-dir "/priv/Run-eunit-loop.expect")))))) +(define* (install #:key name outputs (install-profile "default") #:allow-other-keys) + (let* ((src (pkg-name->build-dir name #:profile install-profile)) + (dest (string-append (assoc-ref outputs "out") + sep lib-erlang-lib sep + (pkg-name->libdir-name name)))) + (mkdir-p dest) + (copy-recursively src dest #:follow-symlinks? #t))) (define %standard-phases (modify-phases gnu:%standard-phases (replace 'unpack unpack) + (add-after 'unpack 'configure-HOME configure-HOME) (delete 'bootstrap) (delete 'configure) - (add-before 'build 'erlang-depends erlang-depends) + (add-before 'build 'configure-dependencies configure-dependencies) (replace 'build build) (replace 'check check) (replace 'install install))) -(define* (rebar-build #:key inputs (phases %standard-phases) - #:allow-other-keys #:rest args) +(define* (rebar-build #:key inputs (phases %standard-phases) #:allow-other-keys #:rest args) "Build the given Erlang package, applying all of PHASES in order." (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; rebar-build-system.scm ends here base-commit: 4dfbc536689b07e56aead3dd864b8af54613d091 -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:02 GMT) Full text and rfc822 format available.Message #14 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 02/32] gnu: erlang updated. Date: Sun, 29 Oct 2023 15:36:55 +0100
Wrapped Erlang programs (`erl`, `erlc`, `escript`) now prepend ERL_LIBS with GUIX_ERL_LIBS. Reference: https://www.erlang.org/doc/man/code#code-path. The `native-search-paths` field in the package specification sets GUIX_ERL_LIBS, which aggregates all compiled libraries for Erlang and Elixir, akin to the functionality of GUIX_PYTHONPATH. Change-Id: I53d0462eb366ebe66422e0b187f4db091a9fe5b5 --- gnu/packages/erlang.scm | 101 ++++++++++++++++++++++++---------------- 1 file changed, 60 insertions(+), 41 deletions(-) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index c53cb72c..dafc0e81 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -28,22 +28,23 @@ (define-module (gnu packages erlang) #:use-module ((guix licenses) #:prefix license:) - #:use-module (guix gexp) - #:use-module (guix build-system gnu) - #:use-module (guix build-system emacs) - #:use-module (guix build-system rebar) - #:use-module (guix download) - #:use-module (guix git-download) - #:use-module (guix packages) - #:use-module (guix utils) - #:use-module (gnu packages) + #:use-module (gnu packages elixir) #:use-module (gnu packages fontutils) #:use-module (gnu packages gl) #:use-module (gnu packages ncurses) #:use-module (gnu packages perl) - #:use-module (gnu packages version-control) #:use-module (gnu packages tls) - #:use-module (gnu packages wxwidgets)) + #:use-module (gnu packages version-control) + #:use-module (gnu packages wxwidgets) + #:use-module (gnu packages) + #:use-module (guix build-system emacs) + #:use-module (guix build-system gnu) + #:use-module (guix build-system rebar) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix git-download) + #:use-module (guix packages) + #:use-module (guix utils)) (define-public erlang (package @@ -173,7 +174,16 @@ (define-public erlang (substitute* (string-append out "/bin/erl") (("basename") (which "basename")) (("dirname") (which "dirname")))))) - (add-after 'install 'install-doc + (add-after 'patch-erl 'wrap-programs + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (programs '("erl" "erlc" "escript"))) + (for-each + (lambda (program) + (wrap-program (string-append out "/bin/" program) + '("ERL_LIBS" ":" prefix ("${GUIX_ERL_LIBS}")))) + programs)))) + (add-after 'wrap-programs 'install-doc (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (manpages (assoc-ref inputs "erlang-manpages")) @@ -181,6 +191,15 @@ (define-public erlang (mkdir-p share) (with-directory-excursion share (invoke "tar" "xvf" manpages)))))))) + (native-search-paths + (list (search-path-specification + (variable "GUIX_ERL_LIBS") + (files + (list + "lib/erlang/lib" + (string-append + "lib/elixir/" + (version-major+minor (package-version elixir)))))))) (home-page "https://www.erlang.org/") (synopsis "The Erlang programming language") (description @@ -219,12 +238,12 @@ (define-public erlang-bbmustache (source (origin (method url-fetch) - (uri (hexpm-uri "bbmustache" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "0fvvaxdpziygxl30j59g98qkh2n47xlb7w5dfpsm2bfcsnj372v8")))) (build-system rebar-build-system) (inputs - (list erlang-getopt rebar3-git-vsn + (list erlang-getopt erlang-rebar3-git-vsn erlang-edown)) ; for building the docs (arguments `(#:tests? #f ;; requires mustache specification file @@ -251,7 +270,7 @@ (define-public erlang-certifi (source (origin (method url-fetch) - (uri (hexpm-uri "certifi" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "0ha6vmf5p3xlbf5w1msa89frhvfk535rnyfybz9wdmh6vdms8v96")))) (build-system rebar-build-system) @@ -275,7 +294,7 @@ (define-public erlang-cf (source (origin (method url-fetch) - (uri (hexpm-uri "cf" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "0wknz4xkqkhgvlx4vx5619p8m65v7g87lfgsvfy04jrsgm28spii")))) (build-system rebar-build-system) @@ -314,7 +333,7 @@ (define-public erlang-covertool (source (origin (method url-fetch) - (uri (hexpm-uri "covertool" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "1p0c1n3nl4063xwi1sv176l1x68xqf07qwvj444a5z888fx6i5aw")))) (build-system rebar-build-system) @@ -335,7 +354,7 @@ (define-public erlang-cth-readable (source (origin (method url-fetch) - (uri (hexpm-uri "cth_readable" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "104xgybb6iciy6i28pyyrarqzliddi8kjyq43ajaav7y5si42rb8")))) (build-system rebar-build-system) @@ -356,7 +375,7 @@ (define-public erlang-edown (source (origin (method url-fetch) - (uri (hexpm-uri "edown" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "0ij47gvgs6yfqphj0f54qjzj18crj8y1dsjjlzpp3dp8pscqzbqw")))) (build-system rebar-build-system) @@ -373,7 +392,7 @@ (define-public erlang-erlware-commons (source (origin (method url-fetch) - (uri (hexpm-uri "erlware_commons" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "18qam9xdzi74wppb0cj4zc8161i0i8djr79z8662m6d276f2jz5m")))) (build-system rebar-build-system) @@ -400,7 +419,7 @@ (define-public erlang-eunit-formatters (source (origin (method url-fetch) - (uri (hexpm-uri "eunit_formatters" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "1jb3hzb216r29x2h4pcjwfmx1k81431rgh5v0mp4x5146hhvmj6n")))) (build-system rebar-build-system) @@ -416,7 +435,7 @@ (define-public erlang-getopt (source (origin (method url-fetch) - (uri (hexpm-uri "getopt" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "09pasi7ki1rivw9sl7xndj5qgjbdqvcscxk83yk85yr28gm9l0m0")))) (build-system rebar-build-system) @@ -433,7 +452,7 @@ (define-public erlang-hex-core (source (origin (method url-fetch) - (uri (hexpm-uri "hex_core" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "06p65hlm29ky03vs3fq3qz6px2ylwp8b0f2y75wdf5cm0kx2332b")))) (build-system rebar-build-system) @@ -445,7 +464,7 @@ (define-public erlang-hex-core (when tests? (invoke "rebar3" "as" "test" "proper"))))))) (inputs - (list erlang-proper rebar3-proper)) + (list erlang-proper erlang-rebar3-proper)) (home-page "https://github.com/hexpm/hex_core") (synopsis "Reference implementation of Hex specifications") (description "This package provides the reference implementation of Hex @@ -459,7 +478,7 @@ (define-public erlang-jsone (source (origin (method url-fetch) - (uri (hexpm-uri "jsone" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "1gaxiw76syjp3s9rygskm32y9799b917q752rw8bxj3bxq93g8x3")))) (build-system rebar-build-system) @@ -483,7 +502,7 @@ (define-public erlang-parse-trans (source (origin (method url-fetch) - (uri (hexpm-uri "parse_trans" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "16p4c2xjrvz16kzpr9pmcvi6nxq6rwckqi9fp0ksibaxwxn402k2")))) (build-system rebar-build-system) @@ -506,7 +525,7 @@ (define-public erlang-proper (source (origin (method url-fetch) - (uri (hexpm-uri "proper" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "1fwcas4a9kz3w3z1jqdk9lw8822srfjk9lcpvbxkxlsv3115ha0q")))) (build-system rebar-build-system) @@ -532,7 +551,7 @@ (define-public erlang-jsx (version "3.1.0") (source (origin (method url-fetch) - (uri (hexpm-uri "jsx" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "1wr7jkxm6nlgvd52xhniav64xr9rml2ngb35rwjwqlqvq7ywhp0c")))) @@ -550,7 +569,7 @@ (define-public erlang-providers (source (origin (method url-fetch) - (uri (hexpm-uri "providers" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "05y0kz3xgx77hzn1l05byaisvmk8bgds7c22hrh0a5ba81sfi1yj")))) (build-system rebar-build-system) @@ -568,7 +587,7 @@ (define-public erlang-relx (source (origin (method url-fetch) - (uri (hexpm-uri "relx" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "02gmfx1vxg9m3mq4njsqhs4972l4nb8m5p1pdcf64g09ccf17y1g")))) (build-system rebar-build-system) @@ -590,7 +609,7 @@ (define-public erlang-ssl-verify-fun (source (origin (method url-fetch) - (uri (hexpm-uri "ssl_verify_fun" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "1026l1z1jh25z8bfrhaw0ryk5gprhrpnirq877zqhg253x3x5c5x")))) (build-system rebar-build-system) @@ -676,14 +695,14 @@ (define-public rebar3 of locations (git, hg, etc).") (license license:asl2.0))) -(define-public rebar3-raw-deps +(define-public erlang-rebar3-raw-deps (package - (name "rebar3-raw-deps") + (name "erlang-rebar3-raw-deps") (version "2.0.0") (source (origin (method url-fetch) - (uri (hexpm-uri "rebar3_raw_deps" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "1pzmm3m8gb2s9jn8fp6shzgfmy4mvh2vdci0z6nsm74ma3ffh1i3")))) (build-system rebar-build-system) @@ -693,14 +712,14 @@ (define-public rebar3-raw-deps applications as a dependent libraries.") (license license:expat))) -(define-public rebar3-git-vsn +(define-public erlang-rebar3-git-vsn (package - (name "rebar3-git-vsn") + (name "erlang-rebar3-git-vsn") (version "1.1.1") (source (origin (method url-fetch) - (uri (hexpm-uri "rebar3_git_vsn" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "1dfz56034pa25axly9vqdzv3phkn8ll0qwrkws96pbgcprhky1hx")))) (build-system rebar-build-system) @@ -724,14 +743,14 @@ (define-public rebar3-git-vsn a git checkout.") (license license:expat))) -(define-public rebar3-proper +(define-public erlang-rebar3-proper (package - (name "rebar3-proper") + (name "erlang-rebar3-proper") (version "0.12.1") (source (origin (method url-fetch) - (uri (hexpm-uri "rebar3_proper" version)) + (uri (hexpm-uri name version)) (sha256 (base32 "1f174fb6h2071wr7qbw9aqqvnglzsjlylmyi8215fhrmi38w94b6")))) (build-system rebar-build-system) @@ -803,7 +822,7 @@ (define-public erlang-lfe (setenv "REBAR_CACHE_DIR" "/tmp") (invoke "make" "-j" (number->string (parallel-job-count)) "tests")))))))) - (native-inputs (list rebar3 rebar3-proper erlang-proper)) + (native-inputs (list rebar3 erlang-rebar3-proper erlang-proper)) (propagated-inputs (list erlang)) (home-page "https://github.com/lfe/lfe") (synopsis "Lisp Flavoured Erlang") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:02 GMT) Full text and rfc822 format available.Message #17 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 03/32] gnu: erlang-certifi: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:36:56 +0100
Change-Id: I7491af542af5ffb2d82b5555675f4f7dbef167af --- gnu/packages/erlang-xyz.scm | 62 +++++++++++++++++++++++++++++++++++++ gnu/packages/erlang.scm | 25 +-------------- 2 files changed, 63 insertions(+), 24 deletions(-) create mode 100644 gnu/packages/erlang-xyz.scm diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm new file mode 100644 index 00000000..444fa648 --- /dev/null +++ b/gnu/packages/erlang-xyz.scm @@ -0,0 +1,62 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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-xyz) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages base) + #:use-module (gnu packages version-control) + #:use-module (gnu packages) + #:use-module (guix build-system rebar) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix git-download) + #:use-module (guix git-download) + #:use-module (guix hg-download) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26)) + +(define-public erlang-certifi + (package + (name "erlang-certifi") + (version "2.9.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0ha6vmf5p3xlbf5w1msa89frhvfk535rnyfybz9wdmh6vdms8v96")))) + (build-system rebar-build-system) + (arguments `(#:tests? #f)) ;; have not been updated for latest cert bundle + (home-page "https://github.com/certifi/erlang-certifi/") + (synopsis "Erlang CA certificate bundle") + (description "This Erlang library contains a CA bundle that you can +reference in your Erlang application. This is useful for systems that do not +have CA bundles that Erlang can find itself, or where a uniform set of CAs is +valuable. + +This an Erlang specific port of certifi. The CA bundle is derived from +Mozilla's canonical set.") + (license license:bsd-3))) + +;;; +;;; Avoid adding new packages to the end of this file. To reduce the chances +;;; of a merge conflict, place them above by existing packages with similar +;;; functionality or similar names. +;;; diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index dafc0e81..c729ab8a 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -29,6 +29,7 @@ (define-module (gnu packages erlang) #:use-module ((guix licenses) #:prefix license:) #:use-module (gnu packages elixir) + #:use-module (gnu packages erlang-xyz) #:use-module (gnu packages fontutils) #:use-module (gnu packages gl) #:use-module (gnu packages ncurses) @@ -263,30 +264,6 @@ (define-public erlang-bbmustache Mustache template engine") (license license:expat))) -(define-public erlang-certifi - (package - (name "erlang-certifi") - (version "2.9.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "0ha6vmf5p3xlbf5w1msa89frhvfk535rnyfybz9wdmh6vdms8v96")))) - (build-system rebar-build-system) - (arguments - `(#:tests? #f)) ;; have not been updated for latest cert bundle - (home-page "https://github.com/certifi/erlang-certifi/") - (synopsis "Erlang CA certificate bundle") - (description "This Erlang library contains a CA bundle that you can -reference in your Erlang application. This is useful for systems that do not -have CA bundles that Erlang can find itself, or where a uniform set of CAs is -valuable. - -This an Erlang specific port of certifi. The CA bundle is derived from -Mozilla's canonical set.") - (license license:bsd-3))) - (define-public erlang-cf (package (name "erlang-cf") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:02 GMT) Full text and rfc822 format available.Message #20 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 04/32] gnu: erlang-getopt: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:36:57 +0100
Change-Id: Ic7740512545c8798a4a7927b7aeee6e33f6990a2 --- gnu/packages/erlang-xyz.scm | 17 +++++++++++++++++ gnu/packages/erlang.scm | 17 ----------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 444fa648..6ca0b4ae 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -55,6 +55,23 @@ (define-public erlang-certifi Mozilla's canonical set.") (license license:bsd-3))) +(define-public erlang-getopt + (package + (name "erlang-getopt") + (version "1.0.2") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "09pasi7ki1rivw9sl7xndj5qgjbdqvcscxk83yk85yr28gm9l0m0")))) + (build-system rebar-build-system) + (home-page "https://github.com/jcomellas/getopt") + (synopsis "Command-line options parser for Erlang") + (description "This package provides an Erlang module to parse command line +arguments using the GNU getopt syntax.") + (license license:bsd-3))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index c729ab8a..6c3b845b 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -405,23 +405,6 @@ (define-public erlang-eunit-formatters (description "This package provides a better output for Erlang eunits.") (license license:asl2.0))) -(define-public erlang-getopt - (package - (name "erlang-getopt") - (version "1.0.2") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "09pasi7ki1rivw9sl7xndj5qgjbdqvcscxk83yk85yr28gm9l0m0")))) - (build-system rebar-build-system) - (home-page "https://github.com/jcomellas/getopt") - (synopsis "Command-line options parser for Erlang") - (description "This package provides an Erlang module to parse command line -arguments using the GNU getopt syntax.") - (license license:bsd-3))) - (define-public erlang-hex-core (package (name "erlang-hex-core") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:03 GMT) Full text and rfc822 format available.Message #23 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 05/32] gnu: erlang-edown: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:36:58 +0100
Change-Id: Iceff5a74baf1de97f478b168f122e7ec715b24d7 --- gnu/packages/erlang-xyz.scm | 17 +++++++++++++++++ gnu/packages/erlang.scm | 17 ----------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 6ca0b4ae..5815d19f 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -72,6 +72,23 @@ (define-public erlang-getopt arguments using the GNU getopt syntax.") (license license:bsd-3))) +(define-public erlang-edown + (package + (name "erlang-edown") + (version "0.8.4") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0ij47gvgs6yfqphj0f54qjzj18crj8y1dsjjlzpp3dp8pscqzbqw")))) + (build-system rebar-build-system) + (home-page "https://github.com/uwiger/edown") + (synopsis "Markdown extension for EDoc") + (description "This package provides an extension for EDoc for generating +Markdown.") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 6c3b845b..5148abf0 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -345,23 +345,6 @@ (define-public erlang-cth-readable outputs you want to be readable around all that noise they contain.") (license license:bsd-3))) -(define-public erlang-edown - (package - (name "erlang-edown") - (version "0.8.4") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "0ij47gvgs6yfqphj0f54qjzj18crj8y1dsjjlzpp3dp8pscqzbqw")))) - (build-system rebar-build-system) - (home-page "https://github.com/uwiger/edown") - (synopsis "Markdown extension for EDoc") - (description "This package provides an extension for EDoc for generating -Markdown.") - (license license:asl2.0))) - (define-public erlang-erlware-commons (package (name "erlang-erlware-commons") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:03 GMT) Full text and rfc822 format available.Message #26 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 06/32] gnu: erlang-rebar3-git-vsn: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:36:59 +0100
Change-Id: I5a743e71b2034ba1cfe71fe6121137b3194befed --- gnu/packages/erlang-xyz.scm | 32 +++++++++++++++++++++++++++++++- gnu/packages/erlang.scm | 31 ------------------------------- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 5815d19f..bfc4802a 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -25,7 +25,6 @@ (define-module (gnu packages erlang-xyz) #:use-module (guix download) #:use-module (guix gexp) #:use-module (guix git-download) - #:use-module (guix git-download) #:use-module (guix hg-download) #:use-module (guix packages) #:use-module (guix utils) @@ -89,6 +88,37 @@ (define-public erlang-edown Markdown.") (license license:asl2.0))) +(define-public erlang-rebar3-git-vsn + (package + (name "erlang-rebar3-git-vsn") + (version "1.1.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1dfz56034pa25axly9vqdzv3phkn8ll0qwrkws96pbgcprhky1hx")))) + (build-system rebar-build-system) + (inputs + (list git-minimal/pinned)) + (arguments + `(;; Running the tests require binary artifact (tar-file containing + ;; samples git repos) TODO: remove these from the source + #:tests? #f + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-path + (lambda* (#:key inputs #:allow-other-keys) + (let ((git (assoc-ref inputs "git-minimal"))) + (substitute* "src/rebar3_git_vsn.erl" + (("rebar_utils:sh\\(\"git " _) + (string-append "rebar_utils:sh(\"" git "/bin/git "))))))))) + (home-page "https://github.com/soranoba/rebar3_git_vsn") + (synopsis "Rebar3 plugin for generating the version from git") + (description "This plugin adds support for generating the version from +a git checkout.") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 5148abf0..6320e3d0 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -655,37 +655,6 @@ (define-public erlang-rebar3-raw-deps applications as a dependent libraries.") (license license:expat))) -(define-public erlang-rebar3-git-vsn - (package - (name "erlang-rebar3-git-vsn") - (version "1.1.1") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "1dfz56034pa25axly9vqdzv3phkn8ll0qwrkws96pbgcprhky1hx")))) - (build-system rebar-build-system) - (inputs - (list git-minimal/pinned)) - (arguments - `(;; Running the tests require binary artifact (tar-file containing - ;; samples git repos) TODO: remove these from the source - #:tests? #f - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'patch-path - (lambda* (#:key inputs #:allow-other-keys) - (let ((git (assoc-ref inputs "git-minimal"))) - (substitute* "src/rebar3_git_vsn.erl" - (("rebar_utils:sh\\(\"git " _) - (string-append "rebar_utils:sh(\"" git "/bin/git "))))))))) - (home-page "https://github.com/soranoba/rebar3_git_vsn") - (synopsis "Rebar3 plugin for generating the version from git") - (description "This plugin adds support for generating the version from -a git checkout.") - (license license:expat))) - (define-public erlang-rebar3-proper (package (name "erlang-rebar3-proper") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:04 GMT) Full text and rfc822 format available.Message #29 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 07/32] gnu: erlang-rebar3-raw-deps: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:00 +0100
Change-Id: I42b34a1bba7e2eb3cce4c385f0c3d27c5bba146e --- gnu/packages/erlang-xyz.scm | 17 +++++++++++++++++ gnu/packages/erlang.scm | 17 ----------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index bfc4802a..61d7416a 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -119,6 +119,23 @@ (define-public erlang-rebar3-git-vsn a git checkout.") (license license:expat))) +(define-public erlang-rebar3-raw-deps + (package + (name "erlang-rebar3-raw-deps") + (version "2.0.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1pzmm3m8gb2s9jn8fp6shzgfmy4mvh2vdci0z6nsm74ma3ffh1i3")))) + (build-system rebar-build-system) + (home-page "https://github.com/soranoba/rebar3_raw_deps") + (synopsis "Rebar3 plugin for supporting \"raw\" dependencies") + (description "This plugin provides support for handling non-OTP +applications as a dependent libraries.") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 6320e3d0..147b0451 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -638,23 +638,6 @@ (define-public rebar3 of locations (git, hg, etc).") (license license:asl2.0))) -(define-public erlang-rebar3-raw-deps - (package - (name "erlang-rebar3-raw-deps") - (version "2.0.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "1pzmm3m8gb2s9jn8fp6shzgfmy4mvh2vdci0z6nsm74ma3ffh1i3")))) - (build-system rebar-build-system) - (home-page "https://github.com/soranoba/rebar3_raw_deps") - (synopsis "Rebar3 plugin for supporting \"raw\" dependencies") - (description "This plugin provides support for handling non-OTP -applications as a dependent libraries.") - (license license:expat))) - (define-public erlang-rebar3-proper (package (name "erlang-rebar3-proper") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:04 GMT) Full text and rfc822 format available.Message #32 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 08/32] gnu: erlang-rebar3-proper: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:01 +0100
Change-Id: Ibd9df5c77fae83c3e90c4e2dc77b3cfb5e6a482b --- gnu/packages/erlang-xyz.scm | 17 +++++++++++++++++ gnu/packages/erlang.scm | 17 ----------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 61d7416a..426a5f95 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -136,6 +136,23 @@ (define-public erlang-rebar3-raw-deps applications as a dependent libraries.") (license license:expat))) +(define-public erlang-rebar3-proper + (package + (name "erlang-rebar3-proper") + (version "0.12.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1f174fb6h2071wr7qbw9aqqvnglzsjlylmyi8215fhrmi38w94b6")))) + (build-system rebar-build-system) + (home-page "https://github.com/ferd/rebar3_proper") + (synopsis "Rebar3 PropEr plugin") + (description "This plugin allows running PropEr test suites from within +rebar3.") + (license license:bsd-3))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 147b0451..8269cba1 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -638,23 +638,6 @@ (define-public rebar3 of locations (git, hg, etc).") (license license:asl2.0))) -(define-public erlang-rebar3-proper - (package - (name "erlang-rebar3-proper") - (version "0.12.1") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "1f174fb6h2071wr7qbw9aqqvnglzsjlylmyi8215fhrmi38w94b6")))) - (build-system rebar-build-system) - (home-page "https://github.com/ferd/rebar3_proper") - (synopsis "Rebar3 PropEr plugin") - (description "This plugin allows running PropEr test suites from within -rebar3.") - (license license:bsd-3))) - (define-public erlang-lfe (package (name "erlang-lfe") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:05 GMT) Full text and rfc822 format available.Message #35 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 09/32] gnu: erlang-bbmustache: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:02 +0100
Change-Id: Ied29a387cbaef59f16613d7425417da4fc8eed0c --- gnu/packages/erlang-xyz.scm | 32 ++++++++++++++++++++++++++++++++ gnu/packages/erlang.scm | 32 -------------------------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 426a5f95..5a966d2a 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -153,6 +153,38 @@ (define-public erlang-rebar3-proper rebar3.") (license license:bsd-3))) +(define-public erlang-bbmustache + (package + (name "erlang-bbmustache") + (version "1.12.2") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0fvvaxdpziygxl30j59g98qkh2n47xlb7w5dfpsm2bfcsnj372v8")))) + (build-system rebar-build-system) + (inputs + (list erlang-getopt erlang-rebar3-git-vsn + erlang-edown)) ; for building the docs + (arguments + `(#:tests? #f ;; requires mustache specification file + #:phases + (modify-phases %standard-phases + (add-before 'build 'build-more + (lambda _ + (invoke "rebar3" "as" "dev" "escriptize"))) + (add-after 'install 'install-escript + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out"))) + (install-file "_build/dev/bin/bbmustache" + (string-append out "/bin")))))))) + (home-page "https://github.com/soranoba/bbmustache/") + (synopsis "Binary pattern match Based Mustache template engine for Erlang") + (description "This Erlang library provides a Binary pattern match Based +Mustache template engine") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 8269cba1..c0cbf5a6 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -232,38 +232,6 @@ (define-public emacs-erlang files.") (license license:asl2.0))) -(define-public erlang-bbmustache - (package - (name "erlang-bbmustache") - (version "1.12.2") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "0fvvaxdpziygxl30j59g98qkh2n47xlb7w5dfpsm2bfcsnj372v8")))) - (build-system rebar-build-system) - (inputs - (list erlang-getopt erlang-rebar3-git-vsn - erlang-edown)) ; for building the docs - (arguments - `(#:tests? #f ;; requires mustache specification file - #:phases - (modify-phases %standard-phases - (add-before 'build 'build-more - (lambda _ - (invoke "rebar3" "as" "dev" "escriptize"))) - (add-after 'install 'install-escript - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out"))) - (install-file "_build/dev/bin/bbmustache" - (string-append out "/bin")))))))) - (home-page "https://github.com/soranoba/bbmustache/") - (synopsis "Binary pattern match Based Mustache template engine for Erlang") - (description "This Erlang library provides a Binary pattern match Based -Mustache template engine") - (license license:expat))) - (define-public erlang-cf (package (name "erlang-cf") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:05 GMT) Full text and rfc822 format available.Message #38 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 10/32] gnu: erlang-cf: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:03 +0100
Change-Id: Idcb18977a9409268ae7258d8398772021a651c63 --- gnu/packages/erlang-xyz.scm | 17 +++++++++++++++++ gnu/packages/erlang.scm | 17 ----------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 5a966d2a..1eb7437e 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -185,6 +185,23 @@ (define-public erlang-bbmustache Mustache template engine") (license license:expat))) +(define-public erlang-cf + (package + (name "erlang-cf") + (version "0.3.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0wknz4xkqkhgvlx4vx5619p8m65v7g87lfgsvfy04jrsgm28spii")))) + (build-system rebar-build-system) + (home-page "https://github.com/project-fifo/cf") + (synopsis "Terminal colour helper for Erlang io and io_lib") + (description "This package provides a helper library for termial colour +printing extending the io:format syntax to add colours.") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index c0cbf5a6..eeb1231e 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -232,23 +232,6 @@ (define-public emacs-erlang files.") (license license:asl2.0))) -(define-public erlang-cf - (package - (name "erlang-cf") - (version "0.3.1") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "0wknz4xkqkhgvlx4vx5619p8m65v7g87lfgsvfy04jrsgm28spii")))) - (build-system rebar-build-system) - (home-page "https://github.com/project-fifo/cf") - (synopsis "Terminal colour helper for Erlang io and io_lib") - (description "This package provides a helper library for termial colour -printing extending the io:format syntax to add colours.") - (license license:expat))) - (define-public erlang-yamerl (package (name "erlang-yamerl") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:06 GMT) Full text and rfc822 format available.Message #41 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 11/32] gnu: erlang-yamerl: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:04 +0100
Change-Id: I1a9712519e8d243f506e60acf19d1607a705269d --- gnu/packages/erlang-xyz.scm | 22 ++++++++++++++++++++++ gnu/packages/erlang.scm | 22 ---------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 1eb7437e..78f829e9 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -202,6 +202,28 @@ (define-public erlang-cf printing extending the io:format syntax to add colours.") (license license:expat))) +(define-public erlang-yamerl + (package + (name "erlang-yamerl") + (version "0.10.0") + (source + (origin + (method git-fetch) + (uri (git-reference + ;; There are no tests included on Hex. + (url "https://github.com/yakaz/yamerl") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0if8abgmispcfk7zhd0a5dndzwzbsmqrbyrm5shk375r2dbbwak6")))) + (build-system rebar-build-system) + (synopsis "YAML and JSON parser in pure Erlang") + (description + "Erlang application to parse YAML 1.1 and YAML 1.2 documents, as well as +JSON documents.") + (home-page "https://hexdocs.pm/yamerl/") + (license license:bsd-2))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index eeb1231e..5ed11c28 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -232,28 +232,6 @@ (define-public emacs-erlang files.") (license license:asl2.0))) -(define-public erlang-yamerl - (package - (name "erlang-yamerl") - (version "0.10.0") - (source - (origin - (method git-fetch) - (uri (git-reference - ;; There are no tests included on Hex. - (url "https://github.com/yakaz/yamerl") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "0if8abgmispcfk7zhd0a5dndzwzbsmqrbyrm5shk375r2dbbwak6")))) - (build-system rebar-build-system) - (synopsis "YAML and JSON parser in pure Erlang") - (description - "Erlang application to parse YAML 1.1 and YAML 1.2 documents, as well as -JSON documents.") - (home-page "https://hexdocs.pm/yamerl/") - (license license:bsd-2))) - (define-public erlang-covertool (package (name "erlang-covertool") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:06 GMT) Full text and rfc822 format available.Message #44 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 12/32] gnu: erlang-covertool: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:05 +0100
Change-Id: I1212ff469a12e926d4728106c15f12b181819e2c --- gnu/packages/erlang-xyz.scm | 21 +++++++++++++++++++++ gnu/packages/erlang.scm | 21 --------------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 78f829e9..ae2193f5 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -224,6 +224,27 @@ (define-public erlang-yamerl (home-page "https://hexdocs.pm/yamerl/") (license license:bsd-2))) +(define-public erlang-covertool + (package + (name "erlang-covertool") + (version "2.0.4") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1p0c1n3nl4063xwi1sv176l1x68xqf07qwvj444a5z888fx6i5aw")))) + (build-system rebar-build-system) + (home-page "https://github.com/covertool/covertool") + (synopsis "Convert code-coverage data generated by @code{cover} into +Cobertura XML reports") + (description "This package provides a build tool and plugin to convert +exported Erlang @code{cover} data sets into Cobertura XML reports, which can +then be feed to the Jenkins Cobertura plug-in. + +On @emph{hex.pm}, this plugin was previously called @code{rebar_covertool}.") + (license license:bsd-2))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 5ed11c28..55a6edb7 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -232,27 +232,6 @@ (define-public emacs-erlang files.") (license license:asl2.0))) -(define-public erlang-covertool - (package - (name "erlang-covertool") - (version "2.0.4") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "1p0c1n3nl4063xwi1sv176l1x68xqf07qwvj444a5z888fx6i5aw")))) - (build-system rebar-build-system) - (home-page "https://github.com/covertool/covertool") - (synopsis "Convert code-coverage data generated by @code{cover} into -Cobertura XML reports") - (description "This package provides a build tool and plugin to convert -exported Erlang @code{cover} data sets into Cobertura XML reports, which can -then be feed to the Jenkins Cobertura plug-in. - -On @emph{hex.pm}, this plugin was previously called @code{rebar_covertool}.") - (license license:bsd-2))) - (define-public erlang-cth-readable (package (name "erlang-cth-readable") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:06 GMT) Full text and rfc822 format available.Message #47 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 13/32] gnu: erlang-cth-readable: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:06 +0100
Change-Id: I9ce2a8a7250f3176ff149d4fd1c3a9746c95edca --- gnu/packages/erlang-xyz.scm | 21 +++++++++++++++++++++ gnu/packages/erlang.scm | 21 --------------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index ae2193f5..86e50656 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -245,6 +245,27 @@ (define-public erlang-covertool On @emph{hex.pm}, this plugin was previously called @code{rebar_covertool}.") (license license:bsd-2))) +(define-public erlang-cth-readable + (package + (name "erlang-cth-readable") + (version "1.5.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "104xgybb6iciy6i28pyyrarqzliddi8kjyq43ajaav7y5si42rb8")))) + (build-system rebar-build-system) + (propagated-inputs + (list erlang-cf)) + (arguments + `(#:tests? #f)) ;; no test-suite in hex-pm package + (home-page "https://github.com/ferd/cth_readable") + (synopsis "Common Test hooks for more readable logs for Erlang") + (description "This package provides an OTP library to be used for CT log +outputs you want to be readable around all that noise they contain.") + (license license:bsd-3))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 55a6edb7..4cc530b7 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -232,27 +232,6 @@ (define-public emacs-erlang files.") (license license:asl2.0))) -(define-public erlang-cth-readable - (package - (name "erlang-cth-readable") - (version "1.5.1") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "104xgybb6iciy6i28pyyrarqzliddi8kjyq43ajaav7y5si42rb8")))) - (build-system rebar-build-system) - (propagated-inputs - (list erlang-cf)) - (arguments - `(#:tests? #f)) ;; no test-suite in hex-pm package - (home-page "https://github.com/ferd/cth_readable") - (synopsis "Common Test hooks for more readable logs for Erlang") - (description "This package provides an OTP library to be used for CT log -outputs you want to be readable around all that noise they contain.") - (license license:bsd-3))) - (define-public erlang-erlware-commons (package (name "erlang-erlware-commons") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:07 GMT) Full text and rfc822 format available.Message #50 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 14/32] gnu: erlang-erlware-commons: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:07 +0100
Change-Id: Ic2cfcfbd9d3623464200d26412c9af79b861a970 --- gnu/packages/erlang-xyz.scm | 27 +++++++++++++++++++++++++++ gnu/packages/erlang.scm | 27 --------------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 86e50656..66a2cd94 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -266,6 +266,33 @@ (define-public erlang-cth-readable outputs you want to be readable around all that noise they contain.") (license license:bsd-3))) +(define-public erlang-erlware-commons + (package + (name "erlang-erlware-commons") + (version "1.6.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "18qam9xdzi74wppb0cj4zc8161i0i8djr79z8662m6d276f2jz5m")))) + (build-system rebar-build-system) + (propagated-inputs + (list erlang-cf)) + (native-inputs + (list git-minimal/pinned)) ;; Required for tests + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'check 'check-setup + (lambda _ + (setenv "TERM" "xterm")))))) ; enable color in logs + (home-page "https://erlware.github.io/erlware_commons/") + (synopsis "Additional standard library for Erlang") + (description "Erlware Commons is an Erlware project focused on all aspects +of reusable Erlang components.") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 4cc530b7..941674c4 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -232,33 +232,6 @@ (define-public emacs-erlang files.") (license license:asl2.0))) -(define-public erlang-erlware-commons - (package - (name "erlang-erlware-commons") - (version "1.6.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "18qam9xdzi74wppb0cj4zc8161i0i8djr79z8662m6d276f2jz5m")))) - (build-system rebar-build-system) - (propagated-inputs - (list erlang-cf)) - (native-inputs - (list git-minimal/pinned)) ;; Required for tests - (arguments - `(#:phases - (modify-phases %standard-phases - (add-before 'check 'check-setup - (lambda _ - (setenv "TERM" "xterm")))))) ; enable color in logs - (home-page "https://erlware.github.io/erlware_commons/") - (synopsis "Additional standard library for Erlang") - (description "Erlware Commons is an Erlware project focused on all aspects -of reusable Erlang components.") - (license license:expat))) - (define-public erlang-eunit-formatters (package (name "erlang-eunit-formatters") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:07 GMT) Full text and rfc822 format available.Message #53 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 15/32] gnu: erlang-eunit-formatters: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:08 +0100
Change-Id: I10bc54bbf240bc9db3f764408b2a80966cc1221a --- gnu/packages/erlang-xyz.scm | 16 ++++++++++++++++ gnu/packages/erlang.scm | 16 ---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 66a2cd94..47434a96 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -293,6 +293,22 @@ (define-public erlang-erlware-commons of reusable Erlang components.") (license license:expat))) +(define-public erlang-eunit-formatters + (package + (name "erlang-eunit-formatters") + (version "0.5.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1jb3hzb216r29x2h4pcjwfmx1k81431rgh5v0mp4x5146hhvmj6n")))) + (build-system rebar-build-system) + (home-page "https://github.com/seancribbs/eunit_formatters") + (synopsis "Better output for eunit suites") + (description "This package provides a better output for Erlang eunits.") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 941674c4..ffca507e 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -232,22 +232,6 @@ (define-public emacs-erlang files.") (license license:asl2.0))) -(define-public erlang-eunit-formatters - (package - (name "erlang-eunit-formatters") - (version "0.5.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "1jb3hzb216r29x2h4pcjwfmx1k81431rgh5v0mp4x5146hhvmj6n")))) - (build-system rebar-build-system) - (home-page "https://github.com/seancribbs/eunit_formatters") - (synopsis "Better output for eunit suites") - (description "This package provides a better output for Erlang eunits.") - (license license:asl2.0))) - (define-public erlang-hex-core (package (name "erlang-hex-core") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:08 GMT) Full text and rfc822 format available.Message #56 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 16/32] gnu: erlang-proper: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:09 +0100
Change-Id: I8a8e3d16a9b02e53615cf95b336895dc89367ce2 --- gnu/packages/erlang-xyz.scm | 27 +++++++++++++++++++++++++++ gnu/packages/erlang.scm | 27 --------------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 47434a96..b83bc6c0 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -293,6 +293,33 @@ (define-public erlang-erlware-commons of reusable Erlang components.") (license license:expat))) +(define-public erlang-proper + (package + (name "erlang-proper") + (version "1.4.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1fwcas4a9kz3w3z1jqdk9lw8822srfjk9lcpvbxkxlsv3115ha0q")))) + (build-system rebar-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'disable-covertool + ;; no need to generate a coverage report + (lambda _ + (substitute* "rebar.config" + (("\\{plugins, \\[covertool\\]\\}\\." _) ""))))))) + (home-page "https://proper-testing.github.io/") + (synopsis "QuickCheck-inspired property-based testing tool for Erlang") + (description "PropEr is a tool for the automated, semi-random, +property-based testing of Erlang programs. It is fully integrated with +Erlang's type language, and can also be used for the model-based random +testing of stateful systems.") + (license license:gpl3+))) + (define-public erlang-eunit-formatters (package (name "erlang-eunit-formatters") diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index ffca507e..8d3b682c 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -305,33 +305,6 @@ (define-public erlang-parse-trans compile-time constant.") (license license:asl2.0))) -(define-public erlang-proper - (package - (name "erlang-proper") - (version "1.4.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "1fwcas4a9kz3w3z1jqdk9lw8822srfjk9lcpvbxkxlsv3115ha0q")))) - (build-system rebar-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'unpack 'disable-covertool - ;; no need to generate a coverage report - (lambda _ - (substitute* "rebar.config" - (("\\{plugins, \\[covertool\\]\\}\\." _) ""))))))) - (home-page "https://proper-testing.github.io/") - (synopsis "QuickCheck-inspired property-based testing tool for Erlang") - (description "PropEr is a tool for the automated, semi-random, -property-based testing of Erlang programs. It is fully integrated with -Erlang's type language, and can also be used for the model-based random -testing of stateful systems.") - (license license:gpl3+))) - (define-public erlang-jsx (package (name "erlang-jsx") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:08 GMT) Full text and rfc822 format available.Message #59 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 17/32] gnu: erlang-hex-core: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:10 +0100
Change-Id: Id69281bb2ec1847723582a461b0fa87df1c3ace7 --- gnu/packages/erlang-xyz.scm | 26 ++++++++++++++++++++++++++ gnu/packages/erlang.scm | 26 -------------------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index b83bc6c0..2ce2e3f0 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -336,6 +336,32 @@ (define-public erlang-eunit-formatters (description "This package provides a better output for Erlang eunits.") (license license:asl2.0))) +(define-public erlang-hex-core + (package + (name "erlang-hex-core") + (version "0.8.4") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "06p65hlm29ky03vs3fq3qz6px2ylwp8b0f2y75wdf5cm0kx2332b")))) + (build-system rebar-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "rebar3" "as" "test" "proper"))))))) + (inputs + (list erlang-proper erlang-rebar3-proper)) + (home-page "https://github.com/hexpm/hex_core") + (synopsis "Reference implementation of Hex specifications") + (description "This package provides the reference implementation of Hex +specifications.") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 8d3b682c..c509282d 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -232,32 +232,6 @@ (define-public emacs-erlang files.") (license license:asl2.0))) -(define-public erlang-hex-core - (package - (name "erlang-hex-core") - (version "0.8.4") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "06p65hlm29ky03vs3fq3qz6px2ylwp8b0f2y75wdf5cm0kx2332b")))) - (build-system rebar-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (replace 'check - (lambda* (#:key tests? #:allow-other-keys) - (when tests? - (invoke "rebar3" "as" "test" "proper"))))))) - (inputs - (list erlang-proper erlang-rebar3-proper)) - (home-page "https://github.com/hexpm/hex_core") - (synopsis "Reference implementation of Hex specifications") - (description "This package provides the reference implementation of Hex -specifications.") - (license license:asl2.0))) - (define-public erlang-jsone (package (name "erlang-jsone") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:09 GMT) Full text and rfc822 format available.Message #62 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 18/32] gnu: erlang-jsx: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:11 +0100
Change-Id: I5d71483d9e00b81f61d3339bbe1195865c05171f --- gnu/packages/erlang-xyz.scm | 17 +++++++++++++++++ gnu/packages/erlang.scm | 17 ----------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 2ce2e3f0..1d7984fb 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -362,6 +362,23 @@ (define-public erlang-hex-core specifications.") (license license:asl2.0))) +(define-public erlang-jsx + (package + (name "erlang-jsx") + (version "3.1.0") + (source (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 + "1wr7jkxm6nlgvd52xhniav64xr9rml2ngb35rwjwqlqvq7ywhp0c")))) + (build-system rebar-build-system) + (synopsis "Streaming, evented JSON parsing toolkit") + (description + "An Erlang application for consuming, producing and manipulating json.") + (home-page "https://github.com/talentdeficit/jsx") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index c509282d..eeaf7cf0 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -279,23 +279,6 @@ (define-public erlang-parse-trans compile-time constant.") (license license:asl2.0))) -(define-public erlang-jsx - (package - (name "erlang-jsx") - (version "3.1.0") - (source (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 - "1wr7jkxm6nlgvd52xhniav64xr9rml2ngb35rwjwqlqvq7ywhp0c")))) - (build-system rebar-build-system) - (synopsis "Streaming, evented JSON parsing toolkit") - (description - "An Erlang application for consuming, producing and manipulating json.") - (home-page "https://github.com/talentdeficit/jsx") - (license license:expat))) - (define-public erlang-providers (package (name "erlang-providers") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:09 GMT) Full text and rfc822 format available.Message #65 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 19/32] gnu: erlang-relx: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:12 +0100
Change-Id: Ibeaa35080cf5ef271ce79faa4f1eddc5451acb14 --- gnu/packages/erlang-xyz.scm | 22 ++++++++++++++++++++++ gnu/packages/erlang.scm | 22 ---------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 1d7984fb..ad56b9d2 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -379,6 +379,28 @@ (define-public erlang-jsx (home-page "https://github.com/talentdeficit/jsx") (license license:expat))) +(define-public erlang-relx + (package + (name "erlang-relx") + (version "4.6.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "02gmfx1vxg9m3mq4njsqhs4972l4nb8m5p1pdcf64g09ccf17y1g")))) + (build-system rebar-build-system) + (propagated-inputs + (list erlang-bbmustache)) + (home-page "https://erlware.github.io/relx/") + (synopsis "Release assembler for Erlang/OTP Releases") + (description "Relx assembles releases for an Erlang/OTP release. Given a +release specification and a list of directories in which to search for OTP +applications it will generate a release output. That output depends heavily on +what plugins available and what options are defined, but usually it is simply +a well configured release directory.") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index eeaf7cf0..c4e81aa2 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -297,28 +297,6 @@ (define-public erlang-providers (description "This package provides an Erlang providers library.") (license license:asl2.0))) -(define-public erlang-relx - (package - (name "erlang-relx") - (version "4.6.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "02gmfx1vxg9m3mq4njsqhs4972l4nb8m5p1pdcf64g09ccf17y1g")))) - (build-system rebar-build-system) - (propagated-inputs - (list erlang-bbmustache)) - (home-page "https://erlware.github.io/relx/") - (synopsis "Release assembler for Erlang/OTP Releases") - (description "Relx assembles releases for an Erlang/OTP release. Given a -release specification and a list of directories in which to search for OTP -applications it will generate a release output. That output depends heavily on -what plugins available and what options are defined, but usually it is simply -a well configured release directory.") - (license license:asl2.0))) - (define-public erlang-ssl-verify-fun (package (name "erlang-ssl-verify-fun") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:42:09 GMT) Full text and rfc822 format available.Message #68 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 20/32] gnu: erlang-providers: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:13 +0100
Change-Id: Ic418ef50076311c8f6f49b563710d404d5e39154 --- gnu/packages/erlang-xyz.scm | 35 +++++++++++++++++++++++++++++++++++ gnu/packages/erlang.scm | 35 ----------------------------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index ad56b9d2..65495d68 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -401,6 +401,41 @@ (define-public erlang-relx a well configured release directory.") (license license:asl2.0))) +(define-public erlang-ssl-verify-fun + (package + (name "erlang-ssl-verify-fun") + (version "1.1.6") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1026l1z1jh25z8bfrhaw0ryk5gprhrpnirq877zqhg253x3x5c5x")))) + (build-system rebar-build-system) + (home-page "https://github.com/deadtrickster/ssl_verify_fun.erl") + (synopsis "SSL verification functions for Erlang") + (description "This package provides SSL verification functions for +Erlang.") + (license license:expat))) + +(define-public erlang-providers + (package + (name "erlang-providers") + (version "1.9.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "05y0kz3xgx77hzn1l05byaisvmk8bgds7c22hrh0a5ba81sfi1yj")))) + (build-system rebar-build-system) + (propagated-inputs + (list erlang-erlware-commons erlang-getopt)) + (home-page "https://github.com/tsloughter/providers") + (synopsis "Erlang providers library") + (description "This package provides an Erlang providers library.") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index c4e81aa2..c5426381 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -279,41 +279,6 @@ (define-public erlang-parse-trans compile-time constant.") (license license:asl2.0))) -(define-public erlang-providers - (package - (name "erlang-providers") - (version "1.9.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "05y0kz3xgx77hzn1l05byaisvmk8bgds7c22hrh0a5ba81sfi1yj")))) - (build-system rebar-build-system) - (propagated-inputs - (list erlang-erlware-commons erlang-getopt)) - (home-page "https://github.com/tsloughter/providers") - (synopsis "Erlang providers library") - (description "This package provides an Erlang providers library.") - (license license:asl2.0))) - -(define-public erlang-ssl-verify-fun - (package - (name "erlang-ssl-verify-fun") - (version "1.1.6") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "1026l1z1jh25z8bfrhaw0ryk5gprhrpnirq877zqhg253x3x5c5x")))) - (build-system rebar-build-system) - (home-page "https://github.com/deadtrickster/ssl_verify_fun.erl") - (synopsis "SSL verification functions for Erlang") - (description "This package provides SSL verification functions for -Erlang.") - (license license:expat))) - (define-public rebar3 (package (name "rebar3") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:43:02 GMT) Full text and rfc822 format available.Message #71 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 21/32] gnu: erlang-jsone: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:14 +0100
Change-Id: I1828e8c85296212540fe5562c1663c18f7585d11 --- gnu/packages/erlang-xyz.scm | 24 ++++++++++++++++++++++++ gnu/packages/erlang.scm | 24 ------------------------ 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 65495d68..ed66aaee 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -436,6 +436,30 @@ (define-public erlang-providers (description "This package provides an Erlang providers library.") (license license:asl2.0))) +(define-public erlang-jsone + (package + (name "erlang-jsone") + (version "1.7.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1gaxiw76syjp3s9rygskm32y9799b917q752rw8bxj3bxq93g8x3")))) + (build-system rebar-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'disable-covertool + ;; no need to generate a coverage report + (lambda _ + (substitute* "rebar.config" + (("\\{project_plugins, \\[covertool\\]\\}\\." _) ""))))))) + (home-page "https://github.com/sile/jsone/") + (synopsis "Erlang JSON Library") + (description "An Erlang library for encoding and decoding JSON data.") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index c5426381..b9815901 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -232,30 +232,6 @@ (define-public emacs-erlang files.") (license license:asl2.0))) -(define-public erlang-jsone - (package - (name "erlang-jsone") - (version "1.7.0") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "1gaxiw76syjp3s9rygskm32y9799b917q752rw8bxj3bxq93g8x3")))) - (build-system rebar-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'unpack 'disable-covertool - ;; no need to generate a coverage report - (lambda _ - (substitute* "rebar.config" - (("\\{project_plugins, \\[covertool\\]\\}\\." _) ""))))))) - (home-page "https://github.com/sile/jsone/") - (synopsis "Erlang JSON Library") - (description "An Erlang library for encoding and decoding JSON data.") - (license license:expat))) - (define-public erlang-parse-trans (package (name "erlang-parse-trans") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:43:02 GMT) Full text and rfc822 format available.Message #74 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 22/32] gnu: erlang-parse-trans: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:15 +0100
Change-Id: I11422aca794584d34ee84ddcf77217245a7ce2b0 --- gnu/packages/erlang-xyz.scm | 23 +++++++++++++++++++++++ gnu/packages/erlang.scm | 23 ----------------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index ed66aaee..6947c9c2 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -460,6 +460,29 @@ (define-public erlang-jsone (description "An Erlang library for encoding and decoding JSON data.") (license license:expat))) +(define-public erlang-parse-trans + (package + (name "erlang-parse-trans") + (version "3.4.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "16p4c2xjrvz16kzpr9pmcvi6nxq6rwckqi9fp0ksibaxwxn402k2")))) + (build-system rebar-build-system) + (inputs + (list erlang-getopt)) + (home-page "https://github.com/uwiger/parse_trans") + (synopsis "Parse transform utilities for Erlang") + (description "This package captures some useful patterns in parse +transformation and code generation for Erlang. + +For example generating standardized accessor functions for records or +evaluating an expression at compile-time and substitute the result as a +compile-time constant.") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index b9815901..d3844933 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -232,29 +232,6 @@ (define-public emacs-erlang files.") (license license:asl2.0))) -(define-public erlang-parse-trans - (package - (name "erlang-parse-trans") - (version "3.4.1") - (source - (origin - (method url-fetch) - (uri (hexpm-uri name version)) - (sha256 - (base32 "16p4c2xjrvz16kzpr9pmcvi6nxq6rwckqi9fp0ksibaxwxn402k2")))) - (build-system rebar-build-system) - (inputs - (list erlang-getopt)) - (home-page "https://github.com/uwiger/parse_trans") - (synopsis "Parse transform utilities for Erlang") - (description "This package captures some useful patterns in parse -transformation and code generation for Erlang. - -For example generating standardized accessor functions for records or -evaluating an expression at compile-time and substitute the result as a -compile-time constant.") - (license license:asl2.0))) - (define-public rebar3 (package (name "rebar3") -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:43:02 GMT) Full text and rfc822 format available.Message #77 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 23/32] gnu: erlang-unicode-util-compat: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:16 +0100
Change-Id: I8a946fc973f97608109a5e03809c343a1e18e97d --- gnu/packages/erlang-xyz.scm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 6947c9c2..f0c8521c 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -483,6 +483,22 @@ (define-public erlang-parse-trans compile-time constant.") (license license:asl2.0))) +(define-public erlang-unicode-util-compat + (package + (name "erlang-unicode-util-compat") + (version "0.7.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "08952lw8cjdw8w171lv8wqbrxc4rcmb3jhkrdb7n06gngpbfdvi5")))) + (build-system rebar-build-system) + (synopsis "Unicode compatibility library for Erlang < 20") + (description "Unicode compatibility library for Erlang < 20.") + (home-page "https://hex.pm/packages/unicode_util_compat") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:43:03 GMT) Full text and rfc822 format available.Message #80 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 24/32] gnu: erlang-idna: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:17 +0100
Change-Id: Ifb67d5364658ee59bb8286c3f454ce4f95d0db2b --- gnu/packages/erlang-xyz.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index f0c8521c..67be758c 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -499,6 +499,27 @@ (define-public erlang-unicode-util-compat (home-page "https://hex.pm/packages/unicode_util_compat") (license license:asl2.0))) +(define-public erlang-idna + (package + (name "erlang-idna") + (version "6.1.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1sjcjibl34sprpf1dgdmzfww24xlyy34lpj7mhcys4j4i6vnwdwj")))) + (build-system rebar-build-system) + (propagated-inputs (list erlang-unicode-util-compat)) + (synopsis + "Erlang Internationalized Domain Names in Applications (IDNA) protocol") + (description + "Library to register and look up IDNs in a way + that does not require changes to the DNS itself. IDNA is only meant for +processing domain names, not free text. See: RFC 5891.") + (home-page "https://hexdocs.pm/idna/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:43:03 GMT) Full text and rfc822 format available.Message #83 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 25/32] gnu: erlang-bear: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:18 +0100
Change-Id: Ia04e1bf291f8ca680c0d8c5c54b3c820f263e1cc --- gnu/packages/erlang-xyz.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 67be758c..ff6254ac 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -520,6 +520,23 @@ (define-public erlang-idna (home-page "https://hexdocs.pm/idna/") (license license:expat))) +(define-public erlang-bear + (package + (name "erlang-bear") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1nsri73b50n5v1a8252mm8car84j2b53bq7alq6zz16z3a86fyqm")))) + (build-system rebar-build-system) + (synopsis "Statistics functions for Erlang") + (description + "This package provides a set of statistics functions for erlang.") + (home-page "https://hex.pm/packages/bear") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:43:04 GMT) Full text and rfc822 format available.Message #86 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 26/32] gnu: erlang-erlang-color: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:19 +0100
Change-Id: I914c87d513dbbbe222f852144a706759023044bf --- gnu/packages/erlang-xyz.scm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index ff6254ac..52a30530 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -537,6 +537,22 @@ (define-public erlang-bear (home-page "https://hex.pm/packages/bear") (license license:asl2.0))) +(define-public erlang-erlang-color + (package + (name "erlang-erlang-color") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0f707vxihn3f9m3zxal38ajcihnfcwms77jcax0gbzn8i7jya5vb")))) + (build-system rebar-build-system) + (synopsis "ANSI colors for your Erlang") + (description "ANSI colors for your Erlang.") + (home-page "https://hex.pm/packages/erlang_color") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:43:04 GMT) Full text and rfc822 format available.Message #89 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 27/32] gnu: erlang-tdiff: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:20 +0100
Change-Id: Ia1214c866f62330a847444254ff47af01a59e760 --- gnu/packages/erlang-xyz.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 52a30530..c16ad5aa 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -553,6 +553,23 @@ (define-public erlang-erlang-color (home-page "https://hex.pm/packages/erlang_color") (license license:expat))) +(define-public erlang-tdiff + (package + (name "erlang-tdiff") + (version "0.1.2") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0xbq7p9ii2kp49ms1kylj92ih2jiwvqwimb8jy4aalljz5lf3hp0")))) + (build-system rebar-build-system) + (synopsis "Library to compute the difference between two strings") + (description + "Erlang implementation of the O(ND) differnence algorithm by EUGENE W. MYERS.") + (home-page "https://hex.pm/packages/tdiff") + (license license:lgpl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:43:04 GMT) Full text and rfc822 format available.Message #92 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 28/32] gnu: erlang-rebar3-ex-doc: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:21 +0100
Change-Id: I51d485dba18c317bf9b51cfad02809c4e991dedc --- gnu/packages/erlang-xyz.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index c16ad5aa..11b765b7 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -570,6 +570,25 @@ (define-public erlang-tdiff (home-page "https://hex.pm/packages/tdiff") (license license:lgpl2.0))) +(define-public erlang-rebar3-ex-doc + (package + (name "erlang-rebar3-ex-doc") + (version "0.2.21") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0c720shjf03y4slj56q5nxgyhqif0926cs3pvl3zbv1i64qh8wdm")))) + (build-system rebar-build-system) + (synopsis "rebar3 plugin for generating docs with ex_doc") + (description + "rebar3_ex_doc is a rebar3 plugin for creating documentation with ex_doc. It +includes ex_doc as an escript, eliminating the need for Elixir installation or +compiling ex_doc dependencies.") + (home-page "https://hexdocs.pm/rebar3_ex_doc/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:43:05 GMT) Full text and rfc822 format available.Message #95 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 29/32] gnu: erlang-samovar: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:22 +0100
Change-Id: Ia1d6efa1eff8faa6e5e4ea181bde37fe630280b7 --- gnu/packages/erlang-xyz.scm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 11b765b7..bd4f78fe 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -589,6 +589,22 @@ (define-public erlang-rebar3-ex-doc (home-page "https://hexdocs.pm/rebar3_ex_doc/") (license license:asl2.0))) +(define-public erlang-samovar + (package + (name "erlang-samovar") + (version "1.0.2") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1nfw5vbzcvqzpsahwxz7zjlshg31pa9f306g3hzm1kfx5rsyvry4")))) + (build-system rebar-build-system) + (synopsis "SEMVER library for Erlang") + (description "SEMVER library for Erlang") + (home-page "https://hexdocs.pm/samovar/") + (license license:isc))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:43:05 GMT) Full text and rfc822 format available.Message #98 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 30/32] gnu: erlang-geas: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:23 +0100
Change-Id: If9d92d8da4b50d0832fb51a8e331b5a30394e81f --- gnu/packages/erlang-xyz.scm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index bd4f78fe..6642aeea 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -605,6 +605,28 @@ (define-public erlang-samovar (home-page "https://hexdocs.pm/samovar/") (license license:isc))) +(define-public erlang-geas + (package + (name "erlang-geas") + (version "2.7.14") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1maxv5zg2ckrikr8xpxgg9kpfaxvahqilbkl9dl9ibchlgrbj6i4")))) + (build-system rebar-build-system) + (propagated-inputs (list erlang-samovar)) + (synopsis + "Tool to detect the runnable official Erlang release window for your project") + (description + "Geas will tell you also what are the offending functions in the beam/source +files that reduce the available window, if some beam files are compiled native +and the installed patches and recommend patches that should be installed +depending your code.") + (home-page "https://hexdocs.pm/geas/") + (license license:isc))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:43:06 GMT) Full text and rfc822 format available.Message #101 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 31/32] gnu: erlang-covertool: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:24 +0100
Change-Id: Ibbac6334f247f86f56386fc53ef176875a13cb2a --- gnu/packages/erlang-xyz.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 6642aeea..366c5f2c 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -627,6 +627,27 @@ (define-public erlang-geas (home-page "https://hexdocs.pm/geas/") (license license:isc))) +(define-public erlang-covertool + (package + (name "erlang-covertool") + (version "2.0.4") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1p0c1n3nl4063xwi1sv176l1x68xqf07qwvj444a5z888fx6i5aw")))) + (build-system rebar-build-system) + (home-page "https://github.com/covertool/covertool") + (synopsis "Convert code-coverage data generated by @code{cover} into +Cobertura XML reports") + (description + "This package provides a build tool and plugin to convert +exported Erlang @code{cover} data sets into Cobertura XML reports, which can +then be feed to the Jenkins Cobertura plug-in. On @emph{hex.pm}, this plugin +was previously called @code{rebar_covertool}.") + (license license:bsd-2))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 14:43:06 GMT) Full text and rfc822 format available.Message #104 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH va3e5ae0f..37252e07 32/32] gnu: erlang-telemetry: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 15:37:25 +0100
Change-Id: I54cfe6fb244c26c6a226d76ee62a502a72e198a7 --- gnu/packages/erlang-xyz.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 366c5f2c..b43b4403 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -648,6 +648,27 @@ (define-public erlang-covertool was previously called @code{rebar_covertool}.") (license license:bsd-2))) +(define-public erlang-telemetry + (package + (name "erlang-telemetry") + (version "1.2.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1mgyx9zw92g6w8fp9pblm3b0bghwxwwcbslrixq23ipzisfwxnfs")))) + (build-system rebar-build-system) + (native-inputs (list erlang-covertool)) + (synopsis "Dynamic dispatching library for metrics and instrumentations") + (description + "Telemetry is a lightweight library for dynamic dispatching of events, with a +focus on metrics and instrumentation. Any Erlang or Elixir library can use +telemetry to emit events. Application code and other libraries can then hook +into those events and run custom handlers.") + (home-page "https://hexdocs.pm/telemetry/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 17:21:01 GMT) Full text and rfc822 format available.Message #107 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org, Katherine Cox-Buday <cox.katherine.e+guix <at> gmail.com>, Andrew Tropin <andrew <at> trop.in> Subject: Re: [bug#66801] [PATCH] mix-build-system: draft 1 Date: Sun, 29 Oct 2023 18:19:54 +0100
[Message part 1 (text/plain, inline)]
I suppose it would have been better to send each patch individually after discussion, rather than all at once. My mistake. Cheers.
[Message part 2 (text/html, inline)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 18:31:02 GMT) Full text and rfc822 format available.Message #110 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>, 66801 <at> debbugs.gnu.org Subject: Re: [PATCH va3e5ae0f..37252e07 01/32] rebar-build-system and packages. Date: Sun, 29 Oct 2023 19:29:53 +0100
Am Sonntag, dem 29.10.2023 um 15:36 +0100 schrieb Pierre-Henry Fröhring: > [PATCH va3e5ae0f..37252e07 01/32] The middle should indicate a revision number and an optional branch (as well as optional WIP and RFC). Since this goes to master (I assume), it should just be v2, v3, … vN > The builder now accepts the `#:sources-erlang` parameter, which > expects a list of "Source" items. Each "Source" corresponds to the > source code of a library directory, which is where Erlang looks for > compiled modules. > Documentation: > https://www.erlang.org/doc/man/code#code-path. Each Source is > installed as a "Checkout", which are local dependencies linked to > directories managed by rebar. For more information, see > https://rebar3.org/docs/configuration/dependencies/#checkout-dependencies > . Lacking checkouts, rebar3 will not compile if there is no network > access. > > Change-Id: Idc3aa8bb204f55d0594c1669399845cd9b9e86ab > --- > guix/build-system/rebar.scm | 274 +++++++++++++++++++--------- > -- > guix/build/rebar-build-system.scm | 255 +++++++++++++++++---------- > 2 files changed, 339 insertions(+), 190 deletions(-) > > diff --git a/guix/build-system/rebar.scm b/guix/build- > system/rebar.scm > index de1294ec..862721ee 100644 > --- a/guix/build-system/rebar.scm > +++ b/guix/build-system/rebar.scm > @@ -1,6 +1,7 @@ > ;;; GNU Guix --- Functional package management for GNU > ;;; Copyright © 2016 Ricardo Wurmus <rekado <at> elephly.net> > ;;; Copyright © 2020 Hartmut Goebel <h.goebel <at> crazy-compilers.com> > +;;; Copyright © 2023 Pierre-Henry Fröhring > <phfrohring <at> deeplinks.com> > ;;; > ;;; This file is part of GNU Guix. > ;;; > @@ -18,102 +19,117 @@ > ;;; along with GNU Guix. If not, see > <http://www.gnu.org/licenses/>. > > (define-module (guix build-system rebar) > - #:use-module (guix store) > - #:use-module (guix utils) > + #:use-module (guix build-system gnu) > + #:use-module (guix build-system) > #:use-module (guix gexp) > - #:use-module (guix packages) > #:use-module (guix monads) > + #:use-module (guix packages) > #:use-module (guix search-paths) > - #:use-module (guix build-system) > - #:use-module (guix build-system gnu) > - #:export (hexpm-uri > - hexpm-package-url > - %rebar-build-system-modules > - rebar-build > - rebar-build-system)) > + #:use-module (guix store) > + #:use-module (guix utils) > + #:use-module (ice-9 match) > + #:use-module (ice-9 regex) > + #:use-module (srfi srfi-1) > + #:export (hexpm-uri hexpm-package-url %rebar-build-system-modules > + rebar-build rebar-build-system)) > > -;;; > -;;; Definitions for the hex.pm repository, > -;;; > +;; Source > +;; A « Source » reprensents the source code to a library > directory. It is > +;; defined as (list <name> <origin>) where: <name> is a string > representing > +;; the name of a library directory and <origin> is an origin as > defined > +;; (guix packages). > + > + > +;; Pattern that an Erlang Guix package name is expected to match. > +(define pkg-name-re "^erlang-(.*)") Emacs, Rust, etc. build systems just strip out the prefix. No need to go all fancy regexpy :) > +(define (pkg-name->match name) > + "Return the match object from NAME if NAME starts with pkg-name- > prefix." > + (string-match pkg-name-re name)) > + > +(define (pkg-name? name) > + "Test if NAME is the name of an Erlang Guix package." > + (or (pkg-name->match name) #f)) > > -;; URL and paths from > -;; https://github.com/hexpm/specifications/blob/master/endpoints.md > -(define %hexpm-repo-url > - (make-parameter "https://repo.hex.pm")) > +(define (pkg-name->suffix name) > + "Return the suffix of the name of an Erlang Guix package." > + (regexp-substitute #f (pkg-name->match name) 1)) > > -(define hexpm-package-url > - (string-append (%hexpm-repo-url) "/tarballs/")) > +(define* (pkg-name->library-directory-name name #:key (version "")) > + "Return the name of the library directory associated with the > Erlang Guix package name NAME." > + (string-append (string-replace-substring (pkg-name->suffix name) > "-" "_") > + (if (string= version "") "" (string-append "-" > version)))) > + > +;; See: > https://github.com/hexpm/specifications/blob/master/endpoints.md > +(define hexpm (make-parameter "https://repo.hex.pm")) > + > +(define hexpm-tarballs (string-append (hexpm) "/tarballs/")) > > (define (hexpm-uri name version) > "Return a URI string for the package hosted at hex.pm > corresponding to NAME > -and VERSION." > - (string-append hexpm-package-url name "-" version ".tar")) > +and VERSION. > > -;; > -;; Standard build procedure for Erlang packages using Rebar. > -;; > +XXX: should a warning be emitted? > +If NAME is not an Erlang Guix package name, then emit a warning. The > download > +will fail if it is not correct anyway." > > -(define %rebar-build-system-modules > - ;; Build-side modules imported by default. > - `((guix build rebar-build-system) > - ,@%gnu-build-system-modules)) > + (define (warn-about name) > + (format #t "AssertionWarning 4dcbff27 > + Assertion: re matches name. > + re = ~a > + name = ~a > +" pkg-name-re name) > + > + name) 何で? > > -(define (default-rebar3) > - "Return the default Rebar3 package." > + (define (name->archive-name name) > + (if (pkg-name? name) > + (string-append (pkg-name->library-directory-name name > #:version version) ".tar") > + (string-append (warn-about name) "-" version ".tar"))) > + > + (string-append hexpm-tarballs (name->archive-name name))) > + > +(define (rebar-default) > ;; Lazily resolve the binding to avoid a circular dependency. > (let ((erlang-mod (resolve-interface '(gnu packages erlang)))) > (module-ref erlang-mod 'rebar3))) I suggest not to rename these procedures. default-X reads more naturally than X-default. > -(define (default-erlang) > - "Return the default Erlang package." > +(define (erlang-default) > ;; Lazily resolve the binding to avoid a circular dependency. > (let ((erlang-mod (resolve-interface '(gnu packages erlang)))) > (module-ref erlang-mod 'erlang))) > > -(define* (lower name > - #:key source inputs native-inputs outputs system > target > - (rebar (default-rebar3)) > - (erlang (default-erlang)) > - #:allow-other-keys > - #:rest arguments) > - "Return a bag for NAME from the given arguments." > - (define private-keywords > - '(#:target #:rebar #:erlang #:inputs #:native-inputs)) > - > - (and (not target) ;XXX: no cross- > compilation > - (bag > - (name name) > - (system system) > - (host-inputs `(,@(if source > - `(("source" ,source)) > - '()) > - ,@inputs)) > - (build-inputs `(("rebar" ,rebar) > - ("erlang" ,erlang) ;; for escriptize > - ,@native-inputs > - ;; Keep the standard inputs of 'gnu-build- > system'. > - ,@(standard-packages))) > - (outputs outputs) > - (build rebar-build) > - (arguments (strip-keyword-arguments private-keywords > arguments))))) > - > -(define* (rebar-build name inputs > - #:key > - guile source > - (rebar-flags ''("skip_deps=true" "-vv")) > - (tests? #t) > - (test-target "eunit") > - ;; TODO: install-name ; default: based on > guix package name > - (install-profile "default") > - (phases '(@ (guix build rebar-build-system) > - %standard-phases)) > - (outputs '("out")) > - (search-paths '()) > - (native-search-paths '()) > - (system (%current-system)) > - (imported-modules %rebar-build-system- > modules) > - (modules '((guix build rebar-build-system) > - (guix build utils)))) > +(define imported-modules > + `((guix build rebar-build-system) > + ,@%gnu-build-system-modules)) > + > +(define (input->source input) > + "Return a Source associated to the Input INPUT." > + (match input > + ((name package) > + (list (pkg-name->library-directory-name name) > + (package-source package))))) > + > +(define* (rebar-build name > + inputs > + #:key > + guile > + source > + (rebar-flags ''()) > + (tests? #t) > + (test-target "eunit") > + ;; TODO: install-name ; default: based on > guix package name > + (install-profile "default") > + (phases '(@ (guix build rebar-build-system) > + %standard-phases)) > + (outputs '("out")) > + (search-paths '()) > + (native-search-paths '()) > + (system (%current-system)) > + (imported-modules imported-modules) > + (modules '((guix build rebar-build-system) > + (guix build utils))) > + (sources-erlang '())) > "Build SOURCE with INPUTS." > > (define builder > @@ -122,35 +138,95 @@ (define* (rebar-build name inputs > (use-modules #$@(sexp->gexp modules)) > > #$(with-build-variables inputs outputs > + > #~(rebar-build #:source #+source > - #:system #$system > - #:name #$name > - #:rebar-flags #$rebar-flags > - #:tests? #$tests? > - #:test-target #$test-target > - ;; TODO: #:install-name #$install-name > - #:install-profile #$install-profile > - #:phases #$(if (pair? phases) > - (sexp->gexp phases) > - phases) > - #:outputs %outputs > - #:search-paths '#$(sexp->gexp > - (map search-path- > specification->sexp > - search-paths)) > - #:inputs %build-inputs))))) > - > - (mlet %store-monad ((guile (package->derivation (or guile > (default-guile)) > - system #:graft? > #f))) > + #:sources-erlang '#$sources-erlang This reeks of the hack that we need for cargo-build-system, except with a worse variable name. I strongly suggest looking into ways we can do without it. > + #:system #$system > + #:name #$name > + #:rebar-flags #$rebar-flags > + #:tests? #$tests? > + #:test-target #$test-target > + ;; TODO: #:install-name #$install-name > + #:install-profile #$install-profile > + #:phases #$(if (pair? > + phases) > + (sexp->gexp > + phases) > + phases) > + #:outputs %outputs > + #:search-paths '#$(sexp->gexp > + (map > + search-path- > specification->sexp > + search-paths)) > + #:inputs > + %build-inputs))))) > + > + (mlet %store-monad > + ((guile (package->derivation (or guile > + (default-guile)) system > + #:graft? #f))) > + > ;; Note: Always pass #:graft? #f. Without it, ALLOWED- > REFERENCES & > ;; co. would be interpreted as referring to grafted packages. > - (gexp->derivation name builder > + (gexp->derivation name > + builder > #:system system > #:target #f > #:graft? #f > #:guile-for-build guile))) > > +(define* (lower name > + #:key > + (erlang (erlang-default)) > + inputs > + native-inputs > + outputs > + (rebar (rebar-default)) > + source > + system > + target > + #:allow-other-keys #:rest arguments) > + "Return a bag for NAME from the given arguments." > + > + (let* ((erlang-packages > + (filter (lambda (input) > + (match input > + ((name _) (pkg-name? name)))) > + (append inputs native-inputs))) > + > + (erlang-sources (map input->source erlang-packages))) > + > + (define private-keywords > + '(#:target #:rebar #:erlang #:inputs #:native-inputs > #:sources-erlang)) > + > + (and (not target) ;XXX: no cross-compilation > + (bag (name name) > + (system system) > + (host-inputs inputs) > + (build-inputs `(,@(standard-packages) > + ("erlang" ,erlang) > + ("rebar" ,rebar) > + ,@inputs > + ,@native-inputs)) > + (outputs outputs) > + (build rebar-build) > + (arguments (append (list #:sources-erlang erlang- > sources) > + (strip-keyword-arguments private- > keywords > + > arguments))))))) > + > (define rebar-build-system > - (build-system > - (name 'rebar) > - (description "The standard Rebar build system") > - (lower lower))) > + (build-system (name 'rebar) > + (description "The standard Rebar build system") > + (lower lower))) > + > + > +;;; > +;;; Exports > +;;; > + > +(define hexpm-package-url hexpm-tarballs) > + > +(define %rebar-build-system-modules imported-modules) > + > + > +;;; rebar.scm ends here > diff --git a/guix/build/rebar-build-system.scm b/guix/build/rebar- > build-system.scm > index fb664228..b68348bd 100644 > --- a/guix/build/rebar-build-system.scm > +++ b/guix/build/rebar-build-system.scm > @@ -2,6 +2,7 @@ > ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado <at> elephly.net> > ;;; Copyright © 2019 Björn Höfling > <bjoern.hoefling <at> bjoernhoefling.de> > ;;; Copyright © 2020, 2022 Hartmut Goebel > <h.goebel <at> crazy-compilers.com> > +;;; Copyright © 2023 Pierre-Henry Fröhring > <phfrohring <at> deeplinks.com> > ;;; > ;;; This file is part of GNU Guix. > ;;; > @@ -23,125 +24,197 @@ (define-module (guix build rebar-build-system) > #:use-module ((guix build utils) #:hide (delete)) > #:use-module (ice-9 match) > #:use-module (ice-9 ftw) > + #:use-module (ice-9 string-fun) > + #:use-module (ice-9 receive) > + #:use-module (ice-9 regex) > #:use-module (srfi srfi-1) > #:use-module (srfi srfi-26) > - #:export (rebar-build > - %standard-phases)) > + #:export (rebar-build %standard-phases)) > > ;; > ;; Builder-side code of the standard build procedure for Erlang > packages using > ;; rebar3. > ;; > -;; TODO: Think about whether bindir ("ebin"), libdir ("priv") and > includedir > -;; "(include") need to be configurable > +;; Library directory > +;; A « library directory » is a directory where Erlang searches > for compiled > +;; code. Its name should look like: `a_name-1.2.3' where the > suffix `-1.2.3' > +;; is optional. See: > https://www.erlang.org/doc/man/code#code-path. > +;; > +;; Package name > +;; A « package name » is the value of the name field of a package > +;; definition. It looks like: `prefix-a-name-1.2.3'. See: > +;; https://guix.gnu.org/manual/en/html_node/Package-Naming.html > +;; > +;; Profile > +;; For Rebar3, a « profile » is a name associated to a set of > configuration > +;; settings overriding or complementing the regular configuration. > See: > +;; https://rebar3.org/docs/configuration/profiles > +;; > +;; Source > +;; A « source » represents the source code associated to a Guix > package as > +;; defined by its `source' field. Here, the data sctructure used > to > +;; represent a source has the form `(list name path)' where `name' > is a > +;; library directory name and `path' is the store path where to > find the > +;; source code. > +;; > +;; Checkout > +;; A « checkout » is a locally defined dependency related to a > directory > +;; managed by rebar. See: > +;; > https://rebar3.org/docs/configuration/dependencies/#checkout-dependencies > > -(define %erlang-libdir "/lib/erlang/lib") > +(define sep "/") Uhm, did you mean file-name-separator-string from Guile core? > -(define* (erlang-depends #:key inputs #:allow-other-keys) > - (define input-directories > - (match inputs > - (((_ . dir) ...) > - dir))) > - (mkdir-p "_checkouts") > - > - (for-each > - (lambda (input-dir) > - (let ((elibdir (string-append input-dir %erlang-libdir))) > - (when (directory-exists? elibdir) > - (for-each > - (lambda (dirname) > - (let ((dest (string-append elibdir "/" dirname)) > - (link (string-append "_checkouts/" dirname))) > - (when (not (file-exists? link)) > - ;; RETHINK: Maybe better copy and make writable to > avoid some > - ;; error messages e.g. when using with rebar3-git- > vsn. > - (symlink dest link)))) > - (list-directories elibdir))))) > - input-directories)) > +;; Where Erlang libraries are installed relative to a package path > in the store. > +(define lib-erlang-lib "lib/erlang/lib") > + > +(define (list-directories directory) > + "Return file names of the sub-directory of DIRECTORY." > + (scandir directory > + (lambda (file) > + (and (not (member file '("." ".."))) > + (file-is-directory? (string-append directory sep > file)))))) We have find-files? > + > +(define* (pkg-name->libdir-name name) > + "Return the library name deduced from the Erlang package name > NAME." > + (let* ((suffix (regexp-substitute #f (string-match "^erlang-(.*)" > name) 1)) > + (elements (string-split suffix #\-))) > + (string-append (string-join (drop-right elements 1) "_") "-" > (last elements)))) > + > +(define (libdir-name->prefix name) > + "Return the prefix of a library directory name NAME." > + (car (string-split name #\-))) > + > +(define (rebar-build-dir profile) > + "Return the path where rebar builds libraries given the profile > PROFILE." > + (format #f "_build/~a/lib" profile)) > + > +(define* (pkg-name->build-dir name #:key (profile "default")) > + "Return the path of library directory where rebar3 builds code of > an Erlang package named NAME given the profile PROFILE." > + (string-append (rebar-build-dir profile) sep (libdir-name->prefix > (pkg-name->libdir-name name)))) > > (define* (unpack #:key source #:allow-other-keys) > - "Unpack SOURCE in the working directory, and change directory > within the > -source. When SOURCE is a directory, copy it in a sub-directory of > the current > -working directory." > - (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) > - (gnu-unpack #:source source) > - ;; Packages from hex.pm typically have a contents.tar.gz > containing the > - ;; actual source. If this tar file exists, extract it. > - (when (file-exists? "contents.tar.gz") > - (invoke "tar" "xvf" "contents.tar.gz")))) > - > -(define* (build #:key (rebar-flags '()) #:allow-other-keys) > + (if (file-is-directory? source) > + ;; If source is a checkout: > + (begin > + ;; Preserve timestamps (set to the Epoch) on the copied tree > so that > + ;; things work deterministically. > + (copy-recursively source "." #:keep-mtime? #t) > + ;; Make the source checkout files writable, for convenience. > + (for-each (lambda (f) > + (false-if-exception (make-file-writable f))) > + (find-files "."))) > + > + ;; If source is an hex.pm archive: > + (begin > + (invoke "tar" "xvf" source) > + (invoke "tar" "xvf" "contents.tar.gz") > + > + ;; Prevent an error message during the install phase. > + ;; `rebar3 compile' produces symlinks like so in _build/: > + ;; priv -> ../../../../priv > + ;; include -> ../../../../include > + ;; > + ;; The install phase copies whatever has been built to the > output directory. > + ;; If the priv/ directory is absent, then an error `i/o > error: > + ;; _build/…/priv: No such file or directory' occurs. So, > we make sure that a > + ;; directory exists. > + (for-each (lambda (dir) (mkdir-p dir)) (list "priv" > "include"))))) Uhm, how are you improving the status quo here? > + > +(define (configure-HOME . ignored_args) Just _ is fine for ignored arguments. > + "In some cases, it is needed for the environment variable HOME to > be defined > +as a directory with write permission. Examples of errors: > + > +Could not write to \"/homeless-shelter/.cache/rebar3/hex\". Please > ensure the path is writeable. > +" > + (let ((HOME "HOME") > + (tmp "/tmp")) > + (setenv HOME tmp) > + (format #t "~a=~a\n" HOME tmp))) The canonical way is to use (getcwd) as HOME. You can could also try something like (canonicalize-path "../hexpm-home"). Anyhow, you might want to try using a variable that is less global than HOME. > +(define* (configure-dependencies #:key > + (install-profile "default") > + inputs > + name > + sources-erlang ;List of Source. > + version > + #:allow-other-keys) > + "Rebar3 refuses to compile without network access unless its > dependencies are > +present as source checkouts. To prevent unnecessary compilations, we > must « > +pre-install » dependencies in Rebar's build directory." I suggest not using french quotes – they are confusing between French and German native speakers :) You might want to look into possible PATH variables or put these sources into a special folder so that you can use search-path-as-list. Also, IIUC erlang-depends already does something rather similar. Is there any reason it's broken for you? > + > + ;; If source in sources-erlang, then install it under _checkouts/. > + (let ((_checkouts "_checkouts")) > + (mkdir-p _checkouts) > + > + (define (install-source source) > + "Install the Source SOURCE in _checkouts." > + (match source > + ((name path) > + (let ((src (string-append _checkouts sep name))) > + (mkdir-p src) > + (with-directory-excursion src (unpack #:source path)))) > + (_ #f))) > + > + (for-each install-source sources-erlang)) > + > + ;; If input in inputs is an Erlang package, then install it under > _build/. > + (let ((_build (format #f "_build/~a/checkouts" install-profile))) > + (mkdir-p _build) > + > + (define (install-libdir elib name dest) > + "Install the library directory named NAME from ELIB to DEST." > + (let ((src (string-append elib sep name)) > + (dest (string-append dest sep (libdir-name->prefix > name)))) > + (copy-recursively src dest) > + (mkdir-p (string-append dest "/priv")))) > + > + (define (install-all-libdirs dir dest) > + "Install in DEST all library directories in DIR." > + (let ((elib (string-append dir sep lib-erlang-lib))) > + (when (directory-exists? elib) > + (for-each (lambda (name) (install-libdir elib name dest)) > + (list-directories elib))))) > + > + (match inputs > + (((_ . dirs) ..1) > + (for-each > + (lambda (dir) (install-all-libdirs dir _build)) > + dirs)) > + (_ #f)))) > + > +(define* (build #:key name (rebar-flags '()) #:allow-other-keys) > (apply invoke `("rebar3" "compile" ,@rebar-flags))) > > -(define* (check #:key target (rebar-flags '()) (tests? (not target)) > +(define* (check #:key target > + (rebar-flags '()) > + (tests? (not target)) > (test-target "eunit") > #:allow-other-keys) > (if tests? > (apply invoke `("rebar3" ,test-target ,@rebar-flags)) > (format #t "test suite not run~%"))) > > -(define (erlang-package? name) > - "Check if NAME correspond to the name of an Erlang package." > - (string-prefix? "erlang-" name)) > - > -(define (package-name-version->erlang-name name+ver) > - "Convert the Guix package NAME-VER to the corresponding Erlang > name-version > -format. Essentially drop the prefix used in Guix and replace dashes > by > -underscores." > - (let* ((name- (package-name->name+version name+ver))) > - (string-join > - (string-split > - (if (erlang-package? name-) ; checks for "erlang-" prefix > - (string-drop name- (string-length "erlang-")) > - name-) > - #\-) > - "_"))) > - > -(define (list-directories directory) > - "Return file names of the sub-directory of DIRECTORY." > - (scandir directory > - (lambda (file) > - (and (not (member file '("." ".."))) > - (file-is-directory? (string-append directory "/" > file)))))) > - > -(define* (install #:key name outputs > - (install-name (package-name-version->erlang-name > name)) > - (install-profile "default") ; build profile > outputs to install > - #:allow-other-keys) > - (let* ((out (assoc-ref outputs "out")) > - (pkg-dir (string-append out %erlang-libdir "/" install- > name))) > - (let ((bin-dir (string-append "_build/" install-profile "/bin")) > - (lib-dir (string-append "_build/" install-profile > "/lib"))) > - ;; install _build/PROFILE/bin > - (when (file-exists? bin-dir) > - (copy-recursively bin-dir out #:follow-symlinks? #t)) > - ;; install _build/PROFILE/lib/*/{ebin,include,priv} > - (for-each > - (lambda (*) > - (for-each > - (lambda (dirname) > - (let ((src-dir (string-append lib-dir "/" * "/" > dirname)) > - (dst-dir (string-append pkg-dir "/" dirname))) > - (when (file-exists? src-dir) > - (copy-recursively src-dir dst-dir #:follow-symlinks? > #t)) > - (false-if-exception > - (delete-file (string-append dst-dir > "/.gitignore"))))) > - '("ebin" "include" "priv"))) > - (list-directories lib-dir)) > - (false-if-exception > - (delete-file (string-append pkg-dir "/priv/Run-eunit- > loop.expect")))))) > +(define* (install #:key name outputs (install-profile "default") > #:allow-other-keys) > + (let* ((src (pkg-name->build-dir name #:profile install-profile)) > + (dest (string-append (assoc-ref outputs "out") > + sep lib-erlang-lib sep > + (pkg-name->libdir-name name)))) > + (mkdir-p dest) > + (copy-recursively src dest #:follow-symlinks? #t))) > > (define %standard-phases > (modify-phases gnu:%standard-phases > (replace 'unpack unpack) > + (add-after 'unpack 'configure-HOME configure-HOME) > (delete 'bootstrap) > (delete 'configure) > - (add-before 'build 'erlang-depends erlang-depends) > + (add-before 'build 'configure-dependencies configure- > dependencies) > (replace 'build build) > (replace 'check check) > (replace 'install install))) > > -(define* (rebar-build #:key inputs (phases %standard-phases) > - #:allow-other-keys #:rest args) > +(define* (rebar-build #:key inputs (phases %standard-phases) > #:allow-other-keys #:rest args) > "Build the given Erlang package, applying all of PHASES in order." > (apply gnu:gnu-build #:inputs inputs #:phases phases args)) > + > +;;; rebar-build-system.scm ends here > > base-commit: 4dfbc536689b07e56aead3dd864b8af54613d091 > -- > 2.41.0 Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 19:24:02 GMT) Full text and rfc822 format available.Message #113 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>, 66801 <at> debbugs.gnu.org Subject: Re: [PATCH va3e5ae0f..37252e07 02/32] gnu: erlang updated. Date: Sun, 29 Oct 2023 20:22:30 +0100
Am Sonntag, dem 29.10.2023 um 15:36 +0100 schrieb Pierre-Henry Fröhring: > Wrapped Erlang programs (`erl`, `erlc`, `escript`) now prepend > ERL_LIBS with > GUIX_ERL_LIBS. Reference: > https://www.erlang.org/doc/man/code#code-path. The > `native-search-paths` field in the package specification sets > GUIX_ERL_LIBS, > which aggregates all compiled libraries for Erlang and Elixir, akin > to the > functionality of GUIX_PYTHONPATH. You're missing a ChangeLog, plus this patch appears to be making two changes at once – one described here, the other seemingly stylistic. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 19:27:01 GMT) Full text and rfc822 format available.Message #116 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>, 66801 <at> debbugs.gnu.org Subject: Re: [PATCH va3e5ae0f..37252e07 03/32] gnu: erlang-certifi: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 20:25:38 +0100
Am Sonntag, dem 29.10.2023 um 15:36 +0100 schrieb Pierre-Henry Fröhring: > Change-Id: I7491af542af5ffb2d82b5555675f4f7dbef167af Missing ChangeLog. > --- > gnu/packages/erlang-xyz.scm | 62 > +++++++++++++++++++++++++++++++++++++ > gnu/packages/erlang.scm | 25 +-------------- > 2 files changed, 63 insertions(+), 24 deletions(-) > create mode 100644 gnu/packages/erlang-xyz.scm > > diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang- > xyz.scm > new file mode 100644 > index 00000000..444fa648 > --- /dev/null > +++ b/gnu/packages/erlang-xyz.scm > @@ -0,0 +1,62 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2023 Pierre-Henry Fröhring > <phfrohring <at> deeplinks.com> > +;;; Don't forget to carry over all other relevant copyright headers. Likewise for the following patches. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 19:33:01 GMT) Full text and rfc822 format available.Message #119 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>, 66801 <at> debbugs.gnu.org Subject: Re: [PATCH va3e5ae0f..37252e07 06/32] gnu: erlang-rebar3-git-vsn: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 20:31:25 +0100
Am Sonntag, dem 29.10.2023 um 15:36 +0100 schrieb Pierre-Henry Fröhring: > Change-Id: I5a743e71b2034ba1cfe71fe6121137b3194befed > --- Depending on how many packages you want to add, you might want to do an even stronger split, e.g. erlang-build for rebar and mix, erlang-check, erlang-WHATEVER, and then erlang-xyz for what doesn't fit into any of the other categories. Also missing ChangeLog as with the rest. I don't see mix in the mix yet. Is this going to be a two series thing? Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 19:44:02 GMT) Full text and rfc822 format available.Message #122 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH va3e5ae0f..37252e07 06/32] gnu: erlang-rebar3-git-vsn: moved to erlang-xyz.scm Date: Sun, 29 Oct 2023 20:42:44 +0100
[Message part 1 (text/plain, inline)]
Thank you for being so responsive ; it's pleasantly surprising. I will address the mix-build-system in 15 additional commits, which I will send after incorporating your feedback to prevent any further errors. I plan to tackle this tomorrow. Cheers.
[Message part 2 (text/html, inline)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 29 Oct 2023 22:16:02 GMT) Full text and rfc822 format available.Message #125 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH va3e5ae0f..37252e07 01/32] rebar-build-system and packages. Date: Sun, 29 Oct 2023 23:14:47 +0100
[Message part 1 (text/plain, inline)]
> The middle should indicate a revision number and an optional branch > (as well as optional WIP and RFC). Since this goes to master (I > assume), it should just be v2, v3, … vN. DONE: Ok. If I understood correctly, it means that it should have been [PATCH v2]. So this time, it will be [PATCH v3]. > Emacs, Rust, etc., build systems just strip out the prefix. No need > to go all fancy regexpy :)何で? WAITING: Well, it makes the warning message completely explicit, for example: ┌──── │ AssertionWarning 4dcbff27 │ Assertion: re matches name. │ re = ^erlang-(.*) │ name = something-else └──── Is it OK if it stays like this? > I suggest not renaming these procedures. default-X reads more > naturally than X-default. DONE. > This reeks of the hack that we need for cargo-build-system, except > with a worse variable name. I strongly suggest looking into ways we > can do without it. WAITING: this idea came from a discussion with jpoiret. See: <https://logs.guix.gnu.org/guix/2023-10-24.log#180111>. It seems that the idea you suggest is to use `search-path-as-list' as hinted below. Is this correct? > Uhm, did you mean file-name-separator-string from Guile core? DONE: Great. That is what I was searching for; I'm not yet familiar with the standard library. > We have find-files? DONE: replaced. > Uhm, how are you improving the status quo here? WAITING: comment updated with: ┌──── │ ;; If these directories exist, then no error occurs. So, we make sure │ ;; they exist. └──── Is this OK? > The canonical way is to use (getcwd) as HOME. You could also try > something like (canonicalize-path "../hexpm-home"). Anyhow, you might > want to try using a variable that is less global than HOME. DONE: HOME has been replaced by REBAR_CACHE_DIR. > I suggest not using French examples – they are confusing between > French and German native speakers :) DONE: « → “, » → ” > You might want to look into possible PATH variables or put these > sources into a special folder so that you can use search-path-as-list. WAITING: Perhaps an idea: 1) If we require all Erlang packages to have an output “src” something like: /gnu/store/…elixir-pkg-1.2.3/src/elixir/src/…, 2) then (search-path-as-list '("src/elixir/src") '("/gnu/store…elixir-pkg-1.2.3" …)) would return '("/gnu/store…elixir-pkg-1.2.3/src/elixir/src" …) ≡ lst-src. 3) Given lst-src, it would be enough to install each source under _checkouts, i.e., _checkouts/lib-name/src. It is probably feasible to retrieve lib-name from somewhere. What do you think? > Also, IIUC, erlang-depends already does something rather similar. Is > there any reason it's broken for you? WAITING: Without that (i.e., _checkouts/lib-name/src), rebar3 will not compile things. Is this a satisfaying explaination?
[Message part 2 (text/html, inline)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Mon, 30 Oct 2023 05:31:01 GMT) Full text and rfc822 format available.Message #128 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH va3e5ae0f..37252e07 01/32] rebar-build-system and packages. Date: Mon, 30 Oct 2023 06:29:32 +0100
Am Sonntag, dem 29.10.2023 um 23:14 +0100 schrieb Pierre-Henry Fröhring: > n [PATCH v2]. So this time, it will be [PATCH v3]. > > > Emacs, Rust, etc., build systems just strip out the prefix. No > > need to go all fancy regexpy :)何で? > > WAITING: Well, it makes the warning message completely explicit, for > example: > ┌──── > │ AssertionWarning 4dcbff27 > │ Assertion: re matches name. > │ re = ^erlang-(.*) > │ name = something-else > └──── > Is it OK if it stays like this? You can use a shorter error and explain the problem better: "~a does not start with \"erlang-\"" name > > > Uhm, how are you improving the status quo here? > > WAITING: comment updated with: > ┌──── > │ ;; If these directories exist, then no error occurs. So, we make > sure > │ ;; they exist. > └──── > Is this OK? > > > [...] > > You might want to look into possible PATH variables or put these > > sources into a special folder so that you can use search-path-as- > > list. > > WAITING: Perhaps an idea: > 1) If we require all Erlang packages to have an output “src” > something > like: /gnu/store/…elixir-pkg-1.2.3/src/elixir/src/…, > 2) then (search-path-as-list '("src/elixir/src") > '("/gnu/store…elixir-pkg-1.2.3" …)) would return > '("/gnu/store…elixir-pkg-1.2.3/src/elixir/src" …) ≡ lst-src. > 3) Given lst-src, it would be enough to install each source under > _checkouts, i.e., _checkouts/lib-name/src. It is probably feasible > to > retrieve lib-name from somewhere. > What do you think? Rather than require, you can add a phase to ensure that this is the case. I'm not sure whether we should make that an extra output, however; there might be many packages for which we don't need those sources and where we do need them, we could potentially add them as native-inputs. Another alternative would be to keep the sources in lib/erlang/lib/lib-name/src so that it gets symlinked by the phase we have. Though at that point we can surely go with a less surprising install directory. > > Also, IIUC, erlang-depends already does something rather similar. > > Is there any reason it's broken for you? > > WAITING: Without that (i.e., _checkouts/lib-name/src), rebar3 will > not compile things. Is this a satisfaying explaination? I mean, ideally we would store these things in some other directory, given that _checkouts/lib-name already contains the precompiled stuff after erlang-depends. However, if the tooling insists on storing both in the same place, you could simply amend the existing erlang-depends phase to 1. Copy instead of symlinking 2. Also copy the sources Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Mon, 30 Oct 2023 12:32:02 GMT) Full text and rfc822 format available.Message #131 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH va3e5ae0f..37252e07 01/32] rebar-build-system and packages. Date: Mon, 30 Oct 2023 13:30:23 +0100
[Message part 1 (text/plain, inline)]
I've collected your comments in an org-file so that it's easier (at least for me, but I hope it's the case for you too) to follow multiple discussions at the same time. I've only included the ones that are still open to discussion. The structure should be self-evident. The most important comment may be Comment 9. Cheers. * TODO Comment 4 ** LMP This reeks of the hack that we need for cargo-build-system, except with a worse variable name. I strongly suggest looking into ways we can do without it. ** PHF This idea came from a discussion with jpoiret. See: https://logs.guix.gnu.org/guix/2023-10-24.log#180111. It seems that the idea you suggest is to use =search-path-as-list= as hinted below (=Comment 9=). Is this correct? * TODO Comment 6 ** LMP Uhm, how are you improving the status quo here? ** PHF Comment updated with: #+begin_example ;; If these directories exist, then no error occurs. So, we make sure ;; they exist. #+end_example Is this OK? I don't see how to prevent rebar3 to do that. It's apparently an opened issue: https://github.com/erlang/rebar3/issues/1173 * TODO Comment 9 ** LMP You might want to look into possible PATH variables or put these sources into a special folder so that you can use search-path-as-list. ** PHF Perhaps an idea: 1) If we require all Erlang packages to have an output “src” something like: /gnu/store/…elixir-pkg-1.2.3/src/elixir/src/…, 2) then (search-path-as-list '("src/elixir/src") '("/gnu/store…elixir-pkg-1.2.3" …)) would return '("/gnu/store…elixir-pkg-1.2.3/src/elixir/src" …) ≡ lst-src. 3) Given lst-src, it would be enough to install each source under _checkouts, i.e., _checkouts/lib-name/src. It is probably feasible to retrieve lib-name from somewhere. What do you think? ** LMP Rather than require, you can add a phase to ensure that this is the case. I'm not sure whether we should make that an extra output, however; there might be many packages for which we don't need those sources and where we do need them, we could potentially add them as native-inputs. ** PHF Agreed. ** LMP Another alternative would be to keep the sources in =lib/erlang/lib/lib-name/src= so that it gets symlinked by the phase we have. Though at that point we can surely go with a less surprising install directory. ** PHF Here is the approach taken so far: 1) The objective is to ensure that =mix compile= does not attempt to use the network and, as a result, fails to compile. 2) For the above to be true, it is necessary to have — at build time — the sources of all Erlang input packages and install them as checkouts. 3) Thus, the question becomes: How to access all the Erlang package sources at build time? 4) One idea was to have the client side of the build code send all the sources to the server through the poorly named argument =#:sources-erlang=. This led to the current code. It relies on the fact that for a given Erlang package, it is possible to access its source in the store, for example, =/gnu/store/…erlang-kv/erlang-kv.tar=. 5) Instead, you propose modifying the installation process so that sources are installed along with the built libraries. The source might be collected with =search-path-as-list=. The downside seems to be that the source code is stored twice: first in the archive, then in the package. However, this could lead to a much cleaner method of passing the sources to the build-side code, that is, the source code would not be passed through =arguments=. I'm sending a patch based on this latter idea. Are you OK with that? * TODO Comment 10 ** LMP Also, IIUC, erlang-depends already does something rather similar. Is there any reason it's broken for you? ** PHF Without that (i.e., _checkouts/lib-name/src), rebar3 will not compile things. Is this a satisfying explanation? ** LMP I mean, ideally we would store these things in some other directory, given that _checkouts/lib-name already contains the precompiled stuff after erlang-depends. However, if the tooling insists on storing both in the same place, you could simply amend the existing erlang-depends phase to: 1. Copy instead of symlinking 2. Also copy the sources ** PHF If I understand correctly, this should be addressed with the patch from =Comment 9= section above.
[Message part 2 (text/html, inline)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Mon, 30 Oct 2023 20:41:02 GMT) Full text and rfc822 format available.Message #134 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH va3e5ae0f..37252e07 01/32] rebar-build-system and packages. Date: Mon, 30 Oct 2023 21:40:00 +0100
Am Montag, dem 30.10.2023 um 13:30 +0100 schrieb Pierre-Henry Fröhring: > [...] > Comment updated with: > #+begin_example > ;; If these directories exist, then no error occurs. So, we make > sure > ;; they exist. > #+end_example > Is this OK? > > I don't see how to prevent rebar3 to do that. It's apparently an > opened issue: > https://github.com/erlang/rebar3/issues/1173 I'd recommend sticking with the current flow, however, and either create those directories unconditionally or inside the (when (file-exists? …) …) In general, don't mix gratuitous "styling" changes into your commits. Try to keep your edits minimal and reviewable. > Here is the approach taken so far: > 1) The objective is to ensure that =mix compile= does not attempt to > use the network and, as a result, fails to compile. > 2) For the above to be true, it is necessary to have — at build time > — the sources of all Erlang input packages and install them as > checkouts. > 3) Thus, the question becomes: How to access all the Erlang package > sources at build time? > [...] One idea both of us haven't voiced so far is to actually grab these in the (guix build-system …) code rather than the (guix build …) side and make the sources available via a mapping. Think package → (package- source package). The downsides of this are quite obvious. First, to my knowledge something like that hasn't been done yet, so there's no reference point. Second, the (guix build …) side would still need to identify what's an erlang source. Given our code for the unpack phase, I'd hazard a guess that this is non-trivial. Thus, even if there's theoretically a way to not store the same tarball twice, in practice it doesn't really matter. You could alternatively also write the sources to a special source output if and only if one such output is requested via the outputs field. Again, I'd hazard a guess that this would be a very standard output for anything that needs to go into mix-build-system and thus not worth the split after all. Alternatively² you could patch mix to only look for compiled stuff and not sources. That would tackle the issue at the root instead of trying to work around it, with the caveat being that we would need to maintain this patch ourselves if upstream doesn't accept it. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 08 Nov 2023 09:23:01 GMT) Full text and rfc822 format available.Message #137 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org, Liliana Marie Prikler <liliana.prikler <at> gmail.com> Subject: A minimal set of changes. Date: Wed, 8 Nov 2023 10:21:43 +0100
[Message part 1 (text/plain, inline)]
Dear Liliana, Learning from our previous exchanges, I would like to first thank you for your patience and propose refocusing our conversation on a more concise set of changes. I am preparing to send a cover letter as recommended in the "Sending a Patch Series" section of the Guix manual, accompanied by a couple of patches. These will contain just enough code to validate the approach taken, along with a few packages for testing purposes. If the approach is deemed satisfactory, I will make any necessary corrections based on your feedback and continue to send more patches until the Phoenix package can be successfully built. Cheers.
[Message part 2 (text/html, inline)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 08 Nov 2023 09:26:02 GMT) Full text and rfc822 format available.Message #140 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH 0/5] build Erlang packages with dependencies Date: Wed, 8 Nov 2023 10:22:34 +0100
Introduction ════════════ • The objective is to introduce a `mix-build-system' for building Elixir packages. • It is first necessary to have `rebar-build-system' to build Erlang packages. • We start by showing a build procedure using a package named `lager' that operates without the need for network access. • We generalize the build procedure to any Erlang package by using [Checkout Dependencies]. • To align this build procedure with Guix, we ensure that for any Erlang Guix package, all its dependencies, including the transitive ones, can be identified. • We show that the source code for each dependency is retrievable from the store. • We modify `rebar.scm' and `rebar-build-system.scm' to build procedure into Guix. • The packages defined in `erlang-xyz.scm' serve as the test cases for this implementation. • The changes to the Guix source code are minimal. While the primary goal is to validate the approach, it may be necessary to resolve stylistic issues or potential bugs. [Checkout Dependencies] <https://rebar3.org/docs/configuration/dependencies/#checkout-dependencies> Bash ════ Rebar3 compiles and tests Lager without network access ────────────────────────────────────────────────────── There is a directory and an environment such that `rebar3 compile' and `rebar3 test' compile and test the [lager package] without network access. [lager package] <https://hex.pm/packages/lager> Sources are fetched and unpacked ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┌──── │ #! /usr/bin/env bash │ set -euo pipefail │ IFS=$'\n\t' │ │ tmpdir=$(mktemp -d) │ cd $tmpdir │ wget -O source.tar https://repo.hex.pm/tarballs/lager-3.9.2.tar │ tar xf source.tar │ tar xf contents.tar.gz └──── Dependencies are fetched ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┌──── │ rebar3 compile │ rebar3 eunit └──── Checkouts are built ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ #+begin_src bash mkdir _checkouts mv _build/default/lib/goldrush _checkouts rm -rf _build #+end_srcè The directory is built ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┌──── │ . │ ├── _checkouts │ │ └── goldrush │ │ ├── ebin │ │ │ ├── … │ │ │ └── gr_sup.beam │ │ ├── hex_metadata.config │ │ ├── LICENSE │ │ ├── priv │ │ │ └── edoc.css │ │ ├── README.org │ │ ├── rebar.config │ │ ├── rebar.lock │ │ └── src │ │ ├── … │ │ └── gr_sup.erl │ ├── CHECKSUM │ ├── contents.tar.gz │ ├── include │ │ └── lager.hrl │ ├── LICENSE │ ├── metadata.config │ ├── priv │ │ └── edoc.css │ ├── README.md │ ├── rebar.config │ ├── rebar.config.script │ ├── rebar.lock │ ├── source.tar │ ├── src │ │ ├── … │ │ └── lager_util.erl │ └── VERSION │ │ 9 directories, 73 files └──── The environment is defined ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┌──── │ (specifications->manifest '("coreutils" "rebar3")) └──── Lager is compiled and tested without network access ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┌──── │ guix shell -C -m manifest.scm -- rebar3 compile │ guix shell -C -m manifest.scm -- rebar3 eunit └──── Erlang can find and use the compiled module ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┌──── │ ERL_LIBS=_build/default/lib erl -noshell -eval 'io:format("~p~n", [code:which(lager)]).' -s init stop └──── ┌──── │ "_build/default/lib/lager/ebin/lager.beam" └──── Discussion ══════════ Several observations can be made, and alternative approaches can be proposed, as listed below. Meanwhile, with the implementation described above, it becomes feasible to build Erlang packages with Guix, which is an essential step towards building Elixir packages. Wasted Computations ─────────────────── This build procedure needs to re-build of all Erlang dependencies for an Erlang package, even if they have been previously built. This is due to the `rebar3' build system's refusal to operate without network access unless the dependencies are checked out. If checked out, it insists on rebuilding them from sources. Expensive computations ────────────────────── For a given Erlang dependency, it is necessary to retreive all its transitive dependencies which might be expensive to compute. See: [all-transitive-inputs]. [all-transitive-inputs] <./guix/build-system/rebar.scm::(define (all-transitive-inputs> Wasted Space ──────────── The source code for all Erlang dependencies of a specific Erlang package must be available on the build machine, whereas it might be assumed that the build artifacts alone would suffice. Alternatives ──────────── Liliana Marie Pinker has suggested several alternatives listed below. Store sources along the build artifacts ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ From [issue/66801]: keep the sources in lib/erlang/lib/lib-name/src so that it gets symlinked by the phase we have. Though at that point we can surely go with a less surprising install directory. [issue/66801] <https://issues.guix.gnu.org/issue/66801> Write the sources to a special source output ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ From [issue/66801]: You could alternatively also write the sources to a special source output if and only if one such output is requested via the outputs field. Again, I'd hazard a guess that this would be a very standard output for anything that needs to go into mix-build-system and thus not worth the split after all. [issue/66801] <https://issues.guix.gnu.org/issue/66801> Patch Rebar3 ╌╌╌╌╌╌╌╌╌╌╌╌ From [issue/66801]: you could patch mix to only look for compiled stuff and not sources. That would tackle the issue at the root instead of trying to work around it, with the caveat being that we would need to maintain this patch ourselves if upstream doesn't accept it. [issue/66801] <https://issues.guix.gnu.org/issue/66801> Pierre-Henry Fröhring (5): guix: build-system: rebar: build Erlang packages with dependencies. gnu: Add erlang-goldrush. gnu: Add erlang-lager. gnu: Add erlang-unicode-util-compat. gnu: Add erlang-idna. gnu/packages/erlang-xyz.scm | 111 +++++++++++++++ guix/build-system/rebar.scm | 223 ++++++++++++++++++++++-------- guix/build/rebar-build-system.scm | 43 +++--- 3 files changed, 300 insertions(+), 77 deletions(-) create mode 100644 gnu/packages/erlang-xyz.scm base-commit: 4dfbc536689b07e56aead3dd864b8af54613d091 -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 08 Nov 2023 09:27:01 GMT) Full text and rfc822 format available.Message #143 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH 1/5] guix: build-system: rebar: build Erlang packages with dependencies. Date: Wed, 8 Nov 2023 10:22:35 +0100
Change-Id: Ie221d47fd1c9a766c2e2cdf76460ddfdf65e090d --- guix/build-system/rebar.scm | 223 ++++++++++++++++++++++-------- guix/build/rebar-build-system.scm | 43 +++--- 2 files changed, 189 insertions(+), 77 deletions(-) diff --git a/guix/build-system/rebar.scm b/guix/build-system/rebar.scm index de1294ec..cdff85a6 100644 --- a/guix/build-system/rebar.scm +++ b/guix/build-system/rebar.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 Ricardo Wurmus <rekado <at> elephly.net> ;;; Copyright © 2020 Hartmut Goebel <h.goebel <at> crazy-compilers.com> +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -18,20 +19,120 @@ ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. (define-module (guix build-system rebar) - #:use-module (guix store) - #:use-module (guix utils) + #:use-module (guix build-system gnu) + #:use-module (guix build-system) #:use-module (guix gexp) - #:use-module (guix packages) #:use-module (guix monads) + #:use-module (guix packages) #:use-module (guix search-paths) - #:use-module (guix build-system) - #:use-module (guix build-system gnu) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) #:export (hexpm-uri hexpm-package-url %rebar-build-system-modules rebar-build rebar-build-system)) + +;;; +;;; Utils +;;; + +(define (flatten lst) (fold append '() lst)) + + +;;; +;;; Packages +;;; + +(define %erlang-package-prefix "erlang-") + +(define (erlang-package-name? name) + "Indicates if NAME is an Erlang package name. +If a package name starts with %erlang-package-prefix, then it is an Erlang package name. +An Erlang package name must start with %erlang-package-prefix." + (string-prefix? %erlang-package-prefix name)) + +(define (hexpm-name pkg-name) + "Given a package name PKG-NAME, returns the corresponding hex.pm package name." + (let ((suffix (string-drop pkg-name (string-length %erlang-package-prefix)))) + (string-replace-substring suffix "-" "_"))) + +(define (all-transitive-inputs pkg pred) + "Given a package PKG and a predicate PRED, return all transitive inputs of PKG +that match the predicate PRED." + (delete-duplicates + (append + (filter pred (package-transitive-inputs pkg)) + (filter pred (package-transitive-native-inputs pkg)) + (filter pred (package-transitive-propagated-inputs pkg))) + input=?)) + + +;;; +;;; Input +;;; + +(define (input-mk name package) + "Build an Input." + (list name package)) + +(define (input->name input) + "Return the name of INPUT." + (car input)) + +(define (input->package input) + "Return the package of INPUT." + (cadr input)) + +(define (input=? i1 i2) + "Test whether Inputs I1 and I2 are equal." + (string=? (input->name i1) (input->name i2))) + +(define (erlang-input? input) + "Test whether INPUT is an Erlang Input." + (erlang-package-name? (input->name input))) + +(define (input->all-inputs input pred) + "Return the list of implicit satisfying PRED Inputs associated to INPUT, including INPUT." + (cons input (all-transitive-inputs (input->package input) pred))) + +(define (inputs->all-erlang-inputs erlang-inputs) + "Return a list of implicit Erlang Inputs associated to INPUT, including INPUT." + (let ((all-inputs (flatten (map (cut input->all-inputs <> erlang-package-name?) erlang-inputs)))) + (delete-duplicates all-inputs input=?))) + + +;;; +;;; Source +;;; + +(define (source-mk name origin) + "Build a source. +NAME is an hex.pm package name. +ORIGIN is an Origin." + (list name origin)) + +(define (source->name source) + "Return the name of SOURCE." + (car source)) + +(define (source->origin source) + "Return the origin of SOURCE." + (cadr source)) + +(define (source=? s1 s2) + "Test whether Sources S1 and S2 are equal." + (string=? (source->name s1) (source->name s2))) + +(define (input->source input) + "Given an Input INPUT, return its associated Source." + (source-mk (hexpm-name (input->name input)) + (package-source (input->package input)))) + + ;;; ;;; Definitions for the hex.pm repository, ;;; @@ -44,10 +145,11 @@ (define %hexpm-repo-url (define hexpm-package-url (string-append (%hexpm-repo-url) "/tarballs/")) -(define (hexpm-uri name version) +(define (hexpm-uri pkg-name version) "Return a URI string for the package hosted at hex.pm corresponding to NAME and VERSION." - (string-append hexpm-package-url name "-" version ".tar")) + (let ((name (if (erlang-package-name? pkg-name) (hexpm-name pkg-name) pkg-name))) + (string-append hexpm-package-url name "-" version ".tar"))) ;; ;; Standard build procedure for Erlang packages using Rebar. @@ -78,42 +180,50 @@ (define* (lower name #:rest arguments) "Return a bag for NAME from the given arguments." (define private-keywords - '(#:target #:rebar #:erlang #:inputs #:native-inputs)) - - (and (not target) ;XXX: no cross-compilation - (bag - (name name) - (system system) - (host-inputs `(,@(if source - `(("source" ,source)) - '()) - ,@inputs)) - (build-inputs `(("rebar" ,rebar) - ("erlang" ,erlang) ;; for escriptize - ,@native-inputs - ;; Keep the standard inputs of 'gnu-build-system'. - ,@(standard-packages))) - (outputs outputs) - (build rebar-build) - (arguments (strip-keyword-arguments private-keywords arguments))))) + '(#:target #:rebar #:erlang #:inputs #:native-inputs #:erlang-sources)) + + (let* ((inputs-all (append inputs native-inputs)) + (erlang-inputs (filter erlang-input? inputs-all)) + (all-erlang-inputs (inputs->all-erlang-inputs erlang-inputs)) + (all-erlang-sources (map input->source all-erlang-inputs))) + + (and (not target) ;XXX: no cross-compilation + (bag + (name name) + (system system) + (host-inputs `(,@(if source + `(("source" ,source)) + '()) + ,@inputs)) + (build-inputs `(("rebar" ,rebar) + ("erlang" ,erlang) ;; for escriptize + ,@inputs + ,@native-inputs + ;; Keep the standard inputs of 'gnu-build-system'. + ,@(standard-packages))) + (outputs outputs) + (build rebar-build) + (arguments (append (list #:erlang-sources all-erlang-sources) + (strip-keyword-arguments private-keywords arguments))))))) (define* (rebar-build name inputs - #:key - guile source - (rebar-flags ''("skip_deps=true" "-vv")) - (tests? #t) - (test-target "eunit") - ;; TODO: install-name ; default: based on guix package name - (install-profile "default") - (phases '(@ (guix build rebar-build-system) - %standard-phases)) - (outputs '("out")) - (search-paths '()) - (native-search-paths '()) - (system (%current-system)) - (imported-modules %rebar-build-system-modules) - (modules '((guix build rebar-build-system) - (guix build utils)))) + #:key + guile source + (rebar-flags ''("skip_deps=true" "-vv")) + (tests? #t) + (test-target "eunit") + ;; TODO: install-name ; default: based on guix package name + (install-profile "default") + (phases '(@ (guix build rebar-build-system) + %standard-phases)) + (outputs '("out")) + (search-paths '()) + (native-search-paths '()) + (erlang-sources '()) + (system (%current-system)) + (imported-modules %rebar-build-system-modules) + (modules '((guix build rebar-build-system) + (guix build utils)))) "Build SOURCE with INPUTS." (define builder @@ -123,21 +233,22 @@ (define* (rebar-build name inputs #$(with-build-variables inputs outputs #~(rebar-build #:source #+source - #:system #$system - #:name #$name - #:rebar-flags #$rebar-flags - #:tests? #$tests? - #:test-target #$test-target - ;; TODO: #:install-name #$install-name - #:install-profile #$install-profile - #:phases #$(if (pair? phases) - (sexp->gexp phases) - phases) - #:outputs %outputs - #:search-paths '#$(sexp->gexp - (map search-path-specification->sexp - search-paths)) - #:inputs %build-inputs))))) + #:system #$system + #:name #$name + #:rebar-flags #$rebar-flags + #:tests? #$tests? + #:test-target #$test-target + ;; TODO: #:install-name #$install-name + #:install-profile #$install-profile + #:phases #$(if (pair? phases) + (sexp->gexp phases) + phases) + #:outputs %outputs + #:search-paths '#$(sexp->gexp + (map search-path-specification->sexp + search-paths)) + #:inputs %build-inputs + #:erlang-sources '#$erlang-sources))))) (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) system #:graft? #f))) diff --git a/guix/build/rebar-build-system.scm b/guix/build/rebar-build-system.scm index fb664228..286e4e1a 100644 --- a/guix/build/rebar-build-system.scm +++ b/guix/build/rebar-build-system.scm @@ -28,6 +28,13 @@ (define-module (guix build rebar-build-system) #:export (rebar-build %standard-phases)) +;; +;; Utils +;; + +(define sep file-name-separator-string) + + ;; ;; Builder-side code of the standard build procedure for Erlang packages using ;; rebar3. @@ -37,27 +44,20 @@ (define-module (guix build rebar-build-system) (define %erlang-libdir "/lib/erlang/lib") -(define* (erlang-depends #:key inputs #:allow-other-keys) - (define input-directories - (match inputs - (((_ . dir) ...) - dir))) - (mkdir-p "_checkouts") - - (for-each - (lambda (input-dir) - (let ((elibdir (string-append input-dir %erlang-libdir))) - (when (directory-exists? elibdir) - (for-each - (lambda (dirname) - (let ((dest (string-append elibdir "/" dirname)) - (link (string-append "_checkouts/" dirname))) - (when (not (file-exists? link)) - ;; RETHINK: Maybe better copy and make writable to avoid some - ;; error messages e.g. when using with rebar3-git-vsn. - (symlink dest link)))) - (list-directories elibdir))))) - input-directories)) +(define (configure-environment . _) + (setenv "REBAR_CACHE_DIR" (getcwd))) + +(define* (erlang-depends #:key erlang-sources #:allow-other-keys) + (let ((checkouts "_checkouts")) + (mkdir-p checkouts) + (for-each (lambda (source) + (match source + ((name archive) + (let ((libdir (string-append checkouts sep name))) + (mkdir-p libdir) + (with-directory-excursion libdir + (unpack #:source archive)))))) + erlang-sources))) (define* (unpack #:key source #:allow-other-keys) "Unpack SOURCE in the working directory, and change directory within the @@ -134,6 +134,7 @@ (define* (install #:key name outputs (define %standard-phases (modify-phases gnu:%standard-phases (replace 'unpack unpack) + (add-after 'unpack 'configure-environment configure-environment) (delete 'bootstrap) (delete 'configure) (add-before 'build 'erlang-depends erlang-depends) -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 08 Nov 2023 09:27:02 GMT) Full text and rfc822 format available.Message #146 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH 2/5] gnu: Add erlang-goldrush. Date: Wed, 8 Nov 2023 10:22:36 +0100
Change-Id: If978f3936375c9391f1655402a4504d708cfa67d --- gnu/packages/erlang-xyz.scm | 55 +++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 gnu/packages/erlang-xyz.scm diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm new file mode 100644 index 00000000..082af121 --- /dev/null +++ b/gnu/packages/erlang-xyz.scm @@ -0,0 +1,55 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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-xyz) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages base) + #:use-module (gnu packages) + #:use-module (guix build-system rebar) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix git-download) + #:use-module (guix hg-download) + #:use-module (guix packages) + #:use-module (guix utils) + #:use-module (srfi srfi-1) + #:use-module (guix git-download) + #:use-module (gnu packages version-control) + #:use-module (srfi srfi-26)) + +(define-public erlang-goldrush + (package + (name "erlang-goldrush") + (version "0.1.9") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1ssck5yr7rnrfwzm55pbyi1scgs1sl1xim75h5sj5czwrwl43jwr")))) + (build-system rebar-build-system) + (synopsis "Erlang event stream processor") + (description "Erlang event stream processor") + (home-page "https://hex.pm/packages/goldrush") + (license license:isc))) + +;;; +;;; Avoid adding new packages to the end of this file. To reduce the chances +;;; of a merge conflict, place them above by existing packages with similar +;;; functionality or similar names. +;;; -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 08 Nov 2023 09:27:02 GMT) Full text and rfc822 format available.Message #149 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH 3/5] gnu: Add erlang-lager. Date: Wed, 8 Nov 2023 10:22:37 +0100
Change-Id: Iee1182644d57b7cca08afc6078102cc2409ede18 --- gnu/packages/erlang-xyz.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 082af121..4ed8099f 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -48,6 +48,25 @@ (define-public erlang-goldrush (home-page "https://hex.pm/packages/goldrush") (license license:isc))) +(define-public erlang-lager + (package + (name "erlang-lager") + (version "3.9.2") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0a0c6kvc2jman62vrx2l3nx6xqn8s5l1glvf2mk7xjx8hyg4v43z")))) + (build-system rebar-build-system) + ;; XXX: tests fail. + (arguments (list #:tests? #f)) + (propagated-inputs (list erlang-goldrush)) + (synopsis "Erlang logging framework") + (description "Erlang logging framework") + (home-page "https://hexdocs.pm/lager/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 08 Nov 2023 09:27:02 GMT) Full text and rfc822 format available.Message #152 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH 4/5] gnu: Add erlang-unicode-util-compat. Date: Wed, 8 Nov 2023 10:22:38 +0100
Change-Id: I15009c5dbe10c48bcdba9a143576122c877974b4 --- gnu/packages/erlang-xyz.scm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 4ed8099f..0c614542 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -67,6 +67,22 @@ (define-public erlang-lager (home-page "https://hexdocs.pm/lager/") (license license:asl2.0))) +(define-public erlang-unicode-util-compat + (package + (name "erlang-unicode-util-compat") + (version "0.7.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "08952lw8cjdw8w171lv8wqbrxc4rcmb3jhkrdb7n06gngpbfdvi5")))) + (build-system rebar-build-system) + (synopsis "Unicode compatibility library for Erlang < 20") + (description "Unicode compatibility library for Erlang < 20.") + (home-page "https://hex.pm/packages/unicode_util_compat") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 08 Nov 2023 09:27:03 GMT) Full text and rfc822 format available.Message #155 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH 5/5] gnu: Add erlang-idna. Date: Wed, 8 Nov 2023 10:22:39 +0100
Change-Id: Ie747409e9ef1f8a62ebefbc07131fef91e441a67 --- gnu/packages/erlang-xyz.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/erlang-xyz.scm b/gnu/packages/erlang-xyz.scm index 0c614542..fb614505 100644 --- a/gnu/packages/erlang-xyz.scm +++ b/gnu/packages/erlang-xyz.scm @@ -83,6 +83,27 @@ (define-public erlang-unicode-util-compat (home-page "https://hex.pm/packages/unicode_util_compat") (license license:asl2.0))) +(define-public erlang-idna + (package + (name "erlang-idna") + (version "6.1.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1sjcjibl34sprpf1dgdmzfww24xlyy34lpj7mhcys4j4i6vnwdwj")))) + (build-system rebar-build-system) + (propagated-inputs (list erlang-unicode-util-compat)) + (synopsis + "Erlang Internationalized Domain Names in Applications (IDNA) protocol") + (description + "Library to register and look up IDNs in a way + that does not require changes to the DNS itself. IDNA is only meant for +processing domain names, not free text. See: RFC 5891.") + (home-page "https://hexdocs.pm/idna/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 08 Nov 2023 20:42:02 GMT) Full text and rfc822 format available.Message #158 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>, 66801 <at> debbugs.gnu.org Subject: Re: [PATCH 1/5] guix: build-system: rebar: build Erlang packages with dependencies. Date: Wed, 08 Nov 2023 21:40:57 +0100
Am Mittwoch, dem 08.11.2023 um 10:22 +0100 schrieb Pierre-Henry Fröhring: > Change-Id: Ie221d47fd1c9a766c2e2cdf76460ddfdf65e090d > --- Missing the ChangeLog :) Also, don't forget to add me to CC so that I can see the changes more easily. > guix/build-system/rebar.scm | 223 ++++++++++++++++++++++------ > -- > guix/build/rebar-build-system.scm | 43 +++--- > 2 files changed, 189 insertions(+), 77 deletions(-) > > diff --git a/guix/build-system/rebar.scm b/guix/build- > system/rebar.scm > index de1294ec..cdff85a6 100644 > --- a/guix/build-system/rebar.scm > +++ b/guix/build-system/rebar.scm > @@ -1,6 +1,7 @@ > ;;; GNU Guix --- Functional package management for GNU > ;;; Copyright © 2016 Ricardo Wurmus <rekado <at> elephly.net> > ;;; Copyright © 2020 Hartmut Goebel <h.goebel <at> crazy-compilers.com> > +;;; Copyright © 2023 Pierre-Henry Fröhring > <phfrohring <at> deeplinks.com> > ;;; > ;;; This file is part of GNU Guix. > ;;; > @@ -18,20 +19,120 @@ > ;;; along with GNU Guix. If not, see > <http://www.gnu.org/licenses/>. > > (define-module (guix build-system rebar) > - #:use-module (guix store) > - #:use-module (guix utils) > + #:use-module (guix build-system gnu) > + #:use-module (guix build-system) > #:use-module (guix gexp) > - #:use-module (guix packages) > #:use-module (guix monads) > + #:use-module (guix packages) > #:use-module (guix search-paths) > - #:use-module (guix build-system) > - #:use-module (guix build-system gnu) > + #:use-module (guix store) > + #:use-module (guix utils) > + #:use-module (srfi srfi-1) > + #:use-module (srfi srfi-26) > #:export (hexpm-uri > hexpm-package-url > %rebar-build-system-modules > rebar-build > rebar-build-system)) > > + > +;;; > +;;; Utils > +;;; > + > +(define (flatten lst) (fold append '() lst)) You use this procedure once and you can probably replace it with append-map from SRFI-1. > +;;; > +;;; Packages > +;;; > + > +(define %erlang-package-prefix "erlang-") > + > +(define (erlang-package-name? name) > + "Indicates if NAME is an Erlang package name. > +If a package name starts with %erlang-package-prefix, then it is an > Erlang package name. > +An Erlang package name must start with %erlang-package-prefix." > + (string-prefix? %erlang-package-prefix name)) > + > +(define (hexpm-name pkg-name) > + "Given a package name PKG-NAME, returns the corresponding hex.pm > package name." > + (let ((suffix (string-drop pkg-name (string-length %erlang- > package-prefix)))) > + (string-replace-substring suffix "-" "_"))) > + > +(define (all-transitive-inputs pkg pred) > + "Given a package PKG and a predicate PRED, return all transitive > inputs of PKG > +that match the predicate PRED." > + (delete-duplicates > + (append > + (filter pred (package-transitive-inputs pkg)) > + (filter pred (package-transitive-native-inputs pkg)) > + (filter pred (package-transitive-propagated-inputs pkg))) > + input=?)) We already have package-direct-inputs. Instead of matching labels, you might want to match package names instead anyway. > + > +;;; > +;;; Input > +;;; > + > +(define (input-mk name package) > + "Build an Input." > + (list name package)) > + > +(define (input->name input) > + "Return the name of INPUT." > + (car input)) > + > +(define (input->package input) > + "Return the package of INPUT." > + (cadr input)) You shouldn't define such destructuring procedures. Use (ice-9 match) where needed. > +(define (input=? i1 i2) > + "Test whether Inputs I1 and I2 are equal." > + (string=? (input->name i1) (input->name i2))) Yeah, don't compare labels. > +(define (erlang-input? input) > + "Test whether INPUT is an Erlang Input." > + (erlang-package-name? (input->name input))) > + > +(define (input->all-inputs input pred) > + "Return the list of implicit satisfying PRED Inputs associated to > INPUT, including INPUT." > + (cons input (all-transitive-inputs (input->package input) pred))) > + > +(define (inputs->all-erlang-inputs erlang-inputs) > + "Return a list of implicit Erlang Inputs associated to INPUT, > including INPUT." > + (let ((all-inputs (flatten (map (cut input->all-inputs <> erlang- > package-name?) erlang-inputs)))) > + (delete-duplicates all-inputs input=?))) The name, arguments, and docstring of this function do not match in any way. Consider expressing yourself in terms of known Guile functions. (define (transitive-erlang-inputs inputs) (define (erlang-inputs inputs) (filter-map (match-lambda ((name package . output) (and (erlang-package-name?) (cons* name package output)))) inputs)) (delete-duplicates (append-map erlang-inputs (append-map package-transitive-inputs (map cadr inputs))))) Note that there's almost certainly a smarter way than nesting two append-maps, but am currently too lazy to look that up. > + > +;;; > +;;; Source > +;;; > + > +(define (source-mk name origin) > + "Build a source. > +NAME is an hex.pm package name. > +ORIGIN is an Origin." > + (list name origin)) > + > +(define (source->name source) > + "Return the name of SOURCE." > + (car source)) > + > +(define (source->origin source) > + "Return the origin of SOURCE." > + (cadr source)) > + > +(define (source=? s1 s2) > + "Test whether Sources S1 and S2 are equal." > + (string=? (source->name s1) (source->name s2))) > + > +(define (input->source input) > + "Given an Input INPUT, return its associated Source." > + (source-mk (hexpm-name (input->name input)) > + (package-source (input->package input)))) Again, use ice-9 match instead of manually defining all those destructuring procedures. > + > ;;; > ;;; Definitions for the hex.pm repository, > ;;; > @@ -44,10 +145,11 @@ (define %hexpm-repo-url > (define hexpm-package-url > (string-append (%hexpm-repo-url) "/tarballs/")) > > -(define (hexpm-uri name version) > +(define (hexpm-uri pkg-name version) > "Return a URI string for the package hosted at hex.pm > corresponding to NAME > and VERSION." > - (string-append hexpm-package-url name "-" version ".tar")) > + (let ((name (if (erlang-package-name? pkg-name) (hexpm-name pkg- > name) pkg-name))) > + (string-append hexpm-package-url name "-" version ".tar"))) > > ;; > ;; Standard build procedure for Erlang packages using Rebar. > @@ -78,42 +180,50 @@ (define* (lower name > #:rest arguments) > "Return a bag for NAME from the given arguments." > (define private-keywords > - '(#:target #:rebar #:erlang #:inputs #:native-inputs)) > - > - (and (not target) ;XXX: no cross- > compilation > - (bag > - (name name) > - (system system) > - (host-inputs `(,@(if source > - `(("source" ,source)) > - '()) > - ,@inputs)) > - (build-inputs `(("rebar" ,rebar) > - ("erlang" ,erlang) ;; for escriptize > - ,@native-inputs > - ;; Keep the standard inputs of 'gnu-build- > system'. > - ,@(standard-packages))) > - (outputs outputs) > - (build rebar-build) > - (arguments (strip-keyword-arguments private-keywords > arguments))))) > + '(#:target #:rebar #:erlang #:inputs #:native-inputs #:erlang- > sources)) > + > + (let* ((inputs-all (append inputs native-inputs)) > + (erlang-inputs (filter erlang-input? inputs-all)) > + (all-erlang-inputs (inputs->all-erlang-inputs erlang- > inputs)) > + (all-erlang-sources (map input->source all-erlang-inputs))) Instead of let-binding these, you might want to define a procedure (erlang-sources inputs native-inputs) and then use that for #:erlang- sources. > + (and (not target) ;XXX: no cross-compilation > + (bag > + (name name) > + (system system) > + (host-inputs `(,@(if source > + `(("source" ,source)) > + '()) > + ,@inputs)) > + (build-inputs `(("rebar" ,rebar) > + ("erlang" ,erlang) ;; for escriptize > + ,@inputs > + ,@native-inputs > + ;; Keep the standard inputs of 'gnu- > build-system'. > + ,@(standard-packages))) > + (outputs outputs) > + (build rebar-build) > + (arguments (append (list #:erlang-sources all-erlang- > sources) > + (strip-keyword-arguments private- > keywords arguments))))))) > > (define* (rebar-build name inputs > - #:key > - guile source > - (rebar-flags ''("skip_deps=true" "-vv")) > - (tests? #t) > - (test-target "eunit") > - ;; TODO: install-name ; default: based on > guix package name > - (install-profile "default") > - (phases '(@ (guix build rebar-build-system) > - %standard-phases)) > - (outputs '("out")) > - (search-paths '()) > - (native-search-paths '()) > - (system (%current-system)) > - (imported-modules %rebar-build-system- > modules) > - (modules '((guix build rebar-build-system) > - (guix build utils)))) > + #:key > + guile source > + (rebar-flags ''("skip_deps=true" "-vv")) > + (tests? #t) > + (test-target "eunit") > + ;; TODO: install-name ; default: based on > guix package name > + (install-profile "default") > + (phases '(@ (guix build rebar-build-system) > + %standard-phases)) > + (outputs '("out")) > + (search-paths '()) > + (native-search-paths '()) > + (erlang-sources '()) > + (system (%current-system)) > + (imported-modules %rebar-build-system-modules) > + (modules '((guix build rebar-build-system) > + (guix build utils)))) > "Build SOURCE with INPUTS." > > (define builder > @@ -123,21 +233,22 @@ (define* (rebar-build name inputs > > #$(with-build-variables inputs outputs > #~(rebar-build #:source #+source > - #:system #$system > - #:name #$name > - #:rebar-flags #$rebar-flags > - #:tests? #$tests? > - #:test-target #$test-target > - ;; TODO: #:install-name #$install-name > - #:install-profile #$install-profile > - #:phases #$(if (pair? phases) > - (sexp->gexp phases) > - phases) > - #:outputs %outputs > - #:search-paths '#$(sexp->gexp > - (map search-path- > specification->sexp > - search-paths)) > - #:inputs %build-inputs))))) > + #:system #$system > + #:name #$name > + #:rebar-flags #$rebar-flags > + #:tests? #$tests? > + #:test-target #$test-target > + ;; TODO: #:install-name #$install-name > + #:install-profile #$install-profile > + #:phases #$(if (pair? phases) > + (sexp->gexp phases) > + phases) > + #:outputs %outputs > + #:search-paths '#$(sexp->gexp > + (map search-path- > specification->sexp > + search-paths)) > + #:inputs %build-inputs > + #:erlang-sources '#$erlang-sources))))) > > (mlet %store-monad ((guile (package->derivation (or guile > (default-guile)) > system #:graft? > #f))) > diff --git a/guix/build/rebar-build-system.scm b/guix/build/rebar- > build-system.scm > index fb664228..286e4e1a 100644 > --- a/guix/build/rebar-build-system.scm > +++ b/guix/build/rebar-build-system.scm > @@ -28,6 +28,13 @@ (define-module (guix build rebar-build-system) > #:export (rebar-build > %standard-phases)) > > +;; > +;; Utils > +;; > + > +(define sep file-name-separator-string) How about no? > + > ;; > ;; Builder-side code of the standard build procedure for Erlang > packages using > ;; rebar3. > @@ -37,27 +44,20 @@ (define-module (guix build rebar-build-system) > > (define %erlang-libdir "/lib/erlang/lib") > > -(define* (erlang-depends #:key inputs #:allow-other-keys) > - (define input-directories > - (match inputs > - (((_ . dir) ...) > - dir))) > - (mkdir-p "_checkouts") > - > - (for-each > - (lambda (input-dir) > - (let ((elibdir (string-append input-dir %erlang-libdir))) > - (when (directory-exists? elibdir) > - (for-each > - (lambda (dirname) > - (let ((dest (string-append elibdir "/" dirname)) > - (link (string-append "_checkouts/" dirname))) > - (when (not (file-exists? link)) > - ;; RETHINK: Maybe better copy and make writable to > avoid some > - ;; error messages e.g. when using with rebar3-git- > vsn. > - (symlink dest link)))) > - (list-directories elibdir))))) > - input-directories)) > +(define (configure-environment . _) > + (setenv "REBAR_CACHE_DIR" (getcwd))) How about simply naming this configure, so that you can use replace instead of add-after + delete below? > +(define* (erlang-depends #:key erlang-sources #:allow-other-keys) > + (let ((checkouts "_checkouts")) > + (mkdir-p checkouts) > + (for-each (lambda (source) > + (match source > + ((name archive) > + (let ((libdir (string-append checkouts sep > name))) Alternatively add a slash (/) to checkouts ;) > + (mkdir-p libdir) > + (with-directory-excursion libdir > + (unpack #:source archive)))))) > + erlang-sources))) This loses the previous erlang-depends logic, which unpackaged the already compiled packages. I really don't think we should have erlang be yet another rust that heats up the planet compiling leftpad over and over again. Can we somehow have that cake? > (define* (unpack #:key source #:allow-other-keys) > "Unpack SOURCE in the working directory, and change directory > within the > @@ -134,6 +134,7 @@ (define* (install #:key name outputs > (define %standard-phases > (modify-phases gnu:%standard-phases > (replace 'unpack unpack) > + (add-after 'unpack 'configure-environment configure-environment) > (delete 'bootstrap) > (delete 'configure) > (add-before 'build 'erlang-depends erlang-depends) Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Mon, 13 Nov 2023 19:00:02 GMT) Full text and rfc822 format available.Message #161 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH 1/5] guix: build-system: rebar: build Erlang packages with dependencies. Date: Mon, 13 Nov 2023 19:58:45 +0100
[Message part 1 (text/plain, inline)]
This loses the previous erlang-depends logic, which unpackaged the already compiled packages. I really don't think we should have erlang be yet another rust that heats up the planet compiling leftpad over and over again. Can we somehow have that cake? Okay, perhaps it would have been better to start working on the Mix building system and inform you simultaneously, instead of sending patches all at once. So, let's start anew. I have taken into account all of your suggestions and have crafted this patch introducing the mix-build-system. Yes, there are ChangeLogs now. Currently, the "Machete" package is compiled and tested without repeatedly compiling leftpad — i.e., considering pure Elixir packages up to transitive dependencies, it works as expected. This is new. As I'm learning how all this works, I'm not entirely sure that updating the rebar build system is absolutely necessary. I suppose we will understand more as we add an increasing number of Elixir packages, especially when incorporating Elixir packages with Erlang dependencies. So, here's what's coming up: 1. A patch that introduces the mix-build-system variable. 2. Several patches that introduce Elixir packages, up to elixir-machete, which is one of the few packages that includes tests in the tarball. I guess the next steps are as follows: 1. To determine if the approach is acceptable. Will we boil the world by compiling left-pad endlessly? 2. If the approach is deemed acceptable, the next step is to evaluate the code. Is the code riddled with delicious regexes? 3. If the first two points are verified, it might be worthwhile to continue developing this implementation until Phoenix is successfully compiled and tested as expected. For reference, I have attached a file named `mix-build-system.org'. This file contains a description of a prototype in Bash that illustrates the approach taken in this patch. Cheers.
[Message part 2 (text/html, inline)]
[mix-build-system.org (application/octet-stream, attachment)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Mon, 13 Nov 2023 20:29:02 GMT) Full text and rfc822 format available.Message #164 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: liliana.prikler <at> gmail.com, Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: ['PATCH v2' 01/14] build-system: Add mix-build-system. Date: Mon, 13 Nov 2023 21:26:09 +0100
* guix/build-system/mix.scm, * guix/build/mix-build-system.scm: New modules. Change-Id: I2cbf6c963a530e73420da0eb17ffaf92827451bf --- guix/build-system/mix.scm | 237 +++++++++++++++++++++++++ guix/build/mix-build-system.scm | 303 ++++++++++++++++++++++++++++++++ 2 files changed, 540 insertions(+) create mode 100644 guix/build-system/mix.scm create mode 100644 guix/build/mix-build-system.scm diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm new file mode 100644 index 00000000..ae4407c9 --- /dev/null +++ b/guix/build-system/mix.scm @@ -0,0 +1,237 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Standard build procedure for Elixir packages using 'mix'. This is +;; implemented as an extension of 'gnu-build-system'. +;; +;; Code: + +(define-module (guix build-system mix) + #:use-module (gnu packages base) + #:use-module (gnu packages elixir) + #:use-module (gnu packages elixir-xyz) + #:use-module (gnu packages erlang) + #:use-module (guix build mix-build-system) + #:use-module (guix build-system gnu) + #:use-module (guix build-system) + #:use-module (guix gexp) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix search-paths) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (mix-build-system hexpm-uri)) + +(define (hexpm-uri name version) + "Return the URI where to fetch the sources of a Hex package NAME at VERSION. +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" + (string-append "https://repo.hex.pm/tarballs/" + (string-replace-substring (strip-elixir-prefix name) "-" "_") + "-" version ".tar")) + +(define glibc-utf8-locales + (make-glibc-utf8-locales glibc + #:locales (list "en_US") + #:name "glibc-utf8-locales")) + +(define (default-elixir) + "Return the default Elixir package." + ;; Lazily resolve the binding to avoid a circular dependency. + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir))) + +(define imported-modules + `((guix build mix-build-system) + ,@%gnu-build-system-modules)) + +(define modules + '((guix build mix-build-system) + (guix build utils))) + +;; The prefix of Elixir packages. +(define %elixir-prefix "elixir-") + +;; The prefix of Erlang packages. +(define %erlang-prefix "erlang-") + +(define (erlang-package? package) + "Tell whether PACKAGE is an Erlang package." + (string-prefix? %erlang-prefix (package-name package))) + +(define (elixir-package? package) + "Tell whether PACKAGE is an Elixir package." + (string-prefix? %elixir-prefix (package-name package))) + +(define (erlang-or-elixir-pkg? package) + "Tell whether PACKAGE is an Elixir or an Erlang package." + (or (erlang-package? package) + (elixir-package? package))) + +(define (erlang-or-elixir-input? input) + "Tell whether INPUT is an Elixir or an Erlang input." + (match input + ((_ package) + (erlang-or-elixir-pkg? package)))) + +(define (input=? input1 input2) + "Tell whether inputs INPUT1 and INPUT2 are equal." + (define pkg1 (match input1 ((_ pkg) pkg))) + (define pkg2 (match input2 ((_ pkg) pkg))) + (string=? (package-name pkg1) (package-name pkg2))) + +;; A number of environment variables specific to the Mix build system are reflected here. +;; They are documented here: https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables. +;; Other parameters located in mix.exs are defined here: +;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration +(define* (mix-build name + inputs + #:key + source + elixir-X.Y ;The major and minor of Elixir. + (tests? #t) + (mix-path #f) ;See MIX_PATH. + (mix-exs "mix.exs") ;See MIX_EXS. + (build-per-environment #t) ;See :build_per_environment. + (phases '%standard-phases) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules imported-modules) + (modules modules)) + "Build SOURCE using Elixir, and with INPUTS." + + ;; Check the documentation of :build_per_environment here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration And + ;; "Environments" here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments + (define mix-environments + (if build-per-environment + `("prod" ,@(if tests? '("test") '())) + '("shared"))) + + (define builder + (with-imported-modules imported-modules + #~(begin + + (use-modules #$@(sexp->gexp modules)) + + #$(with-build-variables inputs outputs + #~(mix-build #:name #$name + #:source #+source + #:system #$system + #:tests? #$tests? + #:mix-path #$mix-path + #:mix-exs #$mix-exs + #:elixir-X.Y #$elixir-X.Y + #:mix-environments '#$mix-environments + #:build-per-environment #$build-per-environment + #:phases #$(if (pair? phases) + (sexp->gexp phases) + phases) + #:outputs %outputs + #:search-paths '#$(sexp->gexp + (map + search-path-specification->sexp + search-paths)) + #:inputs + %build-inputs))))) + + (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) + system + #:graft? #f))) + (gexp->derivation name + builder + #:system system + #:graft? #f ;consistent with 'gnu-build' + #:target #f + #:guile-for-build guile))) + +(define* (lower name + #:key + source + (inputs '()) + (tests? #t) + (native-inputs '()) + (propagated-inputs '()) + outputs + system + target + (elixir (default-elixir)) + #:allow-other-keys #:rest arguments) + "Return a bag for NAME." + (define private-keywords + '(#:inputs #:native-inputs #:outputs #:system #:target #:elixir)) + + ;; Libraries are compiled using a given version of Elixir. This fact is + ;; encoded by the name of a sub-directory like lib/elixir/X.Y. We compute + ;; the value of X.Y here which is valid for the whole build. + (define elixir-X.Y (version-major+minor (package-version elixir))) + + ;; Elixir depends on a specific version of Erlang, this one. + (define erlang (lookup-package-input elixir "erlang")) + + ;; For mix to compile and test a package, it needs to find all inputs, + ;; native-inputs and propagated-inputs (including the transitive ones) under + ;; _build directories like _build/prod/lib. + ;; + ;; Given inputs and native-inputs of the package, we need to compute the + ;; transitive closure of all Erlang and Elixir propagated inputs and add + ;; them to the build inputs. + (define all-propagated-inputs + ((compose + (cut delete-duplicates <> input=?) + (cut filter erlang-or-elixir-input? <>) + (cut append-map package-transitive-propagated-inputs <>) + (cut map cadr <>)) + (append inputs native-inputs))) + + (define build-inputs + `(,@(standard-packages) + ("glibc-utf8-locales" ,glibc-utf8-locales) + ("erlang" ,erlang) + ("rebar3" ,rebar3) + ("elixir" ,elixir) + ("elixir-hex" ,elixir-hex) + ,@all-propagated-inputs + ,@inputs + ,@native-inputs)) + + ;; Some inputs, such as C programs, may be architecture dependent. + (define host-inputs (if target inputs '())) + + (bag (name name) + (system system) + (build-inputs build-inputs) + (host-inputs host-inputs) + (outputs outputs) + (build mix-build) + (arguments (append `(#:elixir-X.Y ,elixir-X.Y) + (strip-keyword-arguments private-keywords arguments))))) + +(define mix-build-system + (build-system (name 'mix) + (description "The standard Mix build system") + (lower lower))) + +;;; mix.scm ends here diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build-system.scm new file mode 100644 index 00000000..86a5db51 --- /dev/null +++ b/guix/build/mix-build-system.scm @@ -0,0 +1,303 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Code: + +(define-module (guix build mix-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (ice-9 ftw) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module (ice-9 string-fun) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (mix-build + strip-elixir-prefix + %standard-phases)) + +(define (f-join . paths) + "Return a path (a string) formed from joining each component in PATHS (list of strings). +Example: \"a\" \"b\" \"c\" → \"a/b/c\"" + (string-join paths file-name-separator-string)) + +(define (strip-prefix prefix name) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +;; All Elixir package names start with this prefix. If a package name starts +;; with this prefix, then it is an Elixir package. +(define %elixir-prefix "elixir-") + +(define (path->elixir-lib path X.Y) + "Return the path to the directory within PATH where libraries of an Elixir +package are installed. Here, X.Y represents the major and minor version +numbers of Elixir used for compilation." + (f-join path "lib" "elixir" X.Y)) + +(define (elixir-name? name) + "Determines if NAME is the name or the label associated to an Elixir +package." + (string-prefix? %elixir-prefix name)) + +(define (elixir-input? X.Y input) + "Determines if the given INPUT is an Elixir input." + (match input + ((label . path) + ;; XXX: The second condition may be enough. + (and (elixir-name? label) + (directory-exists? (path->elixir-lib path X.Y)))))) + +(define (strip-elixir-prefix name) + "Strip %elixir-prefix from NAME." + (strip-prefix %elixir-prefix name)) + +;; All Erlang package names start with this prefix. If a package name starts +;; with this prefix, then it is an Erlang package. +(define %erlang-prefix "erlang-") + +(define (path->erlang-lib path) + "Return the path of the directory where libraries of an Erlang package are +installed in the store." + (f-join path "lib" "erlang" "lib")) + +(define (erlang-name? name) + "Determines if NAME is the name or the label associated to an Erlang +package." + (string-prefix? %erlang-prefix name)) + +(define (erlang-input? input) + "Determines if the given INPUT is an Erlang input." + (match input + ((label . path) + ;; XXX: one condition may be enough. Without the first one, the erlang + ;; input is considered an input when we just want Erlang packages. + (and (erlang-name? label) + (directory-exists? (path->erlang-lib path)))))) + +(define (strip-erlang-prefix name) + "Strip %erlang-prefix from NAME." + (strip-prefix %erlang-prefix name)) + +(define (erlang-or-elixir-input? X.Y input) + "Determines if the given INPUT is an Erlang or Elixir input." + (or (erlang-input? input) + (elixir-input? X.Y input))) + +(define (snakecase-name name) + "Return a snakecase version of NAME." + (string-replace-substring (string-downcase name) "-" "_")) + +(define (label->library-name label) + "Return the library name associated to an input label LABEL." + (define stripped-label + (cond + ((erlang-name? label) + (strip-erlang-prefix label)) + ((elixir-name? label) + (strip-elixir-prefix label)) + (#t (error "Invalid label: expected an Erlang or Elixir label." 'label label)))) + (snakecase-name stripped-label)) + +(define (pkg-name->library-name name) + "Return the name of the library deduced from the name of the Guix package. +Example: elixir-a-pkg-1.0.2 → a_pkg +See: https://www.erlang.org/doc/man/code#code-path" + ((compose + label->library-name + (cut string-join <> "-") + (cut drop-right <> 1) + (cut string-split <> #\-)) + name)) + +;; We fix as many variables as possible. +;; See: https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables +(define MIX_HOME "MIX_HOME") + +(define MIX_ARCHIVES "MIX_ARCHIVES") +(define (%mix-archives mix-home) (f-join mix-home "archives")) +(define MIX_BUILD_ROOT "MIX_BUILD_ROOT") +(define %mix-build-root "_build") +(define MIX_DEPS_PATH "MIX_DEPS_PATH") +(define %mix-deps-path "deps") +(define MIX_PATH "MIX_PATH") +(define MIX_REBAR3 "MIX_REBAR3") +(define MIX_EXS "MIX_EXS") +(define %mix-exs "mix.exs") +;; XXX: if different architecture are needed, then use this variable. +(define MIX_TARGET "MIX_TARGET") +(define MIX_ENV "MIX_ENV") +(define %mix-env-prod "prod") +(define %mix-env-test "test") +(define %mix-env-shared "shared") + +;; The name of the directory where compiled libraries by mix are stored. +(define %mix-lib "lib") + +;; Useful because Elixir expects a UTF-8 locale. +(define LC_ALL "LC_ALL") + +(define (mix-build-dir mix-env) + "Return the directory where build artifacts are to be installed according to +en environment MIX-ENV in the current directory." + (f-join %mix-build-root mix-env %mix-lib)) + +(define* (unpack #:key source mix-path #:allow-other-keys) + "Unpack SOURCE in the working directory, and change directory within the +source. When SOURCE is a directory, copy it in a sub-directory of the current +working directory." + (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) + (gnu-unpack #:source source) + (let ((contents "contents.tar.gz")) + (when (file-exists? contents) + (invoke "tar" "xvf" contents))))) + +(define* (configure #:key inputs mix-path mix-exs #:allow-other-keys) + "Set environment variables." + (setenv LC_ALL "en_US.UTF-8") + (setenv MIX_HOME (getcwd)) + (setenv MIX_ARCHIVES (%mix-archives (getenv MIX_HOME))) + (setenv MIX_BUILD_ROOT %mix-build-root) + (setenv MIX_DEPS_PATH %mix-deps-path) + (setenv MIX_PATH (or mix-path "")) + (setenv MIX_REBAR3 (f-join (assoc-ref inputs "rebar3") "bin" "rebar3")) + (setenv MIX_EXS mix-exs)) + +(define* (install-hex #:key inputs name elixir-X.Y #:allow-other-keys) + "Install Hex." + (define hex-name "hex") + (define hex-path (assoc-ref inputs "elixir-hex")) + (define hex-lib (f-join (path->elixir-lib hex-path elixir-X.Y) hex-name)) + (define hex-archive-path (f-join (getenv MIX_ARCHIVES) hex-name)) + (mkdir-p hex-archive-path) + (symlink hex-lib (f-join hex-archive-path hex-name))) + +(define* (install-dependencies #:key + name + tests? + build-per-environment + (inputs '()) + (native-inputs '()) + elixir-X.Y + mix-environments + #:allow-other-keys + #:rest rest) + "Install dependencies. +Given an environment mix-env, we define all-inputs(mix-env) as the set of all +necessary Erlang and Elixir inputs and associated propagated inputs (and +transitive propagated inputs). + +For example, all-inputs(prod) represents all the Erlang and Elixir inputs and +propagated inputs necessary to compile the Mix project for the prod +environment. + +If dep belongs to all-inputs(mix-env) and its library name is dep-name, then +it is installed under (f-join (mix-build-dir mix-env) dep-name) as a symbolic +link." + (define (all-inputs mix-env) + (define env-inputs + (cond + ((string=? mix-env %mix-env-prod) + inputs) + ((member mix-env (list %mix-env-test %mix-env-shared)) + (append inputs native-inputs)) + (#t (error "Unexpected Mix environment." 'mix-env mix-env)))) + (filter (cut erlang-or-elixir-input? elixir-X.Y <>) env-inputs)) + + (define (install-input mix-env input) + (let ((dir (mix-build-dir mix-env))) + (mkdir-p dir) + (match input + ((label . path) + (let ((lib-name (label->library-name label))) + (symlink + (f-join (path->elixir-lib path elixir-X.Y) lib-name) + (f-join dir lib-name))))))) + + (define (install-inputs mix-env) + (for-each (cut install-input mix-env <>) + (all-inputs mix-env))) + + (for-each install-inputs mix-environments)) + +(define* (build #:key mix-environments #:allow-other-keys) + "Builds the Mix project." + (define (compile mix-env) + (setenv MIX_ENV mix-env) + (invoke "mix" "compile" "--no-deps-check")) + (for-each compile mix-environments)) + +(define* (check #:key (tests? #t) #:allow-other-keys) + "Test the Mix project." + (if tests? + (invoke "mix" "test" "--no-deps-check") + (format #t "tests? = ~a~%" tests?))) + +(define* (remove-mix-dirs . _) + "Remove all .mix/ directories. +We do not want to copy them to the installation directory." + (define mix-dirs + (find-files "." + (file-name-predicate "\\.mix$") + #:directories? #t)) + (for-each delete-file-recursively mix-dirs)) + +(define* (install #:key + inputs + outputs + name + build-per-environment + elixir-X.Y + #:allow-other-keys) + "Install build artifacts in the store." + (define lib-name (pkg-name->library-name name)) + + (define dir-build + (f-join (mix-build-dir (if build-per-environment %mix-env-prod %mix-env-shared)) + lib-name)) + + (define dir-install + (f-join (path->elixir-lib (assoc-ref outputs "out") elixir-X.Y) + lib-name)) + (mkdir-p dir-install) + + (copy-recursively dir-build dir-install + #:follow-symlinks? #t)) + +(define %standard-phases + (modify-phases gnu:%standard-phases + (delete 'bootstrap) + (replace 'configure configure) + (replace 'unpack unpack) + (add-after 'patch-generated-file-shebangs 'install-hex install-hex) + (add-after 'install-hex 'install-dependencies install-dependencies) + (replace 'build build) + (replace 'check check) + (add-before 'install 'remove-mix-dirs remove-mix-dirs) + (replace 'install install))) + +(define* (mix-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given Mix package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; mix-build-system.scm ends here base-commit: a0d337e79c87d7c38c79d0291974f490cb137a52 -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Mon, 13 Nov 2023 21:24:01 GMT) Full text and rfc822 format available.Message #167 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>, 66801 <at> debbugs.gnu.org Subject: Re: ['PATCH v2' 01/14] build-system: Add mix-build-system. Date: Mon, 13 Nov 2023 22:22:52 +0100
Am Montag, dem 13.11.2023 um 21:26 +0100 schrieb Pierre-Henry Fröhring: > * guix/build-system/mix.scm, > * guix/build/mix-build-system.scm: New modules. > > Change-Id: I2cbf6c963a530e73420da0eb17ffaf92827451bf > --- > guix/build-system/mix.scm | 237 +++++++++++++++++++++++++ > guix/build/mix-build-system.scm | 303 > ++++++++++++++++++++++++++++++++ > 2 files changed, 540 insertions(+) > create mode 100644 guix/build-system/mix.scm > create mode 100644 guix/build/mix-build-system.scm > > diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm > new file mode 100644 > index 00000000..ae4407c9 > --- /dev/null > +++ b/guix/build-system/mix.scm > @@ -0,0 +1,237 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2023 Pierre-Henry Fröhring > <phfrohring <at> deeplinks.com> > +;;; > +;;; 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/>. > + > +;; Commentary: > +;; > +;; Standard build procedure for Elixir packages using 'mix'. This > is > +;; implemented as an extension of 'gnu-build-system'. > +;; > +;; Code: > + > +(define-module (guix build-system mix) > + #:use-module (gnu packages base) > + #:use-module (gnu packages elixir) > + #:use-module (gnu packages elixir-xyz) > + #:use-module (gnu packages erlang) You probably want to resolve those imports rather than use-modules them. > + #:use-module (guix build mix-build-system) > + #:use-module (guix build-system gnu) > + #:use-module (guix build-system) > + #:use-module (guix gexp) > + #:use-module (guix monads) > + #:use-module (guix packages) > + #:use-module (guix search-paths) > + #:use-module (guix store) > + #:use-module (guix utils) > + #:use-module (ice-9 match) > + #:use-module (srfi srfi-1) > + #:use-module (srfi srfi-26) > + #:export (mix-build-system hexpm-uri)) > + > +(define (hexpm-uri name version) > + "Return the URI where to fetch the sources of a Hex package NAME > at VERSION. > +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" > + (string-append "https://repo.hex.pm/tarballs/" > + (string-replace-substring (strip-elixir-prefix > name) "-" "_") > + "-" version ".tar")) > + > +(define glibc-utf8-locales > + (make-glibc-utf8-locales glibc > + #:locales (list "en_US") > + #:name "glibc-utf8-locales")) > + > +(define (default-elixir) > + "Return the default Elixir package." > + ;; Lazily resolve the binding to avoid a circular dependency. > + (let ((elixir (resolve-interface '(gnu packages elixir)))) > + (module-ref elixir 'elixir))) > + > +(define imported-modules > + `((guix build mix-build-system) > + ,@%gnu-build-system-modules)) > + > +(define modules > + '((guix build mix-build-system) > + (guix build utils))) > + > +;; The prefix of Elixir packages. > +(define %elixir-prefix "elixir-") > + > +;; The prefix of Erlang packages. > +(define %erlang-prefix "erlang-") > + > +(define (erlang-package? package) > + "Tell whether PACKAGE is an Erlang package." > + (string-prefix? %erlang-prefix (package-name package))) > + > +(define (elixir-package? package) > + "Tell whether PACKAGE is an Elixir package." > + (string-prefix? %elixir-prefix (package-name package))) > + > +(define (erlang-or-elixir-pkg? package) > + "Tell whether PACKAGE is an Elixir or an Erlang package." > + (or (erlang-package? package) > + (elixir-package? package))) You can simplify these five variables into one to three (three being quite many already depending on whether you'll actually use the smaller ones). > +(define (erlang-or-elixir-input? input) > + "Tell whether INPUT is an Elixir or an Erlang input." > + (match input > + ((_ package) > + (erlang-or-elixir-pkg? package)))) Skip. > +(define (input=? input1 input2) > + "Tell whether inputs INPUT1 and INPUT2 are equal." > + (define pkg1 (match input1 ((_ pkg) pkg))) > + (define pkg2 (match input2 ((_ pkg) pkg))) > + (string=? (package-name pkg1) (package-name pkg2))) Again, checking for label equivalence is a bad idea. > +;; A number of environment variables specific to the Mix build > system are reflected here. > +;; They are documented here: > https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables. > +;; Other parameters located in mix.exs are defined here: > +;; > https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration > +(define* (mix-build name > + inputs > + #:key > + source > + elixir-X.Y ;The major and minor of Elixir. > + (tests? #t) > + (mix-path #f) ;See MIX_PATH. > + (mix-exs "mix.exs") ;See MIX_EXS. > + (build-per-environment #t) ;See > :build_per_environment. > + (phases '%standard-phases) > + (outputs '("out")) > + (search-paths '()) > + (system (%current-system)) > + (guile #f) > + (imported-modules imported-modules) > + (modules modules)) > + "Build SOURCE using Elixir, and with INPUTS." > + > + ;; Check the documentation of :build_per_environment here: > + ;; > https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration A > nd > + ;; "Environments" here: > + ;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments > + (define mix-environments > + (if build-per-environment > + `("prod" ,@(if tests? '("test") '())) > + '("shared"))) > + > + (define builder > + (with-imported-modules imported-modules > + #~(begin > + > + (use-modules #$@(sexp->gexp modules)) > + > + #$(with-build-variables inputs outputs > + #~(mix-build #:name #$name > + #:source #+source > + #:system #$system > + #:tests? #$tests? > + #:mix-path #$mix-path > + #:mix-exs #$mix-exs > + #:elixir-X.Y #$elixir-X.Y > + #:mix-environments '#$mix-environments > + #:build-per-environment #$build-per- > environment > + #:phases #$(if (pair? phases) > + (sexp->gexp phases) > + phases) > + #:outputs %outputs > + #:search-paths '#$(sexp->gexp > + (map > + search-path- > specification->sexp > + search-paths)) > + #:inputs > + %build-inputs))))) > + > + (mlet %store-monad ((guile (package->derivation (or guile > (default-guile)) > + system > + #:graft? #f))) > + (gexp->derivation name > + builder > + #:system system > + #:graft? #f ;consistent with 'gnu-build' > + #:target #f > + #:guile-for-build guile))) > + > +(define* (lower name > + #:key > + source > + (inputs '()) > + (tests? #t) > + (native-inputs '()) > + (propagated-inputs '()) > + outputs > + system > + target > + (elixir (default-elixir)) > + #:allow-other-keys #:rest arguments) > + "Return a bag for NAME." > + (define private-keywords > + '(#:inputs #:native-inputs #:outputs #:system #:target > #:elixir)) > + > + ;; Libraries are compiled using a given version of Elixir. This > fact is > + ;; encoded by the name of a sub-directory like lib/elixir/X.Y. We > compute > + ;; the value of X.Y here which is valid for the whole build. > + (define elixir-X.Y (version-major+minor (package-version elixir))) > + > + ;; Elixir depends on a specific version of Erlang, this one. > + (define erlang (lookup-package-input elixir "erlang")) > + > + ;; For mix to compile and test a package, it needs to find all > inputs, > + ;; native-inputs and propagated-inputs (including the transitive > ones) under > + ;; _build directories like _build/prod/lib. > + ;; > + ;; Given inputs and native-inputs of the package, we need to > compute the > + ;; transitive closure of all Erlang and Elixir propagated inputs > and add > + ;; them to the build inputs. > + (define all-propagated-inputs > + ((compose > + (cut delete-duplicates <> input=?) > + (cut filter erlang-or-elixir-input? <>) > + (cut append-map package-transitive-propagated-inputs <>) > + (cut map cadr <>)) > + (append inputs native-inputs))) > + > + (define build-inputs > + `(,@(standard-packages) > + ("glibc-utf8-locales" ,glibc-utf8-locales) > + ("erlang" ,erlang) > + ("rebar3" ,rebar3) > + ("elixir" ,elixir) > + ("elixir-hex" ,elixir-hex) > + ,@all-propagated-inputs > + ,@inputs > + ,@native-inputs)) > + > + ;; Some inputs, such as C programs, may be architecture dependent. > + (define host-inputs (if target inputs '())) > + > + (bag (name name) > + (system system) > + (build-inputs build-inputs) > + (host-inputs host-inputs) > + (outputs outputs) > + (build mix-build) > + (arguments (append `(#:elixir-X.Y ,elixir-X.Y) > + (strip-keyword-arguments private-keywords > arguments))))) > + > +(define mix-build-system > + (build-system (name 'mix) > + (description "The standard Mix build system") > + (lower lower))) > + > +;;; mix.scm ends here > diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build- > system.scm > new file mode 100644 > index 00000000..86a5db51 > --- /dev/null > +++ b/guix/build/mix-build-system.scm > @@ -0,0 +1,303 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2023 Pierre-Henry Fröhring > <phfrohring <at> deeplinks.com> > +;;; > +;;; 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/>. > + > +;; Commentary: > +;; > +;; Code: > + > +(define-module (guix build mix-build-system) > + #:use-module ((guix build gnu-build-system) #:prefix gnu:) > + #:use-module (guix build utils) > + #:use-module (ice-9 ftw) > + #:use-module (ice-9 match) > + #:use-module (ice-9 regex) > + #:use-module (ice-9 string-fun) > + #:use-module (srfi srfi-1) > + #:use-module (srfi srfi-26) > + #:export (mix-build > + strip-elixir-prefix > + %standard-phases)) > + > +(define (f-join . paths) > + "Return a path (a string) formed from joining each component in > PATHS (list of strings). > +Example: \"a\" \"b\" \"c\" → \"a/b/c\"" > + (string-join paths file-name-separator-string)) It is wiser to write these out as regular string-appends. > +(define (strip-prefix prefix name) > + "Return NAME without the prefix PREFIX." > + (if (string-prefix? prefix name) > + (string-drop name (string-length prefix)) > + name)) I'm pretty sure we have a function looking like this somewhere, but I can't recall its name atm. > +;; All Elixir package names start with this prefix. If a package > name starts > +;; with this prefix, then it is an Elixir package. > +(define %elixir-prefix "elixir-") Useless magic constant. > + > +(define (path->elixir-lib path X.Y) > + "Return the path to the directory within PATH where libraries of > an Elixir > +package are installed. Here, X.Y represents the major and minor > version > +numbers of Elixir used for compilation." > + (f-join path "lib" "elixir" X.Y)) Is path itself ever useful here or does it simply point to the store? This can likely be simplified to (define (elixir-lib version) (string-append "/lib/elixir/" version)) > +(define (elixir-name? name) > + "Determines if NAME is the name or the label associated to an > Elixir > +package." > + (string-prefix? %elixir-prefix name)) Useless use of magic constant. > + > +(define (elixir-input? X.Y input) > + "Determines if the given INPUT is an Elixir input." > + (match input > + ((label . path) > + ;; XXX: The second condition may be enough. > + (and (elixir-name? label) > + (directory-exists? (path->elixir-lib path X.Y)))))) Ahem, search-path-as-list. Also, leaking the version is kinda bad, API-wise. > +(define (strip-elixir-prefix name) > + "Strip %elixir-prefix from NAME." > + (strip-prefix %elixir-prefix name)) > > +;; All Erlang package names start with this prefix. If a package > name starts > +;; with this prefix, then it is an Erlang package. > +(define %erlang-prefix "erlang-") > + > +(define (path->erlang-lib path) > + "Return the path of the directory where libraries of an Erlang > package are > +installed in the store." > + (f-join path "lib" "erlang" "lib")) > + > +(define (erlang-name? name) > + "Determines if NAME is the name or the label associated to an > Erlang > +package." > + (string-prefix? %erlang-prefix name)) > + > +(define (erlang-input? input) > + "Determines if the given INPUT is an Erlang input." > + (match input > + ((label . path) > + ;; XXX: one condition may be enough. Without the first one, the > erlang > + ;; input is considered an input when we just want Erlang > packages. > + (and (erlang-name? label) > + (directory-exists? (path->erlang-lib path)))))) > + > +(define (strip-erlang-prefix name) > + "Strip %erlang-prefix from NAME." > + (strip-prefix %erlang-prefix name)) Duplicated boilerplate for neither fun nor profit. > +(define (erlang-or-elixir-input? X.Y input) > + "Determines if the given INPUT is an Erlang or Elixir input." > + (or (erlang-input? input) > + (elixir-input? X.Y input))) Leak, leak, leak. > + > +(define (snakecase-name name) > + "Return a snakecase version of NAME." > + (string-replace-substring (string-downcase name) "-" "_")) > + > +(define (label->library-name label) > + "Return the library name associated to an input label LABEL." > + (define stripped-label > + (cond > + ((erlang-name? label) > + (strip-erlang-prefix label)) > + ((elixir-name? label) > + (strip-elixir-prefix label)) > + (#t (error "Invalid label: expected an Erlang or Elixir label." > 'label label)))) > + (snakecase-name stripped-label)) Don't rely on labels. > +(define (pkg-name->library-name name) > + "Return the name of the library deduced from the name of the Guix > package. > +Example: elixir-a-pkg-1.0.2 → a_pkg > +See: https://www.erlang.org/doc/man/code#code-path" > + ((compose > + label->library-name > + (cut string-join <> "-") > + (cut drop-right <> 1) > + (cut string-split <> #\-)) > + name)) > + > +;; We fix as many variables as possible. > +;; See: > https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables > +(define MIX_HOME "MIX_HOME") > + > +(define MIX_ARCHIVES "MIX_ARCHIVES") > +(define (%mix-archives mix-home) (f-join mix-home "archives")) > +(define MIX_BUILD_ROOT "MIX_BUILD_ROOT") > +(define %mix-build-root "_build") > +(define MIX_DEPS_PATH "MIX_DEPS_PATH") > +(define %mix-deps-path "deps") > +(define MIX_PATH "MIX_PATH") > +(define MIX_REBAR3 "MIX_REBAR3") > +(define MIX_EXS "MIX_EXS") > +(define %mix-exs "mix.exs") > +;; XXX: if different architecture are needed, then use this > variable. > +(define MIX_TARGET "MIX_TARGET") > +(define MIX_ENV "MIX_ENV") > +(define %mix-env-prod "prod") > +(define %mix-env-test "test") > +(define %mix-env-shared "shared") Gratuitous definitions are gratuitous. > +;; The name of the directory where compiled libraries by mix are > stored. > +(define %mix-lib "lib") > + > +;; Useful because Elixir expects a UTF-8 locale. > +(define LC_ALL "LC_ALL") > + > +(define (mix-build-dir mix-env) > + "Return the directory where build artifacts are to be installed > according to > +en environment MIX-ENV in the current directory." > + (f-join %mix-build-root mix-env %mix-lib)) > + > +(define* (unpack #:key source mix-path #:allow-other-keys) > + "Unpack SOURCE in the working directory, and change directory > within the > +source. When SOURCE is a directory, copy it in a sub-directory of > the current > +working directory." > + (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) > + (gnu-unpack #:source source) > + (let ((contents "contents.tar.gz")) > + (when (file-exists? contents) > + (invoke "tar" "xvf" contents))))) > + > +(define* (configure #:key inputs mix-path mix-exs #:allow-other- > keys) > + "Set environment variables." > + (setenv LC_ALL "en_US.UTF-8") > + (setenv MIX_HOME (getcwd)) > + (setenv MIX_ARCHIVES (%mix-archives (getenv MIX_HOME))) > + (setenv MIX_BUILD_ROOT %mix-build-root) > + (setenv MIX_DEPS_PATH %mix-deps-path) > + (setenv MIX_PATH (or mix-path "")) > + (setenv MIX_REBAR3 (f-join (assoc-ref inputs "rebar3") "bin" > "rebar3")) > + (setenv MIX_EXS mix-exs)) > + > +(define* (install-hex #:key inputs name elixir-X.Y #:allow-other- > keys) > + "Install Hex." > + (define hex-name "hex") > + (define hex-path (assoc-ref inputs "elixir-hex")) > + (define hex-lib (f-join (path->elixir-lib hex-path elixir-X.Y) > hex-name)) > + (define hex-archive-path (f-join (getenv MIX_ARCHIVES) hex-name)) > + (mkdir-p hex-archive-path) > + (symlink hex-lib (f-join hex-archive-path hex-name))) > + > +(define* (install-dependencies #:key > + name > + tests? > + build-per-environment > + (inputs '()) > + (native-inputs '()) > + elixir-X.Y > + mix-environments > + #:allow-other-keys > + #:rest rest) > + "Install dependencies. > +Given an environment mix-env, we define all-inputs(mix-env) as the > set of all > +necessary Erlang and Elixir inputs and associated propagated inputs > (and > +transitive propagated inputs). > + > +For example, all-inputs(prod) represents all the Erlang and Elixir > inputs and > +propagated inputs necessary to compile the Mix project for the prod > +environment. > + > +If dep belongs to all-inputs(mix-env) and its library name is dep- > name, then > +it is installed under (f-join (mix-build-dir mix-env) dep-name) as a > symbolic > +link." The docstring divulges implementation details without really explaining what the function itself does. > + (define (all-inputs mix-env) > + (define env-inputs > + (cond > + ((string=? mix-env %mix-env-prod) > + inputs) > + ((member mix-env (list %mix-env-test %mix-env-shared)) > + (append inputs native-inputs)) > + (#t (error "Unexpected Mix environment." 'mix-env mix-env)))) You probably want and ice-9 match here, which has an implicit error on failed matches. > + (filter (cut erlang-or-elixir-input? elixir-X.Y <>) env-inputs)) > + > + (define (install-input mix-env input) > + (let ((dir (mix-build-dir mix-env))) > + (mkdir-p dir) > + (match input > + ((label . path) > + (let ((lib-name (label->library-name label))) > + (symlink > + (f-join (path->elixir-lib path elixir-X.Y) lib-name) > + (f-join dir lib-name))))))) > + > + (define (install-inputs mix-env) > + (for-each (cut install-input mix-env <>) > + (all-inputs mix-env))) > + > + (for-each install-inputs mix-environments)) > + > +(define* (build #:key mix-environments #:allow-other-keys) > + "Builds the Mix project." > + (define (compile mix-env) > + (setenv MIX_ENV mix-env) > + (invoke "mix" "compile" "--no-deps-check")) > + (for-each compile mix-environments)) > + > +(define* (check #:key (tests? #t) #:allow-other-keys) > + "Test the Mix project." > + (if tests? > + (invoke "mix" "test" "--no-deps-check") > + (format #t "tests? = ~a~%" tests?))) > + > +(define* (remove-mix-dirs . _) > + "Remove all .mix/ directories. > +We do not want to copy them to the installation directory." > + (define mix-dirs > + (find-files "." > + (file-name-predicate "\\.mix$") > + #:directories? #t)) > + (for-each delete-file-recursively mix-dirs)) > + > +(define* (install #:key > + inputs > + outputs > + name > + build-per-environment > + elixir-X.Y > + #:allow-other-keys) > + "Install build artifacts in the store." > + (define lib-name (pkg-name->library-name name)) > + > + (define dir-build > + (f-join (mix-build-dir (if build-per-environment %mix-env-prod > %mix-env-shared)) > + lib-name)) > + > + (define dir-install > + (f-join (path->elixir-lib (assoc-ref outputs "out") elixir-X.Y) > + lib-name)) > + (mkdir-p dir-install) > + > + (copy-recursively dir-build dir-install > + #:follow-symlinks? #t)) > + > +(define %standard-phases > + (modify-phases gnu:%standard-phases > + (delete 'bootstrap) > + (replace 'configure configure) > + (replace 'unpack unpack) > + (add-after 'patch-generated-file-shebangs 'install-hex install- > hex) > + (add-after 'install-hex 'install-dependencies install- > dependencies) > + (replace 'build build) > + (replace 'check check) > + (add-before 'install 'remove-mix-dirs remove-mix-dirs) > + (replace 'install install))) > + > +(define* (mix-build #:key inputs (phases %standard-phases) > + #:allow-other-keys #:rest args) > + "Build the given Mix package, applying all of PHASES in order." > + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) > + > +;;; mix-build-system.scm ends here > > base-commit: a0d337e79c87d7c38c79d0291974f490cb137a52 I probably missed some, but I think you get the gist. While this isn't exactly code golf, try to express yourself in terms of the least verbose primitives and don't add meaningless layers of indirection – we already have enough actual meaningful ones. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Tue, 14 Nov 2023 10:39:01 GMT) Full text and rfc822 format available.Message #170 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Subject: Re: ['PATCH v2' 01/14] build-system: Add mix-build-system. Date: Tue, 14 Nov 2023 11:37:10 +0100
[Message part 1 (text/plain, inline)]
> > +(define-module (guix build-system mix) > > + #:use-module (gnu packages base) > > + #:use-module (gnu packages elixir) > > + #:use-module (gnu packages elixir-xyz) > > + #:use-module (gnu packages erlang) > You probably want to resolve those imports rather than use-modules > them. You mean something like this? #+begin_src scheme (define-module (guix build-system mix) #:use-module ((gnu packages base) #:select (glibc make-glibc-utf8-locales)) #:use-module ((gnu packages elixir) #:select (elixir elixir-hex)) #:use-module ((gnu packages erlang) #:select (rebar3)) #+end_src I have moved `elixir-hex' to elixir.scm to avoid a circular dependency. > > +(define (input=? input1 input2) > > + "Tell whether inputs INPUT1 and INPUT2 are equal." > > + (define pkg1 (match input1 ((_ pkg) pkg))) > > + (define pkg2 (match input2 ((_ pkg) pkg))) > > + (string=? (package-name pkg1) (package-name pkg2))) > Again, checking for label equivalence is a bad idea. OK, after reading a bit more about Guile, I understand that `equal?' is what should be used here, right? The intent is to remove duplicated inputs in the code below: #+begin_src scheme (define all-propagated-inputs ((compose (cut delete-duplicates <> equal?) ;<-- Here (cut filter erlang-or-elixir-input? <>) (cut append-map package-transitive-propagated-inputs <>) (cut map cadr <>)) (append inputs native-inputs))) #+end_src > > +(define (elixir-input? X.Y input) > > + "Determines if the given INPUT is an Elixir input." > > + (match input > > + ((label . path) > > + ;; XXX: The second condition may be enough. > > + (and (elixir-name? label) > > + (directory-exists? (path->elixir-lib path X.Y)))))) > Ahem, search-path-as-list. > Also, leaking the version is kinda bad, API-wise. Does this mean that build artifacts should be installed under `$out/lib/elixir/$libname` instead of `$out/lib/elixir/X.Y/$libname`? Cheers
[Message part 2 (text/html, inline)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Tue, 14 Nov 2023 17:55:02 GMT) Full text and rfc822 format available.Message #173 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>, 66801 <at> debbugs.gnu.org Subject: Re: ['PATCH v2' 01/14] build-system: Add mix-build-system. Date: Tue, 14 Nov 2023 18:53:22 +0100
Am Dienstag, dem 14.11.2023 um 11:37 +0100 schrieb Pierre-Henry Fröhring: > > > +(define-module (guix build-system mix) > > > + #:use-module (gnu packages base) > > > + #:use-module (gnu packages elixir) > > > + #:use-module (gnu packages elixir-xyz) > > > + #:use-module (gnu packages erlang) > > You probably want to resolve those imports rather than use-modules > > them. > > You mean something like this? > #+begin_src scheme > (define-module (guix build-system mix) > #:use-module ((gnu packages base) #:select (glibc make-glibc-utf8- > locales)) > #:use-module ((gnu packages elixir) #:select (elixir elixir-hex)) > #:use-module ((gnu packages erlang) #:select (rebar3)) > #+end_src > > I have moved `elixir-hex' to elixir.scm to avoid a circular > dependency. No. Look at all the other build systems. None of them use submodules of (gnu packages), for a good reason. > > > +(define (input=? input1 input2) > > > + "Tell whether inputs INPUT1 and INPUT2 are equal." > > > + (define pkg1 (match input1 ((_ pkg) pkg))) > > > + (define pkg2 (match input2 ((_ pkg) pkg))) > > > + (string=? (package-name pkg1) (package-name pkg2))) > > Again, checking for label equivalence is a bad idea. > > OK, after reading a bit more about Guile, I understand that `equal?' > is what should be used here, right? The intent is to remove > duplicated inputs in the code below: > > #+begin_src scheme > (define all-propagated-inputs > ((compose > (cut delete-duplicates <> equal?) ;<-- Here > (cut filter erlang-or-elixir-input? <>) > (cut append-map package-transitive-propagated-inputs <>) > (cut map cadr <>)) > (append inputs native-inputs))) > #+end_src Yep, that would work. Note that delete-duplicates is O(n^2), though. We have a little bit of code where it's done in (I assume) O(n*log(n)) with vhashes. > > > > +(define (elixir-input? X.Y input) > > > + "Determines if the given INPUT is an Elixir input." > > > + (match input > > > + ((label . path) > > > + ;; XXX: The second condition may be enough. > > > + (and (elixir-name? label) > > > + (directory-exists? (path->elixir-lib path X.Y)))))) > > Ahem, search-path-as-list. > > Also, leaking the version is kinda bad, API-wise. > > Does this mean that build artifacts should be installed under > `$out/lib/elixir/$libname` instead of `$out/lib/elixir/X.Y/$libname`? Not necessarily, but you want a different way of building $out/lib/elixir/X.Y/ that doesn't leak through the function signature. Btw. I think that you're resolving transitive inputs twice; once on the build system code and once by fattening the outputs. You probably only need either of those, not both. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 15 Nov 2023 15:51:02 GMT) Full text and rfc822 format available.Message #176 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Subject: Fwd: ['PATCH v2' 01/14] build-system: Add mix-build-system. Date: Wed, 15 Nov 2023 13:40:51 +0100
[Message part 1 (text/plain, inline)]
> No. Look at all the other build systems. None of them use submodules of (gnu > packages), for a good reason. Ok, I see. It would introduce circular dependencies. By "resolve," you mean something like: ~(resolve-interface '(gnu packages yyy))~. So, in our case it means: #+begin_src scheme (define (default-glibc-utf8-locales) (let* ((base (resolve-interface '(gnu packages base))) (glibc (module-ref base 'glibc)) (make-glibc-utf8-locales (module-ref base 'make-glibc-utf8-locales))) (make-glibc-utf8-locales glibc #:locales (list "en_US")))) (define (default-elixir-hex) (let ((elixir (resolve-interface '(gnu packages elixir)))) (module-ref elixir 'elixir-hex))) (define (default-rebar3) (let ((erlang (resolve-interface '(gnu packages erlang)))) (module-ref erlang 'rebar3))) #+end_src Then: #+begin_src scheme (define* (lower name #:key (elixir (default-elixir)) (elixir-hex (default-elixir-hex)) (glibc-utf8-locales (default-glibc-utf8-locales)) (rebar3 (default-rebar3)) … #:allow-other-keys #:rest arguments) …) #+end_src Is this correct? > Not necessarily, but you want a different way of building $out/lib/elixir/X.Y/ > that doesn't leak through the function signature. Following ~python-build-system.scm~, it means something like: #+begin_src scheme (define (elixir-version elixir) (let* ((version (last (string-split elixir #\-))) (components (string-split version #\.)) (major+minor (take components 2))) (string-join major+minor "."))) (define (install-dir inputs outputs) "Return the path of the current output's Elixir library." (let ((out (assoc-ref outputs "out")) (elixir (assoc-ref inputs "elixir"))) (string-append out "/lib/elixir/" (elixir-version elixir)))) #+end_src Is this correct? > Btw. I think that you're resolving transitive inputs twice; once on the build > system code and once by fattening the outputs. You probably only need either > of those, not both. Ah. Propagated inputs are propagated. Who would have thought? So, this is not necessary: #+begin_src scheme (define* (lower …) … (define all-propagated-inputs ((compose (cut delete-duplicates <> equal?) (cut filter erlang-or-elixir-input? <>) (cut append-map package-transitive-propagated-inputs <>) (cut map cadr <>)) (append inputs native-inputs))) (define build-inputs `(… ,@all-propagated-inputs ,@inputs ,@native-inputs)) (bag … (build-inputs build-inputs) …)) #+end_src I've just removed ~all-propagated-inputs~ and all packages build just fine. Is this what you meant? > Yep, that would work. Note that delete-duplicates is O(n^2), though. We have > a little bit of code where it's done in (I assume) O(n*log(n)) with vhashes. If ~all-propagated-inputs~ is removed, then the discussion of this comment is closed.
[Message part 2 (text/html, inline)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 15 Nov 2023 16:19:02 GMT) Full text and rfc822 format available.Message #179 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: ['PATCH v2' 01/14] build-system: Add mix-build-system. Date: Wed, 15 Nov 2023 10:57:35 +0100
[Message part 1 (text/plain, inline)]
> No. Look at all the other build systems. None of them use submodules of (gnu > packages), for a good reason. Ok, I see. It would introduce circular dependencies. By "resolve," you mean something like: ~(resolve-interface '(gnu packages yyy))~. So, in our case it means: #+begin_src scheme (define (default-glibc-utf8-locales) (let* ((base (resolve-interface '(gnu packages base))) (glibc (module-ref base 'glibc)) (make-glibc-utf8-locales (module-ref base 'make-glibc-utf8-locales))) (make-glibc-utf8-locales glibc #:locales (list "en_US")))) (define (default-elixir-hex) (let ((elixir (resolve-interface '(gnu packages elixir)))) (module-ref elixir 'elixir-hex))) (define (default-rebar3) (let ((erlang (resolve-interface '(gnu packages erlang)))) (module-ref erlang 'rebar3))) #+end_src Then: #+begin_src scheme (define* (lower name #:key (elixir (default-elixir)) (elixir-hex (default-elixir-hex)) (glibc-utf8-locales (default-glibc-utf8-locales)) (rebar3 (default-rebar3)) … #:allow-other-keys #:rest arguments) …) #+end_src Is this correct? > Not necessarily, but you want a different way of building $out/lib/elixir/X.Y/ > that doesn't leak through the function signature. Following ~python-build-system.scm~, it means something like: #+begin_src scheme (define (elixir-version elixir) (let* ((version (last (string-split elixir #\-))) (components (string-split version #\.)) (major+minor (take components 2))) (string-join major+minor "."))) (define (install-dir inputs outputs) "Return the path of the current output's Elixir library." (let ((out (assoc-ref outputs "out")) (elixir (assoc-ref inputs "elixir"))) (string-append out "/lib/elixir/" (elixir-version elixir) "/site-packages"))) #+end_src Is this correct? > Btw. I think that you're resolving transitive inputs twice; once on the build > system code and once by fattening the outputs. You probably only need either > of those, not both. Ah. Propagated inputs are propagated. Who would have thought? So, this is not necessary: #+begin_src scheme (define* (lower …) … (define all-propagated-inputs ((compose (cut delete-duplicates <> equal?) (cut filter erlang-or-elixir-input? <>) (cut append-map package-transitive-propagated-inputs <>) (cut map cadr <>)) (append inputs native-inputs))) (define build-inputs `(… ,@all-propagated-inputs ,@inputs ,@native-inputs)) (bag … (build-inputs build-inputs) …)) #+end_src I've just removed ~all-propagated-inputs~ and all packages build just fine. Is this what you meant? > Yep, that would work. Note that delete-duplicates is O(n^2), though. We have > a little bit of code where it's done in (I assume) O(n*log(n)) with vhashes. If ~all-propagated-inputs~ is removed, then the discussion of this comment is closed.
[Message part 2 (text/html, inline)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 15 Nov 2023 16:34:02 GMT) Full text and rfc822 format available.Message #182 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: ['PATCH v2' 01/14] build-system: Add mix-build-system. Date: Wed, 15 Nov 2023 10:59:35 +0100
[Message part 1 (text/plain, inline)]
Correction: (string-append out "/lib/elixir/" (elixir-version elixir) "/site-packages") -> (string-append out "/lib/elixir/" (elixir-version elixir))
[Message part 2 (text/html, inline)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 15 Nov 2023 18:37:02 GMT) Full text and rfc822 format available.Message #185 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: ['PATCH v2' 01/14] build-system: Add mix-build-system. Date: Wed, 15 Nov 2023 19:36:12 +0100
Am Mittwoch, dem 15.11.2023 um 10:57 +0100 schrieb Pierre-Henry Fröhring: > > No. Look at all the other build systems. None of them use > > submodules of (gnu > > packages), for a good reason. > > Ok, I see. It would introduce circular dependencies. By "resolve," > you > mean something like: ~(resolve-interface '(gnu packages yyy))~. So, > in > our case it means: > #+begin_src scheme > (define (default-glibc-utf8-locales) > (let* ((base (resolve-interface '(gnu packages base))) > (glibc (module-ref base 'glibc)) > (make-glibc-utf8-locales (module-ref base 'make-glibc-utf8- > locales))) > (make-glibc-utf8-locales glibc #:locales (list "en_US")))) > > (define (default-elixir-hex) > (let ((elixir (resolve-interface '(gnu packages elixir)))) > (module-ref elixir 'elixir-hex))) > > (define (default-rebar3) > (let ((erlang (resolve-interface '(gnu packages erlang)))) > (module-ref erlang 'rebar3))) > #+end_src > > Then: > #+begin_src scheme > (define* (lower name > #:key > (elixir (default-elixir)) > (elixir-hex (default-elixir-hex)) > (glibc-utf8-locales (default-glibc-utf8-locales)) > (rebar3 (default-rebar3)) > … > #:allow-other-keys #:rest arguments) > …) > #+end_src > > Is this correct? You shouldn't need to provide glibc-utf8-locales this way (there's already a variable for it IIRC), but yeah. > > Not necessarily, but you want a different way of building > > $out/lib/elixir/X.Y/ > > that doesn't leak through the function signature. > > Following ~python-build-system.scm~, it means something like: > #+begin_src scheme > (define (elixir-version elixir) > (let* ((version (last (string-split elixir #\-))) > (components (string-split version #\.)) > (major+minor (take components 2))) > (string-join major+minor "."))) > > (define (install-dir inputs outputs) > "Return the path of the current output's Elixir library." > (let ((out (assoc-ref outputs "out")) > (elixir (assoc-ref inputs "elixir"))) > (string-append out "/lib/elixir/" (elixir-version elixir) "/site- > packages"))) > #+end_src > > Is this correct? LGTM. > > Btw. I think that you're resolving transitive inputs twice; once on > > the build system code and once by fattening the outputs. You > > probably only need either of those, not both. > > Ah. Propagated inputs are propagated. Who would have thought? So, > this is not necessary: > #+begin_src scheme > (define* (lower …) > … > (define all-propagated-inputs > ((compose > (cut delete-duplicates <> equal?) > (cut filter erlang-or-elixir-input? <>) > (cut append-map package-transitive-propagated-inputs <>) > (cut map cadr <>)) > (append inputs native-inputs))) > > (define build-inputs > `(… > ,@all-propagated-inputs > ,@inputs > ,@native-inputs)) > > (bag … > (build-inputs build-inputs) > …)) > #+end_src > I've just removed ~all-propagated-inputs~ and all packages build just > fine. > > Is this what you meant? Yep. I assume this makes your packages way lighter. Note that propagated inputs have become a (not great) default for interpreted languages such as Python or Emacs Lisp. > > Yep, that would work. Note that delete-duplicates is O(n^2), > > though. We have a little bit of code where it's done in (I assume) > > O(n*log(n)) with vhashes. > > If ~all-propagated-inputs~ is removed, then the discussion of this > comment is closed. Sure.
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 15 Nov 2023 22:50:02 GMT) Full text and rfc822 format available.Message #188 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Subject: Re: ['PATCH v2' 01/14] build-system: Add mix-build-system. Date: Wed, 15 Nov 2023 23:49:03 +0100
[Message part 1 (text/plain, inline)]
So, the attached file `review.org' contains all the discussions so far on the first patch 01/14. The following email is the patch itself. Thanks. Cheers.
[Message part 2 (text/html, inline)]
[review.org (application/octet-stream, attachment)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Wed, 15 Nov 2023 22:53:02 GMT) Full text and rfc822 format available.Message #191 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: liliana.prikler <at> gmail.com, Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Wed, 15 Nov 2023 23:51:12 +0100
* guix/build-system/mix.scm, * guix/build/mix-build-system.scm: New modules. Change-Id: I2cbf6c963a530e73420da0eb17ffaf92827451bf --- guix/build-system/mix.scm | 181 ++++++++++++++++++++++++++++ guix/build/mix-build-system.scm | 205 ++++++++++++++++++++++++++++++++ 2 files changed, 386 insertions(+) create mode 100644 guix/build-system/mix.scm create mode 100644 guix/build/mix-build-system.scm diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm new file mode 100644 index 00000000..ae80679b --- /dev/null +++ b/guix/build-system/mix.scm @@ -0,0 +1,181 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Standard build procedure for Elixir packages using 'mix'. This is +;; implemented as an extension of 'gnu-build-system'. +;; +;; Code: + +(define-module (guix build-system mix) + #:use-module (guix build mix-build-system) + #:use-module (guix build-system gnu) + #:use-module (guix build-system) + #:use-module (guix gexp) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix search-paths) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (mix-build-system hexpm-uri)) + +;; Lazily resolve the bindings to avoid circular dependencies. +(define (default-glibc-utf8-locales) + (let* ((base (resolve-interface '(gnu packages base)))) + (module-ref base 'glibc-utf8-locales))) + +(define (default-elixir-hex) + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir-hex))) + +(define (default-rebar3) + (let ((erlang (resolve-interface '(gnu packages erlang)))) + (module-ref erlang 'rebar3))) + +(define (default-elixir) + "Return the default Elixir package." + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir))) + +(define (hexpm-uri name version) + "Return the URI where to fetch the sources of a Hex package NAME at VERSION. +NAME is the name of the package which should look like: elixir-pkg-name-X.Y.Z +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" + ((compose + (cut string-append "https://repo.hex.pm/tarballs/" <> "-" version ".tar") + (cut string-replace-substring <> "-" "_") + strip-elixir-prefix) + name)) + +;; A number of environment variables specific to the Mix build system are +;; reflected here. They are documented at +;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables. Other +;; parameters located in mix.exs are defined at +;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration +(define* (mix-build name + inputs + #:key + source + (tests? #t) + (mix-path #f) ;See MIX_PATH. + (mix-exs "mix.exs") ;See MIX_EXS. + (build-per-environment #t) ;See :build_per_environment. + (phases '%standard-phases) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules `((guix build mix-build-system) + ,@%gnu-build-system-modules)) + (modules '((guix build mix-build-system) + (guix build utils)))) + "Build SOURCE using Elixir, and with INPUTS." + + ;; Check the documentation of :build_per_environment here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration And + ;; "Environments" here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments + (define mix-environments + (if build-per-environment + `("prod" ,@(if tests? '("test") '())) + '("shared"))) + + (define builder + (with-imported-modules imported-modules + #~(begin + + (use-modules #$@(sexp->gexp modules)) + + #$(with-build-variables inputs outputs + #~(mix-build #:name #$name + #:source #+source + #:system #$system + #:tests? #$tests? + #:mix-path #$mix-path + #:mix-exs #$mix-exs + #:mix-environments '#$mix-environments + #:build-per-environment #$build-per-environment + #:phases #$(if (pair? phases) + (sexp->gexp phases) + phases) + #:outputs %outputs + #:search-paths '#$(sexp->gexp + (map + search-path-specification->sexp + search-paths)) + #:inputs + %build-inputs))))) + + (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) + system + #:graft? #f))) + (gexp->derivation name + builder + #:system system + #:graft? #f ;consistent with 'gnu-build' + #:target #f + #:guile-for-build guile))) + +(define* (lower name + #:key + (elixir (default-elixir)) + (elixir-hex (default-elixir-hex)) + (glibc-utf8-locales (default-glibc-utf8-locales)) + (inputs '()) + (native-inputs '()) + (propagated-inputs '()) + (rebar3 (default-rebar3)) + (tests? #t) + outputs + source + system + target + #:allow-other-keys #:rest arguments) + "Return a bag for NAME." + (let ((private-keywords + '(#:inputs #:native-inputs + #:outputs #:system #:target + #:elixir #:elixir-hex #:glibc-utf8-locales + #:rebar3 #:erlang)) + (build-inputs + `(,@(standard-packages) + ("glibc-utf8-locales" ,glibc-utf8-locales) + ("erlang" ,(lookup-package-input elixir "erlang")) + ("rebar3" ,rebar3) + ("elixir" ,elixir) + ("elixir-hex" ,elixir-hex) + ,@inputs + ,@native-inputs))) + (bag (name name) + (system system) + (build-inputs build-inputs) + (host-inputs (if target inputs '())) + (outputs outputs) + (build mix-build) + (arguments (strip-keyword-arguments private-keywords arguments))))) + +(define mix-build-system + (build-system (name 'mix) + (description "The standard Mix build system") + (lower lower))) + +;;; mix.scm ends here diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build-system.scm new file mode 100644 index 00000000..0a1fcb5c --- /dev/null +++ b/guix/build/mix-build-system.scm @@ -0,0 +1,205 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Code: + +(define-module (guix build mix-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (ice-9 ftw) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module (ice-9 string-fun) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (mix-build + strip-elixir-prefix + %standard-phases)) + +(define (elixir-version elixir) + "Return an X.Y string where X and Y are respectively the major and minor version number of ELIXIR. +Example: /gnu/store/…-elixir-1.14.0 → 1.14" + ((compose + (cut string-join <> ".") + (cut take <> 2) + (cut string-split <> #\.) + last) + (string-split elixir #\-))) + +(define (elixir-libdir elixir path) + "Return the path where all libraries for a specified ELIXIR version are installed." + (string-append path "/lib/elixir/" (elixir-version elixir))) + +(define (erlang-libdir path) + "Return the path of the directory where libraries of an Erlang package are +installed in the store." + (string-append path "/lib/erlang/lib")) + +(define (install-dir inputs outputs) + "Return the path of the current output's Elixir library. +Example: /gnu/store/…/lib/elixir/1.14" + (elixir-libdir (assoc-ref inputs "elixir") + (assoc-ref outputs "out"))) + +(define (strip-prefix prefix name) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (strip-elixir-prefix name) + "Strip elixir- from NAME." + (strip-prefix "elixir-" name)) + +(define (mix-build-dir mix-env) + "Return the directory where build artifacts are to be installed according to +en environment MIX-ENV in the current directory." + (string-append "_build/" mix-env "/lib")) + +(define* (unpack #:key source mix-path #:allow-other-keys) + "Unpack SOURCE in the working directory, and change directory within the +source. When SOURCE is a directory, copy it in a sub-directory of the current +working directory." + (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) + (gnu-unpack #:source source) + (when (file-exists? "contents.tar.gz") + (invoke "tar" "xvf" "contents.tar.gz")))) + +(define (list-directories dir) + "List absolute paths of directories directly under the directory DIR." + (map (cut string-append dir "/" <>) + (scandir dir (lambda (filename) + (and (not (member filename '("." ".."))) + (directory-exists? (string-append dir "/" filename))))))) + +(define* (configure #:key inputs mix-path mix-exs #:allow-other-keys) + "Set environment variables. +See: https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables" + (setenv "LC_ALL" "en_US.UTF-8") + (setenv "MIX_HOME" (getcwd)) + (setenv "MIX_ARCHIVES" "archives") + (setenv "MIX_BUILD_ROOT" "_build") + (setenv "MIX_DEPS_PATH" "deps") + (setenv "MIX_PATH" (or mix-path "")) + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") "/bin/rebar3")) + (setenv "MIX_EXS" mix-exs)) + +(define* (install-hex #:key name inputs outputs #:allow-other-keys) + "Install Hex." + (let ((hex-archive-path (string-append (getenv "MIX_ARCHIVES") "/hex"))) + (mkdir-p hex-archive-path) + (symlink (car (list-directories (elixir-libdir (assoc-ref inputs "elixir") + (assoc-ref inputs "elixir-hex")))) + (string-append hex-archive-path "/hex")))) + +(define* (install-dependencies #:key + name + inputs + outputs + tests? + build-per-environment + (native-inputs '()) + mix-environments + #:allow-other-keys + #:rest rest) + "Install dependencies." + (define (install-lib lib dir) + (let ((lib-name (last (string-split lib #\/)))) + (symlink lib (string-append dir "/" lib-name)))) + + (define (install-input mix-env input) + (let ((dir (mix-build-dir mix-env))) + (mkdir-p dir) + (match input + ((_ . path) + ((compose + (cut for-each (cut install-lib <> dir) <>) + (cut append-map list-directories <>) + (cut filter directory-exists? <>)) + (list (elixir-libdir (assoc-ref inputs "elixir") path) + (erlang-libdir path))))))) + + (define (install-inputs mix-env) + (for-each (cut install-input mix-env <>) + (append inputs native-inputs))) + + (for-each install-inputs mix-environments)) + +(define* (build #:key mix-environments #:allow-other-keys) + "Builds the Mix project." + (for-each (lambda (mix-env) + (setenv "MIX_ENV" mix-env) + (invoke "mix" "compile" "--no-deps-check")) + mix-environments)) + +(define* (check #:key (tests? #t) #:allow-other-keys) + "Test the Mix project." + (if tests? + (invoke "mix" "test" "--no-deps-check") + (format #t "tests? = ~a~%" tests?))) + +(define* (remove-mix-dirs . _) + "Remove all .mix/ directories. +We do not want to copy them to the installation directory." + (for-each delete-file-recursively + (find-files "." (file-name-predicate "\\.mix$") #:directories? #t))) + +(define (library-name pkg-name) + "Return the library name deduced from PKG-NAME. +A package should be named: elixir-lib-name-X.Y.Z from which the library name +lib_name is deduced." + ((compose + (cut string-join <> "_") + (cut drop-right <> 1) + (cut string-split <> #\-)) + (strip-elixir-prefix pkg-name))) + +(define* (install #:key + inputs + outputs + name + build-per-environment + #:allow-other-keys) + "Install build artifacts in the store." + (let* ((lib-name (library-name name)) + (lib-dir (string-append (install-dir inputs outputs) "/" lib-name))) + (mkdir-p lib-dir) + (copy-recursively (string-append (mix-build-dir (if build-per-environment "prod" "shared")) "/" lib-name) + lib-dir + #:follow-symlinks? #t))) + +(define %standard-phases + (modify-phases gnu:%standard-phases + (delete 'bootstrap) + (replace 'configure configure) + (replace 'unpack unpack) + (add-after 'patch-generated-file-shebangs 'install-hex install-hex) + (add-after 'install-hex 'install-dependencies install-dependencies) + (replace 'build build) + (replace 'check check) + (add-before 'install 'remove-mix-dirs remove-mix-dirs) + (replace 'install install))) + +(define* (mix-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given Mix package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; mix-build-system.scm ends here base-commit: a0d337e79c87d7c38c79d0291974f490cb137a52 -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Thu, 16 Nov 2023 02:06:02 GMT) Full text and rfc822 format available.Message #194 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>, 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Thu, 16 Nov 2023 03:05:29 +0100
Am Mittwoch, dem 15.11.2023 um 23:51 +0100 schrieb Pierre-Henry Fröhring: > * guix/build-system/mix.scm, > * guix/build/mix-build-system.scm: New modules. > > Change-Id: I2cbf6c963a530e73420da0eb17ffaf92827451bf > --- > guix/build-system/mix.scm | 181 ++++++++++++++++++++++++++++ > guix/build/mix-build-system.scm | 205 > ++++++++++++++++++++++++++++++++ > 2 files changed, 386 insertions(+) > create mode 100644 guix/build-system/mix.scm > create mode 100644 guix/build/mix-build-system.scm > > diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm > new file mode 100644 > index 00000000..ae80679b > --- /dev/null > +++ b/guix/build-system/mix.scm > @@ -0,0 +1,181 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2023 Pierre-Henry Fröhring > <phfrohring <at> deeplinks.com> > +;;; > +;;; 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/>. > + > +;; Commentary: > +;; > +;; Standard build procedure for Elixir packages using 'mix'. This > is > +;; implemented as an extension of 'gnu-build-system'. > +;; > +;; Code: > + > +(define-module (guix build-system mix) > + #:use-module (guix build mix-build-system) > + #:use-module (guix build-system gnu) > + #:use-module (guix build-system) > + #:use-module (guix gexp) > + #:use-module (guix monads) > + #:use-module (guix packages) > + #:use-module (guix search-paths) > + #:use-module (guix store) > + #:use-module (guix utils) > + #:use-module (ice-9 match) > + #:use-module (srfi srfi-1) > + #:use-module (srfi srfi-26) > + #:export (mix-build-system hexpm-uri)) > + > +;; Lazily resolve the bindings to avoid circular dependencies. > +(define (default-glibc-utf8-locales) > + (let* ((base (resolve-interface '(gnu packages base)))) > + (module-ref base 'glibc-utf8-locales))) > + > +(define (default-elixir-hex) > + (let ((elixir (resolve-interface '(gnu packages elixir)))) > + (module-ref elixir 'elixir-hex))) > + > +(define (default-rebar3) > + (let ((erlang (resolve-interface '(gnu packages erlang)))) > + (module-ref erlang 'rebar3))) > + > +(define (default-elixir) > + "Return the default Elixir package." > + (let ((elixir (resolve-interface '(gnu packages elixir)))) > + (module-ref elixir 'elixir))) > + > +(define (hexpm-uri name version) > + "Return the URI where to fetch the sources of a Hex package NAME > at VERSION. > +NAME is the name of the package which should look like: elixir-pkg- > name-X.Y.Z > +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" > + ((compose > + (cut string-append "https://repo.hex.pm/tarballs/" <> "-" > version ".tar") > + (cut string-replace-substring <> "-" "_") > + strip-elixir-prefix) > + name)) > + > +;; A number of environment variables specific to the Mix build > system are > +;; reflected here. They are documented at > +;; > https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables. > Other > +;; parameters located in mix.exs are defined at > +;; > https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration > +(define* (mix-build name > + inputs > + #:key > + source > + (tests? #t) > + (mix-path #f) ;See MIX_PATH. > + (mix-exs "mix.exs") ;See MIX_EXS. > + (build-per-environment #t) ;See > :build_per_environment. > + (phases '%standard-phases) > + (outputs '("out")) > + (search-paths '()) > + (system (%current-system)) > + (guile #f) > + (imported-modules `((guix build mix-build- > system) > + ,@%gnu-build-system- > modules)) > + (modules '((guix build mix-build-system) > + (guix build utils)))) > + "Build SOURCE using Elixir, and with INPUTS." > + > + ;; Check the documentation of :build_per_environment here: > + ;; > https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration A > nd > + ;; "Environments" here: > + ;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments > + (define mix-environments > + (if build-per-environment > + `("prod" ,@(if tests? '("test") '())) > + '("shared"))) > + > + (define builder > + (with-imported-modules imported-modules > + #~(begin > + > + (use-modules #$@(sexp->gexp modules)) > + > + #$(with-build-variables inputs outputs > + #~(mix-build #:name #$name > + #:source #+source > + #:system #$system > + #:tests? #$tests? > + #:mix-path #$mix-path > + #:mix-exs #$mix-exs > + #:mix-environments '#$mix-environments > + #:build-per-environment #$build-per- > environment > + #:phases #$(if (pair? phases) > + (sexp->gexp phases) > + phases) > + #:outputs %outputs > + #:search-paths '#$(sexp->gexp > + (map > + search-path- > specification->sexp > + search-paths)) > + #:inputs > + %build-inputs))))) > + > + (mlet %store-monad ((guile (package->derivation (or guile > (default-guile)) > + system > + #:graft? #f))) > + (gexp->derivation name > + builder > + #:system system > + #:graft? #f ;consistent with 'gnu-build' > + #:target #f > + #:guile-for-build guile))) > + > +(define* (lower name > + #:key > + (elixir (default-elixir)) > + (elixir-hex (default-elixir-hex)) > + (glibc-utf8-locales (default-glibc-utf8-locales)) > + (inputs '()) > + (native-inputs '()) > + (propagated-inputs '()) > + (rebar3 (default-rebar3)) > + (tests? #t) > + outputs > + source > + system > + target > + #:allow-other-keys #:rest arguments) > + "Return a bag for NAME." > + (let ((private-keywords > + '(#:inputs #:native-inputs > + #:outputs #:system #:target > + #:elixir #:elixir-hex #:glibc-utf8-locales > + #:rebar3 #:erlang)) > + (build-inputs > + `(,@(standard-packages) > + ("glibc-utf8-locales" ,glibc-utf8-locales) > + ("erlang" ,(lookup-package-input elixir "erlang")) > + ("rebar3" ,rebar3) > + ("elixir" ,elixir) > + ("elixir-hex" ,elixir-hex) > + ,@inputs > + ,@native-inputs))) > + (bag (name name) > + (system system) > + (build-inputs build-inputs) > + (host-inputs (if target inputs '())) > + (outputs outputs) > + (build mix-build) > + (arguments (strip-keyword-arguments private-keywords > arguments))))) > + > +(define mix-build-system > + (build-system (name 'mix) > + (description "The standard Mix build system") > + (lower lower))) > + > +;;; mix.scm ends here > diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build- > system.scm > new file mode 100644 > index 00000000..0a1fcb5c > --- /dev/null > +++ b/guix/build/mix-build-system.scm > @@ -0,0 +1,205 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2023 Pierre-Henry Fröhring > <phfrohring <at> deeplinks.com> > +;;; > +;;; 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/>. > + > +;; Commentary: > +;; > +;; Code: > + > +(define-module (guix build mix-build-system) > + #:use-module ((guix build gnu-build-system) #:prefix gnu:) > + #:use-module (guix build utils) > + #:use-module (ice-9 ftw) > + #:use-module (ice-9 match) > + #:use-module (ice-9 regex) > + #:use-module (ice-9 string-fun) > + #:use-module (srfi srfi-1) > + #:use-module (srfi srfi-26) > + #:export (mix-build > + strip-elixir-prefix > + %standard-phases)) > + > +(define (elixir-version elixir) > + "Return an X.Y string where X and Y are respectively the major and > minor version number of ELIXIR. > +Example: /gnu/store/…-elixir-1.14.0 → 1.14" > + ((compose > + (cut string-join <> ".") > + (cut take <> 2) > + (cut string-split <> #\.) > + last) > + (string-split elixir #\-))) I don't think we need to be overly cute here. The let-binding version from python-build-system is less surprising to the uninitiated reader. See also strip-store-file-name and package-name->name+version. > +(define (elixir-libdir elixir path) > + "Return the path where all libraries for a specified ELIXIR > version are installed." > + (string-append path "/lib/elixir/" (elixir-version elixir))) You probably want to swap path and elixir and perhaps also find a way to implicitly parameterize the latter so as to make it optional. > + > +(define (erlang-libdir path) > + "Return the path of the directory where libraries of an Erlang > package are > +installed in the store." > + (string-append path "/lib/erlang/lib")) > + > +(define (install-dir inputs outputs) > + "Return the path of the current output's Elixir library. > +Example: /gnu/store/…/lib/elixir/1.14" > + (elixir-libdir (assoc-ref inputs "elixir") > + (assoc-ref outputs "out"))) > + > +(define (strip-prefix prefix name) > + "Return NAME without the prefix PREFIX." > + (if (string-prefix? prefix name) > + (string-drop name (string-length prefix)) > + name)) You might want to consider (define* (strip-prefix name #:optional (prefix "elixir-") …) > +(define (mix-build-dir mix-env) > + "Return the directory where build artifacts are to be installed > according to > +en environment MIX-ENV in the current directory." > + (string-append "_build/" mix-env "/lib")) > + > +(define* (unpack #:key source mix-path #:allow-other-keys) > + "Unpack SOURCE in the working directory, and change directory > within the > +source. When SOURCE is a directory, copy it in a sub-directory of > the current > +working directory." > + (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) > + (gnu-unpack #:source source) > + (when (file-exists? "contents.tar.gz") > + (invoke "tar" "xvf" "contents.tar.gz")))) > + > +(define (list-directories dir) > + "List absolute paths of directories directly under the directory > DIR." > + (map (cut string-append dir "/" <>) > + (scandir dir (lambda (filename) > + (and (not (member filename '("." ".."))) > + (directory-exists? (string-append dir "/" > filename))))))) > + > +(define* (configure #:key inputs mix-path mix-exs #:allow-other- > keys) > + "Set environment variables. > +See: > https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables" > + (setenv "LC_ALL" "en_US.UTF-8") > + (setenv "MIX_HOME" (getcwd)) > + (setenv "MIX_ARCHIVES" "archives") > + (setenv "MIX_BUILD_ROOT" "_build") > + (setenv "MIX_DEPS_PATH" "deps") > + (setenv "MIX_PATH" (or mix-path "")) > + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") > "/bin/rebar3")) > + (setenv "MIX_EXS" mix-exs)) This does not appear to be a configure phase in the traditional sense of the wording. Instead, it should be a post 'set-paths' 'set-mix-env' imho. > +(define* (install-hex #:key name inputs outputs #:allow-other-keys) > + "Install Hex." > + (let ((hex-archive-path (string-append (getenv "MIX_ARCHIVES") > "/hex"))) > + (mkdir-p hex-archive-path) > + (symlink (car (list-directories (elixir-libdir (assoc-ref inputs > "elixir") > + (assoc-ref inputs > "elixir-hex")))) > + (string-append hex-archive-path "/hex")))) Why do we need this? It looks like we'll be pasting the same (native?) input all over the store, which imho would be bad. > +(define* (install-dependencies #:key > + name > + inputs > + outputs > + tests? > + build-per-environment > + (native-inputs '()) > + mix-environments > + #:allow-other-keys > + #:rest rest) > + "Install dependencies." > + (define (install-lib lib dir) > + (let ((lib-name (last (string-split lib #\/)))) > + (symlink lib (string-append dir "/" lib-name)))) > + > + (define (install-input mix-env input) > + (let ((dir (mix-build-dir mix-env))) > + (mkdir-p dir) > + (match input > + ((_ . path) > + ((compose > + (cut for-each (cut install-lib <> dir) <>) > + (cut append-map list-directories <>) > + (cut filter directory-exists? <>)) > + (list (elixir-libdir (assoc-ref inputs "elixir") path) > + (erlang-libdir path))))))) I think you're at the wrong layer of abstraction here. (match input ((_ . prefix) (begin (install-subdirectories (elixir-libdir path)) (install-subdirectories (erlang-libdir path))))) where (install-subdirectories PATH) is basically (when (directory-exists? PATH) (for-each (cute install-lib <> (mix-build-dir mix-env)) (list-directories PATH))) > + (define (install-inputs mix-env) > + (for-each (cut install-input mix-env <>) > + (append inputs native-inputs))) Installing native inputs: probably a bad idea (inhibits cross- compilation). > + (for-each install-inputs mix-environments)) > + > +(define* (build #:key mix-environments #:allow-other-keys) > + "Builds the Mix project." > + (for-each (lambda (mix-env) > + (setenv "MIX_ENV" mix-env) > + (invoke "mix" "compile" "--no-deps-check")) > + mix-environments)) > + > +(define* (check #:key (tests? #t) #:allow-other-keys) > + "Test the Mix project." > + (if tests? > + (invoke "mix" "test" "--no-deps-check") > + (format #t "tests? = ~a~%" tests?))) > + > +(define* (remove-mix-dirs . _) > + "Remove all .mix/ directories. > +We do not want to copy them to the installation directory." > + (for-each delete-file-recursively > + (find-files "." (file-name-predicate "\\.mix$") > #:directories? #t))) > + > +(define (library-name pkg-name) > + "Return the library name deduced from PKG-NAME. > +A package should be named: elixir-lib-name-X.Y.Z from which the > library name > +lib_name is deduced." > + ((compose > + (cut string-join <> "_") > + (cut drop-right <> 1) > + (cut string-split <> #\-)) > + (strip-elixir-prefix pkg-name))) Consider defining (package-name-version->elixir-name) analogous to (package-name-version->erlang-name) in rebar-build-system. Also allow overriding it through a build system argument. The thing you currently have will blow up with git-version. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Thu, 16 Nov 2023 13:02:01 GMT) Full text and rfc822 format available.Message #197 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Subject: Re: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Thu, 16 Nov 2023 14:01:36 +0100
[Message part 1 (text/plain, inline)]
Do you mind if I paste the conversation using the following org format? * Comment ** lilyp > +(define (elixir-version elixir) > + "Return an X.Y string where X and Y are respectively the major and > minor version number of ELIXIR. > +Example: /gnu/store/…-elixir-1.14.0 → 1.14" > + ((compose > + (cut string-join <> ".") > + (cut take <> 2) > + (cut string-split <> #\.) > + last) > + (string-split elixir #\-))) I don't think we need to be overly cute here. The let-binding version from python-build-system is less surprising to the uninitiated reader. See also strip-store-file-name and package-name->name+version. ** phf Maybe: #+begin_src scheme (define (elixir-version elixir) "Return an X.Y string where X and Y are respectively the major and minor version number of ELIXIR. Example: /gnu/store/…-elixir-1.14.0 → 1.14" (receive (_ version) (package-name->name+version (strip-store-file-name elixir)) (let* ((components (string-split version #\.)) (major+minor (take components 2))) (string-join major+minor ".")))) #+end_src or: #+begin_src scheme (define (elixir-version elixir) "Return an X.Y string where X and Y are respectively the major and minor version number of ELIXIR. Example: /gnu/store/…-elixir-1.14.0 → 1.14" (let* ((version (last (string-split elixir #\-))) (components (string-split version #\.)) (major+minor (take components 2))) (string-join major+minor "."))) #+end_src or: just inline the code as it is used just once. See [[id:76abe0e4-a0e2-4176-bdc0-9ff241e8ba42][next comment]]. * Comment :PROPERTIES: :ID: 76abe0e4-a0e2-4176-bdc0-9ff241e8ba42 :END: ** lilyp > +(define (elixir-libdir elixir path) > + "Return the path where all libraries for a specified ELIXIR > version are installed." > + (string-append path "/lib/elixir/" (elixir-version elixir))) You probably want to swap path and elixir and perhaps also find a way to implicitly parameterize the latter so as to make it optional. ** phf Is this what you mean? #+begin_src scheme ;; The Elixir version is constant as soon as it is computable from the current ;; execution. It is a X.Y string where X and Y are respectively the major and ;; minor version number of the Elixir used in the build. (define elixir-version (make-parameter "X.Y")) (define* (elixir-libdir path #:optional (version (elixir-version))) "Return the path where all libraries for a specified ELIXIR version are installed." (string-append path "/lib/elixir/" version)) (define* (configure #:key inputs mix-path mix-exs #:allow-other-keys) … (elixir-version (receive (_ version) (package-name->name+version (strip-store-file-name (assoc-ref inputs "elixir"))) (let* ((components (string-split version #\.)) (major+minor (take components 2))) (string-join major+minor "."))))) #+end_src * Comment ** lilyp > +(define* (configure #:key inputs mix-path mix-exs #:allow-other- > keys) > + "Set environment variables. > +See: > https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables" > + (setenv "LC_ALL" "en_US.UTF-8") > + (setenv "MIX_HOME" (getcwd)) > + (setenv "MIX_ARCHIVES" "archives") > + (setenv "MIX_BUILD_ROOT" "_build") > + (setenv "MIX_DEPS_PATH" "deps") > + (setenv "MIX_PATH" (or mix-path "")) > + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") > "/bin/rebar3")) > + (setenv "MIX_EXS" mix-exs)) This does not appear to be a configure phase in the traditional sense of the wording. Instead, it should be a post 'set-paths' 'set-mix-env' imho. ** phf After ~install-locale~ since ~(setenv "LC_ALL" "en_US.UTF-8")~ is called in this phase. #+begin_src scheme (define %standard-phases (modify-phases gnu:%standard-phases … (delete 'configure) (add-after 'install-locale 'set-mix-env set-mix-env) (replace 'unpack unpack) …)) #+end_src * Comment ** lilyp > +(define* (install-hex #:key name inputs outputs #:allow-other-keys) > + "Install Hex." > + (let ((hex-archive-path (string-append (getenv "MIX_ARCHIVES") > "/hex"))) > + (mkdir-p hex-archive-path) > + (symlink (car (list-directories (elixir-libdir (assoc-ref inputs > "elixir") > + (assoc-ref inputs > "elixir-hex")))) > + (string-append hex-archive-path "/hex")))) Why do we need this? It looks like we'll be pasting the same (native?) input all over the store, which imho would be bad. ** phf Without ~Hex~, you get this error: #+begin_example starting phase `build' Could not find Hex, which is needed to build dependency :ex_doc Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] #+end_example This message is called from ~handle_rebar_not_found~ in ~lib/mix/lib/mix/tasks/deps.compile.ex~ ; which is called from ~rebar_cmd~ because a ~manager~ (~Hex~) could not be found. Hex must be present => install-hex must be executed. I thought that this should not be a problem since Hex is needed at build time, and just symlinked. Maybe should it be copied instead? * Comment ** lilyp > + (define (install-input mix-env input) > + (let ((dir (mix-build-dir mix-env))) > + (mkdir-p dir) > + (match input > + ((_ . path) > + ((compose > + (cut for-each (cut install-lib <> dir) <>) > + (cut append-map list-directories <>) > + (cut filter directory-exists? <>)) > + (list (elixir-libdir (assoc-ref inputs "elixir") path) > + (erlang-libdir path))))))) I think you're at the wrong layer of abstraction here. (match input ((_ . prefix) (begin (install-subdirectories (elixir-libdir path)) (install-subdirectories (erlang-libdir path))))) where (install-subdirectories PATH) is basically (when (directory-exists? PATH) (for-each (cute install-lib <> (mix-build-dir mix-env)) (list-directories PATH))) ** phf Does this work? #+begin_src scheme (define (install-lib lib dir) (let ((lib-name (last (string-split lib #\/)))) (symlink lib (string-append dir "/" lib-name)))) (define (install-subdirectories mix-env path) (let ((build-dir (mix-build-dir mix-env))) (mkdir-p build-dir) (when (directory-exists? path) (for-each (cute install-lib <> build-dir) (list-directories path))))) (define (install-input mix-env input) (match input ((_ . path) (begin (install-subdirectories mix-env (elixir-libdir path)) (install-subdirectories mix-env (erlang-libdir path)))))) #+end_src * Comment ** lilyp > + (define (install-inputs mix-env) > + (for-each (cut install-input mix-env <>) > + (append inputs native-inputs))) Installing native inputs: probably a bad idea (inhibits cross- compilation). ** phf A slight variant that does not link things when it should not: #+begin_src scheme (define (install-inputs mix-env) (for-each (cut install-input mix-env <>) (cond ((string=? mix-env "prod") inputs) ((member mix-env '("shared" "test")) (append inputs native-inputs)) (else (error (format #f "Unexpected Mix env: ~a~%" mix-env)))))) #+end_src I did not consider cross-compilation yet. The following might be wrong be here we go. I far as I understand, Erlang applications are largely platform independent. Once the code is compiled to BEAM bytecode, it can run on any platform that has the Erlang VM installed. If an Erlang library uses native extensions, then cross-compilation might be required. For a build to succeed in a given environment (one of "prod", "test", "shared"), the BEAM files of all dependencies should be present on the build machine. So, all dependencies must be installed * Comment ** lilyp > +(define (library-name pkg-name) > + "Return the library name deduced from PKG-NAME. > +A package should be named: elixir-lib-name-X.Y.Z from which the > library name > +lib_name is deduced." > + ((compose > + (cut string-join <> "_") > + (cut drop-right <> 1) > + (cut string-split <> #\-)) > + (strip-elixir-prefix pkg-name))) Consider defining (package-name-version->elixir-name) analogous to (package-name-version->erlang-name) in rebar-build-system. Also allow overriding it through a build system argument. The thing you currently have will blow up with git-version. ** phf Faily close to the ~rebar-build-system~ version. #+begin_src scheme (define (package-name-version->elixir-name name+ver) "Convert the Guix package NAME-VER to the corresponding Elixir name-version format. Essentially drop the prefix used in Guix and replace dashes by underscores." (let* ((name- (package-name->name+version name+ver))) (string-join (string-split (if (string-prefix? "elixir-" name-) (string-drop name- (string-length "elixir-")) name-) #\-) "_"))) #+end_src
[Message part 2 (text/html, inline)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Thu, 16 Nov 2023 15:13:01 GMT) Full text and rfc822 format available.Message #200 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>, 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Thu, 16 Nov 2023 16:11:50 +0100
Am Donnerstag, dem 16.11.2023 um 14:01 +0100 schrieb Pierre-Henry Fröhring: > Do you mind if I paste the conversation using the following org > format? I do mind you pasting it in HTML format :P > * Comment > ** lilyp > > +(define (elixir-version elixir) > > + "Return an X.Y string where X and Y are respectively the major > > and > > minor version number of ELIXIR. > > +Example: /gnu/store/…-elixir-1.14.0 → 1.14" > > + ((compose > > + (cut string-join <> ".") > > + (cut take <> 2) > > + (cut string-split <> #\.) > > + last) > > + (string-split elixir #\-))) > > I don't think we need to be overly cute here. The let-binding > version from python-build-system is less surprising to the > uninitiated reader. > > See also strip-store-file-name and package-name->name+version. > > > ** phf > Maybe: > #+begin_src scheme > (define (elixir-version elixir) > "Return an X.Y string where X and Y are respectively the major and > minor version number of ELIXIR. > Example: /gnu/store/…-elixir-1.14.0 → 1.14" > (receive (_ version) (package-name->name+version (strip-store-file- > name elixir)) > (let* ((components (string-split version #\.)) > (major+minor (take components 2))) > (string-join major+minor ".")))) > #+end_src > > or: > #+begin_src scheme > (define (elixir-version elixir) > "Return an X.Y string where X and Y are respectively the major and > minor version number of ELIXIR. > Example: /gnu/store/…-elixir-1.14.0 → 1.14" > (let* ((version (last (string-split elixir #\-))) > (components (string-split version #\.)) > (major+minor (take components 2))) > (string-join major+minor "."))) > #+end_src > > or: just inline the code as it is used just once. See [[id:76abe0e4- > a0e2-4176-bdc0-9ff241e8ba42][next comment]]. Note that you can use SRFI-71 let and let* to bind multiple values at once. So you can write the first one without receive. > > * Comment > :PROPERTIES: > :ID: 76abe0e4-a0e2-4176-bdc0-9ff241e8ba42 > :END: > > ** lilyp > > +(define (elixir-libdir elixir path) > > + "Return the path where all libraries for a specified ELIXIR > > version are installed." > > + (string-append path "/lib/elixir/" (elixir-version elixir))) > > You probably want to swap path and elixir and perhaps also find a way > to implicitly parameterize the latter so as to make it optional. > > > ** phf > Is this what you mean? > #+begin_src scheme > ;; The Elixir version is constant as soon as it is computable from > the current > ;; execution. It is a X.Y string where X and Y are respectively the > major and > ;; minor version number of the Elixir used in the build. > (define elixir-version (make-parameter "X.Y")) > > (define* (elixir-libdir path #:optional (version (elixir-version))) > "Return the path where all libraries for a specified ELIXIR version > are installed." > (string-append path "/lib/elixir/" version)) > > (define* (configure #:key inputs mix-path mix-exs #:allow-other-keys) > … > (elixir-version > (receive (_ version) (package-name->name+version (strip-store- > file-name (assoc-ref inputs "elixir"))) > (let* ((components (string-split version #\.)) > (major+minor (take components 2))) > (string-join major+minor "."))))) > #+end_src I'd use %elixir-version and perhaps make it a fluent rather than a parameter (not quite sure whether parameters get reset when a function goes out of scope). > * Comment > ** lilyp > > +(define* (configure #:key inputs mix-path mix-exs #:allow-other- > > keys) > > + "Set environment variables. > > +See: > > https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables > > " > > + (setenv "LC_ALL" "en_US.UTF-8") > > + (setenv "MIX_HOME" (getcwd)) > > + (setenv "MIX_ARCHIVES" "archives") > > + (setenv "MIX_BUILD_ROOT" "_build") > > + (setenv "MIX_DEPS_PATH" "deps") > > + (setenv "MIX_PATH" (or mix-path "")) > > + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") > > "/bin/rebar3")) > > + (setenv "MIX_EXS" mix-exs)) > > This does not appear to be a configure phase in the traditional sense > of the wording. Instead, it should be a post 'set-paths' 'set-mix- > env' imho. > > > ** phf > After ~install-locale~ since ~(setenv "LC_ALL" "en_US.UTF-8")~ is > called in this phase. > #+begin_src scheme > (define %standard-phases > (modify-phases gnu:%standard-phases > … > (delete 'configure) > (add-after 'install-locale 'set-mix-env set-mix-env) > (replace 'unpack unpack) > …)) > #+end_src Good point: you shouldn't be setting LC_ALL anyway, that's already done by install-locale. > * Comment > ** lilyp > > +(define* (install-hex #:key name inputs outputs #:allow-other- > > keys) > > + "Install Hex." > > + (let ((hex-archive-path (string-append (getenv "MIX_ARCHIVES") > > "/hex"))) > > + (mkdir-p hex-archive-path) > > + (symlink (car (list-directories (elixir-libdir (assoc-ref > > inputs > > "elixir") > > + (assoc-ref > > inputs > > "elixir-hex")))) > > + (string-append hex-archive-path "/hex")))) > > Why do we need this? It looks like we'll be pasting the same > (native?) input all over the store, which imho would be bad. > > > ** phf > Without ~Hex~, you get this error: > #+begin_example > starting phase `build' > Could not find Hex, which is needed to build dependency :ex_doc > Shall I install Hex? (if running non-interactively, use "mix > local.hex --force") [Yn] > #+end_example > This message is called from ~handle_rebar_not_found~ in > ~lib/mix/lib/mix/tasks/deps.compile.ex~ ; which is called from > ~rebar_cmd~ because > a ~manager~ (~Hex~) could not be found. Hex must be present => > install-hex must be executed. > > I thought that this should not be a problem since Hex is needed at > build time, and just symlinked. Maybe should it be copied instead? Is hex not an (implicit) native-input in your build system? Anything that keeps it from functioning is a packaging bug imho. > * Comment > ** lilyp > > + (define (install-input mix-env input) > > + (let ((dir (mix-build-dir mix-env))) > > + (mkdir-p dir) > > + (match input > > + ((_ . path) > > + ((compose > > + (cut for-each (cut install-lib <> dir) <>) > > + (cut append-map list-directories <>) > > + (cut filter directory-exists? <>)) > > + (list (elixir-libdir (assoc-ref inputs "elixir") path) > > + (erlang-libdir path))))))) > > I think you're at the wrong layer of abstraction here. > > (match input > ((_ . prefix) > (begin > (install-subdirectories (elixir-libdir path)) > (install-subdirectories (erlang-libdir path))))) > > where (install-subdirectories PATH) is basically > (when (directory-exists? PATH) > (for-each (cute install-lib <> (mix-build-dir mix-env)) > (list-directories PATH))) > > > ** phf > Does this work? > #+begin_src scheme > (define (install-lib lib dir) > (let ((lib-name (last (string-split lib #\/)))) > (symlink lib (string-append dir "/" lib-name)))) > > (define (install-subdirectories mix-env path) > (let ((build-dir (mix-build-dir mix-env))) > (mkdir-p build-dir) > (when (directory-exists? path) > (for-each (cute install-lib <> build-dir) > (list-directories path))))) Maybe move the mkdir-p into the when or at the start of install-lib. > (define (install-input mix-env input) > (match input > ((_ . path) > (begin > (install-subdirectories mix-env (elixir-libdir path)) > (install-subdirectories mix-env (erlang-libdir path)))))) > #+end_src > > > * Comment > ** lilyp > > + (define (install-inputs mix-env) > > + (for-each (cut install-input mix-env <>) > > + (append inputs native-inputs))) > > Installing native inputs: probably a bad idea (inhibits cross- > compilation). > > > ** phf > A slight variant that does not link things when it should not: > #+begin_src scheme > (define (install-inputs mix-env) > (for-each (cut install-input mix-env <>) > (cond > ((string=? mix-env "prod") inputs) > ((member mix-env '("shared" "test")) (append inputs > native-inputs)) > (else (error (format #f "Unexpected Mix env: ~a~%" > mix-env)))))) > #+end_src > > I did not consider cross-compilation yet. The following might be > wrong be here we go. I far as I understand, Erlang applications are > largely platform independent. Once the code is compiled to BEAM > bytecode, it can run on any platform that has the Erlang VM > installed. If an Erlang library uses native extensions, then cross- > compilation might be required. For a build to succeed > in a given environment (one of "prod", "test", "shared"), the BEAM > files of all dependencies should be present on the build machine. So, > all dependencies must be installed Not an expert on elixir, but that sounds borked. You might get around this with propagated-inputs maybe? That being said, native-inputs shouldn't blow up a build if missing. > * Comment > ** lilyp > > +(define (library-name pkg-name) > > + "Return the library name deduced from PKG-NAME. > > +A package should be named: elixir-lib-name-X.Y.Z from which the > > library name > > +lib_name is deduced." > > + ((compose > > + (cut string-join <> "_") > > + (cut drop-right <> 1) > > + (cut string-split <> #\-)) > > + (strip-elixir-prefix pkg-name))) > > Consider defining (package-name-version->elixir-name) analogous to > (package-name-version->erlang-name) in rebar-build-system. Also > allow overriding it through a build system argument. The thing you > currently have will blow up with git-version. > > > ** phf > Faily close to the ~rebar-build-system~ version. > #+begin_src scheme > (define (package-name-version->elixir-name name+ver) > "Convert the Guix package NAME-VER to the corresponding Elixir > name-version format. Essentially drop the prefix used in Guix and > replace dashes by underscores." > (let* ((name- (package-name->name+version name+ver))) > (string-join > (string-split > (if (string-prefix? "elixir-" name-) > (string-drop name- (string-length "elixir-")) > name-) > #\-) > "_"))) > #+end_src Looks okay.
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Thu, 16 Nov 2023 18:13:02 GMT) Full text and rfc822 format available.Message #203 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Subject: Re: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Thu, 16 Nov 2023 19:12:04 +0100
[Message part 1 (text/plain, inline)]
I should really configure mu4e or something like that. I'm curious to know if you have a pointer to an efficient setup for working through emails like this. Below the last three comments: * WAITING Comment :PROPERTIES: :ID: 76abe0e4-a0e2-4176-bdc0-9ff241e8ba42 :END: ** lilyp > +(define (elixir-libdir elixir path) > + "Return the path where all libraries for a specified ELIXIR > version are installed." > + (string-append path "/lib/elixir/" (elixir-version elixir))) You probably want to swap path and elixir and perhaps also find a way to implicitly parameterize the latter so as to make it optional. ** phf Is this what you mean? #+begin_src scheme ;; The Elixir version is constant as soon as it is computable from the current ;; execution. It is a X.Y string where X and Y are respectively the major and ;; minor version number of the Elixir used in the build. (define elixir-version (make-parameter "X.Y")) (define* (elixir-libdir path #:optional (version (elixir-version))) "Return the path where all libraries for a specified ELIXIR version are installed." (string-append path "/lib/elixir/" version)) (define* (configure #:key inputs mix-path mix-exs #:allow-other-keys) … (elixir-version (receive (_ version) (package-name->name+version (strip-store-file-name (assoc-ref inputs "elixir"))) (let* ((components (string-split version #\.)) (major+minor (take components 2))) (string-join major+minor "."))))) #+end_src ** lilyp I'd use %elixir-version and perhaps make it a fluent rather than a parameter (not quite sure whether parameters get reset when a function goes out of scope). ** phf Parameters do not get reset when a function goes out of scope: #+begin_src scheme (define x (make-parameter 1)) (define (set-x-to-2) (x 2)) (format #t "~a~%" (x)) (set-x-to-2) (format #t "~a~%" (x)) #+end_src #+begin_example 1 2 #+end_example The [[ https://www.gnu.org/software/guile/manual/html_node/Parameters.html][documentation]] seems to indicate that it's an appropriate replacement for a global variable. * WAITING Comment ** lilyp Is hex not an (implicit) native-input in your build system? Anything that keeps it from functioning is a packaging bug imho. ** phf If ~mix~ finds ~Hex~ under ~$MIX_ARCHIVES/hex/hex~, then ~mix compile~ does not emit the message above. I'm not sure how could this be changed. I've tried to set ~MIX_PATH~ to ~/gnu/store/…-elixir-hex-2.0.5/lib/elixir/1.14~ without success. So, this is the reason why ~install-hex~ phase installs Hex like it does. * WAITING Comment ** lilyp > + (define (install-inputs mix-env) > + (for-each (cut install-input mix-env <>) > + (append inputs native-inputs))) Installing native inputs: probably a bad idea (inhibits cross- compilation). ** phf A slight variant that does not link things when it should not: #+begin_src scheme (define (install-inputs mix-env) (for-each (cut install-input mix-env <>) (cond ((string=? mix-env "prod") inputs) ((member mix-env '("shared" "test")) (append inputs native-inputs)) (else (error (format #f "Unexpected Mix env: ~a~%" mix-env)))))) #+end_src I did not consider cross-compilation yet. The following might be wrong be here we go. I far as I understand, Erlang applications are largely platform independent. Once the code is compiled to BEAM bytecode, it can run on any platform that has the Erlang VM installed. If an Erlang library uses native extensions, then cross-compilation might be required. For a build to succeed in a given environment (one of "prod", "test", "shared"), the BEAM files of all dependencies should be present on the build machine. So, all dependencies must be installed ** lilyp Not an expert on elixir, but that sounds borked. ** phf Yes. Did not have time to look into it as of now. ** lilyp You might get around this with propagated-inputs maybe? That being said, native-inputs shouldn't blow up a build if missing. ** phf If ~native-inputs~ are missing, it's fine. But wait, maybe there is a misunderstanding here. Please, check the reasoning: in a cross-compilation context, we have two machines A and B, and: - native-inputs: dependencies that must be built on A for A ; - inputs: dependencies that must be built on A for B ; - propagated-inputs: like inputs but installed in the profile. If installing Elixir (like Python) gathers all libraries in the profile with a variable like ~GUIX_ERL_LIBS~, then, it would be enough to list dependencies (in packages) in ~propagated-inputs~ instead of ~inputs~ and make them available to Elixir through ~ERL_LIBS~ (like ~GUIX_PYTHONPATH~ and ~PYTHONPATH~). As a consequence, the ~install-dependencies~ phase would be reduced to ~ERL_LIBS=$GUIX_ERL_LIBS~. Is this an answer to: "You might get around this with propagated-inputs maybe?"
[Message part 2 (text/html, inline)]
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Thu, 16 Nov 2023 19:35:02 GMT) Full text and rfc822 format available.Message #206 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>, 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Thu, 16 Nov 2023 20:34:40 +0100
Am Donnerstag, dem 16.11.2023 um 19:12 +0100 schrieb Pierre-Henry Fröhring: > I should really configure mu4e or something like that. > I'm curious to know if you have a pointer to an efficient setup for > working through emails like this. > Below the last three comments: > > * WAITING Comment > :PROPERTIES: > :ID: 76abe0e4-a0e2-4176-bdc0-9ff241e8ba42 > :END: > > ** lilyp > > +(define (elixir-libdir elixir path) > > + "Return the path where all libraries for a specified ELIXIR > > version are installed." > > + (string-append path "/lib/elixir/" (elixir-version elixir))) > > You probably want to swap path and elixir and perhaps also find a way > to implicitly parameterize the latter so as to make it optional. > > > ** phf > Is this what you mean? > #+begin_src scheme > ;; The Elixir version is constant as soon as it is computable from > the current > ;; execution. It is a X.Y string where X and Y are respectively the > major and > ;; minor version number of the Elixir used in the build. > (define elixir-version (make-parameter "X.Y")) > > (define* (elixir-libdir path #:optional (version (elixir-version))) > "Return the path where all libraries for a specified ELIXIR version > are installed." > (string-append path "/lib/elixir/" version)) > > (define* (configure #:key inputs mix-path mix-exs #:allow-other-keys) > … > (elixir-version > (receive (_ version) (package-name->name+version (strip-store- > file-name (assoc-ref inputs "elixir"))) > (let* ((components (string-split version #\.)) > (major+minor (take components 2))) > (string-join major+minor "."))))) > #+end_src > > > ** lilyp > I'd use %elixir-version. > > > ** phf > Parameters do not get reset when a function goes out of scope: > #+begin_src scheme > (define x (make-parameter 1)) > (define (set-x-to-2) (x 2)) > (format #t "~a~%" (x)) > (set-x-to-2) > (format #t "~a~%" (x)) > #+end_src > > #+begin_example > 1 > 2 > #+end_example > > The documentation seems to indicate that it's an appropriate > replacement for a global variable. It also uses the special parameterize thing to scope values. That being said, if parameters work for you, then parameters are fine. > > * WAITING Comment** lilyp > Is hex not an (implicit) native-input in your build system? Anything > that keeps it from functioning is a packaging bug imho. > > > ** phf > If ~mix~ finds ~Hex~ under ~$MIX_ARCHIVES/hex/hex~, then ~mix > compile~ does not emit the message above. I'm not sure how could this > be changed. I've tried to set ~MIX_PATH~ to ~/gnu/store/…-elixir-hex- > 2.0.5/lib/elixir/1.14~ without > success. So, this is the reason why ~install-hex~ phase installs Hex > like it does. Look into mix and how it invokes hex. There's hardcoding potential, I'm sure of it. > * WAITING Comment > ** lilyp > > + (define (install-inputs mix-env) > > + (for-each (cut install-input mix-env <>) > > + (append inputs native-inputs))) > > Installing native inputs: probably a bad idea (inhibits cross- > compilation). > > > ** phf > A slight variant that does not link things when it should not: > #+begin_src scheme > (define (install-inputs mix-env) > (for-each (cut install-input mix-env <>) > (cond > ((string=? mix-env "prod") inputs) > ((member mix-env '("shared" "test")) (append inputs > native-inputs)) > (else (error (format #f "Unexpected Mix env: ~a~%" > mix-env)))))) > #+end_src > > I did not consider cross-compilation yet. The following might be > wrong be here we go. I far as I understand, Erlang applications are > largely platform independent. Once the code is compiled to BEAM > bytecode, it can run on any platform that has the Erlang VM > installed. If an Erlang library uses native extensions, then cross- > compilation might be required. For a build to succeed > in a given environment (one of "prod", "test", "shared"), the BEAM > files of all dependencies should be present on the build machine. So, > all dependencies must be installed > > > ** lilyp > Not an expert on elixir, but that sounds borked. > > > ** phf > Yes. Did not have time to look into it as of now. > > > ** lilyp > You might get around this with propagated-inputs maybe? That being > said, native-inputs shouldn't blow up a build if missing. > > > ** phf > If ~native-inputs~ are missing, it's fine. But wait, maybe there is a > misunderstanding here. Please, check the reasoning: in a cross- > compilation context, we have two machines A and B, and: > - native-inputs: dependencies that must be built on A for A ; > - inputs: dependencies that must be built on A for B ; > - propagated-inputs: like inputs but installed in the profile. > > > If installing Elixir (like Python) gathers all libraries in the > profile with a variable like ~GUIX_ERL_LIBS~, then, it would be > enough to list dependencies (in packages) in ~propagated-inputs~ > instead of ~inputs~ and make them available to Elixir through > ~ERL_LIBS~ (like ~GUIX_PYTHONPATH~ and ~PYTHONPATH~). > As a consequence, the ~install-dependencies~ phase would be reduced > to ~ERL_LIBS=$GUIX_ERL_LIBS~. > > Is this an answer to: "You might get around this with propagated- > inputs maybe?" If environment variables work, that is clearly to be preferred over any other magic we've considered so far. My hunch is that rebar-build- system was written this way because environment variables didn't work, however. Same with Rust and Node, which are kinda yucky in this regard. Other than that, yes, (ab)using propagated-inputs like that is the way to go when there's no smarter alternative available. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 17 Nov 2023 07:37:02 GMT) Full text and rfc822 format available.Message #209 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Fri, 17 Nov 2023 08:36:22 +0100
* WAITING Comment ** lilyp > +(define* (install-hex #:key name inputs outputs #:allow-other-keys) > + "Install Hex." > + (let ((hex-archive-path (string-append (getenv "MIX_ARCHIVES") > "/hex"))) > + (mkdir-p hex-archive-path) > + (symlink (car (list-directories (elixir-libdir (assoc-ref inputs > "elixir") > + (assoc-ref inputs > "elixir-hex")))) > + (string-append hex-archive-path "/hex")))) Why do we need this? It looks like we'll be pasting the same (native?) input all over the store, which imho would be bad. ** phf Without ~Hex~, you get this error: #+begin_example starting phase `build' Could not find Hex, which is needed to build dependency :ex_doc Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] #+end_example This message is called from ~handle_rebar_not_found~ in ~lib/mix/lib/mix/tasks/deps.compile.ex~ ; which is called from ~rebar_cmd~ because a ~manager~ (~Hex~) could not be found. Hex must be present => install-hex must be executed. I thought that this should not be a problem since Hex is needed at build time, and just symlinked. Maybe should it be copied instead? ** lilyp Is hex not an (implicit) native-input in your build system? Anything that keeps it from functioning is a packaging bug imho. ** phf If ~mix~ finds ~Hex~ under ~$MIX_ARCHIVES/hex/hex~, then ~mix compile~ does not emit the message above. I'm not sure how could this be changed. I've tried to set ~MIX_PATH~ to ~/gnu/store/…-elixir-hex-2.0.5/lib/elixir/1.14~ without success. So, this is the reason why ~install-hex~ phase installs Hex like it does. ** lilyp Look into mix and how it invokes hex. There's hardcoding potential, I'm sure of it. ** phf :PROPERTIES: :ID: d9ffbbfa-3cd3-4a44-9acb-04a0627b90d7 :END: - Observation: ~mix compile~ ⇒ "Could not find Hex, which is needed to build dependency :ex_doc". - We have the source - guix build --source - We found from where this message is emitted. - lib/mix/lib/mix/hex.ex - We now why the message was emitted. - Code.ensure_loaded?(Hex) failed. - https://hexdocs.pm/elixir/1.14.0/Code.html#ensure_loaded/1 Well, adding the store path of Hex to ~ERL_LIBS~ solves the problem. The ~install-hex~ phase can be deleted in favor of manipulating ~ERL_LIBS~ as suggested with propagated inputs [[id:d7cd6e3d-9802-499f-a157-7698aca942d4][below]]. * WAITING Comment :PROPERTIES: :ID: d7cd6e3d-9802-499f-a157-7698aca942d4 :END: ** lilyp > + (define (install-inputs mix-env) > + (for-each (cut install-input mix-env <>) > + (append inputs native-inputs))) Installing native inputs: probably a bad idea (inhibits cross- compilation). ** phf A slight variant that does not link things when it should not: #+begin_src scheme (define (install-inputs mix-env) (for-each (cut install-input mix-env <>) (cond ((string=? mix-env "prod") inputs) ((member mix-env '("shared" "test")) (append inputs native-inputs)) (else (error (format #f "Unexpected Mix env: ~a~%" mix-env)))))) #+end_src I did not consider cross-compilation yet. The following might be wrong be here we go. As far as I understand, Erlang applications are largely platform independent. Once the code is compiled to BEAM bytecode, it can run on any platform that has the Erlang VM installed. If an Erlang library uses native extensions, then cross-compilation might be required. For a build to succeed in a given environment (one of "prod", "test", "shared"), the BEAM files of all dependencies should be present on the build machine. So, all dependencies must be installed ** lilyp Not an expert on elixir, but that sounds borked. ** phf Yes. Did not have time to look into it as of now. ** lilyp You might get around this with propagated-inputs maybe? That being said, native-inputs shouldn't blow up a build if missing. ** phf If ~native-inputs~ are missing, it's fine. But wait, maybe there is a misunderstanding here. Please, check the reasoning: in a cross-compilation context, we have two machines A and B, and: - native-inputs: dependencies that must be built on A for A ; - inputs: dependencies that must be built on A for B ; - propagated-inputs: like inputs but installed in the profile. If installing Elixir (like Python) gathers all libraries in the profile with a variable like ~GUIX_ERL_LIBS~, then, it would be enough to list dependencies (in packages) in ~propagated-inputs~ instead of ~inputs~ and make them available to Elixir through ~ERL_LIBS~ (like ~GUIX_PYTHONPATH~ and ~PYTHONPATH~). As a consequence, the ~install-dependencies~ phase would be reduced to ~ERL_LIBS=$GUIX_ERL_LIBS~. Is this an answer to: "You might get around this with propagated-inputs maybe?" ** lilyp If environment variables work, that is clearly to be preferred over any other magic we've considered so far. My hunch is that rebar-build- system was written this way because environment variables didn't work, however. Same with Rust and Node, which are kinda yucky in this regard. Other than that, yes, (ab)using propagated-inputs like that is the way to go when there's no smarter alternative available. ** phf As hinted [[id:d9ffbbfa-3cd3-4a44-9acb-04a0627b90d7][above]], abusing propagated inputs works up to the ~elixir-machete~ package. Essentially, it is enough to add the code below to the ~elixir~ package: #+begin_src scheme (native-search-paths (list (search-path-specification (variable "GUIX_ERL_LIBS") (files (list "lib/erlang/lib" (string-append "lib/elixir/" (version-major+minor version))))))) #+end_src ~install-dependencies~ has been deleted altogether for a single line added to ~set-mix-env~. #+begin_src scheme (setenv "ERL_LIBS" (getenv "GUIX_ERL_LIBS")) #+end_src So, if Erlang and Elixir dependencies are added to propagated inputs, then it seems to work as expected.
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 17 Nov 2023 08:04:02 GMT) Full text and rfc822 format available.Message #212 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: 66801 <at> debbugs.gnu.org Cc: liliana.prikler <at> gmail.com, Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Fri, 17 Nov 2023 09:03:08 +0100
* guix/build-system/mix.scm, * guix/build/mix-build-system.scm: New modules. Change-Id: I2cbf6c963a530e73420da0eb17ffaf92827451bf --- gnu/packages/elixir.scm | 62 ++++++++++- guix/build-system/mix.scm | 187 ++++++++++++++++++++++++++++++++ guix/build/mix-build-system.scm | 171 +++++++++++++++++++++++++++++ 3 files changed, 417 insertions(+), 3 deletions(-) create mode 100644 guix/build-system/mix.scm create mode 100644 guix/build/mix-build-system.scm diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index 724b4251..6f779afb 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -27,6 +27,7 @@ (define-module (gnu packages elixir) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system gnu) #:use-module (guix gexp) + #:use-module (guix utils) #:use-module (guix git-download) #:use-module (guix packages) #:use-module (gnu packages) @@ -96,9 +97,21 @@ (define-public elixir (lambda* (#:key inputs #:allow-other-keys) ;; Some tests require access to a home directory. (setenv "HOME" "/tmp"))) - (delete 'configure)))) - (inputs - (list erlang git)) + (delete 'configure) + (add-after 'install 'wrap-programs + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (programs '("elixir" "elixirc" "iex" "mix"))) + (for-each (lambda (program) + (wrap-program (string-append out "/bin/" program) + '("ERL_LIBS" prefix ("${GUIX_ERL_LIBS}")))) + programs))))))) + (inputs (list erlang git)) + (native-search-paths + (list (search-path-specification + (variable "GUIX_ERL_LIBS") + (files (list "lib/erlang/lib" + (string-append "lib/elixir/" (version-major+minor version))))))) (home-page "https://elixir-lang.org/") (synopsis "Elixir programming language") (description "Elixir is a dynamic, functional language used to build @@ -106,3 +119,46 @@ (define-public elixir for running low-latency, distributed and fault-tolerant systems, while also being successfully used in web development and the embedded software domain.") (license license:asl2.0))) + +(define-public elixir-hex + (package + (name "elixir-hex") + (version "2.0.5") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hexpm/hex.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1kvczwvij58kgkhak68004ap81pl26600bczg21mymy2sypkgxmj")))) + ;; The mix-build-system assumes that Hex exists. + ;; We build Hex using the gnu-build-system. + ;; Other Elixir packages use the mix-build-system. + (build-system gnu-build-system) + (inputs (list elixir)) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (delete 'bootstrap) + (delete 'configure) + (replace 'build + (lambda* (#:key inputs #:allow-other-keys) + (setenv "MIX_ENV" "prod") + (invoke "mix" "compile"))) + (delete 'check) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (define X.Y #$(version-major+minor (package-version elixir))) + (define out (string-append (assoc-ref outputs "out") "/lib/elixir/" X.Y "/hex")) + (mkdir-p out) + (copy-recursively "_build/prod/lib/hex" out)))))) + (synopsis "Package manager for the Erlang VM") + (description + "This project provides tasks that integrate with Mix, Elixir's build +tool.") + (home-page "https://hexdocs.pm/makeup_elixir/") + (license license:bsd-2))) diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm new file mode 100644 index 00000000..7ddedea9 --- /dev/null +++ b/guix/build-system/mix.scm @@ -0,0 +1,187 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Standard build procedure for Elixir packages using 'mix'. This is +;; implemented as an extension of 'gnu-build-system'. +;; +;; Code: + +(define-module (guix build-system mix) + #:use-module (guix build mix-build-system) + #:use-module (guix build-system gnu) + #:use-module (guix build-system) + #:use-module (guix gexp) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix search-paths) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (mix-build-system hexpm-uri)) + +;; Lazily resolve the bindings to avoid circular dependencies. +(define (default-glibc-utf8-locales) + (let* ((base (resolve-interface '(gnu packages base)))) + (module-ref base 'glibc-utf8-locales))) + +(define (default-elixir-hex) + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir-hex))) + +(define (default-rebar3) + (let ((erlang (resolve-interface '(gnu packages erlang)))) + (module-ref erlang 'rebar3))) + +(define (default-elixir) + "Return the default Elixir package." + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir))) + +(define* (strip-prefix name #:optional (prefix "elixir-")) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (hexpm-uri name version) + "Return the URI where to fetch the sources of a Hex package NAME at VERSION. +NAME is the name of the package which should look like: elixir-pkg-name-X.Y.Z +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" + ((compose + (cut string-append "https://repo.hex.pm/tarballs/" <> "-" version ".tar") + (cut string-replace-substring <> "-" "_") + strip-prefix) + name)) + +;; A number of environment variables specific to the Mix build system are +;; reflected here. They are documented at +;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables. Other +;; parameters located in mix.exs are defined at +;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration +(define* (mix-build name + inputs + #:key + source + (tests? #t) + (mix-path #f) ;See MIX_PATH. + (mix-exs "mix.exs") ;See MIX_EXS. + (build-per-environment #t) ;See :build_per_environment. + (phases '%standard-phases) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules `((guix build mix-build-system) + ,@%gnu-build-system-modules)) + (modules '((guix build mix-build-system) + (guix build utils)))) + "Build SOURCE using Elixir, and with INPUTS." + + ;; Check the documentation of :build_per_environment here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration And + ;; "Environments" here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments + (define mix-environments + (if build-per-environment + `("prod" ,@(if tests? '("test") '())) + '("shared"))) + + (define builder + (with-imported-modules imported-modules + #~(begin + + (use-modules #$@(sexp->gexp modules)) + + #$(with-build-variables inputs outputs + #~(mix-build #:name #$name + #:source #+source + #:system #$system + #:tests? #$tests? + #:mix-path #$mix-path + #:mix-exs #$mix-exs + #:mix-environments '#$mix-environments + #:build-per-environment #$build-per-environment + #:phases #$(if (pair? phases) + (sexp->gexp phases) + phases) + #:outputs %outputs + #:search-paths '#$(sexp->gexp + (map + search-path-specification->sexp + search-paths)) + #:inputs + %build-inputs))))) + + (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) + system + #:graft? #f))) + (gexp->derivation name + builder + #:system system + #:graft? #f ;consistent with 'gnu-build' + #:target #f + #:guile-for-build guile))) + +(define* (lower name + #:key + (elixir (default-elixir)) + (elixir-hex (default-elixir-hex)) + (glibc-utf8-locales (default-glibc-utf8-locales)) + (inputs '()) + (native-inputs '()) + (propagated-inputs '()) + (rebar3 (default-rebar3)) + (tests? #t) + outputs + source + system + target + #:allow-other-keys #:rest arguments) + "Return a bag for NAME." + (let ((private-keywords + '(#:inputs #:native-inputs + #:outputs #:system #:target + #:elixir #:elixir-hex #:glibc-utf8-locales + #:rebar3 #:erlang)) + (build-inputs + `(,@(standard-packages) + ("glibc-utf8-locales" ,glibc-utf8-locales) + ("erlang" ,(lookup-package-input elixir "erlang")) + ("rebar3" ,rebar3) + ("elixir" ,elixir) + ("elixir-hex" ,elixir-hex) + ,@inputs + ,@native-inputs))) + (bag (name name) + (system system) + (build-inputs build-inputs) + (host-inputs (if target inputs '())) + (outputs outputs) + (build mix-build) + (arguments (strip-keyword-arguments private-keywords arguments))))) + +(define mix-build-system + (build-system (name 'mix) + (description "The standard Mix build system") + (lower lower))) + +;;; mix.scm ends here diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build-system.scm new file mode 100644 index 00000000..ca649582 --- /dev/null +++ b/guix/build/mix-build-system.scm @@ -0,0 +1,171 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Code: + +(define-module (guix build mix-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (ice-9 ftw) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module (ice-9 string-fun) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-71) + #:export (mix-build + %standard-phases)) + +;; The Elixir version is constant as soon as it is computable from the current +;; execution. It is a X.Y string where X and Y are respectively the major and +;; minor version number of the Elixir used in the build. +(define %elixir-version (make-parameter "X.Y")) + +(define* (elixir-libdir path #:optional (version (%elixir-version))) + "Return the path where all libraries for a specified ELIXIR version are installed." + (string-append path "/lib/elixir/" version)) + +(define (erlang-libdir path) + "Return the path of the directory where libraries of an Erlang package are +installed in the store." + (string-append path "/lib/erlang/lib")) + +(define* (strip-prefix name #:optional (prefix "elixir-")) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (mix-build-dir mix-env) + "Return the directory where build artifacts are to be installed according to +en environment MIX-ENV in the current directory." + (string-append "_build/" mix-env "/lib")) + +(define (elixir-version inputs) + "Return an X.Y string where X and Y are respectively the major and minor version number of ELIXIR. +Example: /gnu/store/…-elixir-1.14.0 → 1.14" + (let* ((_ version (package-name->name+version + (strip-store-file-name (assoc-ref inputs "elixir")))) + (components (string-split version #\.)) + (major+minor (take components 2))) + (string-join major+minor "."))) + +(define* (unpack #:key source mix-path #:allow-other-keys) + "Unpack SOURCE in the working directory, and change directory within the +source. When SOURCE is a directory, copy it in a sub-directory of the current +working directory." + (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) + (gnu-unpack #:source source) + (when (file-exists? "contents.tar.gz") + (invoke "tar" "xvf" "contents.tar.gz")))) + +(define (list-directories dir) + "List absolute paths of directories directly under the directory DIR." + (map (cut string-append dir "/" <>) + (scandir dir (lambda (filename) + (and (not (member filename '("." ".."))) + (directory-exists? (string-append dir "/" filename))))))) + +(define* (set-mix-env #:key inputs mix-path mix-exs #:allow-other-keys) + "Set environment variables. +See: https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables" + (setenv "MIX_HOME" (getcwd)) + (setenv "MIX_ARCHIVES" "archives") + (setenv "MIX_BUILD_ROOT" "_build") + (setenv "MIX_DEPS_PATH" "deps") + (setenv "MIX_PATH" (or mix-path "")) + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") "/bin/rebar3")) + (setenv "MIX_EXS" mix-exs) + (%elixir-version (elixir-version inputs))) + +(define* (install-hex #:key name inputs outputs #:allow-other-keys) + "Install Hex." + (let ((hex-archive-path (string-append (getenv "MIX_ARCHIVES") "/hex"))) + (mkdir-p hex-archive-path) + (symlink (car (list-directories (elixir-libdir (assoc-ref inputs "elixir-hex")))) + (string-append hex-archive-path "/hex")))) + +(define* (install-dependencies . _) + "Install dependencies." + (setenv "ERL_LIBS" (getenv "GUIX_ERL_LIBS"))) + +(define* (build #:key mix-environments #:allow-other-keys) + "Builds the Mix project." + (for-each (lambda (mix-env) + (setenv "MIX_ENV" mix-env) + (invoke "mix" "compile" "--no-deps-check")) + mix-environments)) + +(define* (check #:key (tests? #t) #:allow-other-keys) + "Test the Mix project." + (if tests? + (invoke "mix" "test" "--no-deps-check") + (format #t "tests? = ~a~%" tests?))) + +(define* (remove-mix-dirs . _) + "Remove all .mix/ directories. +We do not want to copy them to the installation directory." + (for-each delete-file-recursively + (find-files "." (file-name-predicate "\\.mix$") #:directories? #t))) + +(define (package-name-version->elixir-name name+ver) + "Convert the Guix package NAME-VER to the corresponding Elixir name-version +format. Essentially drop the prefix used in Guix and replace dashes by +underscores." + (let* ((name- (package-name->name+version name+ver))) + (string-join + (string-split + (if (string-prefix? "elixir-" name-) + (string-drop name- (string-length "elixir-")) + name-) + #\-) + "_"))) + +(define* (install #:key + inputs + outputs + name + build-per-environment + #:allow-other-keys) + "Install build artifacts in the store." + (let* ((lib-name (package-name-version->elixir-name name)) + (lib-dir (string-append (elixir-libdir (assoc-ref outputs "out")) "/" lib-name))) + (mkdir-p lib-dir) + (copy-recursively (string-append (mix-build-dir (if build-per-environment "prod" "shared")) "/" lib-name) + lib-dir + #:follow-symlinks? #t))) + +(define %standard-phases + (modify-phases gnu:%standard-phases + (delete 'bootstrap) + (delete 'configure) + (add-after 'install-locale 'set-mix-env set-mix-env) + (replace 'unpack unpack) + (replace 'build build) + (replace 'check check) + (add-before 'install 'remove-mix-dirs remove-mix-dirs) + (replace 'install install))) + +(define* (mix-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given Mix package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; mix-build-system.scm ends here base-commit: a0d337e79c87d7c38c79d0291974f490cb137a52 -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 17 Nov 2023 19:25:02 GMT) Full text and rfc822 format available.Message #215 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>, 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Fri, 17 Nov 2023 20:24:25 +0100
Am Freitag, dem 17.11.2023 um 09:03 +0100 schrieb Pierre-Henry Fröhring: > * guix/build-system/mix.scm, > * guix/build/mix-build-system.scm: New modules. Avoid spanning a change across multiple files. Use file: Change. file2: Likewise. > Change-Id: I2cbf6c963a530e73420da0eb17ffaf92827451bf > --- > gnu/packages/elixir.scm | 62 ++++++++++- > guix/build-system/mix.scm | 187 > ++++++++++++++++++++++++++++++++ > guix/build/mix-build-system.scm | 171 +++++++++++++++++++++++++++++ You committed two changes at once here. Split them. > 3 files changed, 417 insertions(+), 3 deletions(-) > create mode 100644 guix/build-system/mix.scm > create mode 100644 guix/build/mix-build-system.scm > > diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm > index 724b4251..6f779afb 100644 > --- a/gnu/packages/elixir.scm > +++ b/gnu/packages/elixir.scm > @@ -27,6 +27,7 @@ (define-module (gnu packages elixir) > #:use-module ((guix licenses) #:prefix license:) > #:use-module (guix build-system gnu) > #:use-module (guix gexp) > + #:use-module (guix utils) > #:use-module (guix git-download) > #:use-module (guix packages) > #:use-module (gnu packages) > @@ -96,9 +97,21 @@ (define-public elixir > (lambda* (#:key inputs #:allow-other-keys) > ;; Some tests require access to a home directory. > (setenv "HOME" "/tmp"))) > - (delete 'configure)))) > - (inputs > - (list erlang git)) > + (delete 'configure) > + (add-after 'install 'wrap-programs > + (lambda* (#:key inputs outputs #:allow-other-keys) > + (let* ((out (assoc-ref outputs "out")) > + (programs '("elixir" "elixirc" "iex" "mix"))) > + (for-each (lambda (program) > + (wrap-program (string-append out "/bin/" > program) > + '("ERL_LIBS" prefix > ("${GUIX_ERL_LIBS}")))) > + programs))))))) > + (inputs (list erlang git)) > + (native-search-paths > + (list (search-path-specification > + (variable "GUIX_ERL_LIBS") > + (files (list "lib/erlang/lib" > + (string-append "lib/elixir/" (version- > major+minor version))))))) I suppose ERL is for erlang? What do we use for elixir then? > (home-page "https://elixir-lang.org/") > (synopsis "Elixir programming language") > (description "Elixir is a dynamic, functional language used to > build > @@ -106,3 +119,46 @@ (define-public elixir > for running low-latency, distributed and fault-tolerant systems, > while also > being successfully used in web development and the embedded software > domain.") > (license license:asl2.0))) > + > +(define-public elixir-hex > + (package > + (name "elixir-hex") > + (version "2.0.5") > + (source > + (origin > + (method git-fetch) > + (uri (git-reference > + (url "https://github.com/hexpm/hex.git") > + (commit (string-append "v" version)))) > + (file-name (git-file-name name version)) > + (sha256 > + (base32 > + "1kvczwvij58kgkhak68004ap81pl26600bczg21mymy2sypkgxmj")))) > + ;; The mix-build-system assumes that Hex exists. > + ;; We build Hex using the gnu-build-system. > + ;; Other Elixir packages use the mix-build-system. > + (build-system gnu-build-system) > + (inputs (list elixir)) > + (arguments > + (list > + #:phases > + #~(modify-phases %standard-phases > + (delete 'bootstrap) > + (delete 'configure) > + (replace 'build > + (lambda* (#:key inputs #:allow-other-keys) > + (setenv "MIX_ENV" "prod") > + (invoke "mix" "compile"))) > + (delete 'check) > + (replace 'install > + (lambda* (#:key inputs outputs #:allow-other-keys) > + (define X.Y #$(version-major+minor (package-version > elixir))) > + (define out (string-append (assoc-ref outputs "out") > "/lib/elixir/" X.Y "/hex")) > + (mkdir-p out) > + (copy-recursively "_build/prod/lib/hex" out)))))) > + (synopsis "Package manager for the Erlang VM") > + (description > + "This project provides tasks that integrate with Mix, Elixir's > build > +tool.") > + (home-page "https://hexdocs.pm/makeup_elixir/") > + (license license:bsd-2))) > diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm > new file mode 100644 > index 00000000..7ddedea9 > --- /dev/null > +++ b/guix/build-system/mix.scm > @@ -0,0 +1,187 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2023 Pierre-Henry Fröhring > <phfrohring <at> deeplinks.com> > +;;; > +;;; 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/>. > + > +;; Commentary: > +;; > +;; Standard build procedure for Elixir packages using 'mix'. This > is > +;; implemented as an extension of 'gnu-build-system'. > +;; > +;; Code: > + > +(define-module (guix build-system mix) > + #:use-module (guix build mix-build-system) > + #:use-module (guix build-system gnu) > + #:use-module (guix build-system) > + #:use-module (guix gexp) > + #:use-module (guix monads) > + #:use-module (guix packages) > + #:use-module (guix search-paths) > + #:use-module (guix store) > + #:use-module (guix utils) > + #:use-module (ice-9 match) > + #:use-module (srfi srfi-1) > + #:use-module (srfi srfi-26) > + #:export (mix-build-system hexpm-uri)) > + > +;; Lazily resolve the bindings to avoid circular dependencies. > +(define (default-glibc-utf8-locales) > + (let* ((base (resolve-interface '(gnu packages base)))) > + (module-ref base 'glibc-utf8-locales))) > + > +(define (default-elixir-hex) > + (let ((elixir (resolve-interface '(gnu packages elixir)))) > + (module-ref elixir 'elixir-hex))) > + > +(define (default-rebar3) > + (let ((erlang (resolve-interface '(gnu packages erlang)))) > + (module-ref erlang 'rebar3))) > + > +(define (default-elixir) > + "Return the default Elixir package." > + (let ((elixir (resolve-interface '(gnu packages elixir)))) > + (module-ref elixir 'elixir))) > + > +(define* (strip-prefix name #:optional (prefix "elixir-")) > + "Return NAME without the prefix PREFIX." > + (if (string-prefix? prefix name) > + (string-drop name (string-length prefix)) > + name)) > + > +(define (hexpm-uri name version) > + "Return the URI where to fetch the sources of a Hex package NAME > at VERSION. > +NAME is the name of the package which should look like: elixir-pkg- > name-X.Y.Z > +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" > + ((compose > + (cut string-append "https://repo.hex.pm/tarballs/" <> "-" > version ".tar") > + (cut string-replace-substring <> "-" "_") > + strip-prefix) > + name)) > + > +;; A number of environment variables specific to the Mix build > system are > +;; reflected here. They are documented at > +;; > https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables. > Other > +;; parameters located in mix.exs are defined at > +;; > https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration > +(define* (mix-build name > + inputs > + #:key > + source > + (tests? #t) > + (mix-path #f) ;See MIX_PATH. > + (mix-exs "mix.exs") ;See MIX_EXS. > + (build-per-environment #t) ;See > :build_per_environment. > + (phases '%standard-phases) > + (outputs '("out")) > + (search-paths '()) > + (system (%current-system)) > + (guile #f) > + (imported-modules `((guix build mix-build- > system) > + ,@%gnu-build-system- > modules)) > + (modules '((guix build mix-build-system) > + (guix build utils)))) > + "Build SOURCE using Elixir, and with INPUTS." > + > + ;; Check the documentation of :build_per_environment here: > + ;; > https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration A > nd > + ;; "Environments" here: > + ;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments > + (define mix-environments > + (if build-per-environment > + `("prod" ,@(if tests? '("test") '())) > + '("shared"))) > + > + (define builder > + (with-imported-modules imported-modules > + #~(begin > + > + (use-modules #$@(sexp->gexp modules)) > + > + #$(with-build-variables inputs outputs > + #~(mix-build #:name #$name > + #:source #+source > + #:system #$system > + #:tests? #$tests? > + #:mix-path #$mix-path > + #:mix-exs #$mix-exs > + #:mix-environments '#$mix-environments > + #:build-per-environment #$build-per- > environment > + #:phases #$(if (pair? phases) > + (sexp->gexp phases) > + phases) > + #:outputs %outputs > + #:search-paths '#$(sexp->gexp > + (map > + search-path- > specification->sexp > + search-paths)) > + #:inputs > + %build-inputs))))) > + > + (mlet %store-monad ((guile (package->derivation (or guile > (default-guile)) > + system > + #:graft? #f))) > + (gexp->derivation name > + builder > + #:system system > + #:graft? #f ;consistent with 'gnu-build' > + #:target #f > + #:guile-for-build guile))) > + > +(define* (lower name > + #:key > + (elixir (default-elixir)) > + (elixir-hex (default-elixir-hex)) > + (glibc-utf8-locales (default-glibc-utf8-locales)) > + (inputs '()) > + (native-inputs '()) > + (propagated-inputs '()) > + (rebar3 (default-rebar3)) > + (tests? #t) > + outputs > + source > + system > + target > + #:allow-other-keys #:rest arguments) > + "Return a bag for NAME." > + (let ((private-keywords > + '(#:inputs #:native-inputs > + #:outputs #:system #:target > + #:elixir #:elixir-hex #:glibc-utf8-locales > + #:rebar3 #:erlang)) > + (build-inputs > + `(,@(standard-packages) > + ("glibc-utf8-locales" ,glibc-utf8-locales) > + ("erlang" ,(lookup-package-input elixir "erlang")) > + ("rebar3" ,rebar3) > + ("elixir" ,elixir) > + ("elixir-hex" ,elixir-hex) > + ,@inputs > + ,@native-inputs))) > + (bag (name name) > + (system system) > + (build-inputs build-inputs) > + (host-inputs (if target inputs '())) > + (outputs outputs) > + (build mix-build) > + (arguments (strip-keyword-arguments private-keywords > arguments))))) > + > +(define mix-build-system > + (build-system (name 'mix) > + (description "The standard Mix build system") > + (lower lower))) > + > +;;; mix.scm ends here > diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build- > system.scm > new file mode 100644 > index 00000000..ca649582 > --- /dev/null > +++ b/guix/build/mix-build-system.scm > @@ -0,0 +1,171 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2023 Pierre-Henry Fröhring > <phfrohring <at> deeplinks.com> > +;;; > +;;; 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/>. > + > +;; Commentary: > +;; > +;; Code: > + > +(define-module (guix build mix-build-system) > + #:use-module ((guix build gnu-build-system) #:prefix gnu:) > + #:use-module (guix build utils) > + #:use-module (ice-9 ftw) > + #:use-module (ice-9 match) > + #:use-module (ice-9 regex) > + #:use-module (ice-9 string-fun) > + #:use-module (srfi srfi-1) > + #:use-module (srfi srfi-26) > + #:use-module (srfi srfi-71) > + #:export (mix-build > + %standard-phases)) > + > +;; The Elixir version is constant as soon as it is computable from > the current > +;; execution. It is a X.Y string where X and Y are respectively the > major and > +;; minor version number of the Elixir used in the build. > +(define %elixir-version (make-parameter "X.Y")) > + > +(define* (elixir-libdir path #:optional (version (%elixir-version))) > + "Return the path where all libraries for a specified ELIXIR > version are installed." > + (string-append path "/lib/elixir/" version)) > + > +(define (erlang-libdir path) > + "Return the path of the directory where libraries of an Erlang > package are > +installed in the store." > + (string-append path "/lib/erlang/lib")) > + > +(define* (strip-prefix name #:optional (prefix "elixir-")) > + "Return NAME without the prefix PREFIX." > + (if (string-prefix? prefix name) > + (string-drop name (string-length prefix)) > + name)) > + > +(define (mix-build-dir mix-env) > + "Return the directory where build artifacts are to be installed > according to > +en environment MIX-ENV in the current directory." > + (string-append "_build/" mix-env "/lib")) > + > +(define (elixir-version inputs) > + "Return an X.Y string where X and Y are respectively the major and > minor version number of ELIXIR. > +Example: /gnu/store/…-elixir-1.14.0 → 1.14" > + (let* ((_ version (package-name->name+version > + (strip-store-file-name (assoc-ref inputs > "elixir")))) > + (components (string-split version #\.)) > + (major+minor (take components 2))) > + (string-join major+minor "."))) > + > +(define* (unpack #:key source mix-path #:allow-other-keys) > + "Unpack SOURCE in the working directory, and change directory > within the > +source. When SOURCE is a directory, copy it in a sub-directory of > the current > +working directory." > + (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) > + (gnu-unpack #:source source) > + (when (file-exists? "contents.tar.gz") > + (invoke "tar" "xvf" "contents.tar.gz")))) > + > +(define (list-directories dir) > + "List absolute paths of directories directly under the directory > DIR." > + (map (cut string-append dir "/" <>) > + (scandir dir (lambda (filename) > + (and (not (member filename '("." ".."))) > + (directory-exists? (string-append dir "/" > filename))))))) > + > +(define* (set-mix-env #:key inputs mix-path mix-exs #:allow-other- > keys) > + "Set environment variables. > +See: > https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables" > + (setenv "MIX_HOME" (getcwd)) > + (setenv "MIX_ARCHIVES" "archives") > + (setenv "MIX_BUILD_ROOT" "_build") > + (setenv "MIX_DEPS_PATH" "deps") > + (setenv "MIX_PATH" (or mix-path "")) > + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") > "/bin/rebar3")) > + (setenv "MIX_EXS" mix-exs) > + (%elixir-version (elixir-version inputs))) %elixir-version is not an environment variable. You should set this up separately or at the very least add a big fat comment explaining what you're doing here :) > + > +(define* (install-hex #:key name inputs outputs #:allow-other-keys) > + "Install Hex." > + (let ((hex-archive-path (string-append (getenv "MIX_ARCHIVES") > "/hex"))) > + (mkdir-p hex-archive-path) > + (symlink (car (list-directories (elixir-libdir (assoc-ref inputs > "elixir-hex")))) > + (string-append hex-archive-path "/hex")))) Is this still needed? > +(define* (install-dependencies . _) > + "Install dependencies." > + (setenv "ERL_LIBS" (getenv "GUIX_ERL_LIBS"))) Why not do this as part of setting up mix-env? > +(define* (build #:key mix-environments #:allow-other-keys) > + "Builds the Mix project." > + (for-each (lambda (mix-env) > + (setenv "MIX_ENV" mix-env) > + (invoke "mix" "compile" "--no-deps-check")) > + mix-environments)) > + > +(define* (check #:key (tests? #t) #:allow-other-keys) > + "Test the Mix project." > + (if tests? > + (invoke "mix" "test" "--no-deps-check") > + (format #t "tests? = ~a~%" tests?))) > + > +(define* (remove-mix-dirs . _) > + "Remove all .mix/ directories. > +We do not want to copy them to the installation directory." > + (for-each delete-file-recursively > + (find-files "." (file-name-predicate "\\.mix$") > #:directories? #t))) > + > +(define (package-name-version->elixir-name name+ver) > + "Convert the Guix package NAME-VER to the corresponding Elixir > name-version > +format. Essentially drop the prefix used in Guix and replace dashes > by > +underscores." > + (let* ((name- (package-name->name+version name+ver))) > + (string-join > + (string-split > + (if (string-prefix? "elixir-" name-) > + (string-drop name- (string-length "elixir-")) > + name-) > + #\-) > + "_"))) > + > +(define* (install #:key > + inputs > + outputs > + name > + build-per-environment > + #:allow-other-keys) > + "Install build artifacts in the store." > + (let* ((lib-name (package-name-version->elixir-name name)) > + (lib-dir (string-append (elixir-libdir (assoc-ref outputs > "out")) "/" lib-name))) > + (mkdir-p lib-dir) > + (copy-recursively (string-append (mix-build-dir (if build-per- > environment "prod" "shared")) "/" lib-name) > + lib-dir > + #:follow-symlinks? #t))) > + > +(define %standard-phases > + (modify-phases gnu:%standard-phases > + (delete 'bootstrap) > + (delete 'configure) > + (add-after 'install-locale 'set-mix-env set-mix-env) > + (replace 'unpack unpack) > + (replace 'build build) > + (replace 'check check) > + (add-before 'install 'remove-mix-dirs remove-mix-dirs) > + (replace 'install install))) > + > +(define* (mix-build #:key inputs (phases %standard-phases) > + #:allow-other-keys #:rest args) > + "Build the given Mix package, applying all of PHASES in order." > + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) > + > +;;; mix-build-system.scm ends here > > base-commit: a0d337e79c87d7c38c79d0291974f490cb137a52 Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sat, 18 Nov 2023 04:45:02 GMT) Full text and rfc822 format available.Message #218 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Sat, 18 Nov 2023 05:44:31 +0100
* WAITING Comment ** lilyp > * guix/build-system/mix.scm, > * guix/build/mix-build-system.scm: New modules. Avoid spanning a change across multiple files. Use file: Change. file2: Likewise. > gnu/packages/elixir.scm | 62 ++++++++++- > guix/build-system/mix.scm | 187 > ++++++++++++++++++++++++++++++++ > guix/build/mix-build-system.scm | 171 +++++++++++++++++++++++++++++ You committed two changes at once here. Split them. ** phf How are changes counted? I've counted one because all of these changes are needed to introduce the ~mix-build-system~. Should it be: #+begin_example ,* gnu/packages/elixir.scm (elixir): Search path GUIX_ELIXIR_LIBS added. ,* gnu/packages/elixir.scm (elixir): Wrap programs with ERL_LIBS=${GUIX_ELIXIR_LIBS}. ,* guix/build-system/mix.scm: New modules. ,* guix/build/mix-build-system.scm: New modules. #+end_example or something else? * WAITING Comment ** lilyp > +(define* (set-mix-env #:key inputs mix-path mix-exs #:allow-other- > keys) > + "Set environment variables. > +See: > https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables" > + (setenv "MIX_HOME" (getcwd)) > + (setenv "MIX_ARCHIVES" "archives") > + (setenv "MIX_BUILD_ROOT" "_build") > + (setenv "MIX_DEPS_PATH" "deps") > + (setenv "MIX_PATH" (or mix-path "")) > + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") > "/bin/rebar3")) > + (setenv "MIX_EXS" mix-exs) > + (%elixir-version (elixir-version inputs))) %elixir-version is not an environment variable. You should set this up separately or at the very least add a big fat comment explaining what you're doing here :) ** phf What about both? #+begin_src scheme (define* (set-elixir-version #:key inputs #:allow-other-keys) "Set Elixir version. Compiled libraries are specific to each Elixir version. If a library is intended to be used with multiple Elixir versions, it needs to be compiled separately for each version. The parameter %elixir-version, set for the current build, is used to differentiate between the compiled versions of libraries corresponding to different Elixir versions." (%elixir-version (elixir-version inputs)) (format #t "Elixir version: ~a~%" (%elixir-version))) #+end_src * WAITING Comment ** lilyp > + (list (search-path-specification > + (variable "GUIX_ERL_LIBS") > + (files (list "lib/erlang/lib" > + (string-append "lib/elixir/" (version- > major+minor version))))))) I suppose ERL is for erlang? What do we use for elixir then? ** phf Changed for ~GUIX_ELIXIR_LIBS~. Is that OK? * WAITING Comment ** lilyp > +(define* (install-dependencies . _) > + "Install dependencies." > + (setenv "ERL_LIBS" (getenv "GUIX_ERL_LIBS"))) Why not do this as part of setting up mix-env? ** phf If we have this phase in the ~elixir~ package: #+begin_src scheme (add-after 'install 'wrap-programs (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (programs '("elixir" "elixirc" "iex" "mix"))) (for-each (lambda (program) (wrap-program (string-append out "/bin/" program) '("ERL_LIBS" prefix ("${GUIX_ELIXIR_LIBS}")))) programs)))) #+end_src and this native search path: #+begin_src scheme (search-path-specification (variable "GUIX_ELIXIR_LIBS") (files (list "lib/erlang/lib" (string-append "lib/elixir/" (version-major+minor version))))) #+end_src then, ~(setenv "ERL_LIBS" (getenv "GUIX_ERL_LIBS"))~ is not needed anymore.
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sat, 18 Nov 2023 07:13:02 GMT) Full text and rfc822 format available.Message #221 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Sat, 18 Nov 2023 08:12:14 +0100
Am Samstag, dem 18.11.2023 um 05:44 +0100 schrieb Pierre-Henry Fröhring: > * WAITING Comment > ** lilyp > > * guix/build-system/mix.scm, > > * guix/build/mix-build-system.scm: New modules. > Avoid spanning a change across multiple files. Use > file: Change. > file2: Likewise. > > > gnu/packages/elixir.scm | 62 ++++++++++- > > guix/build-system/mix.scm | 187 > > ++++++++++++++++++++++++++++++++ > > guix/build/mix-build-system.scm | 171 > > +++++++++++++++++++++++++++++ > You committed two changes at once here. Split them. > > > ** phf > How are changes counted? I've counted one because all of these > changes > are needed > to introduce the ~mix-build-system~. Should it be: > #+begin_example > ,* gnu/packages/elixir.scm (elixir): Search path GUIX_ELIXIR_LIBS > added. > ,* gnu/packages/elixir.scm (elixir): Wrap programs with > ERL_LIBS=${GUIX_ELIXIR_LIBS}. > ,* guix/build-system/mix.scm: New modules. > ,* guix/build/mix-build-system.scm: New modules. > #+end_example > or something else? You can add the two build-system files in one go. The changes to elixir and the new elixir-hex package are one patch each. > * WAITING Comment > ** lilyp > > +(define* (set-mix-env #:key inputs mix-path mix-exs #:allow-other- > > keys) > > + "Set environment variables. > > +See: > > https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables > > " > > + (setenv "MIX_HOME" (getcwd)) > > + (setenv "MIX_ARCHIVES" "archives") > > + (setenv "MIX_BUILD_ROOT" "_build") > > + (setenv "MIX_DEPS_PATH" "deps") > > + (setenv "MIX_PATH" (or mix-path "")) > > + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") > > "/bin/rebar3")) > > + (setenv "MIX_EXS" mix-exs) > > + (%elixir-version (elixir-version inputs))) > %elixir-version is not an environment variable. You should set this > up > separately or at the very least add a big fat comment explaining what > you're doing here :) > > > ** phf > What about both? > #+begin_src scheme > (define* (set-elixir-version #:key inputs #:allow-other-keys) > "Set Elixir version. > Compiled libraries are specific to each Elixir version. If a library > is intended > to be used with multiple Elixir versions, it needs to be compiled > separately for > each version. The parameter %elixir-version, set for the current > build, is used > to differentiate between the compiled versions of libraries > corresponding to > different Elixir versions." > (%elixir-version (elixir-version inputs)) > (format #t "Elixir version: ~a~%" (%elixir-version))) > #+end_src I just noticed that, but do prefer to spaces after sentence ending periods. For the docstring, I think you should make clear what is going on from the beginning, e.g. "Store the version number of the elixir input in a parameter." > * WAITING Comment > ** lilyp > > + (list (search-path-specification > > + (variable "GUIX_ERL_LIBS") > > + (files (list "lib/erlang/lib" > > + (string-append "lib/elixir/" (version- > > major+minor version))))))) > I suppose ERL is for erlang? What do we use for elixir then? > > > ** phf > Changed for ~GUIX_ELIXIR_LIBS~. Is that OK? No, because it's still ERL on the other side. A quick web search reveals that this belongs to erlang. > > * WAITING Comment > ** lilyp > > +(define* (install-dependencies . _) > > + "Install dependencies." > > + (setenv "ERL_LIBS" (getenv "GUIX_ERL_LIBS"))) > Why not do this as part of setting up mix-env? > > > ** phf > If we have this phase in the ~elixir~ package: > #+begin_src scheme > (add-after 'install 'wrap-programs > (lambda* (#:key inputs outputs #:allow-other-keys) > (let* ((out (assoc-ref outputs "out")) > (programs '("elixir" "elixirc" "iex" "mix"))) > (for-each (lambda (program) > (wrap-program (string-append out "/bin/" > program) > '("ERL_LIBS" prefix > ("${GUIX_ELIXIR_LIBS}")))) > programs)))) > #+end_src > > and this native search path: > #+begin_src scheme > (search-path-specification > (variable "GUIX_ELIXIR_LIBS") > (files (list "lib/erlang/lib" > (string-append "lib/elixir/" > (version-major+minor version))))) > #+end_src > > then, ~(setenv "ERL_LIBS" (getenv "GUIX_ERL_LIBS"))~ is not needed > anymore. True, but it's still given in the source files. :) So you can delete it of course (if it's already done by the native- search-path and package as you claim), or you can make it part of the environment setup (if it's not). Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sat, 18 Nov 2023 10:21:02 GMT) Full text and rfc822 format available.Message #224 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Sat, 18 Nov 2023 11:19:59 +0100
> > Changed for ~GUIX_ELIXIR_LIBS~. Is that OK? > No, because it's still ERL on the other side. A quick web search > reveals that this belongs to erlang. Yes, ERL_LIBS is valid for both Erlang and Elixir. So, GUIX_ERL_LIBS for both, right?
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sat, 18 Nov 2023 11:12:02 GMT) Full text and rfc822 format available.Message #227 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Sat, 18 Nov 2023 12:11:31 +0100
Am Samstag, dem 18.11.2023 um 11:19 +0100 schrieb Pierre-Henry Fröhring: > > > Changed for ~GUIX_ELIXIR_LIBS~. Is that OK? > > No, because it's still ERL on the other side. A quick web search > > reveals that this belongs to erlang. > Yes, ERL_LIBS is valid for both Erlang and Elixir. > So, GUIX_ERL_LIBS for both, right? I'm not sure whether we really need the GUIX_ prefix here; you'd have to check whether the justification for GUIX_PYTHONPATH also holds for erlang and elixir. Anyhow, assuming that elixir and erlang code can be used interchangedly by each once compiled, you should use a single (GUIX_)?ERL_LIBS in both packages. You might also see whether we could use a single path instead of needing the lib/erlang and lib/elixir split, but I leave that up to you. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sat, 18 Nov 2023 12:03:02 GMT) Full text and rfc822 format available.Message #230 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 01/14] build-system: Add mix-build-system. Date: Sat, 18 Nov 2023 13:02:14 +0100
** lilyp I'm not sure whether we really need the GUIX_ prefix here; you'd have to check whether the justification for GUIX_PYTHONPATH also holds for erlang and elixir. *** phf Replacing "Python" by "Elixir" in https://guix.gnu.org/manual/en/html_node/Build-Systems.html, we have: #+begin_quote For packages that install stand-alone Elixir programs under bin/, it takes care of wrapping these programs so that their GUIX_ERL_LIBS environment variable points to all the compiled Elixir and Erlang libraries they depend on. #+end_quote This seems reasonable for Elixir stand-alone programs. #+begin_quote Which Elixir package is used to perform the build can be specified with the #:elixir parameter. This is a useful way to force a package to be built for a specific version of the Elixir interpreter, which might be necessary if the package is only compatible with a single interpreter version. #+end_quote Reading: https://hexdocs.pm/elixir/1.15.7/compatibility-and-deprecations.html, this seems reasonable too. This seems to point to GUIX_ERL_LIBS rather than ERL_LIBS. ** lilyp Anyhow, assuming that elixir and erlang code can be used interchangeably by each once compiled, you should use a single (GUIX_)?ERL_LIBS in both packages. You might also see whether we could use a single path instead of needing the lib/erlang and lib/elixir split, but I leave that up to you. *** phf "elixir and erlang code can be used interchangeably by each once compiled" is true because: "Elixir compiles into BEAM byte code (via Erlang Abstract Format). This means that Elixir code can be called from Erlang and vice versa, without the need to write any bindings." See: https://elixir-lang.org/crash-course.html#adding-elixir-to-existing-erlang-programs Ha… finally, we see that things should change on the Erlang side too. According to https://hexdocs.pm/elixir/1.15.7/compatibility-and-deprecations.html, to a version of Elixir are associated with a few versions of compatible Erlang/OTP. Since the Elixir package mentions a particular version of Erlang, then it means that we have X.Y version of Elixir and U.V version for Erlang. If we have a single path like lib/beam/A.B, then A.B is rather ambiguous. If instead we have lib/erlang/U.V and lib/elixir/X.Y, then no ambiguities. This seems to point to lib/erlang/U.V and lib/elixir/X.Y. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Thu, 07 Dec 2023 22:35:02 GMT) Full text and rfc822 format available.Message #233 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: 66801 <at> debbugs.gnu.org Cc: Pierre-Henry Fröhring <contact <at> phfrohring.com>, liliana.prikler <at> gmail.com Subject: [PATCH] build-system: Add mix-build-system. Date: Thu, 7 Dec 2023 23:34:06 +0100
* guix/build-system/mix.scm: New file. * guix/build/mix-build-system.scm: New file. Change-Id: I8066d00f7ada4a384621bf541e679bc512e93435 --- guix/build-system/mix.scm | 186 ++++++++++++++++++++++++++++++++ guix/build/mix-build-system.scm | 161 +++++++++++++++++++++++++++ 2 files changed, 347 insertions(+) create mode 100644 guix/build-system/mix.scm create mode 100644 guix/build/mix-build-system.scm diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm new file mode 100644 index 000000000..1b04053d7 --- /dev/null +++ b/guix/build-system/mix.scm @@ -0,0 +1,186 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <contact <at> phfrohring.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Standard build procedure for Elixir packages using 'mix'. This is +;; implemented as an extension of 'gnu-build-system'. +;; +;; Code: + +(define-module (guix build-system mix) + #:use-module (guix build mix-build-system) + #:use-module (guix build-system gnu) + #:use-module (guix build-system) + #:use-module (guix gexp) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix search-paths) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (mix-build-system hexpm-uri)) + +;; Lazily resolve bindings to avoid circular dependencies. +(define (default-glibc-utf8-locales) + (let* ((base (resolve-interface '(gnu packages base)))) + (module-ref base 'glibc-utf8-locales))) + +(define (default-elixir-hex) + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir-hex))) + +(define (default-rebar3) + (let ((erlang (resolve-interface '(gnu packages erlang)))) + (module-ref erlang 'rebar3))) + +(define (default-elixir) + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir))) + +(define* (strip-prefix name #:optional (prefix "elixir-")) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (hexpm-uri name version) + "Return the URI where to fetch the sources of a Hex package NAME at VERSION. +NAME is the name of the package which should look like: elixir-pkg-name-X.Y.Z +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" + ((compose + (cute string-append "https://repo.hex.pm/tarballs/" <> "-" version ".tar") + (cute string-replace-substring <> "-" "_") + strip-prefix) + name)) + +;; A number of environment variables specific to the Mix build system are +;; reflected here. They are documented at +;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables. Other +;; parameters located in mix.exs are defined at +;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration +(define* (mix-build name + inputs + #:key + source + (tests? #t) + (mix-path #f) ;See MIX_PATH. + (mix-exs "mix.exs") ;See MIX_EXS. + (build-per-environment #t) ;See :build_per_environment. + (phases '%standard-phases) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules `((guix build mix-build-system) + ,@%gnu-build-system-modules)) + (modules '((guix build mix-build-system) + (guix build utils)))) + "Build SOURCE using Elixir, and with INPUTS." + + ;; Check the documentation of :build_per_environment here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration And + ;; "Environments" here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments + (define mix-environments + (if build-per-environment + `("prod" ,@(if tests? '("test") '())) + '("shared"))) + + (define builder + (with-imported-modules imported-modules + #~(begin + + (use-modules #$@(sexp->gexp modules)) + + #$(with-build-variables inputs outputs + #~(mix-build #:name #$name + #:source #+source + #:system #$system + #:tests? #$tests? + #:mix-path #$mix-path + #:mix-exs #$mix-exs + #:mix-environments '#$mix-environments + #:build-per-environment #$build-per-environment + #:phases #$(if (pair? phases) + (sexp->gexp phases) + phases) + #:outputs %outputs + #:search-paths '#$(sexp->gexp + (map + search-path-specification->sexp + search-paths)) + #:inputs + %build-inputs))))) + + (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) + system + #:graft? #f))) + (gexp->derivation name + builder + #:system system + #:graft? #f ;consistent with 'gnu-build' + #:target #f + #:guile-for-build guile))) + +(define* (lower name + #:key + (elixir (default-elixir)) + (elixir-hex (default-elixir-hex)) + (glibc-utf8-locales (default-glibc-utf8-locales)) + (inputs '()) + (native-inputs '()) + (propagated-inputs '()) + (rebar3 (default-rebar3)) + (tests? #t) + outputs + source + system + target + #:allow-other-keys #:rest arguments) + "Return a bag for NAME." + (let ((private-keywords + '(#:inputs #:native-inputs + #:outputs #:system #:target + #:elixir #:elixir-hex #:glibc-utf8-locales + #:rebar3 #:erlang)) + (build-inputs + `(,@(standard-packages) + ("glibc-utf8-locales" ,glibc-utf8-locales) + ("erlang" ,(lookup-package-input elixir "erlang")) + ("rebar3" ,rebar3) + ("elixir" ,elixir) + ("elixir-hex" ,elixir-hex) + ,@inputs + ,@native-inputs))) + (bag (name name) + (system system) + (build-inputs build-inputs) + (host-inputs (if target inputs '())) + (outputs outputs) + (build mix-build) + (arguments (strip-keyword-arguments private-keywords arguments))))) + +(define mix-build-system + (build-system (name 'mix) + (description "The standard Mix build system") + (lower lower))) + +;;; mix.scm ends here diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build-system.scm new file mode 100644 index 000000000..fe2e36d18 --- /dev/null +++ b/guix/build/mix-build-system.scm @@ -0,0 +1,161 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <contact <at> phfrohring.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Code: + +(define-module (guix build mix-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (ice-9 ftw) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module (ice-9 string-fun) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-71) + #:export (mix-build + %standard-phases)) + +;; The Elixir version is constant as soon as it is computable from the current +;; execution. It is a X.Y string where X and Y are respectively the major and +;; minor version number of the Elixir used in the build. +(define %elixir-version (make-parameter "X.Y")) + +(define* (elixir-libdir path #:optional (version (%elixir-version))) + "Return the path where all libraries under PATH for a specified Elixir +VERSION are installed." + (string-append path "/lib/elixir/" version)) + +(define* (strip-prefix name #:optional (prefix "elixir-")) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (mix-build-dir mix-build-root mix-env) + "Return the directory where build artifacts are to be installed according to +en environment MIX-ENV in the current directory. MIX-BUILD-ROOT depends on the +package arguments. See: https://hexdocs.pm/mix/1.15/Mix.html#module-environment-variables" + (string-append mix-build-root "/" mix-env "/lib")) + +(define (elixir-version inputs) + "Return an X.Y string where X and Y are respectively the major and minor version number of PACKAGE. +Example: /gnu/store/…-elixir-1.14.0 → 1.14" + ((compose + (cute string-join <> ".") + (cute take <> 2) + (cute string-split <> #\.) + strip-prefix + strip-store-file-name) + (assoc-ref inputs "elixir"))) + +(define* (unpack #:key source mix-path #:allow-other-keys) + "Unpack SOURCE in the working directory, and change directory within the +source. When SOURCE is a directory, copy it in a sub-directory of the current +working directory." + (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) + (gnu-unpack #:source source) + (when (file-exists? "contents.tar.gz") + (invoke "tar" "xvf" "contents.tar.gz")))) + +(define (list-directories dir) + "List absolute paths of directories directly under the directory DIR." + (map (cute string-append dir "/" <>) + (scandir dir (lambda (filename) + (and (not (member filename '("." ".."))) + (directory-exists? (string-append dir "/" filename))))))) + +(define* (set-mix-env #:key inputs mix-path mix-exs #:allow-other-keys) + "Set environment variables. +See: https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables" + (setenv "MIX_ARCHIVES" "archives") + (setenv "MIX_BUILD_ROOT" "_build") + (setenv "MIX_DEPS_PATH" "deps") + (setenv "MIX_EXS" mix-exs) + (setenv "MIX_HOME" (getcwd)) + (setenv "MIX_PATH" (or mix-path "")) + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") "/bin/rebar3"))) + +(define* (set-elixir-version #:key inputs #:allow-other-keys) + "Store the version number of the Elixir input in a parameter." + (%elixir-version (elixir-version inputs)) + (format #t "Elixir version: ~a~%" (%elixir-version))) + +(define* (build #:key mix-environments #:allow-other-keys) + "Builds the Mix project." + (for-each (lambda (mix-env) + (setenv "MIX_ENV" mix-env) + (invoke "mix" "compile" "--no-deps-check")) + mix-environments)) + +(define* (check #:key (tests? #t) #:allow-other-keys) + "Test the Mix project." + (if tests? + (invoke "mix" "test" "--no-deps-check") + (format #t "tests? = ~a~%" tests?))) + +(define* (remove-mix-dirs . _) + "Remove all .mix/ directories. +We do not want to copy them to the installation directory." + (for-each delete-file-recursively + (find-files "." (file-name-predicate "\\.mix$") #:directories? #t))) + +(define (package-name->elixir-name name+ver) + "Convert the Guix package NAME-VER to the corresponding Elixir name-version +format. Example: elixir-a-pkg-1.2.3 -> a_pkg" + ((compose + (cute string-join <> "_") + (cute drop-right <> 1) + (cute string-split <> #\-)) + (strip-prefix name+ver))) + +(define* (install #:key + inputs + outputs + name + build-per-environment + #:allow-other-keys) + "Install build artifacts in the store." + (let* ((lib-name (package-name->elixir-name name)) + (lib-dir (string-append (elixir-libdir (assoc-ref outputs "out")) "/" lib-name)) + (root (getenv "MIX_BUILD_ROOT")) + (env (if build-per-environment "prod" "shared"))) + (mkdir-p lib-dir) + (copy-recursively (string-append (mix-build-dir root env) "/" lib-name) lib-dir + #:follow-symlinks? #t))) + +(define %standard-phases + (modify-phases gnu:%standard-phases + (delete 'bootstrap) + (delete 'configure) + (add-after 'install-locale 'set-mix-env set-mix-env) + (add-after 'set-mix-env 'set-elixir-version set-elixir-version) + (replace 'unpack unpack) + (replace 'build build) + (replace 'check check) + (add-before 'install 'remove-mix-dirs remove-mix-dirs) + (replace 'install install))) + +(define* (mix-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given Mix package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; mix-build-system.scm ends here base-commit: 06f25a9a85be1bbe7a709e58ce41c1a834e5f1ae -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 07:26:02 GMT) Full text and rfc822 format available.Message #236 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com>, 66801 <at> debbugs.gnu.org Subject: Re: [PATCH] build-system: Add mix-build-system. Date: Fri, 08 Dec 2023 08:25:10 +0100
Am Donnerstag, dem 07.12.2023 um 23:34 +0100 schrieb Pierre-Henry Fröhring: > * guix/build-system/mix.scm: New file. > * guix/build/mix-build-system.scm: New file. > > Change-Id: I8066d00f7ada4a384621bf541e679bc512e93435 > --- Pretty sure you forgot the reroll-count in the header. Please don't :) > guix/build-system/mix.scm | 186 > ++++++++++++++++++++++++++++++++ > guix/build/mix-build-system.scm | 161 +++++++++++++++++++++++++++ > 2 files changed, 347 insertions(+) > create mode 100644 guix/build-system/mix.scm > create mode 100644 guix/build/mix-build-system.scm > > diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm > new file mode 100644 > index 000000000..1b04053d7 > --- /dev/null > +++ b/guix/build-system/mix.scm > @@ -0,0 +1,186 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2023 Pierre-Henry Fröhring <contact <at> phfrohring.com> > +;;; > +;;; 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/>. > + > +;; Commentary: > +;; > +;; Standard build procedure for Elixir packages using 'mix'. This > is > +;; implemented as an extension of 'gnu-build-system'. > +;; > +;; Code: > + > +(define-module (guix build-system mix) > + #:use-module (guix build mix-build-system) > + #:use-module (guix build-system gnu) > + #:use-module (guix build-system) > + #:use-module (guix gexp) > + #:use-module (guix monads) > + #:use-module (guix packages) > + #:use-module (guix search-paths) > + #:use-module (guix store) > + #:use-module (guix utils) > + #:use-module (ice-9 match) > + #:use-module (srfi srfi-1) > + #:use-module (srfi srfi-26) > + #:export (mix-build-system hexpm-uri)) > + > +;; Lazily resolve bindings to avoid circular dependencies. > +(define (default-glibc-utf8-locales) > + (let* ((base (resolve-interface '(gnu packages base)))) > + (module-ref base 'glibc-utf8-locales))) > + > +(define (default-elixir-hex) > + (let ((elixir (resolve-interface '(gnu packages elixir)))) > + (module-ref elixir 'elixir-hex))) > + > +(define (default-rebar3) > + (let ((erlang (resolve-interface '(gnu packages erlang)))) > + (module-ref erlang 'rebar3))) > + > +(define (default-elixir) > + (let ((elixir (resolve-interface '(gnu packages elixir)))) > + (module-ref elixir 'elixir))) > + > +(define* (strip-prefix name #:optional (prefix "elixir-")) > + "Return NAME without the prefix PREFIX." > + (if (string-prefix? prefix name) > + (string-drop name (string-length prefix)) > + name)) > + > +(define (hexpm-uri name version) > + "Return the URI where to fetch the sources of a Hex package NAME > at VERSION. > +NAME is the name of the package which should look like: elixir-pkg- > name-X.Y.Z > +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" > + ((compose > + (cute string-append "https://repo.hex.pm/tarballs/" <> "-" > version ".tar") > + (cute string-replace-substring <> "-" "_") > + strip-prefix) > + name)) > + > +;; A number of environment variables specific to the Mix build > system are > +;; reflected here. They are documented at > +;; > https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables. > Other > +;; parameters located in mix.exs are defined at > +;; > https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration > +(define* (mix-build name > + inputs > + #:key > + source > + (tests? #t) > + (mix-path #f) ;See MIX_PATH. > + (mix-exs "mix.exs") ;See MIX_EXS. > + (build-per-environment #t) ;See > :build_per_environment. > + (phases '%standard-phases) > + (outputs '("out")) > + (search-paths '()) > + (system (%current-system)) > + (guile #f) > + (imported-modules `((guix build mix-build- > system) > + ,@%gnu-build-system- > modules)) > + (modules '((guix build mix-build-system) > + (guix build utils)))) > + "Build SOURCE using Elixir, and with INPUTS." > + > + ;; Check the documentation of :build_per_environment here: > + ;; > https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration A > nd > + ;; "Environments" here: > + ;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments > + (define mix-environments > + (if build-per-environment > + `("prod" ,@(if tests? '("test") '())) > + '("shared"))) > + > + (define builder > + (with-imported-modules imported-modules > + #~(begin > + > + (use-modules #$@(sexp->gexp modules)) > + > + #$(with-build-variables inputs outputs > + #~(mix-build #:name #$name > + #:source #+source > + #:system #$system > + #:tests? #$tests? > + #:mix-path #$mix-path > + #:mix-exs #$mix-exs > + #:mix-environments '#$mix-environments > + #:build-per-environment #$build-per- > environment > + #:phases #$(if (pair? phases) > + (sexp->gexp phases) > + phases) > + #:outputs %outputs > + #:search-paths '#$(sexp->gexp > + (map > + search-path- > specification->sexp > + search-paths)) > + #:inputs > + %build-inputs))))) > + > + (mlet %store-monad ((guile (package->derivation (or guile > (default-guile)) > + system > + #:graft? #f))) > + (gexp->derivation name > + builder > + #:system system > + #:graft? #f ;consistent with 'gnu-build' > + #:target #f > + #:guile-for-build guile))) > + > +(define* (lower name > + #:key > + (elixir (default-elixir)) > + (elixir-hex (default-elixir-hex)) > + (glibc-utf8-locales (default-glibc-utf8-locales)) > + (inputs '()) > + (native-inputs '()) > + (propagated-inputs '()) > + (rebar3 (default-rebar3)) > + (tests? #t) > + outputs > + source > + system > + target > + #:allow-other-keys #:rest arguments) > + "Return a bag for NAME." > + (let ((private-keywords > + '(#:inputs #:native-inputs > + #:outputs #:system #:target > + #:elixir #:elixir-hex #:glibc-utf8-locales > + #:rebar3 #:erlang)) > + (build-inputs > + `(,@(standard-packages) > + ("glibc-utf8-locales" ,glibc-utf8-locales) > + ("erlang" ,(lookup-package-input elixir "erlang")) > + ("rebar3" ,rebar3) > + ("elixir" ,elixir) > + ("elixir-hex" ,elixir-hex) > + ,@inputs > + ,@native-inputs))) > + (bag (name name) > + (system system) > + (build-inputs build-inputs) > + (host-inputs (if target inputs '())) > + (outputs outputs) > + (build mix-build) > + (arguments (strip-keyword-arguments private-keywords > arguments))))) > + > +(define mix-build-system > + (build-system (name 'mix) > + (description "The standard Mix build system") > + (lower lower))) > + > +;;; mix.scm ends here > diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build- > system.scm > new file mode 100644 > index 000000000..fe2e36d18 > --- /dev/null > +++ b/guix/build/mix-build-system.scm > @@ -0,0 +1,161 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2023 Pierre-Henry Fröhring <contact <at> phfrohring.com> > +;;; > +;;; 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/>. > + > +;; Commentary: > +;; > +;; Code: > + > +(define-module (guix build mix-build-system) > + #:use-module ((guix build gnu-build-system) #:prefix gnu:) > + #:use-module (guix build utils) > + #:use-module (ice-9 ftw) > + #:use-module (ice-9 match) > + #:use-module (ice-9 regex) > + #:use-module (ice-9 string-fun) > + #:use-module (srfi srfi-1) > + #:use-module (srfi srfi-26) > + #:use-module (srfi srfi-71) > + #:export (mix-build > + %standard-phases)) > + > +;; The Elixir version is constant as soon as it is computable from > the current > +;; execution. It is a X.Y string where X and Y are respectively the > major and > +;; minor version number of the Elixir used in the build. > +(define %elixir-version (make-parameter "X.Y")) > + > +(define* (elixir-libdir path #:optional (version (%elixir-version))) > + "Return the path where all libraries under PATH for a specified > Elixir > +VERSION are installed." > + (string-append path "/lib/elixir/" version)) > + > +(define* (strip-prefix name #:optional (prefix "elixir-")) > + "Return NAME without the prefix PREFIX." > + (if (string-prefix? prefix name) > + (string-drop name (string-length prefix)) > + name)) > + > +(define (mix-build-dir mix-build-root mix-env) > + "Return the directory where build artifacts are to be installed > according to > +en environment MIX-ENV in the current directory. MIX-BUILD-ROOT > depends on the > +package arguments. See: > https://hexdocs.pm/mix/1.15/Mix.html#module-environment-variables" > + (string-append mix-build-root "/" mix-env "/lib")) > + > +(define (elixir-version inputs) > + "Return an X.Y string where X and Y are respectively the major and > minor version number of PACKAGE. > +Example: /gnu/store/…-elixir-1.14.0 → 1.14" > + ((compose > + (cute string-join <> ".") > + (cute take <> 2) > + (cute string-split <> #\.) > + strip-prefix > + strip-store-file-name) > + (assoc-ref inputs "elixir"))) Note that when cross-compiling, elixir would likely be a native-input rather than an input. Neither this procedure nor its callers appear to be aware of that. You can keep the compose intact if you do (and=> (assoc-ref inputs "elixir") (compose ...)) Then you can call it as (or (elixir-version native-inputs) (elixir-version inputs)) > +(define* (unpack #:key source mix-path #:allow-other-keys) > + "Unpack SOURCE in the working directory, and change directory > within the > +source. When SOURCE is a directory, copy it in a sub-directory of > the current > +working directory." > + (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) > + (gnu-unpack #:source source) > + (when (file-exists? "contents.tar.gz") > + (invoke "tar" "xvf" "contents.tar.gz")))) > + > +(define (list-directories dir) > + "List absolute paths of directories directly under the directory > DIR." > + (map (cute string-append dir "/" <>) > + (scandir dir (lambda (filename) > + (and (not (member filename '("." ".."))) > + (directory-exists? (string-append dir "/" > filename))))))) > + > +(define* (set-mix-env #:key inputs mix-path mix-exs #:allow-other- > keys) > + "Set environment variables. > +See: > https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables" > + (setenv "MIX_ARCHIVES" "archives") > + (setenv "MIX_BUILD_ROOT" "_build") > + (setenv "MIX_DEPS_PATH" "deps") > + (setenv "MIX_EXS" mix-exs) > + (setenv "MIX_HOME" (getcwd)) > + (setenv "MIX_PATH" (or mix-path "")) > + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") > "/bin/rebar3"))) > + > +(define* (set-elixir-version #:key inputs #:allow-other-keys) > + "Store the version number of the Elixir input in a parameter." > + (%elixir-version (elixir-version inputs)) > + (format #t "Elixir version: ~a~%" (%elixir-version))) > + > +(define* (build #:key mix-environments #:allow-other-keys) > + "Builds the Mix project." > + (for-each (lambda (mix-env) > + (setenv "MIX_ENV" mix-env) > + (invoke "mix" "compile" "--no-deps-check")) > + mix-environments)) > + > +(define* (check #:key (tests? #t) #:allow-other-keys) > + "Test the Mix project." > + (if tests? > + (invoke "mix" "test" "--no-deps-check") > + (format #t "tests? = ~a~%" tests?))) > + > +(define* (remove-mix-dirs . _) > + "Remove all .mix/ directories. > +We do not want to copy them to the installation directory." > + (for-each delete-file-recursively > + (find-files "." (file-name-predicate "\\.mix$") > #:directories? #t))) > + > +(define (package-name->elixir-name name+ver) > + "Convert the Guix package NAME-VER to the corresponding Elixir > name-version > +format. Example: elixir-a-pkg-1.2.3 -> a_pkg" > + ((compose > + (cute string-join <> "_") > + (cute drop-right <> 1) > + (cute string-split <> #\-)) > + (strip-prefix name+ver))) > + > +(define* (install #:key > + inputs > + outputs > + name > + build-per-environment > + #:allow-other-keys) > + "Install build artifacts in the store." > + (let* ((lib-name (package-name->elixir-name name)) > + (lib-dir (string-append (elixir-libdir (assoc-ref outputs > "out")) "/" lib-name)) > + (root (getenv "MIX_BUILD_ROOT")) > + (env (if build-per-environment "prod" "shared"))) > + (mkdir-p lib-dir) > + (copy-recursively (string-append (mix-build-dir root env) "/" > lib-name) lib-dir > + #:follow-symlinks? #t))) > + > +(define %standard-phases > + (modify-phases gnu:%standard-phases > + (delete 'bootstrap) > + (delete 'configure) > + (add-after 'install-locale 'set-mix-env set-mix-env) > + (add-after 'set-mix-env 'set-elixir-version set-elixir-version) > + (replace 'unpack unpack) > + (replace 'build build) > + (replace 'check check) > + (add-before 'install 'remove-mix-dirs remove-mix-dirs) > + (replace 'install install))) > + > +(define* (mix-build #:key inputs (phases %standard-phases) > + #:allow-other-keys #:rest args) > + "Build the given Mix package, applying all of PHASES in order." > + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) > + > +;;; mix-build-system.scm ends here > > base-commit: 06f25a9a85be1bbe7a709e58ce41c1a834e5f1ae Would you be so nice as to send a complete series as a revision? We have focused quite a lot on the intricacies of rebar-build-system and mix-build-system in the past review, but for testing purposes, it would be nice to have some (minimal set of) packages that we can build with those improvements. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 08:51:01 GMT) Full text and rfc822 format available.Message #239 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH] build-system: Add mix-build-system. Date: Fri, 08 Dec 2023 09:01:06 +0100
Hello lilyp, Would you be so nice as to send a complete series as a revision? We have focused quite a lot on the intricacies of rebar-build-system and mix-build-system in the past review, but for testing purposes, it would be nice to have some (minimal set of) packages that we can build with those improvements. All of them will be sent. I cannot send you all the patches at once — /i.e./ those linked to Erlang and Elixir — as it has proved to be too time-consuming given my inexperience in the Guix code base among other things. Thanks to your patient feedback, I hope to be able to send all the patches — more that 70 of them — but let us agree on the sequence before end as I do not want to bother you with contingent errors. Please, tell me if these sequences of patches work with you: 1. Send patches linked to Elixir, independently of Erlang. 2. Send patches linked to Erlang, independently of Elixir. 3. Send remaining patches where Elixir packages rely on Erlang packages. For completeness, the case where Erlang packages rely on Elixir packages should be addressed too, but I do not have code testing that case so far. We will probably take care of this case afterward. The first sequence of commits allows to build the elixir-machete package which is one of the few packages that have tests. This sequence of commits does not need any modification to the rebar build system or the Erlang package. These commits are on a local branch at the moment: ┌──── │ f50ed258f * gnu: Add elixir-machete. │ 8b1cd4584 * gnu: Add elixir-dialyxir. │ 04f1a0488 * gnu: Add elixir-erlex. │ 51f3ea964 * gnu: Add elixir-credo. │ c635210a2 * gnu: Add elixir-excoveralls. │ 2ed400127 * gnu: Add elixir-castore. │ fa45db5f6 * gnu: Add elixir-inch-ex. │ 780e57c56 * gnu: Add elixir-bunt. │ 52c57d6a7 * gnu: Add elixir-file-system. │ 6b1f61851 * gnu: Add elixir-jason. │ 283d647cf * gnu: Add elixir-makeup. │ a2dd3114c * gnu: Add elixir-nimble-parsec. │ 0e6d80e9d * gnu: Add elixir-hex. │ 9e842f9c9 * gnu: elixir: Wrap binaries. │ 5b40ab6fd * build-system: Add mix-build-system. └──── So, is it OK if we manage this sequence of patches above before proceeding further? If it is the case, then I will send them one by one so that your suggestions on one patch will help me fix the next before sending it. Cheers. P.S. My last message that you received yesterday does not appear in this thread <https://issues.guix.gnu.org/66801>.
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 09:54:02 GMT) Full text and rfc822 format available.Message #242 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH] build-system: Add mix-build-system. Date: Fri, 08 Dec 2023 10:52:59 +0100
Am Freitag, dem 08.12.2023 um 09:01 +0100 schrieb Pierre-Henry Fröhring: > Please, tell me if these sequences of patches work with you: > 1. Send patches linked to Elixir, independently of Erlang. > 2. Send patches linked to Erlang, independently of Elixir. > 3. Send remaining patches where Elixir packages rely on Erlang > packages. If this series works for you, it ought to work for us as well. The important thing is that immediate results can be verified to build. > For completeness, the case where Erlang packages rely on Elixir > packages should be addressed too, but I do not have code testing that > case so far. We will probably take care of this case afterward. Yeah, that sounds like a premature optimization otherwise. > The first sequence of commits allows to build the elixir-machete > package which is one of the few packages that have tests. This > sequence of commits does not need any modification to the rebar build > system or the Erlang package. These commits are on a local branch at > the moment: > > ┌──── > │ f50ed258f * gnu: Add elixir-machete. > │ 8b1cd4584 * gnu: Add elixir-dialyxir. > │ 04f1a0488 * gnu: Add elixir-erlex. > │ 51f3ea964 * gnu: Add elixir-credo. > │ c635210a2 * gnu: Add elixir-excoveralls. > │ 2ed400127 * gnu: Add elixir-castore. > │ fa45db5f6 * gnu: Add elixir-inch-ex. > │ 780e57c56 * gnu: Add elixir-bunt. > │ 52c57d6a7 * gnu: Add elixir-file-system. > │ 6b1f61851 * gnu: Add elixir-jason. > │ 283d647cf * gnu: Add elixir-makeup. > │ a2dd3114c * gnu: Add elixir-nimble-parsec. > │ 0e6d80e9d * gnu: Add elixir-hex. > │ 9e842f9c9 * gnu: elixir: Wrap binaries. > │ 5b40ab6fd * build-system: Add mix-build-system. > └──── LGTM, but I prefer the order that's given in the cover-letter produced by format-patch, with the first patch applied being first :) > So, is it OK if we manage this sequence of patches above before > proceeding further? > If it is the case, then I will send them one by one so that your > suggestions on one patch will help me fix the next before sending it. SGTM. If you're unfamiliar with git send-email, at least use git format-patch and an appropriate reroll-count (IIRC, we're at 3, but I could be misremembering), then send each of the resulting mboxes individually or bundle them up as attachments. > P.S. My last message that you received yesterday does not appear in > this thread <https://issues.guix.gnu.org/66801>. Yeah, mumi is currently slow on the uptake – dunno what's wrong there. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 11:02:02 GMT) Full text and rfc822 format available.Message #245 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH] build-system: Add mix-build-system. Date: Fri, 08 Dec 2023 11:17:23 +0100
If this series works for you, it ought to work for us as well. The important thing is that immediate results can be verified to build. Great. So here comes the series of patches. The list of all patches is: ┌──── │ 0001-build-system-Add-mix-build-system.patch │ 0002-gnu-elixir-Wrap-binaries.patch │ 0003-gnu-Add-elixir-hex.patch │ 0004-gnu-Add-elixir-nimble-parsec.patch │ 0005-gnu-Add-elixir-makeup.patch │ 0006-gnu-Add-elixir-jason.patch │ 0007-gnu-Add-elixir-file-system.patch │ 0008-gnu-Add-elixir-bunt.patch │ 0009-gnu-Add-elixir-inch-ex.patch │ 0010-gnu-Add-elixir-castore.patch │ 0011-gnu-Add-elixir-excoveralls.patch │ 0012-gnu-Add-elixir-credo.patch │ 0013-gnu-Add-elixir-erlex.patch │ 0014-gnu-Add-elixir-dialyxir.patch │ 0015-gnu-Add-elixir-machete.patch └──── I will start with the first 3. To test them, I have issued the following command: ┌──── │ ./pre-inst-env guix build elixir-hex └──── which result was: ┌──── │ … │ successfully built /gnu/store/1732zx2s5afv1da5vhik0gr923frvg35-elixir-hex-2.0.5.drv │ /gnu/store/hak603f9adwad1vrlqkqn6ywgissfb13-elixir-hex-2.0.5 └──── If everything is correct, I will send the other ones. Cheers.
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 11:13:02 GMT) Full text and rfc822 format available.Message #248 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: Pierre-Henry Fröhring <contact <at> phfrohring.com>, 66801 <at> debbugs.gnu.org Subject: [PATCH 01/15] build-system: Add mix-build-system. Date: Fri, 8 Dec 2023 12:10:36 +0100
* guix/build-system/mix.scm: New file. * guix/build/mix-build-system.scm: New file. Change-Id: I8066d00f7ada4a384621bf541e679bc512e93435 --- guix/build-system/mix.scm | 186 ++++++++++++++++++++++++++++++++ guix/build/mix-build-system.scm | 161 +++++++++++++++++++++++++++ 2 files changed, 347 insertions(+) create mode 100644 guix/build-system/mix.scm create mode 100644 guix/build/mix-build-system.scm diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm new file mode 100644 index 000000000..1b04053d7 --- /dev/null +++ b/guix/build-system/mix.scm @@ -0,0 +1,186 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <contact <at> phfrohring.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Standard build procedure for Elixir packages using 'mix'. This is +;; implemented as an extension of 'gnu-build-system'. +;; +;; Code: + +(define-module (guix build-system mix) + #:use-module (guix build mix-build-system) + #:use-module (guix build-system gnu) + #:use-module (guix build-system) + #:use-module (guix gexp) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix search-paths) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (mix-build-system hexpm-uri)) + +;; Lazily resolve bindings to avoid circular dependencies. +(define (default-glibc-utf8-locales) + (let* ((base (resolve-interface '(gnu packages base)))) + (module-ref base 'glibc-utf8-locales))) + +(define (default-elixir-hex) + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir-hex))) + +(define (default-rebar3) + (let ((erlang (resolve-interface '(gnu packages erlang)))) + (module-ref erlang 'rebar3))) + +(define (default-elixir) + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir))) + +(define* (strip-prefix name #:optional (prefix "elixir-")) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (hexpm-uri name version) + "Return the URI where to fetch the sources of a Hex package NAME at VERSION. +NAME is the name of the package which should look like: elixir-pkg-name-X.Y.Z +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" + ((compose + (cute string-append "https://repo.hex.pm/tarballs/" <> "-" version ".tar") + (cute string-replace-substring <> "-" "_") + strip-prefix) + name)) + +;; A number of environment variables specific to the Mix build system are +;; reflected here. They are documented at +;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables. Other +;; parameters located in mix.exs are defined at +;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration +(define* (mix-build name + inputs + #:key + source + (tests? #t) + (mix-path #f) ;See MIX_PATH. + (mix-exs "mix.exs") ;See MIX_EXS. + (build-per-environment #t) ;See :build_per_environment. + (phases '%standard-phases) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules `((guix build mix-build-system) + ,@%gnu-build-system-modules)) + (modules '((guix build mix-build-system) + (guix build utils)))) + "Build SOURCE using Elixir, and with INPUTS." + + ;; Check the documentation of :build_per_environment here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration And + ;; "Environments" here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments + (define mix-environments + (if build-per-environment + `("prod" ,@(if tests? '("test") '())) + '("shared"))) + + (define builder + (with-imported-modules imported-modules + #~(begin + + (use-modules #$@(sexp->gexp modules)) + + #$(with-build-variables inputs outputs + #~(mix-build #:name #$name + #:source #+source + #:system #$system + #:tests? #$tests? + #:mix-path #$mix-path + #:mix-exs #$mix-exs + #:mix-environments '#$mix-environments + #:build-per-environment #$build-per-environment + #:phases #$(if (pair? phases) + (sexp->gexp phases) + phases) + #:outputs %outputs + #:search-paths '#$(sexp->gexp + (map + search-path-specification->sexp + search-paths)) + #:inputs + %build-inputs))))) + + (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) + system + #:graft? #f))) + (gexp->derivation name + builder + #:system system + #:graft? #f ;consistent with 'gnu-build' + #:target #f + #:guile-for-build guile))) + +(define* (lower name + #:key + (elixir (default-elixir)) + (elixir-hex (default-elixir-hex)) + (glibc-utf8-locales (default-glibc-utf8-locales)) + (inputs '()) + (native-inputs '()) + (propagated-inputs '()) + (rebar3 (default-rebar3)) + (tests? #t) + outputs + source + system + target + #:allow-other-keys #:rest arguments) + "Return a bag for NAME." + (let ((private-keywords + '(#:inputs #:native-inputs + #:outputs #:system #:target + #:elixir #:elixir-hex #:glibc-utf8-locales + #:rebar3 #:erlang)) + (build-inputs + `(,@(standard-packages) + ("glibc-utf8-locales" ,glibc-utf8-locales) + ("erlang" ,(lookup-package-input elixir "erlang")) + ("rebar3" ,rebar3) + ("elixir" ,elixir) + ("elixir-hex" ,elixir-hex) + ,@inputs + ,@native-inputs))) + (bag (name name) + (system system) + (build-inputs build-inputs) + (host-inputs (if target inputs '())) + (outputs outputs) + (build mix-build) + (arguments (strip-keyword-arguments private-keywords arguments))))) + +(define mix-build-system + (build-system (name 'mix) + (description "The standard Mix build system") + (lower lower))) + +;;; mix.scm ends here diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build-system.scm new file mode 100644 index 000000000..fe2e36d18 --- /dev/null +++ b/guix/build/mix-build-system.scm @@ -0,0 +1,161 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <contact <at> phfrohring.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Code: + +(define-module (guix build mix-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (ice-9 ftw) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module (ice-9 string-fun) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-71) + #:export (mix-build + %standard-phases)) + +;; The Elixir version is constant as soon as it is computable from the current +;; execution. It is a X.Y string where X and Y are respectively the major and +;; minor version number of the Elixir used in the build. +(define %elixir-version (make-parameter "X.Y")) + +(define* (elixir-libdir path #:optional (version (%elixir-version))) + "Return the path where all libraries under PATH for a specified Elixir +VERSION are installed." + (string-append path "/lib/elixir/" version)) + +(define* (strip-prefix name #:optional (prefix "elixir-")) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (mix-build-dir mix-build-root mix-env) + "Return the directory where build artifacts are to be installed according to +en environment MIX-ENV in the current directory. MIX-BUILD-ROOT depends on the +package arguments. See: https://hexdocs.pm/mix/1.15/Mix.html#module-environment-variables" + (string-append mix-build-root "/" mix-env "/lib")) + +(define (elixir-version inputs) + "Return an X.Y string where X and Y are respectively the major and minor version number of PACKAGE. +Example: /gnu/store/…-elixir-1.14.0 → 1.14" + ((compose + (cute string-join <> ".") + (cute take <> 2) + (cute string-split <> #\.) + strip-prefix + strip-store-file-name) + (assoc-ref inputs "elixir"))) + +(define* (unpack #:key source mix-path #:allow-other-keys) + "Unpack SOURCE in the working directory, and change directory within the +source. When SOURCE is a directory, copy it in a sub-directory of the current +working directory." + (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) + (gnu-unpack #:source source) + (when (file-exists? "contents.tar.gz") + (invoke "tar" "xvf" "contents.tar.gz")))) + +(define (list-directories dir) + "List absolute paths of directories directly under the directory DIR." + (map (cute string-append dir "/" <>) + (scandir dir (lambda (filename) + (and (not (member filename '("." ".."))) + (directory-exists? (string-append dir "/" filename))))))) + +(define* (set-mix-env #:key inputs mix-path mix-exs #:allow-other-keys) + "Set environment variables. +See: https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables" + (setenv "MIX_ARCHIVES" "archives") + (setenv "MIX_BUILD_ROOT" "_build") + (setenv "MIX_DEPS_PATH" "deps") + (setenv "MIX_EXS" mix-exs) + (setenv "MIX_HOME" (getcwd)) + (setenv "MIX_PATH" (or mix-path "")) + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") "/bin/rebar3"))) + +(define* (set-elixir-version #:key inputs #:allow-other-keys) + "Store the version number of the Elixir input in a parameter." + (%elixir-version (elixir-version inputs)) + (format #t "Elixir version: ~a~%" (%elixir-version))) + +(define* (build #:key mix-environments #:allow-other-keys) + "Builds the Mix project." + (for-each (lambda (mix-env) + (setenv "MIX_ENV" mix-env) + (invoke "mix" "compile" "--no-deps-check")) + mix-environments)) + +(define* (check #:key (tests? #t) #:allow-other-keys) + "Test the Mix project." + (if tests? + (invoke "mix" "test" "--no-deps-check") + (format #t "tests? = ~a~%" tests?))) + +(define* (remove-mix-dirs . _) + "Remove all .mix/ directories. +We do not want to copy them to the installation directory." + (for-each delete-file-recursively + (find-files "." (file-name-predicate "\\.mix$") #:directories? #t))) + +(define (package-name->elixir-name name+ver) + "Convert the Guix package NAME-VER to the corresponding Elixir name-version +format. Example: elixir-a-pkg-1.2.3 -> a_pkg" + ((compose + (cute string-join <> "_") + (cute drop-right <> 1) + (cute string-split <> #\-)) + (strip-prefix name+ver))) + +(define* (install #:key + inputs + outputs + name + build-per-environment + #:allow-other-keys) + "Install build artifacts in the store." + (let* ((lib-name (package-name->elixir-name name)) + (lib-dir (string-append (elixir-libdir (assoc-ref outputs "out")) "/" lib-name)) + (root (getenv "MIX_BUILD_ROOT")) + (env (if build-per-environment "prod" "shared"))) + (mkdir-p lib-dir) + (copy-recursively (string-append (mix-build-dir root env) "/" lib-name) lib-dir + #:follow-symlinks? #t))) + +(define %standard-phases + (modify-phases gnu:%standard-phases + (delete 'bootstrap) + (delete 'configure) + (add-after 'install-locale 'set-mix-env set-mix-env) + (add-after 'set-mix-env 'set-elixir-version set-elixir-version) + (replace 'unpack unpack) + (replace 'build build) + (replace 'check check) + (add-before 'install 'remove-mix-dirs remove-mix-dirs) + (replace 'install install))) + +(define* (mix-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given Mix package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; mix-build-system.scm ends here base-commit: 06f25a9a85be1bbe7a709e58ce41c1a834e5f1ae -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 11:14:02 GMT) Full text and rfc822 format available.Message #251 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: Pierre-Henry Fröhring <contact <at> phfrohring.com>, 66801 <at> debbugs.gnu.org Subject: [PATCH 02/15] gnu: elixir: Wrap binaries. Date: Fri, 8 Dec 2023 12:10:38 +0100
* gnu/packages/elixir.scm (elixir)[arguments]: Phase `wrap-programs' added. * gnu/packages/elixir.scm (elixir)[native-search-paths]: Variable `GUIX_ELIXIR_LIBS' added. Change-Id: I75bdde3aeedc1d495ea5fc2c5fc3fcdc5dc3fad2 --- gnu/packages/elixir.scm | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index 724b42512..15cbdbdfc 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -27,6 +27,7 @@ (define-module (gnu packages elixir) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system gnu) #:use-module (guix gexp) + #:use-module (guix utils) #:use-module (guix git-download) #:use-module (guix packages) #:use-module (gnu packages) @@ -96,9 +97,20 @@ (define-public elixir (lambda* (#:key inputs #:allow-other-keys) ;; Some tests require access to a home directory. (setenv "HOME" "/tmp"))) - (delete 'configure)))) - (inputs - (list erlang git)) + (delete 'configure) + (add-after 'install 'wrap-programs + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (programs '("elixir" "elixirc" "iex" "mix"))) + (for-each (lambda (program) + (wrap-program (string-append out "/bin/" program) + '("ERL_LIBS" prefix ("${GUIX_ELIXIR_LIBS}")))) + programs))))))) + (inputs (list erlang git)) + (native-search-paths + (list (search-path-specification + (variable "GUIX_ELIXIR_LIBS") + (files (list (string-append "lib/elixir/" (version-major+minor version))))))) (home-page "https://elixir-lang.org/") (synopsis "Elixir programming language") (description "Elixir is a dynamic, functional language used to build -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 11:14:02 GMT) Full text and rfc822 format available.Message #254 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org, Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> Subject: [PATCH 03/15] gnu: Add elixir-hex. Date: Fri, 8 Dec 2023 12:10:41 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir.scm (elixir-hex): New variable. Change-Id: I957688ae4e078afd79acd439880c38083fdab83a --- gnu/packages/elixir.scm | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index 15cbdbdfc..cb9074526 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -118,3 +118,46 @@ (define-public elixir for running low-latency, distributed and fault-tolerant systems, while also being successfully used in web development and the embedded software domain.") (license license:asl2.0))) + +(define-public elixir-hex + (package + (name "elixir-hex") + (version "2.0.5") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hexpm/hex.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1kvczwvij58kgkhak68004ap81pl26600bczg21mymy2sypkgxmj")))) + ;; The mix-build-system assumes that Hex exists. + ;; We build Hex using the gnu-build-system. + ;; Other Elixir packages use the mix-build-system. + (build-system gnu-build-system) + (inputs (list elixir)) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (delete 'bootstrap) + (delete 'configure) + (replace 'build + (lambda* (#:key inputs #:allow-other-keys) + (setenv "MIX_ENV" "prod") + (invoke "mix" "compile"))) + (delete 'check) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (define X.Y #$(version-major+minor (package-version elixir))) + (define out (string-append (assoc-ref outputs "out") "/lib/elixir/" X.Y "/hex")) + (mkdir-p out) + (copy-recursively "_build/prod/lib/hex" out)))))) + (synopsis "Package manager for the Erlang VM") + (description + "This project provides tasks that integrate with Mix, Elixir's build +tool.") + (home-page "https://hexdocs.pm/makeup_elixir/") + (license license:bsd-2))) -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 11:52:01 GMT) Full text and rfc822 format available.Message #257 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH] build-system: Add mix-build-system. Date: Fri, 08 Dec 2023 12:50:48 +0100
Am Freitag, dem 08.12.2023 um 11:17 +0100 schrieb Pierre-Henry Fröhring: > I will start with the first 3. To test them, I have issued the > following command: > ┌──── > │ ./pre-inst-env guix build elixir-hex > └──── > > which result was: > ┌──── > │ … > │ successfully built /gnu/store/1732zx2s5afv1da5vhik0gr923frvg35- > elixir-hex-2.0.5.drv > │ /gnu/store/hak603f9adwad1vrlqkqn6ywgissfb13-elixir-hex-2.0.5 > └──── > > If everything is correct, I will send the other ones. For the record, I get these hashes on current master: grafting '/gnu/store/dapdrihxaxfxfcky51sr4607a79msgp6-elixir-hex-2.0.5' -> '/gnu/store/blg85m7a4jd9cdyc6q9m96lnxf9d97h0-elixir-hex-2.0.5' And you still forgot the reroll-count. Don't forget the reroll-count.
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 14:23:02 GMT) Full text and rfc822 format available.Message #260 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH] build-system: Add mix-build-system. Date: Fri, 08 Dec 2023 15:20:40 +0100
For the record, I get these hashes on current master: grafting '/gnu/store/dapdrihxaxfxfcky51sr4607a79msgp6-elixir-hex-2.0.5' -> '/gnu/store/blg85m7a4jd9cdyc6q9m96lnxf9d97h0-elixir-hex-2.0.5' I do not know exactly how to hash is computed. The previous build of elixir-hex has been done after rebasing the commits on top of the commit `06f25a9a8' of master. For the record: ┌──── │ git show --oneline -s └──── ┌──── │ 0fcd231da (HEAD -> master) gnu: Add elixir-machete. └──── ┌──── │ ./pre-inst-env guix build --check elixir-hex └──── ┌──── │ The following graft will be made: │ /gnu/store/1732zx2s5afv1da5vhik0gr923frvg35-elixir-hex-2.0.5.drv │ applying 1 graft for elixir-hex-2.0.5 ... │ grafting '/gnu/store/dapdrihxaxfxfcky51sr4607a79msgp6-elixir-hex-2.0.5' -> '/gnu/store/hak603f9adwad1vrlqkqn6ywgissfb13-elixir-hex-2.0.5'... │ successfully built /gnu/store/1732zx2s5afv1da5vhik0gr923frvg35-elixir-hex-2.0.5.drv │ successfully built /gnu/store/1732zx2s5afv1da5vhik0gr923frvg35-elixir-hex-2.0.5.drv │ /gnu/store/hak603f9adwad1vrlqkqn6ywgissfb13-elixir-hex-2.0.5 └──── And you still forgot the reroll-count. Don't forget the reroll-count. Well, what I assumed the "reroll-count" was was wrong. You mean the `v<n>' in `[PATCH v<n>]' in the subject of the patches? In my next email, I will send the same patches except that I will use the `--reroll-count=3' option to build them.
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 14:29:02 GMT) Full text and rfc822 format available.Message #263 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 02/15] gnu: elixir: Wrap binaries. Date: Fri, 8 Dec 2023 15:27:24 +0100
* gnu/packages/elixir.scm (elixir)[arguments]: Phase `wrap-programs' added. * gnu/packages/elixir.scm (elixir)[native-search-paths]: Variable `GUIX_ELIXIR_LIBS' added. Change-Id: I75bdde3aeedc1d495ea5fc2c5fc3fcdc5dc3fad2 --- gnu/packages/elixir.scm | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index 724b42512..15cbdbdfc 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -27,6 +27,7 @@ (define-module (gnu packages elixir) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system gnu) #:use-module (guix gexp) + #:use-module (guix utils) #:use-module (guix git-download) #:use-module (guix packages) #:use-module (gnu packages) @@ -96,9 +97,20 @@ (define-public elixir (lambda* (#:key inputs #:allow-other-keys) ;; Some tests require access to a home directory. (setenv "HOME" "/tmp"))) - (delete 'configure)))) - (inputs - (list erlang git)) + (delete 'configure) + (add-after 'install 'wrap-programs + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (programs '("elixir" "elixirc" "iex" "mix"))) + (for-each (lambda (program) + (wrap-program (string-append out "/bin/" program) + '("ERL_LIBS" prefix ("${GUIX_ELIXIR_LIBS}")))) + programs))))))) + (inputs (list erlang git)) + (native-search-paths + (list (search-path-specification + (variable "GUIX_ELIXIR_LIBS") + (files (list (string-append "lib/elixir/" (version-major+minor version))))))) (home-page "https://elixir-lang.org/") (synopsis "Elixir programming language") (description "Elixir is a dynamic, functional language used to build -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 14:29:03 GMT) Full text and rfc822 format available.Message #266 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 01/15] build-system: Add mix-build-system. Date: Fri, 8 Dec 2023 15:27:23 +0100
* guix/build-system/mix.scm: New file. * guix/build/mix-build-system.scm: New file. Change-Id: I8066d00f7ada4a384621bf541e679bc512e93435 --- guix/build-system/mix.scm | 186 ++++++++++++++++++++++++++++++++ guix/build/mix-build-system.scm | 161 +++++++++++++++++++++++++++ 2 files changed, 347 insertions(+) create mode 100644 guix/build-system/mix.scm create mode 100644 guix/build/mix-build-system.scm diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm new file mode 100644 index 000000000..1b04053d7 --- /dev/null +++ b/guix/build-system/mix.scm @@ -0,0 +1,186 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <contact <at> phfrohring.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Standard build procedure for Elixir packages using 'mix'. This is +;; implemented as an extension of 'gnu-build-system'. +;; +;; Code: + +(define-module (guix build-system mix) + #:use-module (guix build mix-build-system) + #:use-module (guix build-system gnu) + #:use-module (guix build-system) + #:use-module (guix gexp) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix search-paths) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (mix-build-system hexpm-uri)) + +;; Lazily resolve bindings to avoid circular dependencies. +(define (default-glibc-utf8-locales) + (let* ((base (resolve-interface '(gnu packages base)))) + (module-ref base 'glibc-utf8-locales))) + +(define (default-elixir-hex) + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir-hex))) + +(define (default-rebar3) + (let ((erlang (resolve-interface '(gnu packages erlang)))) + (module-ref erlang 'rebar3))) + +(define (default-elixir) + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir))) + +(define* (strip-prefix name #:optional (prefix "elixir-")) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (hexpm-uri name version) + "Return the URI where to fetch the sources of a Hex package NAME at VERSION. +NAME is the name of the package which should look like: elixir-pkg-name-X.Y.Z +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" + ((compose + (cute string-append "https://repo.hex.pm/tarballs/" <> "-" version ".tar") + (cute string-replace-substring <> "-" "_") + strip-prefix) + name)) + +;; A number of environment variables specific to the Mix build system are +;; reflected here. They are documented at +;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables. Other +;; parameters located in mix.exs are defined at +;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration +(define* (mix-build name + inputs + #:key + source + (tests? #t) + (mix-path #f) ;See MIX_PATH. + (mix-exs "mix.exs") ;See MIX_EXS. + (build-per-environment #t) ;See :build_per_environment. + (phases '%standard-phases) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules `((guix build mix-build-system) + ,@%gnu-build-system-modules)) + (modules '((guix build mix-build-system) + (guix build utils)))) + "Build SOURCE using Elixir, and with INPUTS." + + ;; Check the documentation of :build_per_environment here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration And + ;; "Environments" here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments + (define mix-environments + (if build-per-environment + `("prod" ,@(if tests? '("test") '())) + '("shared"))) + + (define builder + (with-imported-modules imported-modules + #~(begin + + (use-modules #$@(sexp->gexp modules)) + + #$(with-build-variables inputs outputs + #~(mix-build #:name #$name + #:source #+source + #:system #$system + #:tests? #$tests? + #:mix-path #$mix-path + #:mix-exs #$mix-exs + #:mix-environments '#$mix-environments + #:build-per-environment #$build-per-environment + #:phases #$(if (pair? phases) + (sexp->gexp phases) + phases) + #:outputs %outputs + #:search-paths '#$(sexp->gexp + (map + search-path-specification->sexp + search-paths)) + #:inputs + %build-inputs))))) + + (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) + system + #:graft? #f))) + (gexp->derivation name + builder + #:system system + #:graft? #f ;consistent with 'gnu-build' + #:target #f + #:guile-for-build guile))) + +(define* (lower name + #:key + (elixir (default-elixir)) + (elixir-hex (default-elixir-hex)) + (glibc-utf8-locales (default-glibc-utf8-locales)) + (inputs '()) + (native-inputs '()) + (propagated-inputs '()) + (rebar3 (default-rebar3)) + (tests? #t) + outputs + source + system + target + #:allow-other-keys #:rest arguments) + "Return a bag for NAME." + (let ((private-keywords + '(#:inputs #:native-inputs + #:outputs #:system #:target + #:elixir #:elixir-hex #:glibc-utf8-locales + #:rebar3 #:erlang)) + (build-inputs + `(,@(standard-packages) + ("glibc-utf8-locales" ,glibc-utf8-locales) + ("erlang" ,(lookup-package-input elixir "erlang")) + ("rebar3" ,rebar3) + ("elixir" ,elixir) + ("elixir-hex" ,elixir-hex) + ,@inputs + ,@native-inputs))) + (bag (name name) + (system system) + (build-inputs build-inputs) + (host-inputs (if target inputs '())) + (outputs outputs) + (build mix-build) + (arguments (strip-keyword-arguments private-keywords arguments))))) + +(define mix-build-system + (build-system (name 'mix) + (description "The standard Mix build system") + (lower lower))) + +;;; mix.scm ends here diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build-system.scm new file mode 100644 index 000000000..fe2e36d18 --- /dev/null +++ b/guix/build/mix-build-system.scm @@ -0,0 +1,161 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <contact <at> phfrohring.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Code: + +(define-module (guix build mix-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (ice-9 ftw) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module (ice-9 string-fun) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-71) + #:export (mix-build + %standard-phases)) + +;; The Elixir version is constant as soon as it is computable from the current +;; execution. It is a X.Y string where X and Y are respectively the major and +;; minor version number of the Elixir used in the build. +(define %elixir-version (make-parameter "X.Y")) + +(define* (elixir-libdir path #:optional (version (%elixir-version))) + "Return the path where all libraries under PATH for a specified Elixir +VERSION are installed." + (string-append path "/lib/elixir/" version)) + +(define* (strip-prefix name #:optional (prefix "elixir-")) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (mix-build-dir mix-build-root mix-env) + "Return the directory where build artifacts are to be installed according to +en environment MIX-ENV in the current directory. MIX-BUILD-ROOT depends on the +package arguments. See: https://hexdocs.pm/mix/1.15/Mix.html#module-environment-variables" + (string-append mix-build-root "/" mix-env "/lib")) + +(define (elixir-version inputs) + "Return an X.Y string where X and Y are respectively the major and minor version number of PACKAGE. +Example: /gnu/store/…-elixir-1.14.0 → 1.14" + ((compose + (cute string-join <> ".") + (cute take <> 2) + (cute string-split <> #\.) + strip-prefix + strip-store-file-name) + (assoc-ref inputs "elixir"))) + +(define* (unpack #:key source mix-path #:allow-other-keys) + "Unpack SOURCE in the working directory, and change directory within the +source. When SOURCE is a directory, copy it in a sub-directory of the current +working directory." + (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) + (gnu-unpack #:source source) + (when (file-exists? "contents.tar.gz") + (invoke "tar" "xvf" "contents.tar.gz")))) + +(define (list-directories dir) + "List absolute paths of directories directly under the directory DIR." + (map (cute string-append dir "/" <>) + (scandir dir (lambda (filename) + (and (not (member filename '("." ".."))) + (directory-exists? (string-append dir "/" filename))))))) + +(define* (set-mix-env #:key inputs mix-path mix-exs #:allow-other-keys) + "Set environment variables. +See: https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables" + (setenv "MIX_ARCHIVES" "archives") + (setenv "MIX_BUILD_ROOT" "_build") + (setenv "MIX_DEPS_PATH" "deps") + (setenv "MIX_EXS" mix-exs) + (setenv "MIX_HOME" (getcwd)) + (setenv "MIX_PATH" (or mix-path "")) + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") "/bin/rebar3"))) + +(define* (set-elixir-version #:key inputs #:allow-other-keys) + "Store the version number of the Elixir input in a parameter." + (%elixir-version (elixir-version inputs)) + (format #t "Elixir version: ~a~%" (%elixir-version))) + +(define* (build #:key mix-environments #:allow-other-keys) + "Builds the Mix project." + (for-each (lambda (mix-env) + (setenv "MIX_ENV" mix-env) + (invoke "mix" "compile" "--no-deps-check")) + mix-environments)) + +(define* (check #:key (tests? #t) #:allow-other-keys) + "Test the Mix project." + (if tests? + (invoke "mix" "test" "--no-deps-check") + (format #t "tests? = ~a~%" tests?))) + +(define* (remove-mix-dirs . _) + "Remove all .mix/ directories. +We do not want to copy them to the installation directory." + (for-each delete-file-recursively + (find-files "." (file-name-predicate "\\.mix$") #:directories? #t))) + +(define (package-name->elixir-name name+ver) + "Convert the Guix package NAME-VER to the corresponding Elixir name-version +format. Example: elixir-a-pkg-1.2.3 -> a_pkg" + ((compose + (cute string-join <> "_") + (cute drop-right <> 1) + (cute string-split <> #\-)) + (strip-prefix name+ver))) + +(define* (install #:key + inputs + outputs + name + build-per-environment + #:allow-other-keys) + "Install build artifacts in the store." + (let* ((lib-name (package-name->elixir-name name)) + (lib-dir (string-append (elixir-libdir (assoc-ref outputs "out")) "/" lib-name)) + (root (getenv "MIX_BUILD_ROOT")) + (env (if build-per-environment "prod" "shared"))) + (mkdir-p lib-dir) + (copy-recursively (string-append (mix-build-dir root env) "/" lib-name) lib-dir + #:follow-symlinks? #t))) + +(define %standard-phases + (modify-phases gnu:%standard-phases + (delete 'bootstrap) + (delete 'configure) + (add-after 'install-locale 'set-mix-env set-mix-env) + (add-after 'set-mix-env 'set-elixir-version set-elixir-version) + (replace 'unpack unpack) + (replace 'build build) + (replace 'check check) + (add-before 'install 'remove-mix-dirs remove-mix-dirs) + (replace 'install install))) + +(define* (mix-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given Mix package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; mix-build-system.scm ends here base-commit: 06f25a9a85be1bbe7a709e58ce41c1a834e5f1ae -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 14:29:03 GMT) Full text and rfc822 format available.Message #269 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 03/15] gnu: Add elixir-hex. Date: Fri, 8 Dec 2023 15:27:25 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir.scm (elixir-hex): New variable. Change-Id: I957688ae4e078afd79acd439880c38083fdab83a --- gnu/packages/elixir.scm | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index 15cbdbdfc..cb9074526 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -118,3 +118,46 @@ (define-public elixir for running low-latency, distributed and fault-tolerant systems, while also being successfully used in web development and the embedded software domain.") (license license:asl2.0))) + +(define-public elixir-hex + (package + (name "elixir-hex") + (version "2.0.5") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hexpm/hex.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1kvczwvij58kgkhak68004ap81pl26600bczg21mymy2sypkgxmj")))) + ;; The mix-build-system assumes that Hex exists. + ;; We build Hex using the gnu-build-system. + ;; Other Elixir packages use the mix-build-system. + (build-system gnu-build-system) + (inputs (list elixir)) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (delete 'bootstrap) + (delete 'configure) + (replace 'build + (lambda* (#:key inputs #:allow-other-keys) + (setenv "MIX_ENV" "prod") + (invoke "mix" "compile"))) + (delete 'check) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (define X.Y #$(version-major+minor (package-version elixir))) + (define out (string-append (assoc-ref outputs "out") "/lib/elixir/" X.Y "/hex")) + (mkdir-p out) + (copy-recursively "_build/prod/lib/hex" out)))))) + (synopsis "Package manager for the Erlang VM") + (description + "This project provides tasks that integrate with Mix, Elixir's build +tool.") + (home-page "https://hexdocs.pm/makeup_elixir/") + (license license:bsd-2))) -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 14:56:02 GMT) Full text and rfc822 format available.Message #272 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH] build-system: Add mix-build-system. Date: Fri, 08 Dec 2023 15:55:28 +0100
Am Freitag, dem 08.12.2023 um 15:20 +0100 schrieb Pierre-Henry Fröhring: > For the record, I get these hashes on current master: > > grafting '/gnu/store/dapdrihxaxfxfcky51sr4607a79msgp6-elixir- > hex-2.0.5' > -> '/gnu/store/blg85m7a4jd9cdyc6q9m96lnxf9d97h0-elixir- > hex-2.0.5' > > I do not know exactly how to hash is computed. The previous build of > elixir-hex has been done after rebasing the commits on top of the > commit `06f25a9a8' of master. For the record: > ┌──── > │ git show --oneline -s > └──── > > ┌──── > │ 0fcd231da (HEAD -> master) gnu: Add elixir-machete. > └──── > > ┌──── > │ ./pre-inst-env guix build --check elixir-hex > └──── > > ┌──── > │ The following graft will be made: > │ /gnu/store/1732zx2s5afv1da5vhik0gr923frvg35-elixir-hex-2.0.5.drv > │ applying 1 graft for elixir-hex-2.0.5 ... > │ grafting '/gnu/store/dapdrihxaxfxfcky51sr4607a79msgp6-elixir-hex- > 2.0.5' -> '/gnu/store/hak603f9adwad1vrlqkqn6ywgissfb13-elixir-hex- > 2.0.5'... > │ successfully built /gnu/store/1732zx2s5afv1da5vhik0gr923frvg35- > elixir-hex-2.0.5.drv > │ successfully built /gnu/store/1732zx2s5afv1da5vhik0gr923frvg35- > elixir-hex-2.0.5.drv > │ /gnu/store/hak603f9adwad1vrlqkqn6ywgissfb13-elixir-hex-2.0.5 > └──── I don't get the same hashes, but at least locally, --check succeeds. > Well, what I assumed the "reroll-count" was was wrong. You mean the > `v<n>' in `[PATCH v<n>]' in the subject of the patches? In my next > email, I will send the same patches except that I will use the `-- > reroll-count=3' option to build them. Yep, that's what I meant. Feel free to also send 04..15. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:05:01 GMT) Full text and rfc822 format available.Message #275 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 05/15] gnu: Add elixir-makeup. Date: Fri, 8 Dec 2023 16:03:20 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-makeup): New variable. Change-Id: I21fe9ffddb4c95a2c67b74340b1105c2a54d3c82 --- gnu/packages/elixir-xyz.scm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 352360fae..afc8b0db0 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -52,6 +52,28 @@ (define-public elixir-nimble-parsec (home-page "https://hexdocs.pm/nimble_parsec/") (license license:asl2.0))) +(define-public elixir-makeup + (package + (name "elixir-makeup") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "19jpprryixi452jwhws3bbks6ki3wni9kgzah3srg22a3x8fsi8a")))) + (build-system mix-build-system) + (propagated-inputs (list elixir-nimble-parsec)) + (arguments + (list + #:tests? #f)) + (synopsis "Syntax highlighter for source code") + (description + "Makeup is a generic syntax highlighter in the style of Pygments suitable for use in code hosting, +forums, wikis or other applications that need to prettify source code.") + (home-page "https://hexdocs.pm/makeup/") + (license license:bsd-2))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:05:02 GMT) Full text and rfc822 format available.Message #278 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 04/15] gnu: Add elixir-nimble-parsec. Date: Fri, 8 Dec 2023 16:03:19 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-nimble-parsec): New variable. Change-Id: I79bab8095aee3212bc295354ead55df49ef92d17 --- gnu/packages/elixir-xyz.scm | 59 +++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 gnu/packages/elixir-xyz.scm diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm new file mode 100644 index 000000000..352360fae --- /dev/null +++ b/gnu/packages/elixir-xyz.scm @@ -0,0 +1,59 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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 elixir-xyz) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages elixir) + #:use-module (gnu packages linux) + #:use-module (gnu packages) + #:use-module (guix build-system gnu) + #:use-module (guix build-system mix) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix gexp) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26)) + +(define-public elixir-nimble-parsec + (package + (name "elixir-nimble-parsec") + (version "1.3.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0rxiw6jzz77v0j460wmzcprhdgn71g1hrz3mcc6djn7bnb0f70i6")))) + (build-system mix-build-system) + (arguments + (list + #:tests? #f)) + (synopsis "Text-based parser combinators") + (description + "This library provides primitives for efficient parser combinators, allowing +for higher-level combinators through composition.") + (home-page "https://hexdocs.pm/nimble_parsec/") + (license license:asl2.0))) + +;;; +;;; Avoid adding new packages to the end of this file. To reduce the chances +;;; of a merge conflict, place them above by existing packages with similar +;;; functionality or similar names. +;;; -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:05:02 GMT) Full text and rfc822 format available.Message #281 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 07/15] gnu: Add elixir-file-system. Date: Fri, 8 Dec 2023 16:03:22 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-file-system): New variable. Change-Id: I54e9c9069ddf150bb0c882775b0b2c9d5e59abd6 --- gnu/packages/elixir-xyz.scm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 544a414b4..bed84e9f2 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -98,6 +98,33 @@ (define-public elixir-jason (home-page "https://hexdocs.pm/jason/") (license license:asl2.0))) +(define-public elixir-file-system + (package + (name "elixir-file-system") + (version "0.2.10") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1p0myxmnjjds8bbg69dd6fvhk8q3n7lb78zd4qvmjajnzgdmw6a1")))) + (build-system mix-build-system) + (propagated-inputs (list inotify-tools)) + (arguments + (list + #:tests? #f ;There is no test/ in the source. + #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'rm-priv + (lambda _ + ;; This directory represents source code not needed on UNIX systems. + ;; Since we aim at UNIX systems, it is deleted. + (delete-file-recursively "priv")))))) + (synopsis "File system change watcher") + (description "Provides a file system change watcher wrapper based on +[fs](https://github.com/synrc/fs).") + (home-page "https://hexdocs.pm/file_system/") + (license license:wtfpl2))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:05:03 GMT) Full text and rfc822 format available.Message #284 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 08/15] gnu: Add elixir-bunt. Date: Fri, 8 Dec 2023 16:03:23 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-bunt): New variable. Change-Id: Ib84797c31d6ab40d59b87b040993dae9391ead6b --- gnu/packages/elixir-xyz.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index bed84e9f2..984649de4 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -125,6 +125,25 @@ (define-public elixir-file-system (home-page "https://hexdocs.pm/file_system/") (license license:wtfpl2))) +(define-public elixir-bunt + (package + (name "elixir-bunt") + (version "0.2.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "19bp6xh052ql3ha0v3r8999cvja5d2p6cph02mxphfaj4jsbyc53")))) + (build-system mix-build-system) + (arguments + (list + #:tests? #f)) + (synopsis "256 color ANSI coloring in the terminal") + (description "256 color ANSI coloring in the terminal.") + (home-page "https://hexdocs.pm/bunt/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:05:03 GMT) Full text and rfc822 format available.Message #287 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 09/15] gnu: Add elixir-inch-ex. Date: Fri, 8 Dec 2023 16:03:24 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-inch-ex): New variable. Change-Id: I6e98424528a0264a2587d28fcf065fa74eff0f1a --- gnu/packages/elixir-xyz.scm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 984649de4..12aee0d78 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -144,6 +144,29 @@ (define-public elixir-bunt (home-page "https://hexdocs.pm/bunt/") (license license:expat))) +(define-public elixir-inch-ex + (package + (name "elixir-inch-ex") + (version "2.0.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1a4rjcy3hn5pc40si1d1y7qg0b0mnxx6pw825la67ky8r9gfrl4n")))) + (build-system mix-build-system) + (arguments + (list + #:tests? #f)) + (propagated-inputs (list elixir-bunt elixir-jason)) + (synopsis + "Offers a Mix task for suggestions on enhancing your inline documentation") + (description + "This package provides a Mix task that gives you hints where to improve your +inline docs.") + (home-page "https://hex.pm/packages/inch_ex") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:05:04 GMT) Full text and rfc822 format available.Message #290 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 06/15] gnu: Add elixir-jason. Date: Fri, 8 Dec 2023 16:03:21 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-jason): New variable. Change-Id: Iadd816e2b5db6d146728aacb4d6b2c66aba4304c --- gnu/packages/elixir-xyz.scm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index afc8b0db0..544a414b4 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -74,6 +74,30 @@ (define-public elixir-makeup (home-page "https://hexdocs.pm/makeup/") (license license:bsd-2))) +(define-public elixir-jason + (package + (name "elixir-jason") + (version "1.4.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "18d70i31bz11nr6vgsjn5prvhkvwqbyf3xq22ck5cnsnzp6ixc7v")))) + (build-system mix-build-system) + ;; There is no test/ in the source. + (arguments + (list + #:tests? #f)) + (synopsis "JSON parser and generator") + (description + "Parser and generator are written in pure Elixir and optimized for speed. They +are at least twice as fast as other Elixir/Erlang libraries (e.g. +Poison). The performance is comparable to jiffy, which is implemented in C as +a NIF.") + (home-page "https://hexdocs.pm/jason/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:05:04 GMT) Full text and rfc822 format available.Message #293 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 10/15] gnu: Add elixir-castore. Date: Fri, 8 Dec 2023 16:03:25 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-castore): New variable. Change-Id: Iea1fea8241d19ff35a183af9c3fbf2ed5198a259 --- gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 12aee0d78..f50c8f018 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -167,6 +167,26 @@ (define-public elixir-inch-ex (home-page "https://hex.pm/packages/inch_ex") (license license:expat))) +(define-public elixir-castore + (package + (name "elixir-castore") + (version "1.0.4") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1y44amb8falsmrfzpkmf7qp6215g9kdl76g91dpna4af2jwc264l")))) + (build-system mix-build-system) + ;; There is no test/ in the source. + (arguments + (list + #:tests? #f)) + (synopsis "Up-to-date CA certificate store") + (description "Up-to-date CA certificate store.") + (home-page "https://hexdocs.pm/castore/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:05:05 GMT) Full text and rfc822 format available.Message #296 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 12/15] gnu: Add elixir-credo. Date: Fri, 8 Dec 2023 16:03:27 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-credo): New variable. Change-Id: I6df0d926e0fb96caa65d081892026b3495431c83 --- gnu/packages/elixir-xyz.scm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index f6be8e88f..afacbd872 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -212,6 +212,30 @@ (define-public elixir-excoveralls (home-page "https://hexdocs.pm/excoveralls/") (license license:expat))) +(define-public elixir-credo + (package + (name "elixir-credo") + (version "1.7.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "18jqi9s9r1587njzdxycvmmbma30cay9iamni4f3ih54jmh1r1z9")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) + (propagated-inputs (list elixir-bunt elixir-file-system elixir-jason)) + (native-inputs (list elixir-excoveralls elixir-inch-ex)) + (synopsis "Static code analysis tool") + (description + "Credo is a static code analysis tool for the Elixir language with a focus on +teaching and code consistency. Credo can show you refactoring opportunities in +your code, complex code fragments, warn you about common mistakes, show +inconsistencies in your naming scheme and - if needed - help you enforce a +desired coding style.") + (home-page "https://hexdocs.pm/credo/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:05:06 GMT) Full text and rfc822 format available.Message #299 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 11/15] gnu: Add elixir-excoveralls. Date: Fri, 8 Dec 2023 16:03:26 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-excoveralls): New variable. Change-Id: Ib271d8a7393e21178806df28ab892afe99757297 --- gnu/packages/elixir-xyz.scm | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index f50c8f018..f6be8e88f 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -187,6 +187,31 @@ (define-public elixir-castore (home-page "https://hexdocs.pm/castore/") (license license:asl2.0))) +(define-public elixir-excoveralls + (package + (name "elixir-excoveralls") + (version "0.18.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "02x69ll5scvraky0k5gacvnnmldv5k04kgk02x087d9w3y8vn28i")))) + (build-system mix-build-system) + (propagated-inputs (list elixir-castore elixir-jason)) + ;; No test/ folder. + (arguments + (list + #:tests? #f)) + (synopsis "Coverage report tool with coveralls.io integration") + (description + "Library that reports test coverage statistics, with the option to +post to coveralls.io service. It uses Erlang's cover to generate coverage +information, and posts the test coverage results to coveralls.io through the +JSON API.") + (home-page "https://hexdocs.pm/excoveralls/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:05:06 GMT) Full text and rfc822 format available.Message #302 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 13/15] gnu: Add elixir-erlex. Date: Fri, 8 Dec 2023 16:03:28 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-erlex): New variable. Change-Id: Ia518ad5fd32d3f5942b20113e61e4ef7e7895ff3 --- gnu/packages/elixir-xyz.scm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index afacbd872..08107934a 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -236,6 +236,29 @@ (define-public elixir-credo (home-page "https://hexdocs.pm/credo/") (license license:expat))) +(define-public elixir-erlex + (package + (name "elixir-erlex") + (version "0.2.6") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0x8c1j62y748ldvlh46sxzv5514rpzm809vxn594vd7y25by5lif")))) + (build-system mix-build-system) + (arguments + (list + #:tests? #f)) + (synopsis + "Convert Erlang style structs and error messages to equivalent Elixir") + (description + "Converted structs and error messages are useful for pretty printing things +like Dialyzer errors and Observer .state. NOTE: Because this code calls the +Elixir formatter, it requires Elixir 1.6+.") + (home-page "https://hexdocs.pm/erlex/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:05:07 GMT) Full text and rfc822 format available.Message #305 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 14/15] gnu: Add elixir-dialyxir. Date: Fri, 8 Dec 2023 16:03:29 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-dialyxir): New variable. Change-Id: I387062e0aaaded448022aa7534b95859b5979a06 --- gnu/packages/elixir-xyz.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 08107934a..70b752bc3 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -259,6 +259,27 @@ (define-public elixir-erlex (home-page "https://hexdocs.pm/erlex/") (license license:asl2.0))) +(define-public elixir-dialyxir + (package + (name "elixir-dialyxir") + (version "1.4.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "00cqwhd1wabwds44jz94rvvr8z8cp12884d3lp69fqkrszb9bdw4")))) + (build-system mix-build-system) + (arguments + (list + #:tests? #f)) + (propagated-inputs (list elixir-erlex)) + (synopsis "Mix tasks to simplify use of Dialyzer") + (description + "Mix Tasks are usable from the directory of the mix project you want to analyze.") + (home-page "https://hexdocs.pm/dialyxir/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:05:07 GMT) Full text and rfc822 format available.Message #308 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 15/15] gnu: Add elixir-machete. Date: Fri, 8 Dec 2023 16:03:30 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-machete): New variable. Change-Id: I76e0fd78aeeaeaa94a297032b3b309846510c975 --- gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 70b752bc3..a1a29dfa0 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -280,6 +280,26 @@ (define-public elixir-dialyxir (home-page "https://hexdocs.pm/dialyxir/") (license license:asl2.0))) +(define-public elixir-machete + (package + (name "elixir-machete") + (version "0.2.8") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0952603bmqsf6v3ja99zpbnbx5d52i4xksjkfj3irl45ccq5pgq9")))) + (build-system mix-build-system) + (native-inputs (list elixir-credo elixir-dialyxir)) + (synopsis "Literate test matchers for ExUnit") + (description + "Machete provides ergonomic match operators that act as building blocks to let +you define test expectations that can match data against any combination of +literals, variables, or parametrically defined matchers.") + (home-page "https://hexdocs.pm/machete/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:31:01 GMT) Full text and rfc822 format available.Message #311 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 03/15] gnu: Add elixir-hex. Date: Fri, 08 Dec 2023 16:29:52 +0100
Am Freitag, dem 08.12.2023 um 15:27 +0100 schrieb Pierre-Henry Fröhring: > From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> > > * gnu/packages/elixir.scm (elixir-hex): New variable. > > Change-Id: I957688ae4e078afd79acd439880c38083fdab83a > --- > gnu/packages/elixir.scm | 43 > +++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 43 insertions(+) > > diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm > index 15cbdbdfc..cb9074526 100644 > --- a/gnu/packages/elixir.scm > +++ b/gnu/packages/elixir.scm > @@ -118,3 +118,46 @@ (define-public elixir > for running low-latency, distributed and fault-tolerant systems, > while also > being successfully used in web development and the embedded software > domain.") > (license license:asl2.0))) > + > +(define-public elixir-hex > + (package > + (name "elixir-hex") > + (version "2.0.5") > + (source > + (origin > + (method git-fetch) > + (uri (git-reference > + (url "https://github.com/hexpm/hex.git") > + (commit (string-append "v" version)))) > + (file-name (git-file-name name version)) > + (sha256 > + (base32 > + "1kvczwvij58kgkhak68004ap81pl26600bczg21mymy2sypkgxmj")))) > + ;; The mix-build-system assumes that Hex exists. > + ;; We build Hex using the gnu-build-system. > + ;; Other Elixir packages use the mix-build-system. > + (build-system gnu-build-system) > + (inputs (list elixir)) > + (arguments > + (list > + #:phases > + #~(modify-phases %standard-phases > + (delete 'bootstrap) > + (delete 'configure) > + (replace 'build > + (lambda* (#:key inputs #:allow-other-keys) > + (setenv "MIX_ENV" "prod") > + (invoke "mix" "compile"))) > + (delete 'check) Instead of (delete 'check), use #:tests? #f with an appropriate comment. > + (replace 'install > + (lambda* (#:key inputs outputs #:allow-other-keys) > + (define X.Y #$(version-major+minor (package-version > elixir))) > + (define out (string-append (assoc-ref outputs "out") > "/lib/elixir/" X.Y "/hex")) > + (mkdir-p out) > + (copy-recursively "_build/prod/lib/hex" out)))))) > + (synopsis "Package manager for the Erlang VM") > + (description > + "This project provides tasks that integrate with Mix, Elixir's > build > +tool.") > + (home-page "https://hexdocs.pm/makeup_elixir/") > + (license license:bsd-2))) Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:31:02 GMT) Full text and rfc822 format available.Message #314 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 04/15] gnu: Add elixir-nimble-parsec. Date: Fri, 08 Dec 2023 16:30:10 +0100
Am Freitag, dem 08.12.2023 um 16:03 +0100 schrieb Pierre-Henry Fröhring: > From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> > > * gnu/packages/elixir-xyz.scm (elixir-nimble-parsec): New variable. > > Change-Id: I79bab8095aee3212bc295354ead55df49ef92d17 > --- > gnu/packages/elixir-xyz.scm | 59 > +++++++++++++++++++++++++++++++++++++ > 1 file changed, 59 insertions(+) > create mode 100644 gnu/packages/elixir-xyz.scm > > diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir- > xyz.scm > new file mode 100644 > index 000000000..352360fae > --- /dev/null > +++ b/gnu/packages/elixir-xyz.scm > @@ -0,0 +1,59 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2023 Pierre-Henry Fröhring > <phfrohring <at> deeplinks.com> > +;;; > +;;; 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 elixir-xyz) > + #:use-module ((guix licenses) #:prefix license:) > + #:use-module (gnu packages elixir) > + #:use-module (gnu packages linux) > + #:use-module (gnu packages) > + #:use-module (guix build-system gnu) > + #:use-module (guix build-system mix) > + #:use-module (guix download) > + #:use-module (guix git-download) > + #:use-module (guix gexp) > + #:use-module (guix utils) > + #:use-module (guix packages) > + #:use-module (srfi srfi-1) > + #:use-module (srfi srfi-26)) > + > +(define-public elixir-nimble-parsec > + (package > + (name "elixir-nimble-parsec") > + (version "1.3.1") > + (source > + (origin > + (method url-fetch) > + (uri (hexpm-uri name version)) > + (sha256 > + (base32 > "0rxiw6jzz77v0j460wmzcprhdgn71g1hrz3mcc6djn7bnb0f70i6")))) > + (build-system mix-build-system) > + (arguments > + (list > + #:tests? #f)) Why? > + (synopsis "Text-based parser combinators") > + (description > + "This library provides primitives for efficient parser > combinators, allowing > +for higher-level combinators through composition.") > + (home-page "https://hexdocs.pm/nimble_parsec/") > + (license license:asl2.0)))
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:32:02 GMT) Full text and rfc822 format available.Message #317 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 05/15] gnu: Add elixir-makeup. Date: Fri, 08 Dec 2023 16:30:33 +0100
Am Freitag, dem 08.12.2023 um 16:03 +0100 schrieb Pierre-Henry Fröhring: > From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> > > * gnu/packages/elixir-xyz.scm (elixir-makeup): New variable. > > Change-Id: I21fe9ffddb4c95a2c67b74340b1105c2a54d3c82 > --- > gnu/packages/elixir-xyz.scm | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir- > xyz.scm > index 352360fae..afc8b0db0 100644 > --- a/gnu/packages/elixir-xyz.scm > +++ b/gnu/packages/elixir-xyz.scm > @@ -52,6 +52,28 @@ (define-public elixir-nimble-parsec > (home-page "https://hexdocs.pm/nimble_parsec/") > (license license:asl2.0))) > > +(define-public elixir-makeup > + (package > + (name "elixir-makeup") > + (version "1.1.0") > + (source > + (origin > + (method url-fetch) > + (uri (hexpm-uri name version)) > + (sha256 > + (base32 > "19jpprryixi452jwhws3bbks6ki3wni9kgzah3srg22a3x8fsi8a")))) > + (build-system mix-build-system) > + (propagated-inputs (list elixir-nimble-parsec)) > + (arguments > + (list > + #:tests? #f)) Why? > + (synopsis "Syntax highlighter for source code") > + (description > + "Makeup is a generic syntax highlighter in the style of > Pygments suitable for use in code hosting, > +forums, wikis or other applications that need to prettify source > code.") > + (home-page "https://hexdocs.pm/makeup/") > + (license license:bsd-2))) > + > ;;; > ;;; Avoid adding new packages to the end of this file. To reduce the > chances > ;;; of a merge conflict, place them above by existing packages with > similar
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:33:01 GMT) Full text and rfc822 format available.Message #320 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 06/15] gnu: Add elixir-jason. Date: Fri, 08 Dec 2023 16:31:47 +0100
Am Freitag, dem 08.12.2023 um 16:03 +0100 schrieb Pierre-Henry Fröhring: > From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> > > * gnu/packages/elixir-xyz.scm (elixir-jason): New variable. > > Change-Id: Iadd816e2b5db6d146728aacb4d6b2c66aba4304c > --- > gnu/packages/elixir-xyz.scm | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir- > xyz.scm > index afc8b0db0..544a414b4 100644 > --- a/gnu/packages/elixir-xyz.scm > +++ b/gnu/packages/elixir-xyz.scm > @@ -74,6 +74,30 @@ (define-public elixir-makeup > (home-page "https://hexdocs.pm/makeup/") > (license license:bsd-2))) > > +(define-public elixir-jason > + (package > + (name "elixir-jason") > + (version "1.4.1") > + (source > + (origin > + (method url-fetch) > + (uri (hexpm-uri name version)) > + (sha256 > + (base32 > "18d70i31bz11nr6vgsjn5prvhkvwqbyf3xq22ck5cnsnzp6ixc7v")))) > + (build-system mix-build-system) > + ;; There is no test/ in the source. > + (arguments > + (list > + #:tests? #f)) I'll move that comment closer to the cause. Btw. you don't need to split those lines if everything fits into one. > + (synopsis "JSON parser and generator") > + (description > + "Parser and generator are written in pure Elixir and optimized > for speed. They > +are at least twice as fast as other Elixir/Erlang libraries (e.g. > +Poison). The performance is comparable to jiffy, which is > implemented in C as > +a NIF.") > + (home-page "https://hexdocs.pm/jason/") > + (license license:asl2.0))) > + Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:34:02 GMT) Full text and rfc822 format available.Message #323 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 07/15] gnu: Add elixir-file-system. Date: Fri, 08 Dec 2023 16:33:12 +0100
Am Freitag, dem 08.12.2023 um 16:03 +0100 schrieb Pierre-Henry Fröhring: > From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> > > * gnu/packages/elixir-xyz.scm (elixir-file-system): New variable. > > Change-Id: I54e9c9069ddf150bb0c882775b0b2c9d5e59abd6 > --- > gnu/packages/elixir-xyz.scm | 27 +++++++++++++++++++++++++++ > 1 file changed, 27 insertions(+) > > diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir- > xyz.scm > index 544a414b4..bed84e9f2 100644 > --- a/gnu/packages/elixir-xyz.scm > +++ b/gnu/packages/elixir-xyz.scm > @@ -98,6 +98,33 @@ (define-public elixir-jason > (home-page "https://hexdocs.pm/jason/") > (license license:asl2.0))) > > +(define-public elixir-file-system > + (package > + (name "elixir-file-system") > + (version "0.2.10") > + (source > + (origin > + (method url-fetch) > + (uri (hexpm-uri name version)) > + (sha256 > + (base32 > "1p0myxmnjjds8bbg69dd6fvhk8q3n7lb78zd4qvmjajnzgdmw6a1")))) > + (build-system mix-build-system) > + (propagated-inputs (list inotify-tools)) By convention, arguments follow build-system, only thereafter come inputs. > + (arguments > + (list > + #:tests? #f ;There is no test/ in the source. > + #:phases #~(modify-phases %standard-phases > + (add-after 'unpack 'rm-priv > + (lambda _ > + ;; This directory represents source code not > needed on UNIX systems. > + ;; Since we aim at UNIX systems, it is > deleted. > + (delete-file-recursively "priv")))))) Is this bundled or non-free source? If so, delete it in a snippet. > + (synopsis "File system change watcher") > + (description "Provides a file system change watcher wrapper > based on > +[fs](https://github.com/synrc/fs).") > + (home-page "https://hexdocs.pm/file_system/") > + (license license:wtfpl2))) > + Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:35:02 GMT) Full text and rfc822 format available.Message #326 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 08/15] gnu: Add elixir-bunt. Date: Fri, 08 Dec 2023 16:33:50 +0100
Am Freitag, dem 08.12.2023 um 16:03 +0100 schrieb Pierre-Henry Fröhring: > From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> > > * gnu/packages/elixir-xyz.scm (elixir-bunt): New variable. > > Change-Id: Ib84797c31d6ab40d59b87b040993dae9391ead6b > --- > gnu/packages/elixir-xyz.scm | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir- > xyz.scm > index bed84e9f2..984649de4 100644 > --- a/gnu/packages/elixir-xyz.scm > +++ b/gnu/packages/elixir-xyz.scm > @@ -125,6 +125,25 @@ (define-public elixir-file-system > (home-page "https://hexdocs.pm/file_system/") > (license license:wtfpl2))) > > +(define-public elixir-bunt > + (package > + (name "elixir-bunt") > + (version "0.2.1") > + (source > + (origin > + (method url-fetch) > + (uri (hexpm-uri name version)) > + (sha256 > + (base32 > "19bp6xh052ql3ha0v3r8999cvja5d2p6cph02mxphfaj4jsbyc53")))) > + (build-system mix-build-system) > + (arguments > + (list > + #:tests? #f)) Why? > + (synopsis "256 color ANSI coloring in the terminal") > + (description "256 color ANSI coloring in the terminal.") The description should be a full sentence. > + (home-page "https://hexdocs.pm/bunt/") > + (license license:expat))) > + Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:36:01 GMT) Full text and rfc822 format available.Message #329 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 09/15] gnu: Add elixir-inch-ex. Date: Fri, 08 Dec 2023 16:35:16 +0100
Am Freitag, dem 08.12.2023 um 16:03 +0100 schrieb Pierre-Henry Fröhring: > From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> > > * gnu/packages/elixir-xyz.scm (elixir-inch-ex): New variable. > > Change-Id: I6e98424528a0264a2587d28fcf065fa74eff0f1a > --- > gnu/packages/elixir-xyz.scm | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir- > xyz.scm > index 984649de4..12aee0d78 100644 > --- a/gnu/packages/elixir-xyz.scm > +++ b/gnu/packages/elixir-xyz.scm > @@ -144,6 +144,29 @@ (define-public elixir-bunt > (home-page "https://hexdocs.pm/bunt/") > (license license:expat))) > > +(define-public elixir-inch-ex > + (package > + (name "elixir-inch-ex") > + (version "2.0.0") > + (source > + (origin > + (method url-fetch) > + (uri (hexpm-uri name version)) > + (sha256 > + (base32 > "1a4rjcy3hn5pc40si1d1y7qg0b0mnxx6pw825la67ky8r9gfrl4n")))) > + (build-system mix-build-system) > + (arguments > + (list > + #:tests? #f)) > + (propagated-inputs (list elixir-bunt elixir-jason)) > + (synopsis > + "Offers a Mix task for suggestions on enhancing your inline > documentation") Perhaps shorten to "Suggest enhancements for inline documentation". > + (description > + "This package provides a Mix task that gives you hints where to > improve your > +inline docs.") > + (home-page "https://hex.pm/packages/inch_ex") > + (license license:expat))) > + > ;;; > ;;; Avoid adding new packages to the end of this file. To reduce the > chances > ;;; of a merge conflict, place them above by existing packages with > similar I see this line quite often now. Perhaps you should at least sort your new packages alphabetically so that it doesn't *always* show up?
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:37:02 GMT) Full text and rfc822 format available.Message #332 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 10/15] gnu: Add elixir-castore. Date: Fri, 08 Dec 2023 16:36:06 +0100
Am Freitag, dem 08.12.2023 um 16:03 +0100 schrieb Pierre-Henry Fröhring: > From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> > > * gnu/packages/elixir-xyz.scm (elixir-castore): New variable. > > Change-Id: Iea1fea8241d19ff35a183af9c3fbf2ed5198a259 > --- > gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir- > xyz.scm > index 12aee0d78..f50c8f018 100644 > --- a/gnu/packages/elixir-xyz.scm > +++ b/gnu/packages/elixir-xyz.scm > @@ -167,6 +167,26 @@ (define-public elixir-inch-ex > (home-page "https://hex.pm/packages/inch_ex") > (license license:expat))) > > +(define-public elixir-castore > + (package > + (name "elixir-castore") > + (version "1.0.4") > + (source > + (origin > + (method url-fetch) > + (uri (hexpm-uri name version)) > + (sha256 > + (base32 > "1y44amb8falsmrfzpkmf7qp6215g9kdl76g91dpna4af2jwc264l")))) > + (build-system mix-build-system) > + ;; There is no test/ in the source. > + (arguments > + (list > + #:tests? #f)) Move the comment closer to the cause. > + (synopsis "Up-to-date CA certificate store") > + (description "Up-to-date CA certificate store.") Make the description a full sentence. > + (home-page "https://hexdocs.pm/castore/") > + (license license:asl2.0))) > + > ;;; > ;;; Avoid adding new packages to the end of this file. To reduce the > chances > ;;; of a merge conflict, place them above by existing packages with > similar Find ways to avoid this :)
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:39:02 GMT) Full text and rfc822 format available.Message #335 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 11/15] gnu: Add elixir-excoveralls. Date: Fri, 08 Dec 2023 16:38:03 +0100
Am Freitag, dem 08.12.2023 um 16:03 +0100 schrieb Pierre-Henry Fröhring: > From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> > > * gnu/packages/elixir-xyz.scm (elixir-excoveralls): New variable. > > Change-Id: Ib271d8a7393e21178806df28ab892afe99757297 > --- > gnu/packages/elixir-xyz.scm | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir- > xyz.scm > index f50c8f018..f6be8e88f 100644 > --- a/gnu/packages/elixir-xyz.scm > +++ b/gnu/packages/elixir-xyz.scm > @@ -187,6 +187,31 @@ (define-public elixir-castore > (home-page "https://hexdocs.pm/castore/") > (license license:asl2.0))) > > +(define-public elixir-excoveralls > + (package > + (name "elixir-excoveralls") > + (version "0.18.0") > + (source > + (origin > + (method url-fetch) > + (uri (hexpm-uri name version)) > + (sha256 > + (base32 > "02x69ll5scvraky0k5gacvnnmldv5k04kgk02x087d9w3y8vn28i")))) > + (build-system mix-build-system) > + (propagated-inputs (list elixir-castore elixir-jason)) > + ;; No test/ folder. > + (arguments > + (list > + #:tests? #f)) Collapse and move, same as before :) > + (synopsis "Coverage report tool with coveralls.io integration") > + (description > + "Library that reports test coverage statistics, with the option > to > +post to coveralls.io service. Make this a complete sentence. > It uses Erlang's cover to generate coverage > +information, and posts the test coverage results to coveralls.io > through the > +JSON API.") Fair enough. > + (home-page "https://hexdocs.pm/excoveralls/") > + (license license:expat))) > + > ;;; > ;;; Avoid adding new packages to the end of this file. To reduce the > chances > ;;; of a merge conflict, place them above by existing packages with > similar
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:40:01 GMT) Full text and rfc822 format available.Message #338 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 12/15] gnu: Add elixir-credo. Date: Fri, 08 Dec 2023 16:39:05 +0100
Am Freitag, dem 08.12.2023 um 16:03 +0100 schrieb Pierre-Henry Fröhring: > From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> > > * gnu/packages/elixir-xyz.scm (elixir-credo): New variable. > > Change-Id: I6df0d926e0fb96caa65d081892026b3495431c83 > --- > gnu/packages/elixir-xyz.scm | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir- > xyz.scm > index f6be8e88f..afacbd872 100644 > --- a/gnu/packages/elixir-xyz.scm > +++ b/gnu/packages/elixir-xyz.scm > @@ -212,6 +212,30 @@ (define-public elixir-excoveralls > (home-page "https://hexdocs.pm/excoveralls/") > (license license:expat))) > > +(define-public elixir-credo > + (package > + (name "elixir-credo") > + (version "1.7.1") > + (source > + (origin > + (method url-fetch) > + (uri (hexpm-uri name version)) > + (sha256 > + (base32 > "18jqi9s9r1587njzdxycvmmbma30cay9iamni4f3ih54jmh1r1z9")))) > + (build-system mix-build-system) > + (arguments (list #:tests? #f)) Good, it's collapsed, but you're still missing the comment explaining why :) > + (propagated-inputs (list elixir-bunt elixir-file-system elixir- > jason)) > + (native-inputs (list elixir-excoveralls elixir-inch-ex)) > + (synopsis "Static code analysis tool") > + (description > + "Credo is a static code analysis tool for the Elixir language > with a focus on > +teaching and code consistency. Credo can show you refactoring > opportunities in > +your code, complex code fragments, warn you about common mistakes, > show > +inconsistencies in your naming scheme and - if needed - help you > enforce a > +desired coding style.") > + (home-page "https://hexdocs.pm/credo/") > + (license license:expat))) > + > ;;; > ;;; Avoid adding new packages to the end of this file. To reduce the > chances > ;;; of a merge conflict, place them above by existing packages with > similar Otherwise LGTM modulo placement.
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:41:01 GMT) Full text and rfc822 format available.Message #341 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 13/15] gnu: Add elixir-erlex. Date: Fri, 08 Dec 2023 16:39:56 +0100
Am Freitag, dem 08.12.2023 um 16:03 +0100 schrieb Pierre-Henry Fröhring: > From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> > > * gnu/packages/elixir-xyz.scm (elixir-erlex): New variable. > > Change-Id: Ia518ad5fd32d3f5942b20113e61e4ef7e7895ff3 > --- > gnu/packages/elixir-xyz.scm | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir- > xyz.scm > index afacbd872..08107934a 100644 > --- a/gnu/packages/elixir-xyz.scm > +++ b/gnu/packages/elixir-xyz.scm > @@ -236,6 +236,29 @@ (define-public elixir-credo > (home-page "https://hexdocs.pm/credo/") > (license license:expat))) > > +(define-public elixir-erlex > + (package > + (name "elixir-erlex") > + (version "0.2.6") > + (source > + (origin > + (method url-fetch) > + (uri (hexpm-uri name version)) > + (sha256 > + (base32 > "0x8c1j62y748ldvlh46sxzv5514rpzm809vxn594vd7y25by5lif")))) > + (build-system mix-build-system) > + (arguments > + (list > + #:tests? #f)) > + (synopsis > + "Convert Erlang style structs and error messages to equivalent > Elixir") > + (description > + "Converted structs and error messages are useful for pretty > printing things > +like Dialyzer errors and Observer .state. Should this dot be there? > NOTE: Because this code calls the > +Elixir formatter, it requires Elixir 1.6+.") Pretty sure that's useless information because we package the right Elixir, right? > + (home-page "https://hexdocs.pm/erlex/") > + (license license:asl2.0))) > + > ;;; > ;;; Avoid adding new packages to the end of this file. To reduce the > chances > ;;; of a merge conflict, place them above by existing packages with > similar Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 15:42:01 GMT) Full text and rfc822 format available.Message #344 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 15/15] gnu: Add elixir-machete. Date: Fri, 08 Dec 2023 16:40:44 +0100
Am Freitag, dem 08.12.2023 um 16:03 +0100 schrieb Pierre-Henry Fröhring: > From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> > > * gnu/packages/elixir-xyz.scm (elixir-machete): New variable. > > Change-Id: I76e0fd78aeeaeaa94a297032b3b309846510c975 > --- > gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir- > xyz.scm > index 70b752bc3..a1a29dfa0 100644 > --- a/gnu/packages/elixir-xyz.scm > +++ b/gnu/packages/elixir-xyz.scm > @@ -280,6 +280,26 @@ (define-public elixir-dialyxir > (home-page "https://hexdocs.pm/dialyxir/") > (license license:asl2.0))) > > +(define-public elixir-machete > + (package > + (name "elixir-machete") > + (version "0.2.8") > + (source > + (origin > + (method url-fetch) > + (uri (hexpm-uri name version)) > + (sha256 > + (base32 > "0952603bmqsf6v3ja99zpbnbx5d52i4xksjkfj3irl45ccq5pgq9")))) > + (build-system mix-build-system) > + (native-inputs (list elixir-credo elixir-dialyxir)) > + (synopsis "Literate test matchers for ExUnit") > + (description > + "Machete provides ergonomic match operators that act as > building blocks to let > +you define test expectations that can match data against any > combination of > +literals, variables, or parametrically defined matchers.") > + (home-page "https://hexdocs.pm/machete/") > + (license license:expat))) > + > ;;; > ;;; Avoid adding new packages to the end of this file. To reduce the > chances > ;;; of a merge conflict, place them above by existing packages with > similar LGTM modulo placement.
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:32:01 GMT) Full text and rfc822 format available.Message #347 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 15/15] gnu: Add elixir-machete. Date: Fri, 08 Dec 2023 18:30:56 +0100
Ok, the patches 4..15 have been corrected and will follow.
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:33:02 GMT) Full text and rfc822 format available.Message #350 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 06/15] gnu: Add elixir-jason. Date: Fri, 8 Dec 2023 18:31:33 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-jason): New variable. Change-Id: Iadd816e2b5db6d146728aacb4d6b2c66aba4304c --- gnu/packages/elixir-xyz.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 46565c168..dc20a69b4 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -70,6 +70,27 @@ (define-public elixir-makeup (home-page "https://hexdocs.pm/makeup/") (license license:bsd-2))) +(define-public elixir-jason + (package + (name "elixir-jason") + (version "1.4.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "18d70i31bz11nr6vgsjn5prvhkvwqbyf3xq22ck5cnsnzp6ixc7v")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ;There is no test/ in the source. + (synopsis "JSON parser and generator") + (description + "Parser and generator are written in pure Elixir and optimized for speed. They +are at least twice as fast as other Elixir/Erlang libraries (e.g. +Poison). The performance is comparable to jiffy, which is implemented in C as +a NIF.") + (home-page "https://hexdocs.pm/jason/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:33:02 GMT) Full text and rfc822 format available.Message #353 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 04/15] gnu: Add elixir-nimble-parsec. Date: Fri, 8 Dec 2023 18:31:31 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-nimble-parsec): New variable. Change-Id: I79bab8095aee3212bc295354ead55df49ef92d17 --- gnu/packages/elixir-xyz.scm | 57 +++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 gnu/packages/elixir-xyz.scm diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm new file mode 100644 index 000000000..c2ff4d7bb --- /dev/null +++ b/gnu/packages/elixir-xyz.scm @@ -0,0 +1,57 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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 elixir-xyz) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages elixir) + #:use-module (gnu packages linux) + #:use-module (gnu packages) + #:use-module (guix build-system gnu) + #:use-module (guix build-system mix) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix gexp) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26)) + +(define-public elixir-nimble-parsec + (package + (name "elixir-nimble-parsec") + (version "1.3.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0rxiw6jzz77v0j460wmzcprhdgn71g1hrz3mcc6djn7bnb0f70i6")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ;No test/ directory in the source tarball. + (synopsis "Text-based parser combinators") + (description + "This library provides primitives for efficient parser combinators, allowing +for higher-level combinators through composition.") + (home-page "https://hexdocs.pm/nimble_parsec/") + (license license:asl2.0))) + +;;; +;;; Avoid adding new packages to the end of this file. To reduce the chances +;;; of a merge conflict, place them above by existing packages with similar +;;; functionality or similar names. +;;; -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:33:03 GMT) Full text and rfc822 format available.Message #356 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 07/15] gnu: Add elixir-file-system. Date: Fri, 8 Dec 2023 18:31:34 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-file-system): New variable. Change-Id: I54e9c9069ddf150bb0c882775b0b2c9d5e59abd6 --- gnu/packages/elixir-xyz.scm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index dc20a69b4..348cba49a 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -91,6 +91,28 @@ (define-public elixir-jason (home-page "https://hexdocs.pm/jason/") (license license:asl2.0))) +(define-public elixir-file-system + (package + (name "elixir-file-system") + (version "0.2.10") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1p0myxmnjjds8bbg69dd6fvhk8q3n7lb78zd4qvmjajnzgdmw6a1")) + ;; This directory represents source code not needed on UNIX systems. + ;; Since we aim at UNIX systems, it is deleted. + (snippet '(delete-file-recursively "priv")))) + (build-system mix-build-system) + (propagated-inputs (list inotify-tools)) + (arguments (list #:tests? #f)) ;There is no test/ in the source. + (synopsis "File system change watcher") + (description "Provides a file system change watcher wrapper based on +[fs](https://github.com/synrc/fs).") + (home-page "https://hexdocs.pm/file_system/") + (license license:wtfpl2))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:33:03 GMT) Full text and rfc822 format available.Message #359 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 08/15] gnu: Add elixir-bunt. Date: Fri, 8 Dec 2023 18:31:35 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-bunt): New variable. Change-Id: Ib84797c31d6ab40d59b87b040993dae9391ead6b --- gnu/packages/elixir-xyz.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 348cba49a..2c042f11f 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -113,6 +113,25 @@ (define-public elixir-file-system (home-page "https://hexdocs.pm/file_system/") (license license:wtfpl2))) +(define-public elixir-bunt + (package + (name "elixir-bunt") + (version "0.2.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "19bp6xh052ql3ha0v3r8999cvja5d2p6cph02mxphfaj4jsbyc53")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ;There is no test/ in the source. + (synopsis "256 color ANSI coloring in the terminal") + (description "Bunt is an Elixir package that enables 256 color ANSI +coloring in the terminal and allows users to alias colors to more semantic and +application-specific names1.") + (home-page "https://hexdocs.pm/bunt/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:33:04 GMT) Full text and rfc822 format available.Message #362 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 05/15] gnu: Add elixir-makeup. Date: Fri, 8 Dec 2023 18:31:32 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-makeup): New variable. Change-Id: I21fe9ffddb4c95a2c67b74340b1105c2a54d3c82 --- gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index c2ff4d7bb..46565c168 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -50,6 +50,26 @@ (define-public elixir-nimble-parsec (home-page "https://hexdocs.pm/nimble_parsec/") (license license:asl2.0))) +(define-public elixir-makeup + (package + (name "elixir-makeup") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "19jpprryixi452jwhws3bbks6ki3wni9kgzah3srg22a3x8fsi8a")))) + (build-system mix-build-system) + (propagated-inputs (list elixir-nimble-parsec)) + (arguments (list #:tests? #f)) ;No test/ directory in the source tarball. + (synopsis "Syntax highlighter for source code") + (description + "Makeup is a generic syntax highlighter in the style of Pygments suitable for use in code hosting, +forums, wikis or other applications that need to prettify source code.") + (home-page "https://hexdocs.pm/makeup/") + (license license:bsd-2))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:33:04 GMT) Full text and rfc822 format available.Message #365 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 09/15] gnu: Add elixir-inch-ex. Date: Fri, 8 Dec 2023 18:31:36 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-inch-ex): New variable. Change-Id: I6e98424528a0264a2587d28fcf065fa74eff0f1a --- gnu/packages/elixir-xyz.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 2c042f11f..29d6857f4 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -132,6 +132,27 @@ (define-public elixir-bunt (home-page "https://hexdocs.pm/bunt/") (license license:expat))) +(define-public elixir-inch-ex + (package + (name "elixir-inch-ex") + (version "2.0.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1a4rjcy3hn5pc40si1d1y7qg0b0mnxx6pw825la67ky8r9gfrl4n")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ;No test/ in the sources. + (propagated-inputs (list elixir-bunt elixir-jason)) + (synopsis + "Suggest enhancements for inline documentation") + (description + "This package provides a Mix task that gives you hints where to improve your +inline docs.") + (home-page "https://hex.pm/packages/inch_ex") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:33:04 GMT) Full text and rfc822 format available.Message #368 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 10/15] gnu: Add elixir-castore. Date: Fri, 8 Dec 2023 18:31:37 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-castore): New variable. Change-Id: Iea1fea8241d19ff35a183af9c3fbf2ed5198a259 --- gnu/packages/elixir-xyz.scm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 29d6857f4..bf6a214d9 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -153,6 +153,24 @@ (define-public elixir-inch-ex (home-page "https://hex.pm/packages/inch_ex") (license license:expat))) +(define-public elixir-castore + (package + (name "elixir-castore") + (version "1.0.4") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1y44amb8falsmrfzpkmf7qp6215g9kdl76g91dpna4af2jwc264l")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ;There is no test/ in the source. + (synopsis "Up-to-date CA certificate store") + (description "The Elixir castore package is a micro-library that provides +an up-to-date CA certificate store file for Elixir applications.") + (home-page "https://hexdocs.pm/castore/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:33:05 GMT) Full text and rfc822 format available.Message #371 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 11/15] gnu: Add elixir-excoveralls. Date: Fri, 8 Dec 2023 18:31:38 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-excoveralls): New variable. Change-Id: Ib271d8a7393e21178806df28ab892afe99757297 --- gnu/packages/elixir-xyz.scm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index bf6a214d9..25e6a9f27 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -171,6 +171,28 @@ (define-public elixir-castore (home-page "https://hexdocs.pm/castore/") (license license:asl2.0))) +(define-public elixir-excoveralls + (package + (name "elixir-excoveralls") + (version "0.18.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "02x69ll5scvraky0k5gacvnnmldv5k04kgk02x087d9w3y8vn28i")))) + (build-system mix-build-system) + (propagated-inputs (list elixir-castore elixir-jason)) + (arguments (list #:tests? #f)) ;No test/ folder. + (synopsis "Coverage report tool with coveralls.io integration") + (description + "Library that reports test coverage statistics, with the option to +post to coveralls.io service. It uses Erlang's cover to generate coverage +information, and posts the test coverage results to coveralls.io through the +JSON API.") + (home-page "https://hexdocs.pm/excoveralls/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:33:05 GMT) Full text and rfc822 format available.Message #374 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 12/15] gnu: Add elixir-credo. Date: Fri, 8 Dec 2023 18:31:39 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-credo): New variable. Change-Id: I6df0d926e0fb96caa65d081892026b3495431c83 --- gnu/packages/elixir-xyz.scm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 25e6a9f27..0743a6917 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -193,6 +193,30 @@ (define-public elixir-excoveralls (home-page "https://hexdocs.pm/excoveralls/") (license license:expat))) +(define-public elixir-credo + (package + (name "elixir-credo") + (version "1.7.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "18jqi9s9r1587njzdxycvmmbma30cay9iamni4f3ih54jmh1r1z9")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ;No test/ folder. + (propagated-inputs (list elixir-bunt elixir-file-system elixir-jason)) + (native-inputs (list elixir-excoveralls elixir-inch-ex)) + (synopsis "Static code analysis tool") + (description + "Credo is a static code analysis tool for the Elixir language with a focus on +teaching and code consistency. Credo can show you refactoring opportunities in +your code, complex code fragments, warn you about common mistakes, show +inconsistencies in your naming scheme and - if needed - help you enforce a +desired coding style.") + (home-page "https://hexdocs.pm/credo/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:33:06 GMT) Full text and rfc822 format available.Message #377 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 13/15] gnu: Add elixir-erlex. Date: Fri, 8 Dec 2023 18:31:40 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-erlex): New variable. Change-Id: Ia518ad5fd32d3f5942b20113e61e4ef7e7895ff3 --- gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 0743a6917..5c20e253a 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -217,6 +217,26 @@ (define-public elixir-credo (home-page "https://hexdocs.pm/credo/") (license license:expat))) +(define-public elixir-erlex + (package + (name "elixir-erlex") + (version "0.2.6") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0x8c1j62y748ldvlh46sxzv5514rpzm809vxn594vd7y25by5lif")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ;No test/ in the sources. + (synopsis + "Convert Erlang style structs and error messages to equivalent Elixir") + (description + "Converted structs and error messages are useful for pretty printing +things like Dialyzer errors and Observer.") + (home-page "https://hexdocs.pm/erlex/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:33:06 GMT) Full text and rfc822 format available.Message #380 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 15/15] gnu: Add elixir-machete. Date: Fri, 8 Dec 2023 18:31:42 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-machete): New variable. Change-Id: I76e0fd78aeeaeaa94a297032b3b309846510c975 --- gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 417ef4fde..226cbe92b 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -256,6 +256,26 @@ (define-public elixir-dialyxir (home-page "https://hexdocs.pm/dialyxir/") (license license:asl2.0))) +(define-public elixir-machete + (package + (name "elixir-machete") + (version "0.2.8") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0952603bmqsf6v3ja99zpbnbx5d52i4xksjkfj3irl45ccq5pgq9")))) + (build-system mix-build-system) + (native-inputs (list elixir-credo elixir-dialyxir)) + (synopsis "Literate test matchers for ExUnit") + (description + "Machete provides ergonomic match operators that act as building blocks to let +you define test expectations that can match data against any combination of +literals, variables, or parametrically defined matchers.") + (home-page "https://hexdocs.pm/machete/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 17:33:07 GMT) Full text and rfc822 format available.Message #383 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v3 14/15] gnu: Add elixir-dialyxir. Date: Fri, 8 Dec 2023 18:31:41 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-dialyxir): New variable. Change-Id: I387062e0aaaded448022aa7534b95859b5979a06 --- gnu/packages/elixir-xyz.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 5c20e253a..417ef4fde 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -237,6 +237,25 @@ (define-public elixir-erlex (home-page "https://hexdocs.pm/erlex/") (license license:asl2.0))) +(define-public elixir-dialyxir + (package + (name "elixir-dialyxir") + (version "1.4.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "00cqwhd1wabwds44jz94rvvr8z8cp12884d3lp69fqkrszb9bdw4")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ;No test/ in the sources. + (propagated-inputs (list elixir-erlex)) + (synopsis "Mix tasks to simplify use of Dialyzer") + (description + "Mix Tasks are usable from the directory of the mix project you want to analyze.") + (home-page "https://hexdocs.pm/dialyxir/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:02:02 GMT) Full text and rfc822 format available.Message #386 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 15/15] gnu: Add elixir-machete. Date: Fri, 08 Dec 2023 19:01:37 +0100
Am Freitag, dem 08.12.2023 um 18:30 +0100 schrieb Pierre-Henry Fröhring: > Ok, the patches 4..15 have been corrected and will follow. Don't forget to increment the reroll-count when amending a commit. Also, 3/15 needs to be amended as well. Btw. the canonical "no tests" comment appears to be "; no tests". Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:22:01 GMT) Full text and rfc822 format available.Message #389 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v3 15/15] gnu: Add elixir-machete. Date: Fri, 08 Dec 2023 19:19:19 +0100
Liliana Marie Prikler <liliana.prikler <at> gmail.com> writes: > Don't forget to increment the reroll-count when amending a commit. > Also, 3/15 needs to be amended as well. > > Btw. the canonical "no tests" comment appears to be "; no tests". Ok, I hope the next batch will be good enough.
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:02 GMT) Full text and rfc822 format available.Message #392 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 02/15] gnu: elixir: Wrap binaries. Date: Fri, 8 Dec 2023 19:35:13 +0100
* gnu/packages/elixir.scm (elixir)[arguments]: Phase `wrap-programs' added. * gnu/packages/elixir.scm (elixir)[native-search-paths]: Variable `GUIX_ELIXIR_LIBS' added. Change-Id: I75bdde3aeedc1d495ea5fc2c5fc3fcdc5dc3fad2 --- gnu/packages/elixir.scm | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index 724b42512..15cbdbdfc 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -27,6 +27,7 @@ (define-module (gnu packages elixir) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system gnu) #:use-module (guix gexp) + #:use-module (guix utils) #:use-module (guix git-download) #:use-module (guix packages) #:use-module (gnu packages) @@ -96,9 +97,20 @@ (define-public elixir (lambda* (#:key inputs #:allow-other-keys) ;; Some tests require access to a home directory. (setenv "HOME" "/tmp"))) - (delete 'configure)))) - (inputs - (list erlang git)) + (delete 'configure) + (add-after 'install 'wrap-programs + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (programs '("elixir" "elixirc" "iex" "mix"))) + (for-each (lambda (program) + (wrap-program (string-append out "/bin/" program) + '("ERL_LIBS" prefix ("${GUIX_ELIXIR_LIBS}")))) + programs))))))) + (inputs (list erlang git)) + (native-search-paths + (list (search-path-specification + (variable "GUIX_ELIXIR_LIBS") + (files (list (string-append "lib/elixir/" (version-major+minor version))))))) (home-page "https://elixir-lang.org/") (synopsis "Elixir programming language") (description "Elixir is a dynamic, functional language used to build -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:02 GMT) Full text and rfc822 format available.Message #395 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 03/15] gnu: Add elixir-hex. Date: Fri, 8 Dec 2023 19:35:14 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir.scm (elixir-hex): New variable. Change-Id: I957688ae4e078afd79acd439880c38083fdab83a --- gnu/packages/elixir.scm | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index 15cbdbdfc..ef8c39d0d 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -118,3 +118,48 @@ (define-public elixir for running low-latency, distributed and fault-tolerant systems, while also being successfully used in web development and the embedded software domain.") (license license:asl2.0))) + +(define-public elixir-hex + (package + (name "elixir-hex") + (version "2.0.5") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hexpm/hex.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1kvczwvij58kgkhak68004ap81pl26600bczg21mymy2sypkgxmj")))) + ;; The mix-build-system assumes that Hex exists. + ;; We build Hex using the gnu-build-system. + ;; Other Elixir packages use the mix-build-system. + (build-system gnu-build-system) + (inputs (list elixir)) + (arguments + (list + ;; Hex is needed to build packages used to test Hex. + ;; To avoid this circularity, we disable tests. + #:tests? #f + #:phases + #~(modify-phases %standard-phases + (delete 'bootstrap) + (delete 'configure) + (replace 'build + (lambda* (#:key inputs #:allow-other-keys) + (setenv "MIX_ENV" "prod") + (invoke "mix" "compile"))) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (define X.Y #$(version-major+minor (package-version elixir))) + (define out (string-append (assoc-ref outputs "out") "/lib/elixir/" X.Y "/hex")) + (mkdir-p out) + (copy-recursively "_build/prod/lib/hex" out)))))) + (synopsis "Package manager for the Erlang VM") + (description + "This project provides tasks that integrate with Mix, Elixir's build +tool.") + (home-page "https://hexdocs.pm/makeup_elixir/") + (license license:bsd-2))) -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:02 GMT) Full text and rfc822 format available.Message #398 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 05/15] gnu: Add elixir-makeup. Date: Fri, 8 Dec 2023 19:35:16 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-makeup): New variable. Change-Id: I21fe9ffddb4c95a2c67b74340b1105c2a54d3c82 --- gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index a57d2aae8..ba682e7f0 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -50,6 +50,26 @@ (define-public elixir-nimble-parsec (home-page "https://hexdocs.pm/nimble_parsec/") (license license:asl2.0))) +(define-public elixir-makeup + (package + (name "elixir-makeup") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "19jpprryixi452jwhws3bbks6ki3wni9kgzah3srg22a3x8fsi8a")))) + (build-system mix-build-system) + (propagated-inputs (list elixir-nimble-parsec)) + (arguments (list #:tests? #f)) ; no tests + (synopsis "Syntax highlighter for source code") + (description + "Makeup is a generic syntax highlighter in the style of Pygments suitable for use in code hosting, +forums, wikis or other applications that need to prettify source code.") + (home-page "https://hexdocs.pm/makeup/") + (license license:bsd-2))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:03 GMT) Full text and rfc822 format available.Message #401 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 04/15] gnu: Add elixir-nimble-parsec. Date: Fri, 8 Dec 2023 19:35:15 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-nimble-parsec): New variable. Change-Id: I79bab8095aee3212bc295354ead55df49ef92d17 --- gnu/packages/elixir-xyz.scm | 57 +++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 gnu/packages/elixir-xyz.scm diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm new file mode 100644 index 000000000..a57d2aae8 --- /dev/null +++ b/gnu/packages/elixir-xyz.scm @@ -0,0 +1,57 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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 elixir-xyz) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages elixir) + #:use-module (gnu packages linux) + #:use-module (gnu packages) + #:use-module (guix build-system gnu) + #:use-module (guix build-system mix) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix gexp) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26)) + +(define-public elixir-nimble-parsec + (package + (name "elixir-nimble-parsec") + (version "1.3.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0rxiw6jzz77v0j460wmzcprhdgn71g1hrz3mcc6djn7bnb0f70i6")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (synopsis "Text-based parser combinators") + (description + "This library provides primitives for efficient parser combinators, allowing +for higher-level combinators through composition.") + (home-page "https://hexdocs.pm/nimble_parsec/") + (license license:asl2.0))) + +;;; +;;; Avoid adding new packages to the end of this file. To reduce the chances +;;; of a merge conflict, place them above by existing packages with similar +;;; functionality or similar names. +;;; -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:03 GMT) Full text and rfc822 format available.Message #404 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 06/15] gnu: Add elixir-jason. Date: Fri, 8 Dec 2023 19:35:17 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-jason): New variable. Change-Id: Iadd816e2b5db6d146728aacb4d6b2c66aba4304c --- gnu/packages/elixir-xyz.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index ba682e7f0..66c364fb3 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -70,6 +70,27 @@ (define-public elixir-makeup (home-page "https://hexdocs.pm/makeup/") (license license:bsd-2))) +(define-public elixir-jason + (package + (name "elixir-jason") + (version "1.4.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "18d70i31bz11nr6vgsjn5prvhkvwqbyf3xq22ck5cnsnzp6ixc7v")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (synopsis "JSON parser and generator") + (description + "Parser and generator are written in pure Elixir and optimized for speed. They +are at least twice as fast as other Elixir/Erlang libraries (e.g. +Poison). The performance is comparable to jiffy, which is implemented in C as +a NIF.") + (home-page "https://hexdocs.pm/jason/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:04 GMT) Full text and rfc822 format available.Message #407 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 01/15] build-system: Add mix-build-system. Date: Fri, 8 Dec 2023 19:35:12 +0100
* guix/build-system/mix.scm: New file. * guix/build/mix-build-system.scm: New file. Change-Id: I8066d00f7ada4a384621bf541e679bc512e93435 --- guix/build-system/mix.scm | 186 ++++++++++++++++++++++++++++++++ guix/build/mix-build-system.scm | 161 +++++++++++++++++++++++++++ 2 files changed, 347 insertions(+) create mode 100644 guix/build-system/mix.scm create mode 100644 guix/build/mix-build-system.scm diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm new file mode 100644 index 000000000..1b04053d7 --- /dev/null +++ b/guix/build-system/mix.scm @@ -0,0 +1,186 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <contact <at> phfrohring.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Standard build procedure for Elixir packages using 'mix'. This is +;; implemented as an extension of 'gnu-build-system'. +;; +;; Code: + +(define-module (guix build-system mix) + #:use-module (guix build mix-build-system) + #:use-module (guix build-system gnu) + #:use-module (guix build-system) + #:use-module (guix gexp) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix search-paths) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (mix-build-system hexpm-uri)) + +;; Lazily resolve bindings to avoid circular dependencies. +(define (default-glibc-utf8-locales) + (let* ((base (resolve-interface '(gnu packages base)))) + (module-ref base 'glibc-utf8-locales))) + +(define (default-elixir-hex) + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir-hex))) + +(define (default-rebar3) + (let ((erlang (resolve-interface '(gnu packages erlang)))) + (module-ref erlang 'rebar3))) + +(define (default-elixir) + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir))) + +(define* (strip-prefix name #:optional (prefix "elixir-")) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (hexpm-uri name version) + "Return the URI where to fetch the sources of a Hex package NAME at VERSION. +NAME is the name of the package which should look like: elixir-pkg-name-X.Y.Z +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" + ((compose + (cute string-append "https://repo.hex.pm/tarballs/" <> "-" version ".tar") + (cute string-replace-substring <> "-" "_") + strip-prefix) + name)) + +;; A number of environment variables specific to the Mix build system are +;; reflected here. They are documented at +;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables. Other +;; parameters located in mix.exs are defined at +;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration +(define* (mix-build name + inputs + #:key + source + (tests? #t) + (mix-path #f) ;See MIX_PATH. + (mix-exs "mix.exs") ;See MIX_EXS. + (build-per-environment #t) ;See :build_per_environment. + (phases '%standard-phases) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules `((guix build mix-build-system) + ,@%gnu-build-system-modules)) + (modules '((guix build mix-build-system) + (guix build utils)))) + "Build SOURCE using Elixir, and with INPUTS." + + ;; Check the documentation of :build_per_environment here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration And + ;; "Environments" here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments + (define mix-environments + (if build-per-environment + `("prod" ,@(if tests? '("test") '())) + '("shared"))) + + (define builder + (with-imported-modules imported-modules + #~(begin + + (use-modules #$@(sexp->gexp modules)) + + #$(with-build-variables inputs outputs + #~(mix-build #:name #$name + #:source #+source + #:system #$system + #:tests? #$tests? + #:mix-path #$mix-path + #:mix-exs #$mix-exs + #:mix-environments '#$mix-environments + #:build-per-environment #$build-per-environment + #:phases #$(if (pair? phases) + (sexp->gexp phases) + phases) + #:outputs %outputs + #:search-paths '#$(sexp->gexp + (map + search-path-specification->sexp + search-paths)) + #:inputs + %build-inputs))))) + + (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) + system + #:graft? #f))) + (gexp->derivation name + builder + #:system system + #:graft? #f ;consistent with 'gnu-build' + #:target #f + #:guile-for-build guile))) + +(define* (lower name + #:key + (elixir (default-elixir)) + (elixir-hex (default-elixir-hex)) + (glibc-utf8-locales (default-glibc-utf8-locales)) + (inputs '()) + (native-inputs '()) + (propagated-inputs '()) + (rebar3 (default-rebar3)) + (tests? #t) + outputs + source + system + target + #:allow-other-keys #:rest arguments) + "Return a bag for NAME." + (let ((private-keywords + '(#:inputs #:native-inputs + #:outputs #:system #:target + #:elixir #:elixir-hex #:glibc-utf8-locales + #:rebar3 #:erlang)) + (build-inputs + `(,@(standard-packages) + ("glibc-utf8-locales" ,glibc-utf8-locales) + ("erlang" ,(lookup-package-input elixir "erlang")) + ("rebar3" ,rebar3) + ("elixir" ,elixir) + ("elixir-hex" ,elixir-hex) + ,@inputs + ,@native-inputs))) + (bag (name name) + (system system) + (build-inputs build-inputs) + (host-inputs (if target inputs '())) + (outputs outputs) + (build mix-build) + (arguments (strip-keyword-arguments private-keywords arguments))))) + +(define mix-build-system + (build-system (name 'mix) + (description "The standard Mix build system") + (lower lower))) + +;;; mix.scm ends here diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build-system.scm new file mode 100644 index 000000000..fe2e36d18 --- /dev/null +++ b/guix/build/mix-build-system.scm @@ -0,0 +1,161 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <contact <at> phfrohring.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Code: + +(define-module (guix build mix-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (ice-9 ftw) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module (ice-9 string-fun) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-71) + #:export (mix-build + %standard-phases)) + +;; The Elixir version is constant as soon as it is computable from the current +;; execution. It is a X.Y string where X and Y are respectively the major and +;; minor version number of the Elixir used in the build. +(define %elixir-version (make-parameter "X.Y")) + +(define* (elixir-libdir path #:optional (version (%elixir-version))) + "Return the path where all libraries under PATH for a specified Elixir +VERSION are installed." + (string-append path "/lib/elixir/" version)) + +(define* (strip-prefix name #:optional (prefix "elixir-")) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (mix-build-dir mix-build-root mix-env) + "Return the directory where build artifacts are to be installed according to +en environment MIX-ENV in the current directory. MIX-BUILD-ROOT depends on the +package arguments. See: https://hexdocs.pm/mix/1.15/Mix.html#module-environment-variables" + (string-append mix-build-root "/" mix-env "/lib")) + +(define (elixir-version inputs) + "Return an X.Y string where X and Y are respectively the major and minor version number of PACKAGE. +Example: /gnu/store/…-elixir-1.14.0 → 1.14" + ((compose + (cute string-join <> ".") + (cute take <> 2) + (cute string-split <> #\.) + strip-prefix + strip-store-file-name) + (assoc-ref inputs "elixir"))) + +(define* (unpack #:key source mix-path #:allow-other-keys) + "Unpack SOURCE in the working directory, and change directory within the +source. When SOURCE is a directory, copy it in a sub-directory of the current +working directory." + (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) + (gnu-unpack #:source source) + (when (file-exists? "contents.tar.gz") + (invoke "tar" "xvf" "contents.tar.gz")))) + +(define (list-directories dir) + "List absolute paths of directories directly under the directory DIR." + (map (cute string-append dir "/" <>) + (scandir dir (lambda (filename) + (and (not (member filename '("." ".."))) + (directory-exists? (string-append dir "/" filename))))))) + +(define* (set-mix-env #:key inputs mix-path mix-exs #:allow-other-keys) + "Set environment variables. +See: https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables" + (setenv "MIX_ARCHIVES" "archives") + (setenv "MIX_BUILD_ROOT" "_build") + (setenv "MIX_DEPS_PATH" "deps") + (setenv "MIX_EXS" mix-exs) + (setenv "MIX_HOME" (getcwd)) + (setenv "MIX_PATH" (or mix-path "")) + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") "/bin/rebar3"))) + +(define* (set-elixir-version #:key inputs #:allow-other-keys) + "Store the version number of the Elixir input in a parameter." + (%elixir-version (elixir-version inputs)) + (format #t "Elixir version: ~a~%" (%elixir-version))) + +(define* (build #:key mix-environments #:allow-other-keys) + "Builds the Mix project." + (for-each (lambda (mix-env) + (setenv "MIX_ENV" mix-env) + (invoke "mix" "compile" "--no-deps-check")) + mix-environments)) + +(define* (check #:key (tests? #t) #:allow-other-keys) + "Test the Mix project." + (if tests? + (invoke "mix" "test" "--no-deps-check") + (format #t "tests? = ~a~%" tests?))) + +(define* (remove-mix-dirs . _) + "Remove all .mix/ directories. +We do not want to copy them to the installation directory." + (for-each delete-file-recursively + (find-files "." (file-name-predicate "\\.mix$") #:directories? #t))) + +(define (package-name->elixir-name name+ver) + "Convert the Guix package NAME-VER to the corresponding Elixir name-version +format. Example: elixir-a-pkg-1.2.3 -> a_pkg" + ((compose + (cute string-join <> "_") + (cute drop-right <> 1) + (cute string-split <> #\-)) + (strip-prefix name+ver))) + +(define* (install #:key + inputs + outputs + name + build-per-environment + #:allow-other-keys) + "Install build artifacts in the store." + (let* ((lib-name (package-name->elixir-name name)) + (lib-dir (string-append (elixir-libdir (assoc-ref outputs "out")) "/" lib-name)) + (root (getenv "MIX_BUILD_ROOT")) + (env (if build-per-environment "prod" "shared"))) + (mkdir-p lib-dir) + (copy-recursively (string-append (mix-build-dir root env) "/" lib-name) lib-dir + #:follow-symlinks? #t))) + +(define %standard-phases + (modify-phases gnu:%standard-phases + (delete 'bootstrap) + (delete 'configure) + (add-after 'install-locale 'set-mix-env set-mix-env) + (add-after 'set-mix-env 'set-elixir-version set-elixir-version) + (replace 'unpack unpack) + (replace 'build build) + (replace 'check check) + (add-before 'install 'remove-mix-dirs remove-mix-dirs) + (replace 'install install))) + +(define* (mix-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given Mix package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; mix-build-system.scm ends here base-commit: 06f25a9a85be1bbe7a709e58ce41c1a834e5f1ae -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:04 GMT) Full text and rfc822 format available.Message #410 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 07/15] gnu: Add elixir-file-system. Date: Fri, 8 Dec 2023 19:35:18 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-file-system): New variable. Change-Id: I54e9c9069ddf150bb0c882775b0b2c9d5e59abd6 --- gnu/packages/elixir-xyz.scm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 66c364fb3..f46e470cd 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -91,6 +91,28 @@ (define-public elixir-jason (home-page "https://hexdocs.pm/jason/") (license license:asl2.0))) +(define-public elixir-file-system + (package + (name "elixir-file-system") + (version "0.2.10") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1p0myxmnjjds8bbg69dd6fvhk8q3n7lb78zd4qvmjajnzgdmw6a1")) + ;; This directory represents source code not needed on UNIX systems. + ;; Since we aim at UNIX systems, it is deleted. + (snippet '(delete-file-recursively "priv")))) + (build-system mix-build-system) + (propagated-inputs (list inotify-tools)) + (arguments (list #:tests? #f)) ;There is no test/ in the source. + (synopsis "File system change watcher") + (description "Provides a file system change watcher wrapper based on +[fs](https://github.com/synrc/fs).") + (home-page "https://hexdocs.pm/file_system/") + (license license:wtfpl2))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:05 GMT) Full text and rfc822 format available.Message #413 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 08/15] gnu: Add elixir-bunt. Date: Fri, 8 Dec 2023 19:35:19 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-bunt): New variable. Change-Id: Ib84797c31d6ab40d59b87b040993dae9391ead6b --- gnu/packages/elixir-xyz.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index f46e470cd..54a747554 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -113,6 +113,25 @@ (define-public elixir-file-system (home-page "https://hexdocs.pm/file_system/") (license license:wtfpl2))) +(define-public elixir-bunt + (package + (name "elixir-bunt") + (version "0.2.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "19bp6xh052ql3ha0v3r8999cvja5d2p6cph02mxphfaj4jsbyc53")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (synopsis "256 color ANSI coloring in the terminal") + (description "Bunt is an Elixir package that enables 256 color ANSI +coloring in the terminal and allows users to alias colors to more semantic and +application-specific names1.") + (home-page "https://hexdocs.pm/bunt/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:05 GMT) Full text and rfc822 format available.Message #416 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 09/15] gnu: Add elixir-inch-ex. Date: Fri, 8 Dec 2023 19:35:20 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-inch-ex): New variable. Change-Id: I6e98424528a0264a2587d28fcf065fa74eff0f1a --- gnu/packages/elixir-xyz.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 54a747554..e4756a733 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -132,6 +132,27 @@ (define-public elixir-bunt (home-page "https://hexdocs.pm/bunt/") (license license:expat))) +(define-public elixir-inch-ex + (package + (name "elixir-inch-ex") + (version "2.0.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1a4rjcy3hn5pc40si1d1y7qg0b0mnxx6pw825la67ky8r9gfrl4n")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (propagated-inputs (list elixir-bunt elixir-jason)) + (synopsis + "Suggest enhancements for inline documentation") + (description + "This package provides a Mix task that gives you hints where to improve your +inline docs.") + (home-page "https://hex.pm/packages/inch_ex") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:06 GMT) Full text and rfc822 format available.Message #419 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 10/15] gnu: Add elixir-castore. Date: Fri, 8 Dec 2023 19:35:21 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-castore): New variable. Change-Id: Iea1fea8241d19ff35a183af9c3fbf2ed5198a259 --- gnu/packages/elixir-xyz.scm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index e4756a733..18f168e33 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -153,6 +153,24 @@ (define-public elixir-inch-ex (home-page "https://hex.pm/packages/inch_ex") (license license:expat))) +(define-public elixir-castore + (package + (name "elixir-castore") + (version "1.0.4") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1y44amb8falsmrfzpkmf7qp6215g9kdl76g91dpna4af2jwc264l")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (synopsis "Up-to-date CA certificate store") + (description "The Elixir castore package is a micro-library that provides +an up-to-date CA certificate store file for Elixir applications.") + (home-page "https://hexdocs.pm/castore/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:06 GMT) Full text and rfc822 format available.Message #422 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 11/15] gnu: Add elixir-excoveralls. Date: Fri, 8 Dec 2023 19:35:22 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-excoveralls): New variable. Change-Id: Ib271d8a7393e21178806df28ab892afe99757297 --- gnu/packages/elixir-xyz.scm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 18f168e33..4bb856f67 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -171,6 +171,28 @@ (define-public elixir-castore (home-page "https://hexdocs.pm/castore/") (license license:asl2.0))) +(define-public elixir-excoveralls + (package + (name "elixir-excoveralls") + (version "0.18.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "02x69ll5scvraky0k5gacvnnmldv5k04kgk02x087d9w3y8vn28i")))) + (build-system mix-build-system) + (propagated-inputs (list elixir-castore elixir-jason)) + (arguments (list #:tests? #f)) ; no tests + (synopsis "Coverage report tool with coveralls.io integration") + (description + "Library that reports test coverage statistics, with the option to +post to coveralls.io service. It uses Erlang's cover to generate coverage +information, and posts the test coverage results to coveralls.io through the +JSON API.") + (home-page "https://hexdocs.pm/excoveralls/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:07 GMT) Full text and rfc822 format available.Message #425 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 12/15] gnu: Add elixir-credo. Date: Fri, 8 Dec 2023 19:35:23 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-credo): New variable. Change-Id: I6df0d926e0fb96caa65d081892026b3495431c83 --- gnu/packages/elixir-xyz.scm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 4bb856f67..b4e974797 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -193,6 +193,30 @@ (define-public elixir-excoveralls (home-page "https://hexdocs.pm/excoveralls/") (license license:expat))) +(define-public elixir-credo + (package + (name "elixir-credo") + (version "1.7.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "18jqi9s9r1587njzdxycvmmbma30cay9iamni4f3ih54jmh1r1z9")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (propagated-inputs (list elixir-bunt elixir-file-system elixir-jason)) + (native-inputs (list elixir-excoveralls elixir-inch-ex)) + (synopsis "Static code analysis tool") + (description + "Credo is a static code analysis tool for the Elixir language with a focus on +teaching and code consistency. Credo can show you refactoring opportunities in +your code, complex code fragments, warn you about common mistakes, show +inconsistencies in your naming scheme and - if needed - help you enforce a +desired coding style.") + (home-page "https://hexdocs.pm/credo/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:07 GMT) Full text and rfc822 format available.Message #428 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 15/15] gnu: Add elixir-machete. Date: Fri, 8 Dec 2023 19:35:26 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-machete): New variable. Change-Id: I76e0fd78aeeaeaa94a297032b3b309846510c975 --- gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 983c3ff5f..e74750c5b 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -256,6 +256,26 @@ (define-public elixir-dialyxir (home-page "https://hexdocs.pm/dialyxir/") (license license:asl2.0))) +(define-public elixir-machete + (package + (name "elixir-machete") + (version "0.2.8") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0952603bmqsf6v3ja99zpbnbx5d52i4xksjkfj3irl45ccq5pgq9")))) + (build-system mix-build-system) + (native-inputs (list elixir-credo elixir-dialyxir)) + (synopsis "Literate test matchers for ExUnit") + (description + "Machete provides ergonomic match operators that act as building blocks to let +you define test expectations that can match data against any combination of +literals, variables, or parametrically defined matchers.") + (home-page "https://hexdocs.pm/machete/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:08 GMT) Full text and rfc822 format available.Message #431 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 13/15] gnu: Add elixir-erlex. Date: Fri, 8 Dec 2023 19:35:24 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-erlex): New variable. Change-Id: Ia518ad5fd32d3f5942b20113e61e4ef7e7895ff3 --- gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index b4e974797..4d328aa07 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -217,6 +217,26 @@ (define-public elixir-credo (home-page "https://hexdocs.pm/credo/") (license license:expat))) +(define-public elixir-erlex + (package + (name "elixir-erlex") + (version "0.2.6") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0x8c1j62y748ldvlh46sxzv5514rpzm809vxn594vd7y25by5lif")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (synopsis + "Convert Erlang style structs and error messages to equivalent Elixir") + (description + "Converted structs and error messages are useful for pretty printing +things like Dialyzer errors and Observer.") + (home-page "https://hexdocs.pm/erlex/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Fri, 08 Dec 2023 18:37:08 GMT) Full text and rfc822 format available.Message #434 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v4 14/15] gnu: Add elixir-dialyxir. Date: Fri, 8 Dec 2023 19:35:25 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-dialyxir): New variable. Change-Id: I387062e0aaaded448022aa7534b95859b5979a06 --- gnu/packages/elixir-xyz.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 4d328aa07..983c3ff5f 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -237,6 +237,25 @@ (define-public elixir-erlex (home-page "https://hexdocs.pm/erlex/") (license license:asl2.0))) +(define-public elixir-dialyxir + (package + (name "elixir-dialyxir") + (version "1.4.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "00cqwhd1wabwds44jz94rvvr8z8cp12884d3lp69fqkrszb9bdw4")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (propagated-inputs (list elixir-erlex)) + (synopsis "Mix tasks to simplify use of Dialyzer") + (description + "Mix Tasks are usable from the directory of the mix project you want to analyze.") + (home-page "https://hexdocs.pm/dialyxir/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:01:01 GMT) Full text and rfc822 format available.Message #437 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: Guix Issue 66801 <66801 <at> debbugs.gnu.org> Date: Sun, 10 Dec 2023 13:34:37 +0100
Hello lilyp, After this email comes the v5 batch of patches. Are these good enough? For the record, I'm building a checklists of your suggestions here: <https://phfrohring.com/6e5895e1-fbbe-4ccb-a220-ae51807d70bd.html> « These rules do their job when mindlessly applying them get rid of details preventing patches to be merged. » I still did not compile all of them, but it will be done. These patches were added on top of: ┌──── │ 06f25a9a8 * origin/master gnu: xrdp: Update to 0.9.23.1. └──── The packages build on my machine. ┌──── │ echo $PWD │ git rev-parse HEAD └──── ┌──── └──── ┌──── │ ./pre-inst-env guix build elixir-file-system └──── ┌──── │ /gnu/store/76fsrn1bdsyhm9m1p17ibrd0cbgybigw-elixir-file-system-0.2.10 └──── ┌──── │ ./pre-inst-env guix build elixir-machete └──── ┌──── │ /gnu/store/f5jc0jg1yd9imgvy0sk44ci0l1lh2v0x-elixir-machete-0.2.8 └──── The main difference is the introduction of the `snippet' field that actually does the job for `elixir-file-system': ┌──── │ (define-public elixir-file-system │ (package │ (name "elixir-file-system") │ (version "0.2.10") │ (source │ (origin │ (method url-fetch) │ (uri (hexpm-uri name version)) │ (sha256 │ (base32 "1p0myxmnjjds8bbg69dd6fvhk8q3n7lb78zd4qvmjajnzgdmw6a1")) │ (snippet #~(begin │ (use-modules (guix build utils) (ice-9 ftw)) │ (mkdir "source") │ (for-each (lambda (file) │ (when (not (member file '("." ".." "source"))) │ (rename-file file (string-append "source/" file)))) │ (scandir ".")) │ (with-directory-excursion "source" │ (invoke (string-append #+gzip "/bin/gunzip") "-v" "contents.tar.gz") │ (invoke (string-append #+tar "/bin/tar") "-xvf" "contents.tar") │ (delete-file "contents.tar") │ (delete-file "priv/inotifywait.exe")))))) │ (build-system mix-build-system) │ (propagated-inputs (list inotify-tools)) │ (arguments (list #:tests? #f)) ; no tests │ (synopsis "File system change watcher") │ (description "Provides a file system change watcher wrapper based on │ https://github.com/synrc/fs.") │ (home-page "https://hexdocs.pm/file_system/") │ (license license:wtfpl2))) └──── For some reason, `--delete' option of `tar' did not work as expected which made the code a bit longer that what it should have been: ┌──── │ tar --delete -f contents.tar priv/inotifywait.exe │ emacsclient contents.tar └──── ┌──── │ … │ -rw-r--r-- 0/0 734 c_src/mac/cli.h │ -rw-r--r-- 0/0 1496 c_src/mac/common.h │ rwxrwSrwt 163910/18953450 8929236060 >= 6))) { │ config.flags |= kFSEventStreamCreateFlagIgnoreSelf; │ } else { │ fprintf(stder └──── ┌──── │ tar xf contents.tar └──── ┌──── │ tar: Skipping to next header │ tar: Exiting with failure status due to previous errors └──── – Regards, phf
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:02 GMT) Full text and rfc822 format available.Message #440 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 03/15] gnu: Add elixir-hex. Date: Sun, 10 Dec 2023 14:03:56 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir.scm (elixir-hex): New variable. Change-Id: I957688ae4e078afd79acd439880c38083fdab83a --- gnu/packages/elixir.scm | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index 15cbdbdfc..ef8c39d0d 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -118,3 +118,48 @@ (define-public elixir for running low-latency, distributed and fault-tolerant systems, while also being successfully used in web development and the embedded software domain.") (license license:asl2.0))) + +(define-public elixir-hex + (package + (name "elixir-hex") + (version "2.0.5") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hexpm/hex.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1kvczwvij58kgkhak68004ap81pl26600bczg21mymy2sypkgxmj")))) + ;; The mix-build-system assumes that Hex exists. + ;; We build Hex using the gnu-build-system. + ;; Other Elixir packages use the mix-build-system. + (build-system gnu-build-system) + (inputs (list elixir)) + (arguments + (list + ;; Hex is needed to build packages used to test Hex. + ;; To avoid this circularity, we disable tests. + #:tests? #f + #:phases + #~(modify-phases %standard-phases + (delete 'bootstrap) + (delete 'configure) + (replace 'build + (lambda* (#:key inputs #:allow-other-keys) + (setenv "MIX_ENV" "prod") + (invoke "mix" "compile"))) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (define X.Y #$(version-major+minor (package-version elixir))) + (define out (string-append (assoc-ref outputs "out") "/lib/elixir/" X.Y "/hex")) + (mkdir-p out) + (copy-recursively "_build/prod/lib/hex" out)))))) + (synopsis "Package manager for the Erlang VM") + (description + "This project provides tasks that integrate with Mix, Elixir's build +tool.") + (home-page "https://hexdocs.pm/makeup_elixir/") + (license license:bsd-2))) -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:02 GMT) Full text and rfc822 format available.Message #443 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 02/15] gnu: elixir: Wrap binaries. Date: Sun, 10 Dec 2023 14:03:55 +0100
* gnu/packages/elixir.scm (elixir)[arguments]: Phase `wrap-programs' added. * gnu/packages/elixir.scm (elixir)[native-search-paths]: Variable `GUIX_ELIXIR_LIBS' added. Change-Id: I75bdde3aeedc1d495ea5fc2c5fc3fcdc5dc3fad2 --- gnu/packages/elixir.scm | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm index 724b42512..15cbdbdfc 100644 --- a/gnu/packages/elixir.scm +++ b/gnu/packages/elixir.scm @@ -27,6 +27,7 @@ (define-module (gnu packages elixir) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system gnu) #:use-module (guix gexp) + #:use-module (guix utils) #:use-module (guix git-download) #:use-module (guix packages) #:use-module (gnu packages) @@ -96,9 +97,20 @@ (define-public elixir (lambda* (#:key inputs #:allow-other-keys) ;; Some tests require access to a home directory. (setenv "HOME" "/tmp"))) - (delete 'configure)))) - (inputs - (list erlang git)) + (delete 'configure) + (add-after 'install 'wrap-programs + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (programs '("elixir" "elixirc" "iex" "mix"))) + (for-each (lambda (program) + (wrap-program (string-append out "/bin/" program) + '("ERL_LIBS" prefix ("${GUIX_ELIXIR_LIBS}")))) + programs))))))) + (inputs (list erlang git)) + (native-search-paths + (list (search-path-specification + (variable "GUIX_ELIXIR_LIBS") + (files (list (string-append "lib/elixir/" (version-major+minor version))))))) (home-page "https://elixir-lang.org/") (synopsis "Elixir programming language") (description "Elixir is a dynamic, functional language used to build -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:03 GMT) Full text and rfc822 format available.Message #446 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 01/15] build-system: Add mix-build-system. Date: Sun, 10 Dec 2023 14:03:54 +0100
* guix/build-system/mix.scm: New file. * guix/build/mix-build-system.scm: New file. Change-Id: I8066d00f7ada4a384621bf541e679bc512e93435 --- guix/build-system/mix.scm | 186 ++++++++++++++++++++++++++++++++ guix/build/mix-build-system.scm | 161 +++++++++++++++++++++++++++ 2 files changed, 347 insertions(+) create mode 100644 guix/build-system/mix.scm create mode 100644 guix/build/mix-build-system.scm diff --git a/guix/build-system/mix.scm b/guix/build-system/mix.scm new file mode 100644 index 000000000..1b04053d7 --- /dev/null +++ b/guix/build-system/mix.scm @@ -0,0 +1,186 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <contact <at> phfrohring.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Standard build procedure for Elixir packages using 'mix'. This is +;; implemented as an extension of 'gnu-build-system'. +;; +;; Code: + +(define-module (guix build-system mix) + #:use-module (guix build mix-build-system) + #:use-module (guix build-system gnu) + #:use-module (guix build-system) + #:use-module (guix gexp) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix search-paths) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (mix-build-system hexpm-uri)) + +;; Lazily resolve bindings to avoid circular dependencies. +(define (default-glibc-utf8-locales) + (let* ((base (resolve-interface '(gnu packages base)))) + (module-ref base 'glibc-utf8-locales))) + +(define (default-elixir-hex) + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir-hex))) + +(define (default-rebar3) + (let ((erlang (resolve-interface '(gnu packages erlang)))) + (module-ref erlang 'rebar3))) + +(define (default-elixir) + (let ((elixir (resolve-interface '(gnu packages elixir)))) + (module-ref elixir 'elixir))) + +(define* (strip-prefix name #:optional (prefix "elixir-")) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (hexpm-uri name version) + "Return the URI where to fetch the sources of a Hex package NAME at VERSION. +NAME is the name of the package which should look like: elixir-pkg-name-X.Y.Z +See: https://github.com/hexpm/specifications/blob/main/endpoints.md" + ((compose + (cute string-append "https://repo.hex.pm/tarballs/" <> "-" version ".tar") + (cute string-replace-substring <> "-" "_") + strip-prefix) + name)) + +;; A number of environment variables specific to the Mix build system are +;; reflected here. They are documented at +;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables. Other +;; parameters located in mix.exs are defined at +;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration +(define* (mix-build name + inputs + #:key + source + (tests? #t) + (mix-path #f) ;See MIX_PATH. + (mix-exs "mix.exs") ;See MIX_EXS. + (build-per-environment #t) ;See :build_per_environment. + (phases '%standard-phases) + (outputs '("out")) + (search-paths '()) + (system (%current-system)) + (guile #f) + (imported-modules `((guix build mix-build-system) + ,@%gnu-build-system-modules)) + (modules '((guix build mix-build-system) + (guix build utils)))) + "Build SOURCE using Elixir, and with INPUTS." + + ;; Check the documentation of :build_per_environment here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.Project.html#module-configuration And + ;; "Environments" here: + ;; https://hexdocs.pm/mix/1.15.7/Mix.html#module-environments + (define mix-environments + (if build-per-environment + `("prod" ,@(if tests? '("test") '())) + '("shared"))) + + (define builder + (with-imported-modules imported-modules + #~(begin + + (use-modules #$@(sexp->gexp modules)) + + #$(with-build-variables inputs outputs + #~(mix-build #:name #$name + #:source #+source + #:system #$system + #:tests? #$tests? + #:mix-path #$mix-path + #:mix-exs #$mix-exs + #:mix-environments '#$mix-environments + #:build-per-environment #$build-per-environment + #:phases #$(if (pair? phases) + (sexp->gexp phases) + phases) + #:outputs %outputs + #:search-paths '#$(sexp->gexp + (map + search-path-specification->sexp + search-paths)) + #:inputs + %build-inputs))))) + + (mlet %store-monad ((guile (package->derivation (or guile (default-guile)) + system + #:graft? #f))) + (gexp->derivation name + builder + #:system system + #:graft? #f ;consistent with 'gnu-build' + #:target #f + #:guile-for-build guile))) + +(define* (lower name + #:key + (elixir (default-elixir)) + (elixir-hex (default-elixir-hex)) + (glibc-utf8-locales (default-glibc-utf8-locales)) + (inputs '()) + (native-inputs '()) + (propagated-inputs '()) + (rebar3 (default-rebar3)) + (tests? #t) + outputs + source + system + target + #:allow-other-keys #:rest arguments) + "Return a bag for NAME." + (let ((private-keywords + '(#:inputs #:native-inputs + #:outputs #:system #:target + #:elixir #:elixir-hex #:glibc-utf8-locales + #:rebar3 #:erlang)) + (build-inputs + `(,@(standard-packages) + ("glibc-utf8-locales" ,glibc-utf8-locales) + ("erlang" ,(lookup-package-input elixir "erlang")) + ("rebar3" ,rebar3) + ("elixir" ,elixir) + ("elixir-hex" ,elixir-hex) + ,@inputs + ,@native-inputs))) + (bag (name name) + (system system) + (build-inputs build-inputs) + (host-inputs (if target inputs '())) + (outputs outputs) + (build mix-build) + (arguments (strip-keyword-arguments private-keywords arguments))))) + +(define mix-build-system + (build-system (name 'mix) + (description "The standard Mix build system") + (lower lower))) + +;;; mix.scm ends here diff --git a/guix/build/mix-build-system.scm b/guix/build/mix-build-system.scm new file mode 100644 index 000000000..fe2e36d18 --- /dev/null +++ b/guix/build/mix-build-system.scm @@ -0,0 +1,161 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <contact <at> phfrohring.com> +;;; +;;; 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/>. + +;; Commentary: +;; +;; Code: + +(define-module (guix build mix-build-system) + #:use-module ((guix build gnu-build-system) #:prefix gnu:) + #:use-module (guix build utils) + #:use-module (ice-9 ftw) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module (ice-9 string-fun) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (srfi srfi-71) + #:export (mix-build + %standard-phases)) + +;; The Elixir version is constant as soon as it is computable from the current +;; execution. It is a X.Y string where X and Y are respectively the major and +;; minor version number of the Elixir used in the build. +(define %elixir-version (make-parameter "X.Y")) + +(define* (elixir-libdir path #:optional (version (%elixir-version))) + "Return the path where all libraries under PATH for a specified Elixir +VERSION are installed." + (string-append path "/lib/elixir/" version)) + +(define* (strip-prefix name #:optional (prefix "elixir-")) + "Return NAME without the prefix PREFIX." + (if (string-prefix? prefix name) + (string-drop name (string-length prefix)) + name)) + +(define (mix-build-dir mix-build-root mix-env) + "Return the directory where build artifacts are to be installed according to +en environment MIX-ENV in the current directory. MIX-BUILD-ROOT depends on the +package arguments. See: https://hexdocs.pm/mix/1.15/Mix.html#module-environment-variables" + (string-append mix-build-root "/" mix-env "/lib")) + +(define (elixir-version inputs) + "Return an X.Y string where X and Y are respectively the major and minor version number of PACKAGE. +Example: /gnu/store/…-elixir-1.14.0 → 1.14" + ((compose + (cute string-join <> ".") + (cute take <> 2) + (cute string-split <> #\.) + strip-prefix + strip-store-file-name) + (assoc-ref inputs "elixir"))) + +(define* (unpack #:key source mix-path #:allow-other-keys) + "Unpack SOURCE in the working directory, and change directory within the +source. When SOURCE is a directory, copy it in a sub-directory of the current +working directory." + (let ((gnu-unpack (assoc-ref gnu:%standard-phases 'unpack))) + (gnu-unpack #:source source) + (when (file-exists? "contents.tar.gz") + (invoke "tar" "xvf" "contents.tar.gz")))) + +(define (list-directories dir) + "List absolute paths of directories directly under the directory DIR." + (map (cute string-append dir "/" <>) + (scandir dir (lambda (filename) + (and (not (member filename '("." ".."))) + (directory-exists? (string-append dir "/" filename))))))) + +(define* (set-mix-env #:key inputs mix-path mix-exs #:allow-other-keys) + "Set environment variables. +See: https://hexdocs.pm/mix/1.15.7/Mix.html#module-environment-variables" + (setenv "MIX_ARCHIVES" "archives") + (setenv "MIX_BUILD_ROOT" "_build") + (setenv "MIX_DEPS_PATH" "deps") + (setenv "MIX_EXS" mix-exs) + (setenv "MIX_HOME" (getcwd)) + (setenv "MIX_PATH" (or mix-path "")) + (setenv "MIX_REBAR3" (string-append (assoc-ref inputs "rebar3") "/bin/rebar3"))) + +(define* (set-elixir-version #:key inputs #:allow-other-keys) + "Store the version number of the Elixir input in a parameter." + (%elixir-version (elixir-version inputs)) + (format #t "Elixir version: ~a~%" (%elixir-version))) + +(define* (build #:key mix-environments #:allow-other-keys) + "Builds the Mix project." + (for-each (lambda (mix-env) + (setenv "MIX_ENV" mix-env) + (invoke "mix" "compile" "--no-deps-check")) + mix-environments)) + +(define* (check #:key (tests? #t) #:allow-other-keys) + "Test the Mix project." + (if tests? + (invoke "mix" "test" "--no-deps-check") + (format #t "tests? = ~a~%" tests?))) + +(define* (remove-mix-dirs . _) + "Remove all .mix/ directories. +We do not want to copy them to the installation directory." + (for-each delete-file-recursively + (find-files "." (file-name-predicate "\\.mix$") #:directories? #t))) + +(define (package-name->elixir-name name+ver) + "Convert the Guix package NAME-VER to the corresponding Elixir name-version +format. Example: elixir-a-pkg-1.2.3 -> a_pkg" + ((compose + (cute string-join <> "_") + (cute drop-right <> 1) + (cute string-split <> #\-)) + (strip-prefix name+ver))) + +(define* (install #:key + inputs + outputs + name + build-per-environment + #:allow-other-keys) + "Install build artifacts in the store." + (let* ((lib-name (package-name->elixir-name name)) + (lib-dir (string-append (elixir-libdir (assoc-ref outputs "out")) "/" lib-name)) + (root (getenv "MIX_BUILD_ROOT")) + (env (if build-per-environment "prod" "shared"))) + (mkdir-p lib-dir) + (copy-recursively (string-append (mix-build-dir root env) "/" lib-name) lib-dir + #:follow-symlinks? #t))) + +(define %standard-phases + (modify-phases gnu:%standard-phases + (delete 'bootstrap) + (delete 'configure) + (add-after 'install-locale 'set-mix-env set-mix-env) + (add-after 'set-mix-env 'set-elixir-version set-elixir-version) + (replace 'unpack unpack) + (replace 'build build) + (replace 'check check) + (add-before 'install 'remove-mix-dirs remove-mix-dirs) + (replace 'install install))) + +(define* (mix-build #:key inputs (phases %standard-phases) + #:allow-other-keys #:rest args) + "Build the given Mix package, applying all of PHASES in order." + (apply gnu:gnu-build #:inputs inputs #:phases phases args)) + +;;; mix-build-system.scm ends here base-commit: 06f25a9a85be1bbe7a709e58ce41c1a834e5f1ae -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:03 GMT) Full text and rfc822 format available.Message #449 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 05/15] gnu: Add elixir-makeup. Date: Sun, 10 Dec 2023 14:03:58 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-makeup): New variable. Change-Id: I21fe9ffddb4c95a2c67b74340b1105c2a54d3c82 --- gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index a57d2aae8..ba682e7f0 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -50,6 +50,26 @@ (define-public elixir-nimble-parsec (home-page "https://hexdocs.pm/nimble_parsec/") (license license:asl2.0))) +(define-public elixir-makeup + (package + (name "elixir-makeup") + (version "1.1.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "19jpprryixi452jwhws3bbks6ki3wni9kgzah3srg22a3x8fsi8a")))) + (build-system mix-build-system) + (propagated-inputs (list elixir-nimble-parsec)) + (arguments (list #:tests? #f)) ; no tests + (synopsis "Syntax highlighter for source code") + (description + "Makeup is a generic syntax highlighter in the style of Pygments suitable for use in code hosting, +forums, wikis or other applications that need to prettify source code.") + (home-page "https://hexdocs.pm/makeup/") + (license license:bsd-2))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:04 GMT) Full text and rfc822 format available.Message #452 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 04/15] gnu: Add elixir-nimble-parsec. Date: Sun, 10 Dec 2023 14:03:57 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-nimble-parsec): New variable. Change-Id: I79bab8095aee3212bc295354ead55df49ef92d17 --- gnu/packages/elixir-xyz.scm | 57 +++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 gnu/packages/elixir-xyz.scm diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm new file mode 100644 index 000000000..a57d2aae8 --- /dev/null +++ b/gnu/packages/elixir-xyz.scm @@ -0,0 +1,57 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2023 Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> +;;; +;;; 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 elixir-xyz) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages elixir) + #:use-module (gnu packages linux) + #:use-module (gnu packages) + #:use-module (guix build-system gnu) + #:use-module (guix build-system mix) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix gexp) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26)) + +(define-public elixir-nimble-parsec + (package + (name "elixir-nimble-parsec") + (version "1.3.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0rxiw6jzz77v0j460wmzcprhdgn71g1hrz3mcc6djn7bnb0f70i6")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (synopsis "Text-based parser combinators") + (description + "This library provides primitives for efficient parser combinators, allowing +for higher-level combinators through composition.") + (home-page "https://hexdocs.pm/nimble_parsec/") + (license license:asl2.0))) + +;;; +;;; Avoid adding new packages to the end of this file. To reduce the chances +;;; of a merge conflict, place them above by existing packages with similar +;;; functionality or similar names. +;;; -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:04 GMT) Full text and rfc822 format available.Message #455 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 06/15] gnu: Add elixir-jason. Date: Sun, 10 Dec 2023 14:03:59 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-jason): New variable. Change-Id: Iadd816e2b5db6d146728aacb4d6b2c66aba4304c --- gnu/packages/elixir-xyz.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index ba682e7f0..66c364fb3 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -70,6 +70,27 @@ (define-public elixir-makeup (home-page "https://hexdocs.pm/makeup/") (license license:bsd-2))) +(define-public elixir-jason + (package + (name "elixir-jason") + (version "1.4.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "18d70i31bz11nr6vgsjn5prvhkvwqbyf3xq22ck5cnsnzp6ixc7v")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (synopsis "JSON parser and generator") + (description + "Parser and generator are written in pure Elixir and optimized for speed. They +are at least twice as fast as other Elixir/Erlang libraries (e.g. +Poison). The performance is comparable to jiffy, which is implemented in C as +a NIF.") + (home-page "https://hexdocs.pm/jason/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:04 GMT) Full text and rfc822 format available.Message #458 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 07/15] gnu: Add elixir-file-system. Date: Sun, 10 Dec 2023 14:04:00 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-file-system): New variable. Change-Id: I54e9c9069ddf150bb0c882775b0b2c9d5e59abd6 --- gnu/packages/elixir-xyz.scm | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 66c364fb3..948d8aecc 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -20,6 +20,8 @@ (define-module (gnu packages elixir-xyz) #:use-module ((guix licenses) #:prefix license:) #:use-module (gnu packages elixir) #:use-module (gnu packages linux) + #:use-module (gnu packages compression) + #:use-module (gnu packages base) #:use-module (gnu packages) #:use-module (guix build-system gnu) #:use-module (guix build-system mix) @@ -91,6 +93,37 @@ (define-public elixir-jason (home-page "https://hexdocs.pm/jason/") (license license:asl2.0))) +(define-public elixir-file-system + (package + (name "elixir-file-system") + (version "0.2.10") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1p0myxmnjjds8bbg69dd6fvhk8q3n7lb78zd4qvmjajnzgdmw6a1")) + (snippet #~(begin + (use-modules (guix build utils) (ice-9 ftw)) + (mkdir "source") + (for-each (lambda (file) + (when (not (member file '("." ".." "source"))) + (rename-file file (string-append "source/" file)))) + (scandir ".")) + (with-directory-excursion "source" + (invoke (string-append #+gzip "/bin/gunzip") "-v" "contents.tar.gz") + (invoke (string-append #+tar "/bin/tar") "-xvf" "contents.tar") + (delete-file "contents.tar") + (delete-file "priv/inotifywait.exe")))))) + (build-system mix-build-system) + (propagated-inputs (list inotify-tools)) + (arguments (list #:tests? #f)) ; no tests + (synopsis "File system change watcher") + (description "Provides a file system change watcher wrapper based on +https://github.com/synrc/fs.") + (home-page "https://hexdocs.pm/file_system/") + (license license:wtfpl2))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:05 GMT) Full text and rfc822 format available.Message #461 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 08/15] gnu: Add elixir-bunt. Date: Sun, 10 Dec 2023 14:04:01 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-bunt): New variable. Change-Id: Ib84797c31d6ab40d59b87b040993dae9391ead6b --- gnu/packages/elixir-xyz.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 948d8aecc..33fa20749 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -124,6 +124,25 @@ (define-public elixir-file-system (home-page "https://hexdocs.pm/file_system/") (license license:wtfpl2))) +(define-public elixir-bunt + (package + (name "elixir-bunt") + (version "0.2.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "19bp6xh052ql3ha0v3r8999cvja5d2p6cph02mxphfaj4jsbyc53")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (synopsis "256 color ANSI coloring in the terminal") + (description "Bunt is an Elixir package that enables 256 color ANSI +coloring in the terminal and allows users to alias colors to more semantic and +application-specific names1.") + (home-page "https://hexdocs.pm/bunt/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:05 GMT) Full text and rfc822 format available.Message #464 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 09/15] gnu: Add elixir-inch-ex. Date: Sun, 10 Dec 2023 14:04:02 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-inch-ex): New variable. Change-Id: I6e98424528a0264a2587d28fcf065fa74eff0f1a --- gnu/packages/elixir-xyz.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 33fa20749..ed61cac50 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -143,6 +143,27 @@ (define-public elixir-bunt (home-page "https://hexdocs.pm/bunt/") (license license:expat))) +(define-public elixir-inch-ex + (package + (name "elixir-inch-ex") + (version "2.0.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1a4rjcy3hn5pc40si1d1y7qg0b0mnxx6pw825la67ky8r9gfrl4n")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (propagated-inputs (list elixir-bunt elixir-jason)) + (synopsis + "Suggest enhancements for inline documentation") + (description + "This package provides a Mix task that gives you hints where to improve your +inline docs.") + (home-page "https://hex.pm/packages/inch_ex") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:05 GMT) Full text and rfc822 format available.Message #467 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 10/15] gnu: Add elixir-castore. Date: Sun, 10 Dec 2023 14:04:03 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-castore): New variable. Change-Id: Iea1fea8241d19ff35a183af9c3fbf2ed5198a259 --- gnu/packages/elixir-xyz.scm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index ed61cac50..ef80c9550 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -164,6 +164,24 @@ (define-public elixir-inch-ex (home-page "https://hex.pm/packages/inch_ex") (license license:expat))) +(define-public elixir-castore + (package + (name "elixir-castore") + (version "1.0.4") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "1y44amb8falsmrfzpkmf7qp6215g9kdl76g91dpna4af2jwc264l")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (synopsis "Up-to-date CA certificate store") + (description "The Elixir castore package is a micro-library that provides +an up-to-date CA certificate store file for Elixir applications.") + (home-page "https://hexdocs.pm/castore/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:06 GMT) Full text and rfc822 format available.Message #470 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 12/15] gnu: Add elixir-credo. Date: Sun, 10 Dec 2023 14:04:05 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-credo): New variable. Change-Id: I6df0d926e0fb96caa65d081892026b3495431c83 --- gnu/packages/elixir-xyz.scm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 14e67060e..8485355e4 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -204,6 +204,30 @@ (define-public elixir-excoveralls (home-page "https://hexdocs.pm/excoveralls/") (license license:expat))) +(define-public elixir-credo + (package + (name "elixir-credo") + (version "1.7.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "18jqi9s9r1587njzdxycvmmbma30cay9iamni4f3ih54jmh1r1z9")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (propagated-inputs (list elixir-bunt elixir-file-system elixir-jason)) + (native-inputs (list elixir-excoveralls elixir-inch-ex)) + (synopsis "Static code analysis tool") + (description + "Credo is a static code analysis tool for the Elixir language with a focus on +teaching and code consistency. Credo can show you refactoring opportunities in +your code, complex code fragments, warn you about common mistakes, show +inconsistencies in your naming scheme and - if needed - help you enforce a +desired coding style.") + (home-page "https://hexdocs.pm/credo/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:06 GMT) Full text and rfc822 format available.Message #473 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 11/15] gnu: Add elixir-excoveralls. Date: Sun, 10 Dec 2023 14:04:04 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-excoveralls): New variable. Change-Id: Ib271d8a7393e21178806df28ab892afe99757297 --- gnu/packages/elixir-xyz.scm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index ef80c9550..14e67060e 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -182,6 +182,28 @@ (define-public elixir-castore (home-page "https://hexdocs.pm/castore/") (license license:asl2.0))) +(define-public elixir-excoveralls + (package + (name "elixir-excoveralls") + (version "0.18.0") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "02x69ll5scvraky0k5gacvnnmldv5k04kgk02x087d9w3y8vn28i")))) + (build-system mix-build-system) + (propagated-inputs (list elixir-castore elixir-jason)) + (arguments (list #:tests? #f)) ; no tests + (synopsis "Coverage report tool with coveralls.io integration") + (description + "Library that reports test coverage statistics, with the option to +post to coveralls.io service. It uses Erlang's cover to generate coverage +information, and posts the test coverage results to coveralls.io through the +JSON API.") + (home-page "https://hexdocs.pm/excoveralls/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:07 GMT) Full text and rfc822 format available.Message #476 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 13/15] gnu: Add elixir-erlex. Date: Sun, 10 Dec 2023 14:04:06 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-erlex): New variable. Change-Id: Ia518ad5fd32d3f5942b20113e61e4ef7e7895ff3 --- gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 8485355e4..df4328430 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -228,6 +228,26 @@ (define-public elixir-credo (home-page "https://hexdocs.pm/credo/") (license license:expat))) +(define-public elixir-erlex + (package + (name "elixir-erlex") + (version "0.2.6") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0x8c1j62y748ldvlh46sxzv5514rpzm809vxn594vd7y25by5lif")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (synopsis + "Convert Erlang style structs and error messages to equivalent Elixir") + (description + "Converted structs and error messages are useful for pretty printing +things like Dialyzer errors and Observer.") + (home-page "https://hexdocs.pm/erlex/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:07 GMT) Full text and rfc822 format available.Message #479 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 14/15] gnu: Add elixir-dialyxir. Date: Sun, 10 Dec 2023 14:04:07 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-dialyxir): New variable. Change-Id: I387062e0aaaded448022aa7534b95859b5979a06 --- gnu/packages/elixir-xyz.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index df4328430..5a7330ca4 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -248,6 +248,25 @@ (define-public elixir-erlex (home-page "https://hexdocs.pm/erlex/") (license license:asl2.0))) +(define-public elixir-dialyxir + (package + (name "elixir-dialyxir") + (version "1.4.1") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "00cqwhd1wabwds44jz94rvvr8z8cp12884d3lp69fqkrszb9bdw4")))) + (build-system mix-build-system) + (arguments (list #:tests? #f)) ; no tests + (propagated-inputs (list elixir-erlex)) + (synopsis "Mix tasks to simplify use of Dialyzer") + (description + "Mix Tasks are usable from the directory of the mix project you want to analyze.") + (home-page "https://hexdocs.pm/dialyxir/") + (license license:asl2.0))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:06:08 GMT) Full text and rfc822 format available.Message #482 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: liliana.prikler <at> gmail.com Cc: 66801 <at> debbugs.gnu.org Subject: [PATCH v5 15/15] gnu: Add elixir-machete. Date: Sun, 10 Dec 2023 14:04:08 +0100
From: Pierre-Henry Fröhring <phfrohring <at> deeplinks.com> * gnu/packages/elixir-xyz.scm (elixir-machete): New variable. Change-Id: I76e0fd78aeeaeaa94a297032b3b309846510c975 --- gnu/packages/elixir-xyz.scm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gnu/packages/elixir-xyz.scm b/gnu/packages/elixir-xyz.scm index 5a7330ca4..5af8d7c1b 100644 --- a/gnu/packages/elixir-xyz.scm +++ b/gnu/packages/elixir-xyz.scm @@ -267,6 +267,26 @@ (define-public elixir-dialyxir (home-page "https://hexdocs.pm/dialyxir/") (license license:asl2.0))) +(define-public elixir-machete + (package + (name "elixir-machete") + (version "0.2.8") + (source + (origin + (method url-fetch) + (uri (hexpm-uri name version)) + (sha256 + (base32 "0952603bmqsf6v3ja99zpbnbx5d52i4xksjkfj3irl45ccq5pgq9")))) + (build-system mix-build-system) + (native-inputs (list elixir-credo elixir-dialyxir)) + (synopsis "Literate test matchers for ExUnit") + (description + "Machete provides ergonomic match operators that act as building blocks to let +you define test expectations that can match data against any combination of +literals, variables, or parametrically defined matchers.") + (home-page "https://hexdocs.pm/machete/") + (license license:expat))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar -- 2.41.0
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 13:10:01 GMT) Full text and rfc822 format available.Message #485 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Erratum Date: Sun, 10 Dec 2023 14:05:59 +0100
The patches go on top of: ┌──── │ 06f25a9a8 * origin/master gnu: xrdp: Update to 0.9.23.1. └──── Sorry for the oversight. – Regards, phf
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 14:21:02 GMT) Full text and rfc822 format available.Message #488 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v5 01/15] build-system: Add mix-build-system. Date: Sun, 10 Dec 2023 15:20:03 +0100
Am Sonntag, dem 10.12.2023 um 14:03 +0100 schrieb Pierre-Henry Fröhring: > * guix/build-system/mix.scm: New file. > * guix/build/mix-build-system.scm: New file. > > Change-Id: I8066d00f7ada4a384621bf541e679bc512e93435 > --- I have this series with some changes to the commit logs on my local master branch right now. I'll leave it up for a week for further comments and push afterwards. Thanks for your patience. Cheers
guix-patches <at> gnu.org
:bug#66801
; Package guix-patches
.
(Sun, 10 Dec 2023 14:30:03 GMT) Full text and rfc822 format available.Message #491 received at 66801 <at> debbugs.gnu.org (full text, mbox):
From: Pierre-Henry Fröhring <contact <at> phfrohring.com> To: Liliana Marie Prikler <liliana.prikler <at> gmail.com> Cc: 66801 <at> debbugs.gnu.org Subject: Re: [PATCH v5 01/15] build-system: Add mix-build-system. Date: Sun, 10 Dec 2023 15:22:48 +0100
OK! I'll continue as planned: 1. The Rebar build system will be revisited. 2. The Mix build system will be enhanced so that Phoenix builds. • Since a few (possibly transitive) packages depend on Erlang code, we will determine if the implementation strategy discussed earlier is effective. I will wait for your comments before sending more patches. Have a great week. – Regards, phf
Liliana Marie Prikler <liliana.prikler <at> gmail.com>
:Pierre-Henry Fröhring <phfrohring <at> deeplinks.com>
:Message #496 received at 66801-done <at> debbugs.gnu.org (full text, mbox):
From: Liliana Marie Prikler <liliana.prikler <at> gmail.com> To: Pierre-Henry Fröhring <contact <at> phfrohring.com> Cc: 66801-done <at> debbugs.gnu.org Subject: Re: [PATCH v5 01/15] build-system: Add mix-build-system. Date: Mon, 18 Dec 2023 04:01:11 +0100
Am Sonntag, dem 10.12.2023 um 15:22 +0100 schrieb Pierre-Henry Fröhring: > OK! I'll continue as planned: > > 1. The Rebar build system will be revisited. > 2. The Mix build system will be enhanced so that Phoenix builds. > • Since a few (possibly transitive) packages depend on Erlang > code, we > will determine if the implementation strategy discussed earlier > is effective. > > I will wait for your comments before sending more patches. > > Have a great week. I've pushed this now. To keep things manageable, please send the other stuff in a(n or possibly more) new series. Cheers
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Mon, 15 Jan 2024 12:24:05 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.