* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang @ 2022-04-08 17:01 Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer Hartmut Goebel ` (22 more replies) 0 siblings, 23 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:01 UTC (permalink / raw) To: 54796 Hi, this is an updated version of #42180 and #51061 (both are closed already). Notable changes are: * the „extracting downloader“ and „hexpm-fetch” are gone * documentation added for both the importer and the rebar3-build-system * tests added for the importer Some remarks on the patches: * First patch adds a file guix/hexpm-download.scm, containing definitions for the hex.pm repository. These are combined in this module here since different build-systems (will) use it. * The importer tries to detect the build system to be used. For Elexir packages it creates package definitions using the “mix-build-system‘. This I will add later (WIP). * Next there patches provide the packages required rebar3, rebar3 itself and some plugins for rebar3. Open question: * Shall the build system actually be called „rebar*3*“ or just „rebar“? There is also a build-tool „rebar2“, which is obsoltete and not supported by this build-system. Anyhow, somewhen in the future there might be some „rebar4“, which we might be able to cover with the same build-system. WDYT? Hartmut Goebel (22): import: Add hex.pm importer. gnu: Add erlang-cf. gnu: Add erlang-certifi. gnu: Add erlang-erlware-commons. gnu: Add erlang-cth-readable. gnu: Add erlang-bbmustache. gnu: Add erlang-getopt. gnu: Add erlang-eunit-formatters. gnu: Add erlang-providers. gnu: Add erlang-parse-trans. gnu: Add erlang-hex-core. gnu: Add erlang-ssl-verify-fun. gnu: Add erlang-relx. gnu: Add erlang-edown. gnu: Add erlang-jsone. gnu: Add erlang-proper. gnu: Add erlang-covertool. gnu: Add rebar3. gnu: Add rebar3-raw-deps. gnu: Add rebar3-git-vsn. gnu: Add rebar3-proper. build-system: Add 'rebar3-build-system'. Makefile.am | 6 + doc/guix.texi | 70 ++++- gnu/packages/erlang.scm | 488 +++++++++++++++++++++++++++++ guix/build-system/rebar3.scm | 143 +++++++++ guix/build/rebar3-build-system.scm | 147 +++++++++ guix/hexpm-download.scm | 40 +++ guix/import/hexpm.scm | 347 ++++++++++++++++++++ guix/scripts/import.scm | 2 +- guix/scripts/import/hexpm.scm | 109 +++++++ po/guix/POTFILES.in | 1 + tests/hexpm.scm | 257 +++++++++++++++ 11 files changed, 1608 insertions(+), 2 deletions(-) create mode 100644 guix/build-system/rebar3.scm create mode 100644 guix/build/rebar3-build-system.scm create mode 100644 guix/hexpm-download.scm create mode 100644 guix/import/hexpm.scm create mode 100644 guix/scripts/import/hexpm.scm create mode 100644 tests/hexpm.scm -- 2.30.2 ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-09 11:52 ` Maxime Devos ` (6 more replies) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 02/22] gnu: Add erlang-cf Hartmut Goebel ` (21 subsequent siblings) 22 siblings, 7 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 hex.pm is a package repository for Erlang and Elixir. * doc/guix.texi (Invoking guix import): Document it. * guix/scripts/import/hexpm.scm, guix/import/hexpm.scm, guix/hexpm-download.scm: New files. * tests/hexpm.scm: New file. * Makefile.am (MODULES, SCM_TESTS): Register them. * po/guix/POTFILES.in: Likewise. * guix/scripts/import.scm (importers): Add "hexpm". --- Makefile.am | 4 + doc/guix.texi | 29 ++- guix/hexpm-download.scm | 40 ++++ guix/import/hexpm.scm | 347 ++++++++++++++++++++++++++++++++++ guix/scripts/import.scm | 2 +- guix/scripts/import/hexpm.scm | 109 +++++++++++ po/guix/POTFILES.in | 1 + tests/hexpm.scm | 257 +++++++++++++++++++++++++ 8 files changed, 787 insertions(+), 2 deletions(-) create mode 100644 guix/hexpm-download.scm create mode 100644 guix/import/hexpm.scm create mode 100644 guix/scripts/import/hexpm.scm create mode 100644 tests/hexpm.scm diff --git a/Makefile.am b/Makefile.am index aedb514ee1..be2c183206 100644 --- a/Makefile.am +++ b/Makefile.am @@ -100,6 +100,7 @@ MODULES = \ guix/git-download.scm \ guix/hg-download.scm \ guix/hash.scm \ + guix/hexpm-download.scm \ guix/swh.scm \ guix/monads.scm \ guix/monad-repl.scm \ @@ -263,6 +264,7 @@ MODULES = \ guix/import/gnu.scm \ guix/import/go.scm \ guix/import/hackage.scm \ + guix/import/hexpm.scm \ guix/import/json.scm \ guix/import/kde.scm \ guix/import/launchpad.scm \ @@ -311,6 +313,7 @@ MODULES = \ guix/scripts/import/gnu.scm \ guix/scripts/import/go.scm \ guix/scripts/import/hackage.scm \ + guix/scripts/import/hexpm.scm \ guix/scripts/import/json.scm \ guix/scripts/import/minetest.scm \ guix/scripts/import/opam.scm \ @@ -488,6 +491,7 @@ SCM_TESTS = \ tests/graph.scm \ tests/gremlin.scm \ tests/hackage.scm \ + tests/hexpm.scm \ tests/home-import.scm \ tests/http-client.scm \ tests/import-git.scm \ diff --git a/doc/guix.texi b/doc/guix.texi index e8ef4286be..6c17b26d70 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -48,7 +48,7 @@ Copyright @copyright{} 2017 Thomas Danckaert@* Copyright @copyright{} 2017 humanitiesNerd@* Copyright @copyright{} 2017, 2021 Christine Lemmer-Webber@* Copyright @copyright{} 2017, 2018, 2019, 2020, 2021, 2022 Marius Bakke@* -Copyright @copyright{} 2017, 2019, 2020 Hartmut Goebel@* +Copyright @copyright{} 2017, 2019, 2020, 2022 Hartmut Goebel@* Copyright @copyright{} 2017, 2019, 2020, 2021 Maxim Cournoyer@* Copyright @copyright{} 2017–2022 Tobias Geerinckx-Rice@* Copyright @copyright{} 2017 George Clemmer@* @@ -12817,6 +12817,33 @@ guix import egg arrays@@1.0 @end example Additional options include: +@table @code +@item --recursive +@itemx -r +Traverse the dependency graph of the given upstream package recursively +and generate package expressions for all those packages that are not yet +in Guix. +@end table + +@item hexpm +@cindex hexpm +Import metadata from the hex.pm Erlang and Elixir package repository +@uref{https://hex.pm, hex.pm}, as in this example: + +@example +guix import hexpm stun +@end example + +The importer tries to determine the build system used by the package. + +The hexpm importer also allows you to specify a version string: + +@example +guix import hexpm cf@@0.3.0 +@end example + +Additional options include: + @table @code @item --recursive @itemx -r diff --git a/guix/hexpm-download.scm b/guix/hexpm-download.scm new file mode 100644 index 0000000000..e2f0eb22a8 --- /dev/null +++ b/guix/hexpm-download.scm @@ -0,0 +1,40 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2020, 2022 Hartmut Goebel <h.goebel@crazy-compilers.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 (guix hexpm-download) + #:use-module (srfi srfi-26) + #:export (hexpm-package-url + hexpm-uri)) + +;;; +;;; Definitions for the hex.pm repository, +;;; combined here since different build-systems use it. +;;; + +;; URL and paths from +;; https://github.com/hexpm/specifications/blob/master/endpoints.md +(define %hexpm-repo-url + (make-parameter "https://repo.hex.pm")) + +(define hexpm-package-url + (string-append (%hexpm-repo-url) "/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")) diff --git a/guix/import/hexpm.scm b/guix/import/hexpm.scm new file mode 100644 index 0000000000..bf7cfb333f --- /dev/null +++ b/guix/import/hexpm.scm @@ -0,0 +1,347 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com> +;;; Copyright © 2016 David Craven <david@craven.ch> +;;; Copyright © 2017, 2019-2021 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2019 Martin Becze <mjbecze@riseup.net> +;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2020-2022 Hartmut Goebel <h.goebel@crazy-compilers.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 (guix import hexpm) + #:use-module (guix base32) + #:use-module ((guix download) #:prefix download:) + #:use-module (guix hexpm-download) + #:use-module (gcrypt hash) + #:use-module (guix http-client) + #:use-module (json) + #:use-module (guix import utils) + #:use-module ((guix import json) #:select (json-fetch)) + #:use-module ((guix build utils) + #:select ((package-name->name+version + . hyphen-package-name->name+version) + dump-port)) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix upstream) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module (ice-9 popen) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-2) + #:use-module (srfi srfi-26) + #:export (hexpm->guix-package + guix-package->hexpm-name + strings->licenses ;; why used here? + hexpm-recursive-import + %hexpm-updater)) +\f +;;; +;;; Interface to https://hex.pm/api, version 2. +;;; REST-API end-points: +;;; https://github.com/hexpm/specifications/blob/master/apiary.apib +;;; Repository end-points: +;;; https://github.com/hexpm/specifications/blob/master/endpoints.md +;;; + +(define %hexpm-api-url + (make-parameter "https://hex.pm/api")) + +(define (package-url name) + (string-append (%hexpm-api-url) "/packages/" name)) + +;; +;; Hexpm Package. /packages/${name} +;; https://github.com/hexpm/specifications/blob/master/apiary.apib#Package +;; +;; Each package can have several "releases", each of which has its own set of +;; requirements, build-tool, etc. - see <hexpm-release> below. +(define-json-mapping <hexpm-pkgdef> make-hexpm-pkgdef hexpm-pkgdef? + json->hexpm + (name hexpm-name) ; string + (html-url hexpm-html-url "html_url") ; string + (docs-html-url hexpm-docs-html-url "docs_html_url") ; string | #nil + (meta hexpm-meta "meta" json->hexpm-meta) + (versions hexpm-versions "releases" ; list of <hexpm-version> + (lambda (vector) + (map json->hexpm-version + (vector->list vector)))) + ;; "latest_version" and "latest_stable_version" are not named in the + ;; specification, butt seen in practice. + (latest-version hexpm-latest-version "latest_version") ; string + (latest-stable hexpm-latest-stable "latest_stable_version")) ; string + +;; Hexpm package metadata. +(define-json-mapping <hexpm-meta> make-hexpm-meta hexpm-meta? + json->hexpm-meta + (description hexpm-meta-description) ;string + (licenses hexpm-meta-licenses "licenses" ;list of strings + (lambda (vector) + (or (and vector (vector->list vector)) + #f)))) + +;; Hexpm package versions. +(define-json-mapping <hexpm-version> make-hexpm-version hexpm-version? + json->hexpm-version + (number hexpm-version-number "version") ;string + (url hexpm-version-url)) ;string + + +(define (lookup-hexpm name) + "Look up NAME on hex.pm and return the corresopnding <hexpm> record +or #f if it was not found." + (and=> (json-fetch (package-url name)) + json->hexpm)) + +;; +;; Hexpm release. /packages/${name}/releases/${version} +;; https://github.com/hexpm/specifications/blob/master/apiary.apib#Release +;; +(define-json-mapping <hexpm-release> make-hexpm-release hexpm-release? + json->hexpm-release + (version hexpm-release-version) ; string + (url hexpm-release-url) ; string + (meta hexpm-release-meta "meta" json->hexpm-release-meta) + ;; Specification names the next fiels "dependencies", but in practice it is + ;; "requirements". + (dependencies hexpm-requirements "requirements")) ; list of <hexpm-dependency> + +;; Hexpm release meta. +;; https://github.com/hexpm/specifications/blob/main/package_metadata.md +(define-json-mapping <hexpm-release-meta> + make-hexpm-release-meta hexpm-release-meta? + json->hexpm-release-meta + (app hexpm-release-meta-app) ; string + (elixir hexpm-release-meta-elixir) ; string + (build-tools hexpm-release-meta-build-tools "build_tools" ; list of strings + (lambda (vector) + (or (and vector (vector->list vector)) + (list))))) + +;; Hexpm dependency. Each requirement has information about the required +;; version, such as "~> 2.1.2" or ">= 2.1.2 and < 2.2.0", see +;; <https://hexdocs.pm/elixir/Version.html#module-requirements>, and whether +;; the dependency is optional. +(define-json-mapping <hexpm-dependency> make-hexpm-dependency + hexpm-dependency? + json->hexpm-dependency + (name hexpm-dependency-name "app") ; string + (requirement hexpm-dependency-requirement) ; string + (optional hexpm-dependency-optional)) ; bool + +(define (hexpm-release-dependencies release) + "Return the list of dependency names of RELEASE, a <hexpm-release>." + (let ((reqs (or (hexpm-requirements release) '#()))) + (map first reqs))) ;; TODO: also return required version + + +(define (lookup-hexpm-release version*) + "Look up RELEASE on hexpm-version-url and return the corresopnding +<hexpm-release> record or #f if it was not found." + (and=> (json-fetch (hexpm-version-url version*)) + json->hexpm-release)) + +\f +;;; +;;; Converting hex.pm packages to Guix packages. +;;; + +(define (maybe-inputs package-inputs input-type) + "Given a list of PACKAGE-INPUTS, tries to generate the 'inputs' field of a +package definition. INPUT-TYPE, a symbol, is used to populate the name of +the input field." + (match package-inputs + (() + '()) + ((package-inputs ...) + `((,input-type (list ,@package-inputs)))))) + +(define (dependencies->package-names names) + "Given a list of hexpm package NAMES, returns a list of guix package names +as symbols." + ;; TODO: Base name on languange of dependency. + ;; The languange used for implementing the depcendency is not know without + ;; recursing the dependencies. So for now assume more packages are based on + ;; Erlang and prefix all dependencies with "erlang-" (the default). + (map string->symbol + (map hexpm-name->package-name + (sort names string-ci<?)))) + +(define* (make-hexpm-sexp #:key name version tarball-url + home-page synopsis description license + language build-system dependencies + #:allow-other-keys) + "Return the `package' s-expression for a hexpm package with the given NAME, +VERSION, TARBALL-URL, HOME-PAGE, SYNOPSIS, DESCRIPTION, and LICENSE. The +created package's name will stem from LANGUAGE. BUILD-SYSTEM defined the +build-system, and DEPENDENCIES the inputs for the package." + (call-with-temporary-output-file + (lambda (temp port) + (and (url-fetch tarball-url temp) + (values + `(package + (name ,(hexpm-name->package-name name language)) + (version ,version) + (source (origin + (method url-fetch) + (uri (hexpm-uri ,name version)) + (sha256 (base32 ,(guix-hash-url temp))))) + (build-system ,build-system) + ,@(maybe-inputs (dependencies->package-names dependencies) 'inputs) + (synopsis ,synopsis) + (description ,(beautify-description description)) + (home-page ,(match home-page + (() "") + (_ home-page))) + (license ,(match license + (() #f) + ((license) license) + (_ `(list ,@license)))))))))) + +(define (strings->licenses strings) + "Convert the list of STRINGS into a list of license objects." + (filter-map (lambda (license) + (and (not (string-null? license)) + (not (any (lambda (elem) (string=? elem license)) + '("AND" "OR" "WITH"))) + (or (spdx-string->license license) + license))) + strings)) + +(define (hexpm-latest-release package) + "Return the version string for the latest stable release of PACKAGE." + ;; Use latest-stable if specified (see comment in hexpm-pkgdef above), + ;; otherwise compare the lists of release versions. + (let ((latest-stable (hexpm-latest-stable package))) + (if (not (unspecified? latest-stable)) + latest-stable + (let ((versions (map hexpm-version-number (hexpm-versions package)))) + (fold (lambda (a b) + (if (version>? a b) a b)) (car versions) versions))))) + +(define* (hexpm->guix-package package-name #:key repo version) + "Fetch the metadata for PACKAGE-NAME from hexpms.io, and return the +`package' s-expression corresponding to that package, or #f on failure. +When VERSION is specified, attempt to fetch that version; otherwise fetch the +latest version of PACKAGE-NAME." + + (define package + (lookup-hexpm package-name)) + + (define version-number + (and package + (or version + (hexpm-latest-release package)))) + + (define version* + (and package + (find (lambda (version) + (string=? (hexpm-version-number version) + version-number)) + (hexpm-versions package)))) + + (define release + (and package version* + (lookup-hexpm-release version*))) + + (define release-meta + (and package version* + (hexpm-release-meta release))) + + (define build-system + (and package version* + (let ((build-tools (hexpm-release-meta-build-tools release-meta))) + (cond + ((member "rebar3" build-tools) 'rebar3-build-system) + ((member "mix" build-tools) 'mix-build-system) + ((member "make" build-tools) 'gnu-build-system) + (else #f))))) + + (define language + (and package version* + (let ((elixir (hexpm-release-meta-elixir release-meta))) + (cond + ((and (string? elixir) (not (string-null? elixir))) "elixir") + (else "erlang"))))) + + (and package version* + (let ((dependencies (hexpm-release-dependencies release)) + (pkg-meta (hexpm-meta package)) + (docs-html-url (hexpm-docs-html-url package))) + (values + (make-hexpm-sexp + #:language language + #:build-system build-system + #:name package-name + #:version version-number + #:dependencies dependencies + #:home-page (or (and (not (eq? docs-html-url 'null)) + docs-html-url) + ;; TODO: Homepage? + (hexpm-html-url package)) + #:synopsis (hexpm-meta-description pkg-meta) + #:description (hexpm-meta-description pkg-meta) + #:license (or (and=> (hexpm-meta-licenses pkg-meta) + strings->licenses)) + #:tarball-url (hexpm-uri package-name version-number)) + dependencies)))) + +(define* (hexpm-recursive-import pkg-name #:optional version) + (recursive-import pkg-name + #:version version + #:repo->guix-package hexpm->guix-package + #:guix-name hexpm-name->package-name)) + +(define (guix-package->hexpm-name package) + "Return the hex.pm name of PACKAGE." + (define (url->hexpm-name url) + (hyphen-package-name->name+version + (basename (file-sans-extension url)))) + + (match (and=> (package-source package) origin-uri) + ((? string? url) + (url->hexpm-name url)) + ((lst ...) + (any url->hexpm-name lst)) + (#f #f))) + +(define* (hexpm-name->package-name name #:optional (language "erlang")) + (string-append language "-" (string-join (string-split name #\_) "-"))) + +\f +;;; +;;; Updater +;;; + +(define (latest-release package) + "Return an <upstream-source> for the latest release of PACKAGE." + (let* ((hexpm-name (guix-package->hexpm-name package)) + (hexpm (lookup-hexpm hexpm-name)) + (version (hexpm-latest-release hexpm)) + (url (hexpm-uri hexpm-name version))) + (upstream-source + (package (package-name package)) + (version version) + (urls (list url))))) + +(define %hexpm-updater + (upstream-updater + (name 'hexpm) + (description "Updater for hex.pm packages") + (pred (url-prefix-predicate hexpm-package-url)) + (latest latest-release))) diff --git a/guix/scripts/import.scm b/guix/scripts/import.scm index 40fa6759ae..aaadad4adf 100644 --- a/guix/scripts/import.scm +++ b/guix/scripts/import.scm @@ -79,7 +79,7 @@ rather than \\n." ;;; (define importers '("gnu" "pypi" "cpan" "hackage" "stackage" "egg" "elpa" - "gem" "go" "cran" "crate" "texlive" "json" "opam" + "gem" "go" "cran" "crate" "texlive" "json" "opam" "hexpm" "minetest")) (define (resolve-importer name) diff --git a/guix/scripts/import/hexpm.scm b/guix/scripts/import/hexpm.scm new file mode 100644 index 0000000000..b49d263f9e --- /dev/null +++ b/guix/scripts/import/hexpm.scm @@ -0,0 +1,109 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2014 David Thompson <davet@gnu.org> +;;; Copyright © 2016 David Craven <david@craven.ch> +;;; Copyright © 2019 Martin Becze <mjbecze@riseup.net> +;;; Copyright © 2020, 2022 Hartmut Goebel <h.goebel@crazy-compilers.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 (guix scripts import hexpm) + #:use-module (guix ui) + #:use-module (guix utils) + #:use-module (guix scripts) + #:use-module (guix import hexpm) + #:use-module (guix scripts import) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-11) + #:use-module (srfi srfi-37) + #:use-module (srfi srfi-71) + #:use-module (ice-9 match) + #:use-module (ice-9 format) + #:export (guix-import-hexpm)) + +\f +;;; +;;; Command-line options. +;;; + +(define %default-options + '()) + +(define (show-help) + (display (G_ "Usage: guix import hexpm PACKAGE-NAME +Import and convert the hex.pm package for PACKAGE-NAME.\n")) + (display (G_ " + -h, --help display this help and exit")) + (display (G_ " + -V, --version display version information and exit")) + (newline) + (display (G_ " + -r, --recursive import packages recursively")) + (newline) + (show-bug-report-information)) + +(define %options + ;; Specification of the command-line options. + (cons* (option '(#\h "help") #f #f + (lambda args + (show-help) + (exit 0))) + (option '(#\V "version") #f #f + (lambda args + (show-version-and-exit "guix import hexpm"))) + (option '(#\r "recursive") #f #f + (lambda (opt name arg result) + (alist-cons 'recursive #t result))) + %standard-import-options)) + +\f +;;; +;;; Entry point. +;;; + +(define (guix-import-hexpm . args) + (define (parse-options) + ;; Return the alist of option values. + (parse-command-line args %options (list %default-options) + #:build-options? #f)) + + (let* ((opts (parse-options)) + (args (filter-map (match-lambda + (('argument . value) + value) + (_ #f)) + (reverse opts)))) + (match args + ((spec) + (with-error-handling + (let ((name version (package-name->name+version spec))) + (if (assoc-ref opts 'recursive) + ;; Recursive import + (map (match-lambda + ((and ('package ('name name) . rest) pkg) + `(define-public ,(string->symbol name) + ,pkg)) + (_ #f)) + (hexpm-recursive-import name version)) + ;; Single import + (let ((sexp (hexpm->guix-package name #:version version))) + (unless sexp + (leave (G_ "failed to download meta-data for package '~a'~%") + spec)) + sexp))))) + (() + (leave (G_ "too few arguments~%"))) + ((many ...) + (leave (G_ "too many arguments~%")))))) diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in index 49a8edfef3..ed873fe5d9 100644 --- a/po/guix/POTFILES.in +++ b/po/guix/POTFILES.in @@ -134,6 +134,7 @@ guix/scripts/import/gem.scm guix/scripts/import/gnu.scm guix/scripts/import/go.scm guix/scripts/import/hackage.scm +guix/scripts/import/hexpm.scm guix/scripts/import/json.scm guix/scripts/import/opam.scm guix/scripts/import/pypi.scm diff --git a/tests/hexpm.scm b/tests/hexpm.scm new file mode 100644 index 0000000000..84d126c821 --- /dev/null +++ b/tests/hexpm.scm @@ -0,0 +1,257 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2015 David Thompson <davet@gnu.org> +;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> +;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev> +;;; Copyright © 2022 Hartmut Goebel <h.goebel@crazy-compilers.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 (test-hexpm) + #:use-module (guix import hexpm) + #:use-module (guix base32) + #:use-module (gcrypt hash) + #:use-module (guix tests) + #:use-module (srfi srfi-64) + #:use-module (ice-9 binary-ports) + #:use-module (ice-9 match)) + +(define test-bla-package + "{\"name\": \"bla\", + \"html_url\": \"https://hex.pm/packages/bla\", + \"docs_html_url\": null, + \"meta\": { + \"description\": \"A cool package\", + \"licenses\": [\"MIT\", \"Apache-2.0\"] + }, + \"releases\": [ + {\"url\": \"https://hex.pm/api/packages/bla/releases/1.5.0\", + \"version\": \"1.5.0\"}, + {\"url\": \"https://hex.pm/api/packages/bla/releases/1.4.7\", + \"version\": \"1.4.7\"} + ] +}") + +(define test-bla-release + "{ + \"version\": \"1.5.0\", + \"url\": \"https://hex.pm/api/packages/bla/releases/1.5.0\", + \"requirements\": { + \"blubb\":{\"app\": \"blubb\", + \"optional\": false, + \"requirement\": \"~>0.3\" + }, + \"fasel\":{\"app\": \"fasel\", + \"optional\": false, + \"requirement\": \"~>1.0\" + } + }, + \"meta\":{ \"build_tools\":[\"mix\", \"make\", \"rebar3\"] } + }") + +(define test-blubb-package + "{\"name\": \"blubb\", + \"latest_stable_version\": \"0.3.1\", + \"latest_version\": \"0.3.1\", + \"html_url\": \"https://hex.pm/packages/blubb\", + \"docs_html_url\": null, + \"meta\": { + \"description\": \"Another cool package\", + \"licenses\": [\"MIT\"] + }, + \"releases\": [ + {\"url\": \"https://hex.pm/api/packages/blubb/releases/0.3.1\", + \"version\": \"0.3.1\"}, + {\"url\": \"https://hex.pm/api/packages/blubb/releases/0.3.0\", + \"version\": \"0.3.0\"} + ] +}") + +(define test-blubb-release + "{ + \"version\": \"0.3.1\", + \"url\": \"https://hex.pm/api/packages/blubb/releases/0.3.1\", + \"requirements\": { + \"fasel\":{\"app\": \"fasel\", + \"optional\": false, + \"requirement\": \"~>1.0\" + } + }, + \"meta\": { \"build_tools\":[\"mix\"] } + }") + +(define test-fasel-package + "{\"name\": \"fasel\", + \"latest_stable_version\": \"1.2.1\", + \"latest_version\": \"1.2.1\", + \"html_url\": \"https://hex.pm/packages/fasel\", + \"docs_html_url\": null, + \"meta\": { + \"description\": \"Yet another cool package\", + \"licenses\": [\"GPL\"] + }, + \"releases\": [ + {\"url\": \"https://hex.pm/api/packages/fasel/releases/1.2.1\", + \"version\": \"1.2.1\"} + ] +}") + +(define test-fasel-release + "{ + \"version\": \"1.2.1\", + \"url\": \"https://hex.pm/api/packages/fasel/releases/1.2.1\", + \"requirements\" :{}, + \"meta\":{ \"build_tools\":[\"make\"] } + }") + +(test-begin "hexpm") + +(test-assert "hexpm->guix-package" + ;; Replace network resources with sample data. + (mock ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://hex.pm/api/packages/bla" + (values (open-input-string test-bla-package) + (string-length test-bla-package))) + ("https://hex.pm/api/packages/bla/releases/1.5.0" + (values (open-input-string test-bla-release) + (string-length test-bla-release))) + (_ (error "http-fetch got unexpected URL: " url))))) + (mock ((guix build download) url-fetch + (lambda* (url file-name + #:key + (mirrors '()) verify-certificate?) + (with-output-to-file file-name + (lambda () + (display + (match url + ("https://repo.hex.pm/tarballs/bla-1.5.0.tar" + "source") + (_ (error "url-fetch got unexpected URL: " url)))))))) + (match (hexpm->guix-package "bla") + (('package + ('name "erlang-bla") + ('version "1.5.0") + ('source + ('origin + ('method 'url-fetch) + ('uri ('hexpm-uri "bla" 'version)) + ('sha256 + ('base32 + "0zcl4dgcmqwl1g5xb901pd6dz61r1xgmac9mqlwvh022paa6gks1")))) + ('build-system 'rebar3-build-system) + ('inputs ('list 'erlang-blubb 'erlang-fasel)) + ('synopsis "A cool package") + ('description "This package provides a cool package") + ('home-page "https://hex.pm/packages/bla") + ('license ('list 'license:expat 'license:asl2.0))) + #t) + (x + (pk 'fail x #f)))))) + +(test-assert "hexpm-recursive-import" + ;; Replace network resources with sample data. + (mock ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://hex.pm/api/packages/bla" + (values (open-input-string test-bla-package) + (string-length test-bla-package))) + ("https://hex.pm/api/packages/bla/releases/1.5.0" + (values (open-input-string test-bla-release) + (string-length test-bla-release))) + ("https://hex.pm/api/packages/blubb" + (values (open-input-string test-blubb-package) + (string-length test-blubb-package))) + ("https://hex.pm/api/packages/blubb/releases/0.3.1" + (values (open-input-string test-blubb-release) + (string-length test-blubb-release))) + ("https://hex.pm/api/packages/fasel" + (values (open-input-string test-fasel-package) + (string-length test-fasel-package))) + ("https://hex.pm/api/packages/fasel/releases/1.2.1" + (values (open-input-string test-fasel-release) + (string-length test-fasel-release))) + (_ (error "http-fetch got unexpected URL: " url))))) + (mock ((guix build download) url-fetch + (lambda* (url file-name + #:key + (mirrors '()) verify-certificate?) + (with-output-to-file file-name + (lambda () + (display + (match url + ("https://repo.hex.pm/tarballs/bla-1.5.0.tar" + "bla-source") + ("https://repo.hex.pm/tarballs/blubb-0.3.1.tar" + "blubb-source") + ("https://repo.hex.pm/tarballs/fasel-1.2.1.tar" + "fasel-source") + (_ (error "url-fetch got unexpected URL: " url)))))))) + (match (hexpm-recursive-import "bla") + ((('package + ('name "erlang-blubb") + ('version "0.3.1") + ('source + ('origin + ('method 'url-fetch) + ('uri ('hexpm-uri "blubb" 'version)) + ('sha256 + ('base32 + "17y88b5y8ld7s1c2bcwwwa04pf1cl4402i9zk3inna221ps3ppj2")))) + ('build-system 'mix-build-system) + ('inputs ('list 'erlang-fasel)) + ('synopsis "Another cool package") + ('description "Another cool package") + ('home-page "https://hex.pm/packages/blubb") + ('license 'license:expat)) + ('package + ('name "erlang-fasel") + ('version "1.2.1") + ('source + ('origin + ('method 'url-fetch) + ('uri ('hexpm-uri "fasel" 'version)) + ('sha256 + ('base32 + "1k6d70mxwqgq78jrbr7yqnw187yki74jnagybi7nacrj4a67qjha")))) + ('build-system 'gnu-build-system) + ('synopsis "Yet another cool package") + ('description "Yet another cool package") + ('home-page "https://hex.pm/packages/fasel") + ('license "GPL")) + ('package + ('name "erlang-bla") + ('version "1.5.0") + ('source + ('origin + ('method 'url-fetch) + ('uri ('hexpm-uri "bla" 'version)) + ('sha256 + ('base32 + "0d3gj746c4swbb1m6ycylxb239jsavvdcizag6bfbg2aqccxwij8")))) + ('build-system 'rebar3-build-system) + ('inputs ('list 'erlang-blubb 'erlang-fasel)) + ('synopsis "A cool package") + ('description "This package provides a cool package") + ('home-page "https://hex.pm/packages/bla") + ('license ('list 'license:expat 'license:asl2.0)))) + #t) + (x + (pk 'fail x #f)))))) + +(test-end "hexpm") -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer Hartmut Goebel @ 2022-04-09 11:52 ` Maxime Devos 2022-04-09 16:31 ` Hartmut Goebel 2022-04-09 11:53 ` Maxime Devos ` (5 subsequent siblings) 6 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 11:52 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 251 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + (docs-html-url hexpm-docs-html-url "docs_html_url") ; string | #nil There is (currently) no Guix code written in Emacs Lisp. Do you mean #f instead of #nil? Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-09 11:52 ` Maxime Devos @ 2022-04-09 16:31 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-09 16:31 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 13:52 schrieb Maxime Devos: > There is (currently) no Guix code written in Emacs Lisp. Do you mean > #f instead of #nil? Actually its 'null. Fixed. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer Hartmut Goebel 2022-04-09 11:52 ` Maxime Devos @ 2022-04-09 11:53 ` Maxime Devos 2022-04-09 11:55 ` Maxime Devos ` (4 subsequent siblings) 6 siblings, 0 replies; 98+ messages in thread From: Maxime Devos @ 2022-04-09 11:53 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 168 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + ;; Specification names the next fiels "dependencies", but in practice it is typo: fiels -> fields? [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer Hartmut Goebel 2022-04-09 11:52 ` Maxime Devos 2022-04-09 11:53 ` Maxime Devos @ 2022-04-09 11:55 ` Maxime Devos 2022-04-09 16:50 ` Hartmut Goebel 2022-04-09 11:56 ` Maxime Devos ` (3 subsequent siblings) 6 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 11:55 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 586 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > +(define (maybe-inputs package-inputs input-type) > + "Given a list of PACKAGE-INPUTS, tries to generate the 'inputs' field of a > +package definition. INPUT-TYPE, a symbol, is used to populate the name of > +the input field." > + (match package-inputs > + (() > + '()) > + ((package-inputs ...) > + `((,input-type (list ,@package-inputs)))))) This procedure 'maybe-inputs', or at least a similar procedure, already seems to exist in (guix import utils). Greetings, MAxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-09 11:55 ` Maxime Devos @ 2022-04-09 16:50 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-09 16:50 UTC (permalink / raw) To: Maxime Devos, 54796 [-- Attachment #1: Type: text/plain, Size: 469 bytes --] Am 09.04.22 um 13:55 schrieb Maxime Devos: > This procedure 'maybe-inputs', or at least a similar procedure, already > seems to exist in (guix import utils). Thanks for this hint. Unfortunately that return „old-style“ inputs: (inputs `(("erlang-base64url" ,erlang-base64url) -- Regards Hartmut Goebel | Hartmut Goebel |h.goebel@crazy-compilers.com | |www.crazy-compilers.com | compilers which you thought are impossible | [-- Attachment #2: Type: text/html, Size: 1220 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer Hartmut Goebel ` (2 preceding siblings ...) 2022-04-09 11:55 ` Maxime Devos @ 2022-04-09 11:56 ` Maxime Devos 2022-04-09 11:58 ` Maxime Devos ` (2 subsequent siblings) 6 siblings, 0 replies; 98+ messages in thread From: Maxime Devos @ 2022-04-09 11:56 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 389 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + ;; TODO: Base name on languange of dependency. > + ;; The languange used for implementing the depcendency is not know without > + ;; recursing the dependencies. So for now assume more packages are based on > + ;; Erlang and prefix all dependencies with "erlang-" (the default). typos: depcendency, languange? [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer Hartmut Goebel ` (3 preceding siblings ...) 2022-04-09 11:56 ` Maxime Devos @ 2022-04-09 11:58 ` Maxime Devos 2022-04-09 16:01 ` Hartmut Goebel 2022-04-09 11:59 ` Maxime Devos 2022-04-09 12:07 ` Maxime Devos 6 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 11:58 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 326 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + (name ,(hexpm-name->package-name name language)) Would it possible to detect if a package is a library or a tool, and if it's the latter, drop the "erlang-" prefix automatically (and move propagated-inputs to inputs)? Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-09 11:58 ` Maxime Devos @ 2022-04-09 16:01 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-09 16:01 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 13:58 schrieb Maxime Devos: > Would it possible to detect if a package is a library or a tool, and if > it's the latter, drop the "erlang-" prefix automatically (and move > propagated-inputs to inputs)? Good idea! This would indeed be cool and supportive for the packager. Anyhow, AFAIK the meta-data does not provide such information. (Just double-checked with https://hex.pm/api/packages/ejabberd and one of the releases there.) -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer Hartmut Goebel ` (4 preceding siblings ...) 2022-04-09 11:58 ` Maxime Devos @ 2022-04-09 11:59 ` Maxime Devos 2022-04-10 11:22 ` Hartmut Goebel 2022-04-09 12:07 ` Maxime Devos 6 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 11:59 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 258 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + (lambda (temp port) > + (and (url-fetch tarball-url temp) > + (values > + `(package WOuld 'alist->package' be useful here? Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-09 11:59 ` Maxime Devos @ 2022-04-10 11:22 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 11:22 UTC (permalink / raw) To: Maxime Devos, 54796 [-- Attachment #1: Type: text/plain, Size: 692 bytes --] Am 09.04.22 um 13:59 schrieb Maxime Devos: > WOuld 'alist->package' be useful here? Thanks for pointing me to that. Unfortunately, since records are used here (not alists) and since „alist->package“ expects the licenses to be an alist, too, the code using „alist->package“ would be quite ugly. Your tip brought me to „package->code“. Sadly I dif not get this to work: I failed converting ,@(maybe-inputs (dependencies->package-names dependencies) 'inputs) into the unquoted form. -- Regards Hartmut Goebel | Hartmut Goebel |h.goebel@crazy-compilers.com | |www.crazy-compilers.com | compilers which you thought are impossible | [-- Attachment #2: Type: text/html, Size: 1356 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer Hartmut Goebel ` (5 preceding siblings ...) 2022-04-09 11:59 ` Maxime Devos @ 2022-04-09 12:07 ` Maxime Devos 2022-04-10 10:36 ` Hartmut Goebel 6 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 12:07 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 1031 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > +(test-assert "hexpm->guix-package" > + ;; Replace network resources with sample data. > + (mock ((guix http-client) http-fetch > + (lambda (url . rest) > + (match url > + ("https://hex.pm/api/packages/bla" > + (values (open-input-string test-bla-package) > + (string-length test-bla-package))) > + ("https://hex.pm/api/packages/bla/releases/1.5.0" > + (values (open-input-string test-bla-release) > + (string-length test-bla-release))) > + (_ (error "http-fetch got unexpected URL: " url))))) From what I've gathered, with-http-server and the like is preferred above mocking, though with-http-server might need to be extended first to allow checking the URL (see <https://issues.guix.gnu.org/53389>). Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-09 12:07 ` Maxime Devos @ 2022-04-10 10:36 ` Hartmut Goebel 2022-04-10 12:26 ` Maxime Devos 0 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 10:36 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 14:07 schrieb Maxime Devos: > From what I've gathered, with-http-server and the like is preferred > above mocking, though with-http-server might need to be extended first > to allow checking the URL (see<https://issues.guix.gnu.org/53389>). Since this issue is stale (and referring to another stale issue). And I don't want to block this patch series by stale issues. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer. 2022-04-10 10:36 ` Hartmut Goebel @ 2022-04-10 12:26 ` Maxime Devos 0 siblings, 0 replies; 98+ messages in thread From: Maxime Devos @ 2022-04-10 12:26 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 498 bytes --] Hartmut Goebel schreef op zo 10-04-2022 om 12:36 [+0200]: > Am 09.04.22 um 14:07 schrieb Maxime Devos: > > From what I've gathered, with-http-server and the like is preferred > > above mocking, though with-http-server might need to be extended first > > to allow checking the URL (see<https://issues.guix.gnu.org/53389>). > > Since this issue is stale (and referring to another stale issue). And I > don't want to block this patch series by stale issues. Ok. Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 02/22] gnu: Add erlang-cf. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 03/22] gnu: Add erlang-certifi Hartmut Goebel ` (20 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-cf): New variable. --- gnu/packages/erlang.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 888a0f4f1e..0b9e89d134 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2016, 2017 Pjotr Prins <pjotr.guix@thebird.nl> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Nikita <nikita@n0.is> +;;; Copyright © 2020-2022 Hartmut Goebel <h.goebel@crazy-compilers.com> ;;; Copyright © 2021 Oskar Köök <oskar@maatriks.ee> ;;; Copyright © 2021 Cees de Groot <cg@evrl.com> ;;; @@ -26,6 +27,7 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system gnu) #:use-module (guix build-system emacs) + #:use-module (guix build-system rebar3) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix packages) @@ -203,3 +205,20 @@ built-in support for concurrency, distribution and fault tolerance.") "This package provides an Emacs major mode for editing Erlang source 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 "cf" version)) + (sha256 + (base32 "0wknz4xkqkhgvlx4vx5619p8m65v7g87lfgsvfy04jrsgm28spii")))) + (build-system rebar3-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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 03/22] gnu: Add erlang-certifi. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 02/22] gnu: Add erlang-cf Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-09 11:39 ` Maxime Devos 2022-04-08 17:03 ` [bug#54796] [PATCH v3 04/22] gnu: Add erlang-erlware-commons Hartmut Goebel ` (19 subsequent siblings) 22 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-certifi): New variable. --- gnu/packages/erlang.scm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 0b9e89d134..95a18e6f18 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -206,6 +206,30 @@ built-in support for concurrency, distribution and fault tolerance.") files.") (license license:asl2.0))) +(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 rebar3-build-system) + (arguments + `(#:tests? #f)) ;; have not been updated for latest cert bundle + (home-page "https://github.com/certifi/erlang-certifi/") + (synopsis "CA bundle adapted from Mozilla for Erlang") + (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.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 03/22] gnu: Add erlang-certifi. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 03/22] gnu: Add erlang-certifi Hartmut Goebel @ 2022-04-09 11:39 ` Maxime Devos 2022-04-10 10:27 ` Hartmut Goebel 0 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 11:39 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 1660 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + (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 Can this bundle be built from 'nss-certs', such that when nss-certs is updated (e.g. Mozilla revokes a root certificate due to reasons), erlang-certifi is up-to-date as well? Also, if Erlang supports some kind of static linking, then a package like this might be useful for people wanting to make static binaries to distribute to (non-Guix) systems. However, adding packages like nss-certs to the package inputs is avoided in favour of SSL_CERT_DIR/SSL_CERT_FILE / /etc/ssl/certs, to avoid rebuilds (*) when nss-certs is updated and because people might want to use a different set of root certificates (e.g., le-certs, none, or a list of (non-CA) certificates for a few individual sites). As such, can this package be avoided as dependency? Also see: * https://issues.guix.gnu.org/54434#8 (tzdata instead of nss-certs, but same principle) * https://lists.gnu.org/archive/html/guix-devel/2017-01/msg00516.html (about rebuilds) * https://lists.gnu.org/archive/html/guix-devel/2014-02/msg00277.html (some security reasons for not including nss-certs in the inputs or even the user profile) (*) nowaday it is less of a concern because of grafting, but grafting can take a long time. Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 03/22] gnu: Add erlang-certifi. 2022-04-09 11:39 ` Maxime Devos @ 2022-04-10 10:27 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 10:27 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 13:39 schrieb Maxime Devos: > Can this bundle be built from 'nss-certs', such that when nss-certs is > updated (e.g. Mozilla revokes a root certificate due to reasons), > erlang-certifi is up-to-date as well? This package is a sibling of python-certifi [1] and go-github-com-certifi-gocertifi. All these contain a copy of the/a CA bundle — which is the idea of these packages: „useful for systems that do not have CA bundles“. So they intentionally do not honor SSL_CERT_DIR/…. They are meant to be used as fall-back for libraries/applications honoring SSL_CERT_DIR/…. Neither python-certifi nor gocertifi build on nss-cert. Addind some update mechanism into the Guix package is not a good idea IMO: This would make “erlang-certif@2.9.0“ contain different certificates than the release 2.9.0, making debugging a hell. > As such, can this package be avoided as dependency? As of now, rebar3 does not support SSL_CERT_DIR/…. Anyhow there is already an open ticket [3] for. Other libraries/application might still need erlang-certifi, like some need python-certifi or gocertif. So anyhow we should keep this package. [1] https://github.com/certifi/python-certifi [2] https://github.com/certifi/gocertifi [3] https://github.com/erlang/rebar3/issues/2696 -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible |] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 04/22] gnu: Add erlang-erlware-commons. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (2 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 03/22] gnu: Add erlang-certifi Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-09 10:58 ` Maxime Devos 2022-04-08 17:03 ` [bug#54796] [PATCH v3 05/22] gnu: Add erlang-cth-readable Hartmut Goebel ` (18 subsequent siblings) 22 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-erlware-commons): New variable. --- gnu/packages/erlang.scm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 95a18e6f18..34761a4d64 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -246,3 +246,30 @@ Mozilla's canonical set.") (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-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 rebar3-build-system) + (propagated-inputs + (list erlang-cf)) + (native-inputs + (list git)) ;; Required for tests + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'check 'check-setup + (lambda _ + (setenv "TERM" "xterm")))))) ; enable color in logs + (home-page "http://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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 04/22] gnu: Add erlang-erlware-commons. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 04/22] gnu: Add erlang-erlware-commons Hartmut Goebel @ 2022-04-09 10:58 ` Maxime Devos 2022-04-09 15:33 ` Hartmut Goebel 0 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 10:58 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 224 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + (native-inputs > + (list git)) ;; Required for tests Maybe git-minimal/fixed, to avoid rebuilds if 'git' is updated. Greetings, MAxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 04/22] gnu: Add erlang-erlware-commons. 2022-04-09 10:58 ` Maxime Devos @ 2022-04-09 15:33 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-09 15:33 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 12:58 schrieb Maxime Devos: > Maybe git-minimal/fixed, to avoid rebuilds if 'git' is updated. Done. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 05/22] gnu: Add erlang-cth-readable. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (3 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 04/22] gnu: Add erlang-erlware-commons Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 06/22] gnu: Add erlang-bbmustache Hartmut Goebel ` (17 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-cth-readable): New variable. --- gnu/packages/erlang.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 34761a4d64..faf6509a4e 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -247,6 +247,27 @@ Mozilla's canonical set.") printing extending the io:format syntax to add colours.") (license license:expat))) +(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 rebar3-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.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 06/22] gnu: Add erlang-bbmustache. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (4 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 05/22] gnu: Add erlang-cth-readable Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 07/22] gnu: Add erlang-getopt Hartmut Goebel ` (16 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-bbmustache): New variable. --- gnu/packages/erlang.scm | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index faf6509a4e..1682521ca1 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -206,6 +206,38 @@ built-in support for concurrency, distribution and fault tolerance.") 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 rebar3-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") -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 07/22] gnu: Add erlang-getopt. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (5 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 06/22] gnu: Add erlang-bbmustache Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 08/22] gnu: Add erlang-eunit-formatters Hartmut Goebel ` (15 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-getopt): New variable. --- gnu/packages/erlang.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 1682521ca1..af79e2cd7d 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -326,3 +326,20 @@ outputs you want to be readable around all that noise they contain.") (description "Erlware Commons is an Erlware project focused on all aspects of reusable Erlang components.") (license license:expat))) + +(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 rebar3-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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 08/22] gnu: Add erlang-eunit-formatters. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (6 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 07/22] gnu: Add erlang-getopt Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 09/22] gnu: Add erlang-providers Hartmut Goebel ` (14 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-eunit-formatters): New variable. --- gnu/packages/erlang.scm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index af79e2cd7d..154c11f207 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -327,6 +327,22 @@ outputs you want to be readable around all that noise they contain.") 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 rebar3-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") -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 09/22] gnu: Add erlang-providers. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (7 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 08/22] gnu: Add erlang-eunit-formatters Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 10/22] gnu: Add erlang-parse-trans Hartmut Goebel ` (13 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-providers): New variable. --- gnu/packages/erlang.scm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 154c11f207..85e491bb1d 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -359,3 +359,21 @@ of reusable Erlang components.") (description "This package provides an Erlang module to parse command line arguments using the GNU getopt syntax.") (license license:bsd-3))) + +(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 rebar3-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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 10/22] gnu: Add erlang-parse-trans. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (8 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 09/22] gnu: Add erlang-providers Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-09 11:41 ` Maxime Devos 2022-04-08 17:03 ` [bug#54796] [PATCH v3 11/22] gnu: Add erlang-hex-core Hartmut Goebel ` (12 subsequent siblings) 22 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-parse-trans): New variable. --- gnu/packages/erlang.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 85e491bb1d..fc4b6f47d9 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -360,6 +360,25 @@ of reusable Erlang components.") arguments using the GNU getopt syntax.") (license license:bsd-3))) +(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 rebar3-build-system) + (inputs + (list erlang-getopt)) + (home-page "https://github.com/uwiger/parse_trans") + (synopsis "Parse transform utilities for Erlang") + (description "This package provides parse transform utilities for +Erlang.") + (license license:asl2.0))) + (define-public erlang-providers (package (name "erlang-providers") -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 10/22] gnu: Add erlang-parse-trans. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 10/22] gnu: Add erlang-parse-trans Hartmut Goebel @ 2022-04-09 11:41 ` Maxime Devos 2022-04-09 15:19 ` Hartmut Goebel 0 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 11:41 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 481 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + (synopsis "Parse transform utilities for Erlang") > + (description "This package provides parse transform utilities for > +Erlang.") This description is a bit parse, ‘(guix)Synopses and Descriptions’ recommends longer descriptions. What's a ‘parse transform utility’? How do I know if I need one? What are they useful for? Are there limitations and alternatives? Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 10/22] gnu: Add erlang-parse-trans. 2022-04-09 11:41 ` Maxime Devos @ 2022-04-09 15:19 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-09 15:19 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 13:41 schrieb Maxime Devos: > This description is a bit parse, ‘(guix)Synopses and Descriptions’ > recommends longer descriptions. I added a more verbose description based on the projects readme. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 11/22] gnu: Add erlang-hex-core. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (9 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 10/22] gnu: Add erlang-parse-trans Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 12/22] gnu: Add erlang-ssl-verify-fun Hartmut Goebel ` (11 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-hex-core): New variable. --- gnu/packages/erlang.scm | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index fc4b6f47d9..826bc67d40 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -360,6 +360,32 @@ of reusable Erlang components.") 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 rebar3-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-parse-trans (package (name "erlang-parse-trans") -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 12/22] gnu: Add erlang-ssl-verify-fun. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (10 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 11/22] gnu: Add erlang-hex-core Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 13/22] gnu: Add erlang-relx Hartmut Goebel ` (10 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-ssl-verify-fun): New variable. --- gnu/packages/erlang.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 826bc67d40..a7e63db0f3 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -422,3 +422,20 @@ Erlang.") (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 "ssl_verify_fun" version)) + (sha256 + (base32 "1026l1z1jh25z8bfrhaw0ryk5gprhrpnirq877zqhg253x3x5c5x")))) + (build-system rebar3-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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 13/22] gnu: Add erlang-relx. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (11 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 12/22] gnu: Add erlang-ssl-verify-fun Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-09 11:43 ` Maxime Devos 2022-04-09 11:45 ` Maxime Devos 2022-04-08 17:03 ` [bug#54796] [PATCH v3 14/22] gnu: Add erlang-edown Hartmut Goebel ` (9 subsequent siblings) 22 siblings, 2 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-relx): New variable. --- gnu/packages/erlang.scm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index a7e63db0f3..626043a1b5 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -423,6 +423,28 @@ Erlang.") (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 rebar3-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.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 13/22] gnu: Add erlang-relx. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 13/22] gnu: Add erlang-relx Hartmut Goebel @ 2022-04-09 11:43 ` Maxime Devos 2022-04-09 15:32 ` Hartmut Goebel 2022-04-09 11:45 ` Maxime Devos 1 sibling, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 11:43 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 286 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + (description "Relx assembles releases for an Erlang/OTP release. Given a What does ‘Erlang/OTP’ mean here? Is it like "make dist", or more like "cargo publish", or "git tag v1.2.3"? Greetings, MAxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 13/22] gnu: Add erlang-relx. 2022-04-09 11:43 ` Maxime Devos @ 2022-04-09 15:32 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-09 15:32 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 13:43 schrieb Maxime Devos: > Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: >> + (description "Relx assembles releases for an Erlang/OTP release. Given a > What does ‘Erlang/OTP’ mean here? Is it like "make dist", or more like > "cargo publish", or "git tag v1.2.3"? OTP is a collection of middleware, libraries, and tools written in Erlang programming language (Wikipedia, https://en.wikipedia.org/wiki/Open_Telecom_Platform). AFAIU it's much like the Java run-time engine plus libraries. So „Erlang/OTP” is a standing term in the Erlang and Elixir world. Thus I would keep it, expecting that Erlang developers understand this. I can't explain what this library does — all I know is: it's a dependency of rebar3. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 13/22] gnu: Add erlang-relx. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 13/22] gnu: Add erlang-relx Hartmut Goebel 2022-04-09 11:43 ` Maxime Devos @ 2022-04-09 11:45 ` Maxime Devos 2022-04-09 15:18 ` Hartmut Goebel 1 sibling, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 11:45 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 377 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + (propagated-inputs > + (list erlang-bbmustache)) erlang-relx looks like some kind of tool that can be run and not a library. As such, does it belong in erlang.scm or package- management.scm? Does the input need to be propagated? Can the 'erlang-' prefix be dropped? Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 13/22] gnu: Add erlang-relx. 2022-04-09 11:45 ` Maxime Devos @ 2022-04-09 15:18 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-09 15:18 UTC (permalink / raw) To: Maxime Devos, 54796 [-- Attachment #1: Type: text/plain, Size: 1000 bytes --] Am 09.04.22 um 13:45 schrieb Maxime Devos: > erlang-relx looks like some kind of tool that can be run and not a > library. … Can the 'erlang-' prefix be dropped? The github repo says: „|relx| is a library used by rebar3“. Thus I'd keep the „erlang-“ prefix. > Does the input need to be propagated? AFAIK: Like for Python, run-time dependencies of Erlang *libraries* need to be propagated. Erlang does not actually have a notion of „library“. It's more like Rust where all all dependent sources are expected to be available at build-time and then put into the „executable“. Basically this is statically linked, so only developers/package-builders are effected by this propagation. Would be great if some experienced Erlang developer would show up and show a solution without needing to propagate. -- Regards Hartmut Goebel | Hartmut Goebel |h.goebel@crazy-compilers.com | |www.crazy-compilers.com | compilers which you thought are impossible | [-- Attachment #2: Type: text/html, Size: 1760 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 14/22] gnu: Add erlang-edown. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (12 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 13/22] gnu: Add erlang-relx Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 15/22] gnu: Add erlang-jsone Hartmut Goebel ` (8 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-edown): New variable. --- gnu/packages/erlang.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 626043a1b5..1a4ff36abb 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -300,6 +300,23 @@ printing extending the io:format syntax to add colours.") 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 rebar3-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.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 15/22] gnu: Add erlang-jsone. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (13 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 14/22] gnu: Add erlang-edown Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 16/22] gnu: Add erlang-proper Hartmut Goebel ` (7 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-jsone): New variable. --- gnu/packages/erlang.scm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 1a4ff36abb..91ce74f2d0 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -403,6 +403,30 @@ arguments using the GNU getopt syntax.") 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 rebar3-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.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 16/22] gnu: Add erlang-proper. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (14 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 15/22] gnu: Add erlang-jsone Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 17/22] gnu: Add erlang-covertool Hartmut Goebel ` (6 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-proper): New variable. --- gnu/packages/erlang.scm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 91ce74f2d0..9a626a65a2 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -446,6 +446,33 @@ specifications.") Erlang.") (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 rebar3-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-providers (package (name "erlang-providers") -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 17/22] gnu: Add erlang-covertool. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (15 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 16/22] gnu: Add erlang-proper Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-09 11:48 ` Maxime Devos 2022-04-08 17:03 ` [bug#54796] [PATCH v3 18/22] gnu: Add rebar3 Hartmut Goebel ` (5 subsequent siblings) 22 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-covertool): New variable. --- gnu/packages/erlang.scm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 9a626a65a2..256b622fa3 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -279,6 +279,26 @@ Mozilla's canonical set.") printing extending the io:format syntax to add colours.") (license license:expat))) +(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 rebar3-build-system) + (home-page "https://github.com/covertool/covertool") + (synopsis "Convert Erlang cover data into Cobertura XML reports") + (description "This package provides a build tool and plugin to convert +exported Erlang 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.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 17/22] gnu: Add erlang-covertool. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 17/22] gnu: Add erlang-covertool Hartmut Goebel @ 2022-04-09 11:48 ` Maxime Devos 2022-04-09 15:40 ` Hartmut Goebel 0 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 11:48 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 737 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + (home-page "https://github.com/covertool/covertool") > + (synopsis "Convert Erlang cover data into Cobertura XML reports") > + (description "This package provides a build tool and plugin to convert > +exported Erlang 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))) What is ‘cover data’? Is it line coverage information for testing if a test suite is of good quality, or is it for calculating a minimal convex covering of a set of points? Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 17/22] gnu: Add erlang-covertool. 2022-04-09 11:48 ` Maxime Devos @ 2022-04-09 15:40 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-09 15:40 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 13:48 schrieb Maxime Devos: > What is ‘cover data’? Rephrased into „Convert Erlang code-coverage data generated by @code{cover} into Cobertura XML reports“ -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 18/22] gnu: Add rebar3. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (16 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 17/22] gnu: Add erlang-covertool Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 19/22] gnu: Add rebar3-raw-deps Hartmut Goebel ` (4 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (rebar3): New variable. --- gnu/packages/erlang.scm | 76 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 256b622fa3..35681e9a73 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -549,3 +549,79 @@ a well configured release directory.") (description "This package provides SSL verification functions for Erlang.") (license license:expat))) + +(define-public rebar3 + (package + (name "rebar3") + (version "3.18.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/erlang/rebar3") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "09648hzc2mnjwf9klm20cg4hb5rn2xv2gmzcg98ffv37p5yfl327")))) + (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)))) + (home-page "https://www.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 +compile and test Erlang applications, port drivers and releases. + +@code{rebar3} is a self-contained Erlang script, so it's easy to distribute or +even embed directly in a project. Where possible, rebar uses standard +Erlang/OTP conventions for project structures, thus minimizing the amount of +build configuration work. @code{rebar3} also provides dependency management, +enabling application writers to easily re-use common libraries from a variety +of locations (git, hg, etc).") + (license license:asl2.0))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 19/22] gnu: Add rebar3-raw-deps. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (17 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 18/22] gnu: Add rebar3 Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-09 11:49 ` Maxime Devos 2022-04-08 17:03 ` [bug#54796] [PATCH v3 20/22] gnu: Add rebar3-git-vsn Hartmut Goebel ` (3 subsequent siblings) 22 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (rebar3-raw-deps): New variable. --- gnu/packages/erlang.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 35681e9a73..8bd7ba3739 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -625,3 +625,20 @@ build configuration work. @code{rebar3} also provides dependency management, enabling application writers to easily re-use common libraries from a variety 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 rebar3-build-system) + (home-page "https://github.com/soranoba/rebar3_raw_deps") + (synopsis "Rebar3 plugin for supporting \"raw\" dependencies") + (description "This plugin adds support for \"raw\" dependencies to +rebar3.") + (license license:expat))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 19/22] gnu: Add rebar3-raw-deps. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 19/22] gnu: Add rebar3-raw-deps Hartmut Goebel @ 2022-04-09 11:49 ` Maxime Devos 2022-04-09 15:50 ` Hartmut Goebel 0 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 11:49 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 425 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + (synopsis "Rebar3 plugin for supporting \"raw\" dependencies") > + (description "This plugin adds support for \"raw\" dependencies to > +rebar3.") The synopsis and description are practically identical here. What is a ‘raw’ depency? How does someone know if "raw" dependencies might be useful for their purposes? Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 19/22] gnu: Add rebar3-raw-deps. 2022-04-09 11:49 ` Maxime Devos @ 2022-04-09 15:50 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-09 15:50 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 13:49 schrieb Maxime Devos: > The synopsis and description are practically identical here. What is a > ‘raw’ depency? How does someone know if "raw" dependencies might be > useful for their purposes? „raw deps” are non-OTP applications. Rephrased into „This plugin provides support for handling non-OTP applications as a dependent libraries“. (That's all I can tell based on the Readme and from trying to understand the code.) -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 20/22] gnu: Add rebar3-git-vsn. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (18 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 19/22] gnu: Add rebar3-raw-deps Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 21/22] gnu: Add rebar3-proper Hartmut Goebel ` (2 subsequent siblings) 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (rebar3-git-vsn): New variable. --- gnu/packages/erlang.scm | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 8bd7ba3739..acd7c76aa1 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -37,6 +37,7 @@ #: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)) @@ -642,3 +643,34 @@ of locations (git, hg, etc).") (description "This plugin adds support for \"raw\" dependencies to rebar3.") (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 rebar3-build-system) + (inputs + (list git)) + (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"))) + (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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 21/22] gnu: Add rebar3-proper. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (19 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 20/22] gnu: Add rebar3-git-vsn Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system' Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel 22 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (rebar3-proper): New variable. --- gnu/packages/erlang.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index acd7c76aa1..339d93496b 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -674,3 +674,20 @@ rebar3.") (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 rebar3-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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system'. 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (20 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 21/22] gnu: Add rebar3-proper Hartmut Goebel @ 2022-04-08 17:03 ` Hartmut Goebel 2022-04-09 13:16 ` Maxime Devos 2022-04-09 13:19 ` Maxime Devos 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel 22 siblings, 2 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-08 17:03 UTC (permalink / raw) To: 54796 * guix/build-system/rebar3.scm, guix/build/rebar3-build-system.scm: New files. * Makefile.am (MODULES): Register them. * doc/guix.texi (Build Systems): Document it. --- Makefile.am | 2 + doc/guix.texi | 41 ++++++++ guix/build-system/rebar3.scm | 143 ++++++++++++++++++++++++++++ guix/build/rebar3-build-system.scm | 147 +++++++++++++++++++++++++++++ 4 files changed, 333 insertions(+) create mode 100644 guix/build-system/rebar3.scm create mode 100644 guix/build/rebar3-build-system.scm diff --git a/Makefile.am b/Makefile.am index be2c183206..bb538222b3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -164,6 +164,7 @@ MODULES = \ guix/build-system/waf.scm \ guix/build-system/r.scm \ guix/build-system/rakudo.scm \ + guix/build-system/rebar3.scm \ guix/build-system/ruby.scm \ guix/build-system/scons.scm \ guix/build-system/texlive.scm \ @@ -217,6 +218,7 @@ MODULES = \ guix/build/r-build-system.scm \ guix/build/renpy-build-system.scm \ guix/build/rakudo-build-system.scm \ + guix/build/rebar3-build-system.scm \ guix/build/ruby-build-system.scm \ guix/build/scons-build-system.scm \ guix/build/texlive-build-system.scm \ diff --git a/doc/guix.texi b/doc/guix.texi index 6c17b26d70..518fabf48d 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -8717,6 +8717,47 @@ with @code{#:zef} or removed by passing @code{#f} to the @code{with-zef?} parameter. @end defvr +@defvr {Scheme Variable} rebar3-build-system +This variable is exported by @code{(guix build-system rebar3)}. It +implements a build procedure around @code{rebar3}. + +It adds both @code{rebar3} and the @code{erlang} to the set of inputs. +Different packages can be specified with the @code{#:rebar} and +@code{#:erlang} parameters, respectively. + +This build system is based on @code{gnu-build-system}, but with the +following phases changed: + +@table @code + +@item unpack +This phase, after unpacking the source like the @code{gnu-build-system} +does, checks for a file @code{contents.tar.gz} at the top-level of the +source. If this file exists, it will be unpacked, too. This eases +handling of package hosted by @i{hex.pm}. + +@item bootstrap +@item configure +There are no @code{bootstrap} and @code{configure} phase because erlang +packages typically don’t need to be configured. + +@item build +This phase runs @code{rebar3 compile} +with the flags listed in @code{#:rebar-flags}. + +@item check +Unless @code{#:tests? #f} is passed, +this phase runs @code{rebar3 eunit}, +or some other target specified with @code{#:test-target}, +with the flags listed in @code{#:rebar-flags}, + +@item install +This installs the files created in the @i{default} profile, or some +other profile specified with @code{#:install-profile}. + +@end table +@end defvr + @defvr {Scheme Variable} texlive-build-system This variable is exported by @code{(guix build-system texlive)}. It is used to build TeX packages in batch mode with a specified engine. The diff --git a/guix/build-system/rebar3.scm b/guix/build-system/rebar3.scm new file mode 100644 index 0000000000..b96c806258 --- /dev/null +++ b/guix/build-system/rebar3.scm @@ -0,0 +1,143 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.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 (guix build-system rebar3) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (guix monads) + #:use-module (guix search-paths) + #:use-module (guix build-system) + #:use-module (guix build-system gnu) + #:use-module ((guix hexpm-download) #:select (hexpm-uri) #:prefix dl:) + #:use-module (ice-9 match) + #:use-module (srfi srfi-26) + #:export (hexpm-uri + %rebar3-build-system-modules + rebar3-build + rebar3-build-system)) + +;; +;; Standard build procedure for Erlang packages using Rebar3. +;; + +(define hexpm-uri dl:hexpm-uri) + +(define %rebar3-build-system-modules + ;; Build-side modules imported by default. + `((guix build rebar3-build-system) + ,@%gnu-build-system-modules)) + +(define (default-rebar3) + "Return the default Rebar3 package." + ;; 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." + ;; 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 + ;; Keep the standard inputs of 'gnu-build-system'. + ,@(standard-packages))) + (build-inputs `(("rebar" ,rebar) + ("erlang" ,erlang) ;; for escriptize + ,@native-inputs)) + (outputs outputs) + (build rebar3-build) + (arguments (strip-keyword-arguments private-keywords arguments))))) + +(define* (rebar3-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 rebar3-build-system) + %standard-phases)) + (outputs '("out")) + (search-paths '()) + (native-search-paths '()) + (system (%current-system)) + (imported-modules %rebar3-build-system-modules) + (modules '((guix build rebar3-build-system) + (guix build utils)))) + "Build SOURCE with INPUTS." + + (define builder + (with-imported-modules imported-modules + #~(begin + (use-modules #$@(sexp->gexp modules)) + + #$(with-build-variables inputs outputs + #~(rebar3-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))) + ;; Note: Always pass #:graft? #f. Without it, ALLOWED-REFERENCES & + ;; co. would be interpreted as referring to grafted packages. + (gexp->derivation name builder + #:system system + #:target #f + #:graft? #f + #:guile-for-build guile))) + +(define rebar3-build-system + (build-system + (name 'rebar3) + (description "The standard Rebar3 build system") + (lower lower))) diff --git a/guix/build/rebar3-build-system.scm b/guix/build/rebar3-build-system.scm new file mode 100644 index 0000000000..ae18538ed3 --- /dev/null +++ b/guix/build/rebar3-build-system.scm @@ -0,0 +1,147 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2019 Björn Höfling <bjoern.hoefling@bjoernhoefling.de> +;;; Copyright © 2020, 2022 Hartmut Goebel <h.goebel@crazy-compilers.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 (guix build rebar3-build-system) + #: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 (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (rebar3-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~%"))) + +(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 %standard-phases + (modify-phases gnu:%standard-phases + (replace 'unpack unpack) + (delete 'bootstrap) + (delete 'configure) + (add-before 'build 'erlang-depends erlang-depends) + (replace 'build build) + (replace 'check check) + (replace 'install install))) + +(define* (rebar3-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)) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system'. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system' Hartmut Goebel @ 2022-04-09 13:16 ` Maxime Devos 2022-04-09 16:04 ` Hartmut Goebel 2022-04-09 13:19 ` Maxime Devos 1 sibling, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 13:16 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 291 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > * guix/build-system/rebar3.scm, guix/build/rebar3-build-system.scm: New files. This patch seems out-of-order. Wouldn't rebar3-build-system need to be added before packages using rebar3-build-system? Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system'. 2022-04-09 13:16 ` Maxime Devos @ 2022-04-09 16:04 ` Hartmut Goebel 2022-04-09 20:56 ` Maxime Devos 0 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-04-09 16:04 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 15:16 schrieb Maxime Devos: > This patch seems out-of-order. Wouldn't rebar3-build-system need to be > added before packages using rebar3-build-system? However you like. Just tell me. Since the rebar3 build-system requires rebar3, any way round results in a hen-and-egg-problem. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system'. 2022-04-09 16:04 ` Hartmut Goebel @ 2022-04-09 20:56 ` Maxime Devos 2022-04-10 18:49 ` Hartmut Goebel 0 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 20:56 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 725 bytes --] Hartmut Goebel schreef op za 09-04-2022 om 18:04 [+0200]: > Am 09.04.22 um 15:16 schrieb Maxime Devos: > > This patch seems out-of-order. Wouldn't rebar3-build-system need to be > > added before packages using rebar3-build-system? > > However you like. Just tell me. > > Since the rebar3 build-system requires rebar3, any way round results in > a hen-and-egg-problem. > Oh right. I would do the rebar3 build-system before rebar3. Then the packages stil cannot be for quite a few commit, but at there won't be 'Unbound variable: rebar3-build-system’ errors when doing a bisection with git. The guix-data-service might still not like it though, so CC'ing cbaines for input. Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system'. 2022-04-09 20:56 ` Maxime Devos @ 2022-04-10 18:49 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:49 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 22:56 schrieb Maxime Devos: > Oh right. I would do the rebar3 build-system before rebar3. Then the > packages stil cannot be for quite a few commit, but at there won't be > 'Unbound variable: rebar3-build-system’ errors when doing a bisection > with git. Good point. Changed. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system'. 2022-04-08 17:03 ` [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system' Hartmut Goebel 2022-04-09 13:16 ` Maxime Devos @ 2022-04-09 13:19 ` Maxime Devos 2022-04-09 16:28 ` Hartmut Goebel 1 sibling, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 13:19 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 874 bytes --] Hartmut Goebel schreef op vr 08-04-2022 om 19:03 [+0200]: > + (system system) > + (host-inputs `(,@(if source > + `(("source" ,source)) > + '()) > + ,@inputs > + ;; Keep the standard inputs of 'gnu-build-system'. > + ,@(standard-packages))) (standard-packages) needs to be in 'build-inputs', at least according to 'lower' in (guix build-system gnu). > + (build-inputs `(("rebar" ,rebar) > + ("erlang" ,erlang) ;; for escriptize > + ,@native-inputs)) Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system'. 2022-04-09 13:19 ` Maxime Devos @ 2022-04-09 16:28 ` Hartmut Goebel 2022-04-09 17:57 ` Maxime Devos 0 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-04-09 16:28 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 15:19 schrieb Maxime Devos: > (standard-packages) needs to be in 'build-inputs', at least according > to 'lower' in (guix build-system gnu). Build-systems are inconsistent here: texlive, ruby, python have them in host-inputs. gnu, cmake, qt have them in build-inputs. Seems like thus generating platform independent code tend to have it in host, the others in build. Can you elaborate the criteria which to choose? (I also just created https://issues.guix.gnu.org/54820 for this) -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system'. 2022-04-09 16:28 ` Hartmut Goebel @ 2022-04-09 17:57 ` Maxime Devos 2022-04-10 18:47 ` Hartmut Goebel 0 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-09 17:57 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 1107 bytes --] Hartmut Goebel schreef op za 09-04-2022 om 18:28 [+0200]: > Am 09.04.22 um 15:19 schrieb Maxime Devos: > > (standard-packages) needs to be in 'build-inputs', at least according > > to 'lower' in (guix build-system gnu). > > Build-systems are inconsistent here: texlive, ruby, python have them in > host-inputs. gnu, cmake, qt have them in build-inputs. Seems like thus > generating platform independent code tend to have it in host, ruby and python are, from Guix POV, not platform-independent code, as they may have baked-in references to platform-specific binaries. Their build systems don't support cross-compilation yet though ... > the others > in build. > > Can you elaborate the criteria which to choose? (I also just created > https://issues.guix.gnu.org/54820 for this) Always build-inputs -- some of the not-yet-cross-compiling build systems do it different, but maybe they will gain cross-compilation someday, and to do that, (standard-packages) needs to be in the right place! I've added some info to <https://issues.guix.gnu.org/54820>. Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system'. 2022-04-09 17:57 ` Maxime Devos @ 2022-04-10 18:47 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:47 UTC (permalink / raw) To: Maxime Devos, 54796 Am 09.04.22 um 19:57 schrieb Maxime Devos: > Always build-inputs Done. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (21 preceding siblings ...) 2022-04-08 17:03 ` [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system' Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:56 ` [bug#54796] [PATCH v4 01/22] import: Add hex.pm importer Hartmut Goebel ` (25 more replies) 22 siblings, 26 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 Thanks to Maxime Devos for the review of V3. Do ease review for other reviewers, here is a complete set of updated patches, incorporating Maxime's comments. Cover text from v3: this is an updated version of #42180 and #51061 (both are closed already). Notable changes are: * the „extracting downloader“ and „hexpm-fetch” are gone * documentation added for both the importer and the rebar3-build-system * tests added for the importer Some remarks on the patches: * First patch adds a file guix/hexpm-download.scm, containing definitions for the hex.pm repository. These are combined in this module here since different build-systems (will) use it. * The importer tries to detect the build system to be used. For Elexir packages it creates package definitions using the “mix-build-system‘. This I will add later (WIP). * Next there patches provide the packages required rebar3, rebar3 itself and some plugins for rebar3. Open question: * Shall the build system actually be called „rebar*3*“ or just „rebar“? There is also a build-tool „rebar2“, which is obsoltete and not supported by this build-system. Anyhow, somewhen in the future there might be some „rebar4“, which we might be able to cover with the same build-system. WDYT? Hartmut Goebel (22): import: Add hex.pm importer. build-system: Add 'rebar3-build-system'. gnu: Add erlang-cf. gnu: Add erlang-certifi. gnu: Add erlang-erlware-commons. gnu: Add erlang-cth-readable. gnu: Add erlang-bbmustache. gnu: Add erlang-getopt. gnu: Add erlang-eunit-formatters. gnu: Add erlang-providers. gnu: Add erlang-parse-trans. gnu: Add erlang-hex-core. gnu: Add erlang-ssl-verify-fun. gnu: Add erlang-relx. gnu: Add erlang-edown. gnu: Add erlang-jsone. gnu: Add erlang-proper. gnu: Add erlang-covertool. gnu: Add rebar3. gnu: Add rebar3-raw-deps. gnu: Add rebar3-git-vsn. gnu: Add rebar3-proper. Makefile.am | 5 + doc/guix.texi | 70 +++- gnu/packages/erlang.scm | 493 +++++++++++++++++++++++++++++ guix/build-system/rebar3.scm | 143 +++++++++ guix/build/rebar3-build-system.scm | 147 +++++++++ guix/hexpm-download.scm | 40 +++ guix/import/hexpm.scm | 347 ++++++++++++++++++++ guix/scripts/import.scm | 2 +- guix/scripts/import/hexpm.scm | 109 +++++++ guix/upstream.scm | 1 + tests/hexpm.scm | 257 +++++++++++++++ 11 files changed, 1612 insertions(+), 2 deletions(-) create mode 100644 guix/build-system/rebar3.scm create mode 100644 guix/build/rebar3-build-system.scm create mode 100644 guix/hexpm-download.scm create mode 100644 guix/import/hexpm.scm create mode 100644 guix/scripts/import/hexpm.scm create mode 100644 tests/hexpm.scm -- 2.30.2 ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 01/22] import: Add hex.pm importer. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel @ 2022-04-10 18:56 ` Hartmut Goebel 2022-04-29 13:13 ` [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Ludovic Courtès 2022-04-10 18:57 ` [bug#54796] [PATCH v4 02/22] build-system: Add 'rebar3-build-system' Hartmut Goebel ` (24 subsequent siblings) 25 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:56 UTC (permalink / raw) To: 54796 hex.pm is a package repository for Erlang and Elixir. * guix/scripts/import.scm (importers): Add "hexpm". * guix/scripts/import/hexpm.scm, guix/import/hexpm.scm, guix/hexpm-download.scm: New files. * guix/import/utils.scm (source-spec->object): Add "hexpm-fetch" to list of fetch methods. * guix/upstream.scm (package-update/hexpm-fetch): New function. (%method-updates) Add it. * Makefile.am: Add them. --- Makefile.am | 3 + doc/guix.texi | 29 ++- guix/hexpm-download.scm | 40 ++++ guix/import/hexpm.scm | 347 ++++++++++++++++++++++++++++++++++ guix/scripts/import.scm | 2 +- guix/scripts/import/hexpm.scm | 109 +++++++++++ guix/upstream.scm | 1 + tests/hexpm.scm | 257 +++++++++++++++++++++++++ 8 files changed, 786 insertions(+), 2 deletions(-) create mode 100644 guix/hexpm-download.scm create mode 100644 guix/import/hexpm.scm create mode 100644 guix/scripts/import/hexpm.scm create mode 100644 tests/hexpm.scm diff --git a/Makefile.am b/Makefile.am index aedb514ee1..46481dac2c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -100,6 +100,7 @@ MODULES = \ guix/git-download.scm \ guix/hg-download.scm \ guix/hash.scm \ + guix/hexpm-download.scm \ guix/swh.scm \ guix/monads.scm \ guix/monad-repl.scm \ @@ -263,6 +264,7 @@ MODULES = \ guix/import/gnu.scm \ guix/import/go.scm \ guix/import/hackage.scm \ + guix/import/hexpm.scm \ guix/import/json.scm \ guix/import/kde.scm \ guix/import/launchpad.scm \ @@ -311,6 +313,7 @@ MODULES = \ guix/scripts/import/gnu.scm \ guix/scripts/import/go.scm \ guix/scripts/import/hackage.scm \ + guix/scripts/import/hexpm.scm \ guix/scripts/import/json.scm \ guix/scripts/import/minetest.scm \ guix/scripts/import/opam.scm \ diff --git a/doc/guix.texi b/doc/guix.texi index e8ef4286be..6c17b26d70 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -48,7 +48,7 @@ Copyright @copyright{} 2017 Thomas Danckaert@* Copyright @copyright{} 2017 humanitiesNerd@* Copyright @copyright{} 2017, 2021 Christine Lemmer-Webber@* Copyright @copyright{} 2017, 2018, 2019, 2020, 2021, 2022 Marius Bakke@* -Copyright @copyright{} 2017, 2019, 2020 Hartmut Goebel@* +Copyright @copyright{} 2017, 2019, 2020, 2022 Hartmut Goebel@* Copyright @copyright{} 2017, 2019, 2020, 2021 Maxim Cournoyer@* Copyright @copyright{} 2017–2022 Tobias Geerinckx-Rice@* Copyright @copyright{} 2017 George Clemmer@* @@ -12817,6 +12817,33 @@ guix import egg arrays@@1.0 @end example Additional options include: +@table @code +@item --recursive +@itemx -r +Traverse the dependency graph of the given upstream package recursively +and generate package expressions for all those packages that are not yet +in Guix. +@end table + +@item hexpm +@cindex hexpm +Import metadata from the hex.pm Erlang and Elixir package repository +@uref{https://hex.pm, hex.pm}, as in this example: + +@example +guix import hexpm stun +@end example + +The importer tries to determine the build system used by the package. + +The hexpm importer also allows you to specify a version string: + +@example +guix import hexpm cf@@0.3.0 +@end example + +Additional options include: + @table @code @item --recursive @itemx -r diff --git a/guix/hexpm-download.scm b/guix/hexpm-download.scm new file mode 100644 index 0000000000..e2f0eb22a8 --- /dev/null +++ b/guix/hexpm-download.scm @@ -0,0 +1,40 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2020, 2022 Hartmut Goebel <h.goebel@crazy-compilers.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 (guix hexpm-download) + #:use-module (srfi srfi-26) + #:export (hexpm-package-url + hexpm-uri)) + +;;; +;;; Definitions for the hex.pm repository, +;;; combined here since different build-systems use it. +;;; + +;; URL and paths from +;; https://github.com/hexpm/specifications/blob/master/endpoints.md +(define %hexpm-repo-url + (make-parameter "https://repo.hex.pm")) + +(define hexpm-package-url + (string-append (%hexpm-repo-url) "/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")) diff --git a/guix/import/hexpm.scm b/guix/import/hexpm.scm new file mode 100644 index 0000000000..39ac9ed5db --- /dev/null +++ b/guix/import/hexpm.scm @@ -0,0 +1,347 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com> +;;; Copyright © 2016 David Craven <david@craven.ch> +;;; Copyright © 2017, 2019-2021 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2019 Martin Becze <mjbecze@riseup.net> +;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2020-2022 Hartmut Goebel <h.goebel@crazy-compilers.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 (guix import hexpm) + #:use-module (guix base32) + #:use-module ((guix download) #:prefix download:) + #:use-module (guix hexpm-download) + #:use-module (gcrypt hash) + #:use-module (guix http-client) + #:use-module (json) + #:use-module (guix import utils) + #:use-module ((guix import json) #:select (json-fetch)) + #:use-module ((guix build utils) + #:select ((package-name->name+version + . hyphen-package-name->name+version) + dump-port)) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix monads) + #:use-module (guix packages) + #:use-module (guix upstream) + #:use-module (guix utils) + #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module (ice-9 popen) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-2) + #:use-module (srfi srfi-26) + #:export (hexpm->guix-package + guix-package->hexpm-name + strings->licenses ;; why used here? + hexpm-recursive-import + %hexpm-updater)) +\f +;;; +;;; Interface to https://hex.pm/api, version 2. +;;; REST-API end-points: +;;; https://github.com/hexpm/specifications/blob/master/apiary.apib +;;; Repository end-points: +;;; https://github.com/hexpm/specifications/blob/master/endpoints.md +;;; + +(define %hexpm-api-url + (make-parameter "https://hex.pm/api")) + +(define (package-url name) + (string-append (%hexpm-api-url) "/packages/" name)) + +;; +;; Hexpm Package. /packages/${name} +;; https://github.com/hexpm/specifications/blob/master/apiary.apib#Package +;; +;; Each package can have several "releases", each of which has its own set of +;; requirements, build-tool, etc. - see <hexpm-release> below. +(define-json-mapping <hexpm-pkgdef> make-hexpm-pkgdef hexpm-pkgdef? + json->hexpm + (name hexpm-name) ; string + (html-url hexpm-html-url "html_url") ; string + (docs-html-url hexpm-docs-html-url "docs_html_url") ; string | 'null + (meta hexpm-meta "meta" json->hexpm-meta) + (versions hexpm-versions "releases" ; list of <hexpm-version> + (lambda (vector) + (map json->hexpm-version + (vector->list vector)))) + ;; "latest_version" and "latest_stable_version" are not named in the + ;; specification, butt seen in practice. + (latest-version hexpm-latest-version "latest_version") ; string + (latest-stable hexpm-latest-stable "latest_stable_version")) ; string + +;; Hexpm package metadata. +(define-json-mapping <hexpm-meta> make-hexpm-meta hexpm-meta? + json->hexpm-meta + (description hexpm-meta-description) ;string + (licenses hexpm-meta-licenses "licenses" ;list of strings + (lambda (vector) + (or (and vector (vector->list vector)) + #f)))) + +;; Hexpm package versions. +(define-json-mapping <hexpm-version> make-hexpm-version hexpm-version? + json->hexpm-version + (number hexpm-version-number "version") ;string + (url hexpm-version-url)) ;string + + +(define (lookup-hexpm name) + "Look up NAME on hex.pm and return the corresopnding <hexpm> record +or #f if it was not found." + (and=> (json-fetch (package-url name)) + json->hexpm)) + +;; +;; Hexpm release. /packages/${name}/releases/${version} +;; https://github.com/hexpm/specifications/blob/master/apiary.apib#Release +;; +(define-json-mapping <hexpm-release> make-hexpm-release hexpm-release? + json->hexpm-release + (version hexpm-release-version) ; string + (url hexpm-release-url) ; string + (meta hexpm-release-meta "meta" json->hexpm-release-meta) + ;; Specification names the next fields "dependencies", but in practice it is + ;; "requirements". + (dependencies hexpm-requirements "requirements")) ; list of <hexpm-dependency> + +;; Hexpm release meta. +;; https://github.com/hexpm/specifications/blob/main/package_metadata.md +(define-json-mapping <hexpm-release-meta> + make-hexpm-release-meta hexpm-release-meta? + json->hexpm-release-meta + (app hexpm-release-meta-app) ; string + (elixir hexpm-release-meta-elixir) ; string + (build-tools hexpm-release-meta-build-tools "build_tools" ; list of strings + (lambda (vector) + (or (and vector (vector->list vector)) + (list))))) + +;; Hexpm dependency. Each requirement has information about the required +;; version, such as "~> 2.1.2" or ">= 2.1.2 and < 2.2.0", see +;; <https://hexdocs.pm/elixir/Version.html#module-requirements>, and whether +;; the dependency is optional. +(define-json-mapping <hexpm-dependency> make-hexpm-dependency + hexpm-dependency? + json->hexpm-dependency + (name hexpm-dependency-name "app") ; string + (requirement hexpm-dependency-requirement) ; string + (optional hexpm-dependency-optional)) ; bool + +(define (hexpm-release-dependencies release) + "Return the list of dependency names of RELEASE, a <hexpm-release>." + (let ((reqs (or (hexpm-requirements release) '#()))) + (map first reqs))) ;; TODO: also return required version + + +(define (lookup-hexpm-release version*) + "Look up RELEASE on hexpm-version-url and return the corresopnding +<hexpm-release> record or #f if it was not found." + (and=> (json-fetch (hexpm-version-url version*)) + json->hexpm-release)) + +\f +;;; +;;; Converting hex.pm packages to Guix packages. +;;; + +(define (maybe-inputs package-inputs input-type) + "Given a list of PACKAGE-INPUTS, tries to generate the 'inputs' field of a +package definition. INPUT-TYPE, a symbol, is used to populate the name of +the input field." + (match package-inputs + (() + '()) + ((package-inputs ...) + `((,input-type (list ,@package-inputs)))))) + +(define (dependencies->package-names names) + "Given a list of hexpm package NAMES, returns a list of guix package names +as symbols." + ;; TODO: Base name on language of dependency. + ;; The language used for implementing the dependency is not know without + ;; recursing the dependencies. So for now assume more packages are based on + ;; Erlang and prefix all dependencies with "erlang-" (the default). + (map string->symbol + (map hexpm-name->package-name + (sort names string-ci<?)))) + +(define* (make-hexpm-sexp #:key name version tarball-url + home-page synopsis description license + language build-system dependencies + #:allow-other-keys) + "Return the `package' s-expression for a hexpm package with the given NAME, +VERSION, TARBALL-URL, HOME-PAGE, SYNOPSIS, DESCRIPTION, and LICENSE. The +created package's name will stem from LANGUAGE. BUILD-SYSTEM defined the +build-system, and DEPENDENCIES the inputs for the package." + (call-with-temporary-output-file + (lambda (temp port) + (and (url-fetch tarball-url temp) + (values + `(package + (name ,(hexpm-name->package-name name language)) + (version ,version) + (source (origin + (method url-fetch) + (uri (hexpm-uri ,name version)) + (sha256 (base32 ,(guix-hash-url temp))))) + (build-system ,build-system) + ,@(maybe-inputs (dependencies->package-names dependencies) 'inputs) + (synopsis ,synopsis) + (description ,(beautify-description description)) + (home-page ,(match home-page + (() "") + (_ home-page))) + (license ,(match license + (() #f) + ((license) license) + (_ `(list ,@license)))))))))) + +(define (strings->licenses strings) + "Convert the list of STRINGS into a list of license objects." + (filter-map (lambda (license) + (and (not (string-null? license)) + (not (any (lambda (elem) (string=? elem license)) + '("AND" "OR" "WITH"))) + (or (spdx-string->license license) + license))) + strings)) + +(define (hexpm-latest-release package) + "Return the version string for the latest stable release of PACKAGE." + ;; Use latest-stable if specified (see comment in hexpm-pkgdef above), + ;; otherwise compare the lists of release versions. + (let ((latest-stable (hexpm-latest-stable package))) + (if (not (unspecified? latest-stable)) + latest-stable + (let ((versions (map hexpm-version-number (hexpm-versions package)))) + (fold (lambda (a b) + (if (version>? a b) a b)) (car versions) versions))))) + +(define* (hexpm->guix-package package-name #:key repo version) + "Fetch the metadata for PACKAGE-NAME from hexpms.io, and return the +`package' s-expression corresponding to that package, or #f on failure. +When VERSION is specified, attempt to fetch that version; otherwise fetch the +latest version of PACKAGE-NAME." + + (define package + (lookup-hexpm package-name)) + + (define version-number + (and package + (or version + (hexpm-latest-release package)))) + + (define version* + (and package + (find (lambda (version) + (string=? (hexpm-version-number version) + version-number)) + (hexpm-versions package)))) + + (define release + (and package version* + (lookup-hexpm-release version*))) + + (define release-meta + (and package version* + (hexpm-release-meta release))) + + (define build-system + (and package version* + (let ((build-tools (hexpm-release-meta-build-tools release-meta))) + (cond + ((member "rebar3" build-tools) 'rebar3-build-system) + ((member "mix" build-tools) 'mix-build-system) + ((member "make" build-tools) 'gnu-build-system) + (else #f))))) + + (define language + (and package version* + (let ((elixir (hexpm-release-meta-elixir release-meta))) + (cond + ((and (string? elixir) (not (string-null? elixir))) "elixir") + (else "erlang"))))) + + (and package version* + (let ((dependencies (hexpm-release-dependencies release)) + (pkg-meta (hexpm-meta package)) + (docs-html-url (hexpm-docs-html-url package))) + (values + (make-hexpm-sexp + #:language language + #:build-system build-system + #:name package-name + #:version version-number + #:dependencies dependencies + #:home-page (or (and (not (eq? docs-html-url 'null)) + docs-html-url) + ;; TODO: Homepage? + (hexpm-html-url package)) + #:synopsis (hexpm-meta-description pkg-meta) + #:description (hexpm-meta-description pkg-meta) + #:license (or (and=> (hexpm-meta-licenses pkg-meta) + strings->licenses)) + #:tarball-url (hexpm-uri package-name version-number)) + dependencies)))) + +(define* (hexpm-recursive-import pkg-name #:optional version) + (recursive-import pkg-name + #:version version + #:repo->guix-package hexpm->guix-package + #:guix-name hexpm-name->package-name)) + +(define (guix-package->hexpm-name package) + "Return the hex.pm name of PACKAGE." + (define (url->hexpm-name url) + (hyphen-package-name->name+version + (basename (file-sans-extension url)))) + + (match (and=> (package-source package) origin-uri) + ((? string? url) + (url->hexpm-name url)) + ((lst ...) + (any url->hexpm-name lst)) + (#f #f))) + +(define* (hexpm-name->package-name name #:optional (language "erlang")) + (string-append language "-" (string-join (string-split name #\_) "-"))) + +\f +;;; +;;; Updater +;;; + +(define (latest-release package) + "Return an <upstream-source> for the latest release of PACKAGE." + (let* ((hexpm-name (guix-package->hexpm-name package)) + (hexpm (lookup-hexpm hexpm-name)) + (version (hexpm-latest-release hexpm)) + (url (hexpm-uri hexpm-name version))) + (upstream-source + (package (package-name package)) + (version version) + (urls (list url))))) + +(define %hexpm-updater + (upstream-updater + (name 'hexpm) + (description "Updater for hex.pm packages") + (pred (url-prefix-predicate hexpm-package-url)) + (latest latest-release))) diff --git a/guix/scripts/import.scm b/guix/scripts/import.scm index 40fa6759ae..aaadad4adf 100644 --- a/guix/scripts/import.scm +++ b/guix/scripts/import.scm @@ -79,7 +79,7 @@ rather than \\n." ;;; (define importers '("gnu" "pypi" "cpan" "hackage" "stackage" "egg" "elpa" - "gem" "go" "cran" "crate" "texlive" "json" "opam" + "gem" "go" "cran" "crate" "texlive" "json" "opam" "hexpm" "minetest")) (define (resolve-importer name) diff --git a/guix/scripts/import/hexpm.scm b/guix/scripts/import/hexpm.scm new file mode 100644 index 0000000000..b49d263f9e --- /dev/null +++ b/guix/scripts/import/hexpm.scm @@ -0,0 +1,109 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2014 David Thompson <davet@gnu.org> +;;; Copyright © 2016 David Craven <david@craven.ch> +;;; Copyright © 2019 Martin Becze <mjbecze@riseup.net> +;;; Copyright © 2020, 2022 Hartmut Goebel <h.goebel@crazy-compilers.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 (guix scripts import hexpm) + #:use-module (guix ui) + #:use-module (guix utils) + #:use-module (guix scripts) + #:use-module (guix import hexpm) + #:use-module (guix scripts import) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-11) + #:use-module (srfi srfi-37) + #:use-module (srfi srfi-71) + #:use-module (ice-9 match) + #:use-module (ice-9 format) + #:export (guix-import-hexpm)) + +\f +;;; +;;; Command-line options. +;;; + +(define %default-options + '()) + +(define (show-help) + (display (G_ "Usage: guix import hexpm PACKAGE-NAME +Import and convert the hex.pm package for PACKAGE-NAME.\n")) + (display (G_ " + -h, --help display this help and exit")) + (display (G_ " + -V, --version display version information and exit")) + (newline) + (display (G_ " + -r, --recursive import packages recursively")) + (newline) + (show-bug-report-information)) + +(define %options + ;; Specification of the command-line options. + (cons* (option '(#\h "help") #f #f + (lambda args + (show-help) + (exit 0))) + (option '(#\V "version") #f #f + (lambda args + (show-version-and-exit "guix import hexpm"))) + (option '(#\r "recursive") #f #f + (lambda (opt name arg result) + (alist-cons 'recursive #t result))) + %standard-import-options)) + +\f +;;; +;;; Entry point. +;;; + +(define (guix-import-hexpm . args) + (define (parse-options) + ;; Return the alist of option values. + (parse-command-line args %options (list %default-options) + #:build-options? #f)) + + (let* ((opts (parse-options)) + (args (filter-map (match-lambda + (('argument . value) + value) + (_ #f)) + (reverse opts)))) + (match args + ((spec) + (with-error-handling + (let ((name version (package-name->name+version spec))) + (if (assoc-ref opts 'recursive) + ;; Recursive import + (map (match-lambda + ((and ('package ('name name) . rest) pkg) + `(define-public ,(string->symbol name) + ,pkg)) + (_ #f)) + (hexpm-recursive-import name version)) + ;; Single import + (let ((sexp (hexpm->guix-package name #:version version))) + (unless sexp + (leave (G_ "failed to download meta-data for package '~a'~%") + spec)) + sexp))))) + (() + (leave (G_ "too few arguments~%"))) + ((many ...) + (leave (G_ "too many arguments~%")))))) diff --git a/guix/upstream.scm b/guix/upstream.scm index 6666803a92..b0f77fb7d0 100644 --- a/guix/upstream.scm +++ b/guix/upstream.scm @@ -464,6 +464,7 @@ SOURCE, an <upstream-source>." #:key-download key-download))) (values version tarball source)))))) + (define* (package-update/git-fetch store package source #:key key-download) "Return the version, checkout, and SOURCE, to update PACKAGE to SOURCE, an <upstream-source>." diff --git a/tests/hexpm.scm b/tests/hexpm.scm new file mode 100644 index 0000000000..84d126c821 --- /dev/null +++ b/tests/hexpm.scm @@ -0,0 +1,257 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2015 David Thompson <davet@gnu.org> +;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> +;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev> +;;; Copyright © 2022 Hartmut Goebel <h.goebel@crazy-compilers.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 (test-hexpm) + #:use-module (guix import hexpm) + #:use-module (guix base32) + #:use-module (gcrypt hash) + #:use-module (guix tests) + #:use-module (srfi srfi-64) + #:use-module (ice-9 binary-ports) + #:use-module (ice-9 match)) + +(define test-bla-package + "{\"name\": \"bla\", + \"html_url\": \"https://hex.pm/packages/bla\", + \"docs_html_url\": null, + \"meta\": { + \"description\": \"A cool package\", + \"licenses\": [\"MIT\", \"Apache-2.0\"] + }, + \"releases\": [ + {\"url\": \"https://hex.pm/api/packages/bla/releases/1.5.0\", + \"version\": \"1.5.0\"}, + {\"url\": \"https://hex.pm/api/packages/bla/releases/1.4.7\", + \"version\": \"1.4.7\"} + ] +}") + +(define test-bla-release + "{ + \"version\": \"1.5.0\", + \"url\": \"https://hex.pm/api/packages/bla/releases/1.5.0\", + \"requirements\": { + \"blubb\":{\"app\": \"blubb\", + \"optional\": false, + \"requirement\": \"~>0.3\" + }, + \"fasel\":{\"app\": \"fasel\", + \"optional\": false, + \"requirement\": \"~>1.0\" + } + }, + \"meta\":{ \"build_tools\":[\"mix\", \"make\", \"rebar3\"] } + }") + +(define test-blubb-package + "{\"name\": \"blubb\", + \"latest_stable_version\": \"0.3.1\", + \"latest_version\": \"0.3.1\", + \"html_url\": \"https://hex.pm/packages/blubb\", + \"docs_html_url\": null, + \"meta\": { + \"description\": \"Another cool package\", + \"licenses\": [\"MIT\"] + }, + \"releases\": [ + {\"url\": \"https://hex.pm/api/packages/blubb/releases/0.3.1\", + \"version\": \"0.3.1\"}, + {\"url\": \"https://hex.pm/api/packages/blubb/releases/0.3.0\", + \"version\": \"0.3.0\"} + ] +}") + +(define test-blubb-release + "{ + \"version\": \"0.3.1\", + \"url\": \"https://hex.pm/api/packages/blubb/releases/0.3.1\", + \"requirements\": { + \"fasel\":{\"app\": \"fasel\", + \"optional\": false, + \"requirement\": \"~>1.0\" + } + }, + \"meta\": { \"build_tools\":[\"mix\"] } + }") + +(define test-fasel-package + "{\"name\": \"fasel\", + \"latest_stable_version\": \"1.2.1\", + \"latest_version\": \"1.2.1\", + \"html_url\": \"https://hex.pm/packages/fasel\", + \"docs_html_url\": null, + \"meta\": { + \"description\": \"Yet another cool package\", + \"licenses\": [\"GPL\"] + }, + \"releases\": [ + {\"url\": \"https://hex.pm/api/packages/fasel/releases/1.2.1\", + \"version\": \"1.2.1\"} + ] +}") + +(define test-fasel-release + "{ + \"version\": \"1.2.1\", + \"url\": \"https://hex.pm/api/packages/fasel/releases/1.2.1\", + \"requirements\" :{}, + \"meta\":{ \"build_tools\":[\"make\"] } + }") + +(test-begin "hexpm") + +(test-assert "hexpm->guix-package" + ;; Replace network resources with sample data. + (mock ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://hex.pm/api/packages/bla" + (values (open-input-string test-bla-package) + (string-length test-bla-package))) + ("https://hex.pm/api/packages/bla/releases/1.5.0" + (values (open-input-string test-bla-release) + (string-length test-bla-release))) + (_ (error "http-fetch got unexpected URL: " url))))) + (mock ((guix build download) url-fetch + (lambda* (url file-name + #:key + (mirrors '()) verify-certificate?) + (with-output-to-file file-name + (lambda () + (display + (match url + ("https://repo.hex.pm/tarballs/bla-1.5.0.tar" + "source") + (_ (error "url-fetch got unexpected URL: " url)))))))) + (match (hexpm->guix-package "bla") + (('package + ('name "erlang-bla") + ('version "1.5.0") + ('source + ('origin + ('method 'url-fetch) + ('uri ('hexpm-uri "bla" 'version)) + ('sha256 + ('base32 + "0zcl4dgcmqwl1g5xb901pd6dz61r1xgmac9mqlwvh022paa6gks1")))) + ('build-system 'rebar3-build-system) + ('inputs ('list 'erlang-blubb 'erlang-fasel)) + ('synopsis "A cool package") + ('description "This package provides a cool package") + ('home-page "https://hex.pm/packages/bla") + ('license ('list 'license:expat 'license:asl2.0))) + #t) + (x + (pk 'fail x #f)))))) + +(test-assert "hexpm-recursive-import" + ;; Replace network resources with sample data. + (mock ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://hex.pm/api/packages/bla" + (values (open-input-string test-bla-package) + (string-length test-bla-package))) + ("https://hex.pm/api/packages/bla/releases/1.5.0" + (values (open-input-string test-bla-release) + (string-length test-bla-release))) + ("https://hex.pm/api/packages/blubb" + (values (open-input-string test-blubb-package) + (string-length test-blubb-package))) + ("https://hex.pm/api/packages/blubb/releases/0.3.1" + (values (open-input-string test-blubb-release) + (string-length test-blubb-release))) + ("https://hex.pm/api/packages/fasel" + (values (open-input-string test-fasel-package) + (string-length test-fasel-package))) + ("https://hex.pm/api/packages/fasel/releases/1.2.1" + (values (open-input-string test-fasel-release) + (string-length test-fasel-release))) + (_ (error "http-fetch got unexpected URL: " url))))) + (mock ((guix build download) url-fetch + (lambda* (url file-name + #:key + (mirrors '()) verify-certificate?) + (with-output-to-file file-name + (lambda () + (display + (match url + ("https://repo.hex.pm/tarballs/bla-1.5.0.tar" + "bla-source") + ("https://repo.hex.pm/tarballs/blubb-0.3.1.tar" + "blubb-source") + ("https://repo.hex.pm/tarballs/fasel-1.2.1.tar" + "fasel-source") + (_ (error "url-fetch got unexpected URL: " url)))))))) + (match (hexpm-recursive-import "bla") + ((('package + ('name "erlang-blubb") + ('version "0.3.1") + ('source + ('origin + ('method 'url-fetch) + ('uri ('hexpm-uri "blubb" 'version)) + ('sha256 + ('base32 + "17y88b5y8ld7s1c2bcwwwa04pf1cl4402i9zk3inna221ps3ppj2")))) + ('build-system 'mix-build-system) + ('inputs ('list 'erlang-fasel)) + ('synopsis "Another cool package") + ('description "Another cool package") + ('home-page "https://hex.pm/packages/blubb") + ('license 'license:expat)) + ('package + ('name "erlang-fasel") + ('version "1.2.1") + ('source + ('origin + ('method 'url-fetch) + ('uri ('hexpm-uri "fasel" 'version)) + ('sha256 + ('base32 + "1k6d70mxwqgq78jrbr7yqnw187yki74jnagybi7nacrj4a67qjha")))) + ('build-system 'gnu-build-system) + ('synopsis "Yet another cool package") + ('description "Yet another cool package") + ('home-page "https://hex.pm/packages/fasel") + ('license "GPL")) + ('package + ('name "erlang-bla") + ('version "1.5.0") + ('source + ('origin + ('method 'url-fetch) + ('uri ('hexpm-uri "bla" 'version)) + ('sha256 + ('base32 + "0d3gj746c4swbb1m6ycylxb239jsavvdcizag6bfbg2aqccxwij8")))) + ('build-system 'rebar3-build-system) + ('inputs ('list 'erlang-blubb 'erlang-fasel)) + ('synopsis "A cool package") + ('description "This package provides a cool package") + ('home-page "https://hex.pm/packages/bla") + ('license ('list 'license:expat 'license:asl2.0)))) + #t) + (x + (pk 'fail x #f)))))) + +(test-end "hexpm") -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-10 18:56 ` [bug#54796] [PATCH v4 01/22] import: Add hex.pm importer Hartmut Goebel @ 2022-04-29 13:13 ` Ludovic Courtès 2022-05-05 12:40 ` Hartmut Goebel 0 siblings, 1 reply; 98+ messages in thread From: Ludovic Courtès @ 2022-04-29 13:13 UTC (permalink / raw) To: Hartmut Goebel; +Cc: 54796 Hartmut Goebel <h.goebel@crazy-compilers.com> skribis: > hex.pm is a package repository for Erlang and Elixir. > > * guix/scripts/import.scm (importers): Add "hexpm". > * guix/scripts/import/hexpm.scm, guix/import/hexpm.scm, > guix/hexpm-download.scm: New files. > * guix/import/utils.scm (source-spec->object): Add "hexpm-fetch" to list of > fetch methods. > * guix/upstream.scm (package-update/hexpm-fetch): New function. > (%method-updates) Add it. > * Makefile.am: Add them. Please mention tests/hexpm.scm. [...] > +(define-module (guix hexpm-download) > + #:use-module (srfi srfi-26) > + #:export (hexpm-package-url > + hexpm-uri)) How about moving these two procedures to (guix build-system rebar3)? This is what is done in similar cases, for example with ‘pypi-uri’. > +++ b/guix/scripts/import/hexpm.scm > @@ -0,0 +1,109 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2014 David Thompson <davet@gnu.org> > +;;; Copyright © 2016 David Craven <david@craven.ch> > +;;; Copyright © 2019 Martin Becze <mjbecze@riseup.net> > +;;; Copyright © 2020, 2022 Hartmut Goebel <h.goebel@crazy-compilers.com> I think it’s fine to keep just your name here; it’s a short file and one could argue that the bits found in all these files aren’t inventive. :-) > + #:use-module (srfi srfi-11) > + #:use-module (srfi srfi-71) I think you can drop these two imports. > +++ b/guix/upstream.scm > @@ -464,6 +464,7 @@ SOURCE, an <upstream-source>." > #:key-download key-download))) > (values version tarball source)))))) > > + Oops. :-) > +++ b/tests/hexpm.scm > @@ -0,0 +1,257 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright © 2015 David Thompson <davet@gnu.org> > +;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> > +;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> > +;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev> > +;;; Copyright © 2022 Hartmut Goebel <h.goebel@crazy-compilers.com> Same comment here. > +(test-assert "hexpm->guix-package" > + ;; Replace network resources with sample data. > + (mock ((guix http-client) http-fetch > + (lambda (url . rest) I have a preference for spawning an HTTP server, if that’s possible, as is done in tests/cpan.scm for instance. But it’s already been a long ride, so we can keep that for later. Otherwise LGTM. Great to see this new importer! Ludo’. ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-29 13:13 ` [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Ludovic Courtès @ 2022-05-05 12:40 ` Hartmut Goebel 2022-05-05 20:48 ` Ludovic Courtès 0 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-05-05 12:40 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 54796 Am 29.04.22 um 15:13 schrieb Ludovic Courtès: >> +(define-module (guix hexpm-download) >> + #:use-module (srfi srfi-26) >> + #:export (hexpm-package-url >> + hexpm-uri)) > How about moving these two procedures to (guix build-system rebar3)? > This is what is done in similar cases, for example with ‘pypi-uri’. > These definitions are combined in this module, since the WIP „mix-build-system“ (for Elixir) will also use it. Do you want me to move this into the respective build-system modules and thus duplicate the data? -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-05-05 12:40 ` Hartmut Goebel @ 2022-05-05 20:48 ` Ludovic Courtès 2022-05-05 21:06 ` Hartmut Goebel 0 siblings, 1 reply; 98+ messages in thread From: Ludovic Courtès @ 2022-05-05 20:48 UTC (permalink / raw) To: Hartmut Goebel; +Cc: 54796 Hello, Hartmut Goebel <h.goebel@crazy-compilers.com> skribis: > Am 29.04.22 um 15:13 schrieb Ludovic Courtès: >>> +(define-module (guix hexpm-download) >>> + #:use-module (srfi srfi-26) >>> + #:export (hexpm-package-url >>> + hexpm-uri)) >> How about moving these two procedures to (guix build-system rebar3)? >> This is what is done in similar cases, for example with ‘pypi-uri’. >> > These definitions are combined in this module, since the WIP > „mix-build-system“ (for Elixir) will also use it. OK. > Do you want me to move this into the respective build-system modules > and thus duplicate the data? We don’t want to duplicate it, but it might still make sense to have them in (guix build-system rebar3) and have it imported by (guix build-system mix) if needed. At least I have a slight preference for this over having a short top-level module ‘just’ for these two procedures. Thanks, Ludo’. ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-05-05 20:48 ` Ludovic Courtès @ 2022-05-05 21:06 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-05-05 21:06 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 54796 Am 05.05.22 um 22:48 schrieb Ludovic Courtès: > We don’t want to duplicate it, but it might still make sense to have > them in (guix build-system rebar3) and have it imported by (guix > build-system mix) if needed. Fine for me. I'll change the patches accordingly. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 02/22] build-system: Add 'rebar3-build-system'. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel 2022-04-10 18:56 ` [bug#54796] [PATCH v4 01/22] import: Add hex.pm importer Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-29 13:06 ` [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Ludovic Courtès 2022-04-10 18:57 ` [bug#54796] [PATCH v4 03/22] gnu: Add erlang-cf Hartmut Goebel ` (23 subsequent siblings) 25 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * guix/build-system/rebar3.scm, guix/build/rebar3-build-system.scm: New files. * Makefile.am (MODULES): Add them. --- Makefile.am | 2 + doc/guix.texi | 41 ++++++++ guix/build-system/rebar3.scm | 143 ++++++++++++++++++++++++++++ guix/build/rebar3-build-system.scm | 147 +++++++++++++++++++++++++++++ 4 files changed, 333 insertions(+) create mode 100644 guix/build-system/rebar3.scm create mode 100644 guix/build/rebar3-build-system.scm diff --git a/Makefile.am b/Makefile.am index 46481dac2c..e2321d1098 100644 --- a/Makefile.am +++ b/Makefile.am @@ -164,6 +164,7 @@ MODULES = \ guix/build-system/waf.scm \ guix/build-system/r.scm \ guix/build-system/rakudo.scm \ + guix/build-system/rebar3.scm \ guix/build-system/ruby.scm \ guix/build-system/scons.scm \ guix/build-system/texlive.scm \ @@ -217,6 +218,7 @@ MODULES = \ guix/build/r-build-system.scm \ guix/build/renpy-build-system.scm \ guix/build/rakudo-build-system.scm \ + guix/build/rebar3-build-system.scm \ guix/build/ruby-build-system.scm \ guix/build/scons-build-system.scm \ guix/build/texlive-build-system.scm \ diff --git a/doc/guix.texi b/doc/guix.texi index 6c17b26d70..518fabf48d 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -8717,6 +8717,47 @@ with @code{#:zef} or removed by passing @code{#f} to the @code{with-zef?} parameter. @end defvr +@defvr {Scheme Variable} rebar3-build-system +This variable is exported by @code{(guix build-system rebar3)}. It +implements a build procedure around @code{rebar3}. + +It adds both @code{rebar3} and the @code{erlang} to the set of inputs. +Different packages can be specified with the @code{#:rebar} and +@code{#:erlang} parameters, respectively. + +This build system is based on @code{gnu-build-system}, but with the +following phases changed: + +@table @code + +@item unpack +This phase, after unpacking the source like the @code{gnu-build-system} +does, checks for a file @code{contents.tar.gz} at the top-level of the +source. If this file exists, it will be unpacked, too. This eases +handling of package hosted by @i{hex.pm}. + +@item bootstrap +@item configure +There are no @code{bootstrap} and @code{configure} phase because erlang +packages typically don’t need to be configured. + +@item build +This phase runs @code{rebar3 compile} +with the flags listed in @code{#:rebar-flags}. + +@item check +Unless @code{#:tests? #f} is passed, +this phase runs @code{rebar3 eunit}, +or some other target specified with @code{#:test-target}, +with the flags listed in @code{#:rebar-flags}, + +@item install +This installs the files created in the @i{default} profile, or some +other profile specified with @code{#:install-profile}. + +@end table +@end defvr + @defvr {Scheme Variable} texlive-build-system This variable is exported by @code{(guix build-system texlive)}. It is used to build TeX packages in batch mode with a specified engine. The diff --git a/guix/build-system/rebar3.scm b/guix/build-system/rebar3.scm new file mode 100644 index 0000000000..753dcf0989 --- /dev/null +++ b/guix/build-system/rebar3.scm @@ -0,0 +1,143 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.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 (guix build-system rebar3) + #:use-module (guix store) + #:use-module (guix utils) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (guix monads) + #:use-module (guix search-paths) + #:use-module (guix build-system) + #:use-module (guix build-system gnu) + #:use-module ((guix hexpm-download) #:select (hexpm-uri) #:prefix dl:) + #:use-module (ice-9 match) + #:use-module (srfi srfi-26) + #:export (hexpm-uri + %rebar3-build-system-modules + rebar3-build + rebar3-build-system)) + +;; +;; Standard build procedure for Erlang packages using Rebar3. +;; + +(define hexpm-uri dl:hexpm-uri) + +(define %rebar3-build-system-modules + ;; Build-side modules imported by default. + `((guix build rebar3-build-system) + ,@%gnu-build-system-modules)) + +(define (default-rebar3) + "Return the default Rebar3 package." + ;; 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." + ;; 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 rebar3-build) + (arguments (strip-keyword-arguments private-keywords arguments))))) + +(define* (rebar3-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 rebar3-build-system) + %standard-phases)) + (outputs '("out")) + (search-paths '()) + (native-search-paths '()) + (system (%current-system)) + (imported-modules %rebar3-build-system-modules) + (modules '((guix build rebar3-build-system) + (guix build utils)))) + "Build SOURCE with INPUTS." + + (define builder + (with-imported-modules imported-modules + #~(begin + (use-modules #$@(sexp->gexp modules)) + + #$(with-build-variables inputs outputs + #~(rebar3-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))) + ;; Note: Always pass #:graft? #f. Without it, ALLOWED-REFERENCES & + ;; co. would be interpreted as referring to grafted packages. + (gexp->derivation name builder + #:system system + #:target #f + #:graft? #f + #:guile-for-build guile))) + +(define rebar3-build-system + (build-system + (name 'rebar3) + (description "The standard Rebar3 build system") + (lower lower))) diff --git a/guix/build/rebar3-build-system.scm b/guix/build/rebar3-build-system.scm new file mode 100644 index 0000000000..ae18538ed3 --- /dev/null +++ b/guix/build/rebar3-build-system.scm @@ -0,0 +1,147 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2019 Björn Höfling <bjoern.hoefling@bjoernhoefling.de> +;;; Copyright © 2020, 2022 Hartmut Goebel <h.goebel@crazy-compilers.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 (guix build rebar3-build-system) + #: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 (srfi srfi-1) + #:use-module (srfi srfi-26) + #:export (rebar3-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~%"))) + +(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 %standard-phases + (modify-phases gnu:%standard-phases + (replace 'unpack unpack) + (delete 'bootstrap) + (delete 'configure) + (add-before 'build 'erlang-depends erlang-depends) + (replace 'build build) + (replace 'check check) + (replace 'install install))) + +(define* (rebar3-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)) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-10 18:57 ` [bug#54796] [PATCH v4 02/22] build-system: Add 'rebar3-build-system' Hartmut Goebel @ 2022-04-29 13:06 ` Ludovic Courtès 2022-05-05 12:46 ` Hartmut Goebel 0 siblings, 1 reply; 98+ messages in thread From: Ludovic Courtès @ 2022-04-29 13:06 UTC (permalink / raw) To: Hartmut Goebel; +Cc: 54796 Hi, Hartmut Goebel <h.goebel@crazy-compilers.com> skribis: > * guix/build-system/rebar3.scm, guix/build/rebar3-build-system.scm: New files. > * Makefile.am (MODULES): Add them. Please mention the guix.texi changes here. > +@defvr {Scheme Variable} rebar3-build-system > +This variable is exported by @code{(guix build-system rebar3)}. It > +implements a build procedure around @code{rebar3}. Please provide a bit more context, like: “[…] around @uref{http://example.org,rebar3}, a build system for programs written in the Erlang language.” > +source. If this file exists, it will be unpacked, too. This eases > +handling of package hosted by @i{hex.pm}. Rather: “hosted at @uref{https://hex.pm/}, the Erlang package repository.” > + (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"))) “ebin” and “priv” are non-standard directory names. It would be ideal to avoid them, unless this is a hard requirement for Erlang/rebar3? Otherwise LGTM! Thanks, Ludo’. ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-29 13:06 ` [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Ludovic Courtès @ 2022-05-05 12:46 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-05-05 12:46 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 54796 Am 29.04.22 um 15:06 schrieb Ludovic Courtès: > “ebin” and “priv” are non-standard directory names. It would be ideal > to avoid them, unless this is a hard requirement for Erlang/rebar3? AFAIU they are. I'm lacking knowledge about Erlang/OTP internals, and this is what I experienced. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 03/22] gnu: Add erlang-cf. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel 2022-04-10 18:56 ` [bug#54796] [PATCH v4 01/22] import: Add hex.pm importer Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 02/22] build-system: Add 'rebar3-build-system' Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 04/22] gnu: Add erlang-certifi Hartmut Goebel ` (22 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-cf): New variable. --- gnu/packages/erlang.scm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 888a0f4f1e..0b9e89d134 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2016, 2017 Pjotr Prins <pjotr.guix@thebird.nl> ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Nikita <nikita@n0.is> +;;; Copyright © 2020-2022 Hartmut Goebel <h.goebel@crazy-compilers.com> ;;; Copyright © 2021 Oskar Köök <oskar@maatriks.ee> ;;; Copyright © 2021 Cees de Groot <cg@evrl.com> ;;; @@ -26,6 +27,7 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix build-system gnu) #:use-module (guix build-system emacs) + #:use-module (guix build-system rebar3) #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix packages) @@ -203,3 +205,20 @@ built-in support for concurrency, distribution and fault tolerance.") "This package provides an Emacs major mode for editing Erlang source 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 "cf" version)) + (sha256 + (base32 "0wknz4xkqkhgvlx4vx5619p8m65v7g87lfgsvfy04jrsgm28spii")))) + (build-system rebar3-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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 04/22] gnu: Add erlang-certifi. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (2 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 03/22] gnu: Add erlang-cf Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 05/22] gnu: Add erlang-erlware-commons Hartmut Goebel ` (21 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-certifi): New variable. --- gnu/packages/erlang.scm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 0b9e89d134..02ea0deed1 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -206,6 +206,30 @@ built-in support for concurrency, distribution and fault tolerance.") files.") (license license:asl2.0))) +(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 rebar3-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.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 05/22] gnu: Add erlang-erlware-commons. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (3 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 04/22] gnu: Add erlang-certifi Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 06/22] gnu: Add erlang-cth-readable Hartmut Goebel ` (20 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-erlware-commons): New variable. --- gnu/packages/erlang.scm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 02ea0deed1..98f6a44cb4 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -246,3 +246,30 @@ Mozilla's canonical set.") (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-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 rebar3-build-system) + (propagated-inputs + (list erlang-cf)) + (native-inputs + (list git-minimal/fixed)) ;; Required for tests + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'check 'check-setup + (lambda _ + (setenv "TERM" "xterm")))))) ; enable color in logs + (home-page "http://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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 06/22] gnu: Add erlang-cth-readable. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (4 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 05/22] gnu: Add erlang-erlware-commons Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 07/22] gnu: Add erlang-bbmustache Hartmut Goebel ` (19 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-cth-readable): New variable. --- gnu/packages/erlang.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 98f6a44cb4..a06de3bb87 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -247,6 +247,27 @@ Mozilla's canonical set.") printing extending the io:format syntax to add colours.") (license license:expat))) +(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 rebar3-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.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 07/22] gnu: Add erlang-bbmustache. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (5 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 06/22] gnu: Add erlang-cth-readable Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 08/22] gnu: Add erlang-getopt Hartmut Goebel ` (18 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-bbmustache): New variable. --- gnu/packages/erlang.scm | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index a06de3bb87..c025eb83cd 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -206,6 +206,38 @@ built-in support for concurrency, distribution and fault tolerance.") 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 rebar3-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") -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 08/22] gnu: Add erlang-getopt. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (6 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 07/22] gnu: Add erlang-bbmustache Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 09/22] gnu: Add erlang-eunit-formatters Hartmut Goebel ` (17 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-getopt): New variable. --- gnu/packages/erlang.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index c025eb83cd..2b4d0bfdc3 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -326,3 +326,20 @@ outputs you want to be readable around all that noise they contain.") (description "Erlware Commons is an Erlware project focused on all aspects of reusable Erlang components.") (license license:expat))) + +(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 rebar3-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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 09/22] gnu: Add erlang-eunit-formatters. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (7 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 08/22] gnu: Add erlang-getopt Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 10/22] gnu: Add erlang-providers Hartmut Goebel ` (16 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-eunit-formatters): New variable. --- gnu/packages/erlang.scm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 2b4d0bfdc3..0b4fe327a5 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -327,6 +327,22 @@ outputs you want to be readable around all that noise they contain.") 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 rebar3-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") -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 10/22] gnu: Add erlang-providers. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (8 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 09/22] gnu: Add erlang-eunit-formatters Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 11/22] gnu: Add erlang-parse-trans Hartmut Goebel ` (15 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-providers): New variable. --- gnu/packages/erlang.scm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 0b4fe327a5..351484b5d6 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -359,3 +359,21 @@ of reusable Erlang components.") (description "This package provides an Erlang module to parse command line arguments using the GNU getopt syntax.") (license license:bsd-3))) + +(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 rebar3-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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 11/22] gnu: Add erlang-parse-trans. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (9 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 10/22] gnu: Add erlang-providers Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 12/22] gnu: Add erlang-hex-core Hartmut Goebel ` (14 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-parse-trans): New variable. --- gnu/packages/erlang.scm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 351484b5d6..df6c722f68 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -360,6 +360,29 @@ of reusable Erlang components.") arguments using the GNU getopt syntax.") (license license:bsd-3))) +(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 rebar3-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-providers (package (name "erlang-providers") -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 12/22] gnu: Add erlang-hex-core. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (10 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 11/22] gnu: Add erlang-parse-trans Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 13/22] gnu: Add erlang-ssl-verify-fun Hartmut Goebel ` (13 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-hex-core): New variable. --- gnu/packages/erlang.scm | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index df6c722f68..219cc04b05 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -360,6 +360,32 @@ of reusable Erlang components.") 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 rebar3-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-parse-trans (package (name "erlang-parse-trans") -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 13/22] gnu: Add erlang-ssl-verify-fun. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (11 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 12/22] gnu: Add erlang-hex-core Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 14/22] gnu: Add erlang-relx Hartmut Goebel ` (12 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-ssl-verify-fun): New variable. --- gnu/packages/erlang.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 219cc04b05..b151f5c695 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -426,3 +426,20 @@ compile-time constant.") (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 "ssl_verify_fun" version)) + (sha256 + (base32 "1026l1z1jh25z8bfrhaw0ryk5gprhrpnirq877zqhg253x3x5c5x")))) + (build-system rebar3-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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 14/22] gnu: Add erlang-relx. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (12 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 13/22] gnu: Add erlang-ssl-verify-fun Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 15/22] gnu: Add erlang-edown Hartmut Goebel ` (11 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-relx): New variable. --- gnu/packages/erlang.scm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index b151f5c695..9c8f61b714 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -427,6 +427,28 @@ compile-time constant.") (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 rebar3-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.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 15/22] gnu: Add erlang-edown. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (13 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 14/22] gnu: Add erlang-relx Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 16/22] gnu: Add erlang-jsone Hartmut Goebel ` (10 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-edown): New variable. --- gnu/packages/erlang.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 9c8f61b714..a8beb7e34c 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -300,6 +300,23 @@ printing extending the io:format syntax to add colours.") 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 rebar3-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.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 16/22] gnu: Add erlang-jsone. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (14 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 15/22] gnu: Add erlang-edown Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 17/22] gnu: Add erlang-proper Hartmut Goebel ` (9 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-jsone): New variable. --- gnu/packages/erlang.scm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index a8beb7e34c..fdc59894c0 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -403,6 +403,30 @@ arguments using the GNU getopt syntax.") 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 rebar3-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.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 17/22] gnu: Add erlang-proper. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (15 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 16/22] gnu: Add erlang-jsone Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 18/22] gnu: Add erlang-covertool Hartmut Goebel ` (8 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-proper): New variable. --- gnu/packages/erlang.scm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index fdc59894c0..33ac324074 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -450,6 +450,33 @@ 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 rebar3-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-providers (package (name "erlang-providers") -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 18/22] gnu: Add erlang-covertool. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (16 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 17/22] gnu: Add erlang-proper Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 19/22] gnu: Add rebar3 Hartmut Goebel ` (7 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (erlang-covertool): New variable. --- gnu/packages/erlang.scm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 33ac324074..18ea933333 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -279,6 +279,27 @@ Mozilla's canonical set.") printing extending the io:format syntax to add colours.") (license license:expat))) +(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 rebar3-build-system) + (home-page "https://github.com/covertool/covertool") + (synopsis "Convert Erlang 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.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 19/22] gnu: Add rebar3. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (17 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 18/22] gnu: Add erlang-covertool Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-29 13:16 ` [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Ludovic Courtès 2022-04-10 18:57 ` [bug#54796] [PATCH v4 20/22] gnu: Add rebar3-raw-deps Hartmut Goebel ` (6 subsequent siblings) 25 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (rebar3): New variable. --- gnu/packages/erlang.scm | 76 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 18ea933333..e8f43e7de2 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -554,3 +554,79 @@ a well configured release directory.") (description "This package provides SSL verification functions for Erlang.") (license license:expat))) + +(define-public rebar3 + (package + (name "rebar3") + (version "3.18.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/erlang/rebar3") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "09648hzc2mnjwf9klm20cg4hb5rn2xv2gmzcg98ffv37p5yfl327")))) + (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)))) + (home-page "https://www.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 +compile and test Erlang applications, port drivers and releases. + +@code{rebar3} is a self-contained Erlang script, so it's easy to distribute or +even embed directly in a project. Where possible, rebar uses standard +Erlang/OTP conventions for project structures, thus minimizing the amount of +build configuration work. @code{rebar3} also provides dependency management, +enabling application writers to easily re-use common libraries from a variety +of locations (git, hg, etc).") + (license license:asl2.0))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-10 18:57 ` [bug#54796] [PATCH v4 19/22] gnu: Add rebar3 Hartmut Goebel @ 2022-04-29 13:16 ` Ludovic Courtès 2022-05-06 14:58 ` Hartmut Goebel 0 siblings, 1 reply; 98+ messages in thread From: Ludovic Courtès @ 2022-04-29 13:16 UTC (permalink / raw) To: Hartmut Goebel; +Cc: 54796 Hartmut Goebel <h.goebel@crazy-compilers.com> skribis: > * gnu/packages/erlang.scm (rebar3): New variable. [...] > + (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)))) Not a blocker, but I’d rather see this eventually changed to use a gexp, like so: #:arguments #~(modify-phases … (add-before … (lambda … (for-each (lambda (source) …) '(#$@(map package-source (list erlang-bbmustache …))))))) Ludo’. ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-29 13:16 ` [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Ludovic Courtès @ 2022-05-06 14:58 ` Hartmut Goebel 2022-05-09 8:25 ` Ludovic Courtès 0 siblings, 1 reply; 98+ messages in thread From: Hartmut Goebel @ 2022-05-06 14:58 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 54796 Am 29.04.22 um 15:16 schrieb Ludovic Courtès: > Not a blocker, but I’d rather see this eventually changed to use a gexp, > like so: Writing some decent code for with is beyond my scheme knowledge. I leave this as an excersice for guile experts. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-05-06 14:58 ` Hartmut Goebel @ 2022-05-09 8:25 ` Ludovic Courtès 2022-05-09 10:15 ` Hartmut Goebel 0 siblings, 1 reply; 98+ messages in thread From: Ludovic Courtès @ 2022-05-09 8:25 UTC (permalink / raw) To: Hartmut Goebel; +Cc: 54796 Hi, Hartmut Goebel <h.goebel@crazy-compilers.com> skribis: > Am 29.04.22 um 15:16 schrieb Ludovic Courtès: >> Not a blocker, but I’d rather see this eventually changed to use a gexp, >> like so: > > Writing some decent code for with is beyond my scheme knowledge. I > leave this as an excersice for guile experts. To be fair, there’s not much expertise to be had beyond mimicking the example I gave you in the parent message; it’s close to working code! Thanks, Ludo’. ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-05-09 8:25 ` Ludovic Courtès @ 2022-05-09 10:15 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-05-09 10:15 UTC (permalink / raw) To: Ludovic Courtès; +Cc: 54796 Am 09.05.22 um 10:25 schrieb Ludovic Courtès: > To be fair, there’s not much expertise to be had beyond mimicking the > example I gave you in the parent message; it’s close to working code! This is what I thought. But beside the package, there is also required the original package's name (no prefix, underscores instead of dashes). And the code I was able to write was ugly. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 20/22] gnu: Add rebar3-raw-deps. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (18 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 19/22] gnu: Add rebar3 Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 21/22] gnu: Add rebar3-git-vsn Hartmut Goebel ` (5 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (rebar3-raw-deps): New variable. --- gnu/packages/erlang.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index e8f43e7de2..e5331a37a5 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -630,3 +630,20 @@ build configuration work. @code{rebar3} also provides dependency management, enabling application writers to easily re-use common libraries from a variety 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 rebar3-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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 21/22] gnu: Add rebar3-git-vsn. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (19 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 20/22] gnu: Add rebar3-raw-deps Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 22/22] gnu: Add rebar3-proper Hartmut Goebel ` (4 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (rebar3-git-vsn): New variable. --- gnu/packages/erlang.scm | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index e5331a37a5..c6cffd9906 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -37,6 +37,7 @@ #: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)) @@ -647,3 +648,34 @@ of locations (git, hg, etc).") (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 rebar3-build-system) + (inputs + (list git-minimal/fixed)) + (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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 22/22] gnu: Add rebar3-proper. 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (20 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 21/22] gnu: Add rebar3-git-vsn Hartmut Goebel @ 2022-04-10 18:57 ` Hartmut Goebel 2022-04-11 12:04 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Maxime Devos ` (3 subsequent siblings) 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-04-10 18:57 UTC (permalink / raw) To: 54796 * gnu/packages/erlang.scm (rebar3-proper): New variable. --- gnu/packages/erlang.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index c6cffd9906..ea441e1c2a 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -679,3 +679,20 @@ applications as a dependent libraries.") (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 rebar3-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))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (21 preceding siblings ...) 2022-04-10 18:57 ` [bug#54796] [PATCH v4 22/22] gnu: Add rebar3-proper Hartmut Goebel @ 2022-04-11 12:04 ` Maxime Devos 2022-05-05 12:56 ` Hartmut Goebel 2022-04-29 13:18 ` [bug#54796] [PATCH v3 " Ludovic Courtès ` (2 subsequent siblings) 25 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-11 12:04 UTC (permalink / raw) To: Hartmut Goebel, 54796 [-- Attachment #1: Type: text/plain, Size: 946 bytes --] Hartmut Goebel schreef op zo 10-04-2022 om 20:57 [+0200]: > * Shall the build system actually be called „rebar*3*“ or just „rebar“? There > is also a build-tool „rebar2“, which is obsoltete and not supported by this > build-system. Anyhow, somewhen in the future there might be some „rebar4“, > which we might be able to cover with the same build-system. WDYT? Was the rebar2 --> rebar3 change mostly backwards-compatible, and would a hypothetical rebar2 or rebar4 build system look mostly the same? If both hold, I would treat rebar2 --> rebar3 as ‘merely’ a package update from python@2 to python@3 -- some breaking changes, but no need for separate build systems (and hence, no 3 suffix) If rebar2, rebar3 and rebar4 would require completely different phases and use different file formats or such, IMO a separate build system (and hence, a 2, 3 or 4 suffix) may be useful. Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-11 12:04 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Maxime Devos @ 2022-05-05 12:56 ` Hartmut Goebel 0 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-05-05 12:56 UTC (permalink / raw) To: Maxime Devos, 54796 Am 11.04.22 um 14:04 schrieb Maxime Devos: > If rebar2, rebar3 and rebar4 would require completely different phases > and use different file formats or such, IMO a separate build system > (and hence, a 2, 3 or 4 suffix) may be useful. It took some time to come to a conclusion for me on this: I'm going to rename it into „rebar-build-system“ (without the number). If need arises for some rebar4-build-system, we can still think about adding „rebar3-build-system” as an alias. Rational: I assume, some rebar2 and rebar4 build-systems would have the same phases. „Just” commands might be different. Eg. rebar2 did just „compile“ while rebar3 can have „as prod compile“ — which could be handled with different means. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (22 preceding siblings ...) 2022-04-11 12:04 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Maxime Devos @ 2022-04-29 13:18 ` Ludovic Courtès 2022-04-29 14:33 ` Maxime Devos 2022-06-15 9:20 ` bug#54796: [PATCH v4 " Hartmut Goebel [not found] ` <1a53c4c0-3516-e337-2e51-ff45ee44cd8d@crazy-compilers.com> 25 siblings, 1 reply; 98+ messages in thread From: Ludovic Courtès @ 2022-04-29 13:18 UTC (permalink / raw) To: Hartmut Goebel; +Cc: 54796, Maxime Devos Hi, Hartmut Goebel <h.goebel@crazy-compilers.com> skribis: > Thanks to Maxime Devos for the review of V3. Do ease review for other > reviewers, here is a complete set of updated patches, incorporating Maxime's > comments. Unless Maxime has further comments, this patch series looks ready to me, modulo the cosmetic changes I suggested (some of which can be made afterwards). Hartmut, can we remove guix/extracting-download.scm now? Thanks folks for all the work! Ludo’. ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-29 13:18 ` [bug#54796] [PATCH v3 " Ludovic Courtès @ 2022-04-29 14:33 ` Maxime Devos 2022-06-14 21:29 ` Ludovic Courtès 0 siblings, 1 reply; 98+ messages in thread From: Maxime Devos @ 2022-04-29 14:33 UTC (permalink / raw) To: Ludovic Courtès, Hartmut Goebel; +Cc: 54796 [-- Attachment #1: Type: text/plain, Size: 519 bytes --] Ludovic Courtès schreef op vr 29-04-2022 om 15:18 [+0200]: > Hi, > > Hartmut Goebel <h.goebel@crazy-compilers.com> skribis: > > > Thanks to Maxime Devos for the review of V3. Do ease review for other > > reviewers, here is a complete set of updated patches, incorporating Maxime's > > comments. > > Unless Maxime has further comments, this patch series looks ready to me, > modulo the cosmetic changes I suggested (some of which can be made > afterwards). No further comments. Greetings, Maxime. [-- Attachment #2: This is a digitally signed message part --] [-- Type: application/pgp-signature, Size: 260 bytes --] ^ permalink raw reply [flat|nested] 98+ messages in thread
* [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-29 14:33 ` Maxime Devos @ 2022-06-14 21:29 ` Ludovic Courtès 0 siblings, 0 replies; 98+ messages in thread From: Ludovic Courtès @ 2022-06-14 21:29 UTC (permalink / raw) To: Hartmut Goebel; +Cc: 54796, Maxime Devos Hi Hartmut, Maxime Devos <maximedevos@telenet.be> skribis: > Ludovic Courtès schreef op vr 29-04-2022 om 15:18 [+0200]: >> Hi, >> >> Hartmut Goebel <h.goebel@crazy-compilers.com> skribis: >> >> > Thanks to Maxime Devos for the review of V3. Do ease review for other >> > reviewers, here is a complete set of updated patches, incorporating Maxime's >> > comments. >> >> Unless Maxime has further comments, this patch series looks ready to me, >> modulo the cosmetic changes I suggested (some of which can be made >> afterwards). > > No further comments. This patch series was reviewed and approved a while back, please feel free to push it! There were a couple of suggestions (non-blockers) that you could implement in subsequent patches. Thanks, Ludo’. ^ permalink raw reply [flat|nested] 98+ messages in thread
* bug#54796: [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel ` (23 preceding siblings ...) 2022-04-29 13:18 ` [bug#54796] [PATCH v3 " Ludovic Courtès @ 2022-06-15 9:20 ` Hartmut Goebel [not found] ` <1a53c4c0-3516-e337-2e51-ff45ee44cd8d@crazy-compilers.com> 25 siblings, 0 replies; 98+ messages in thread From: Hartmut Goebel @ 2022-06-15 9:20 UTC (permalink / raw) To: 54796-close Many thanks for the review. Finally I finished this patch series and pushed as 9cccf6490d98bd40ea1eb9e84ecf4a2b32614107 Notable changes compared to last review comments: * removed guix extracting-download - which was an left-over * build-system is now named rebar (without '3') * fixed some minor lint-errors I also validated that all packages are up to date. -- Regards Hartmut Goebel | Hartmut Goebel | h.goebel@crazy-compilers.com | | www.crazy-compilers.com | compilers which you thought are impossible | ^ permalink raw reply [flat|nested] 98+ messages in thread
[parent not found: <1a53c4c0-3516-e337-2e51-ff45ee44cd8d@crazy-compilers.com>]
* [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang [not found] ` <1a53c4c0-3516-e337-2e51-ff45ee44cd8d@crazy-compilers.com> @ 2022-06-17 15:25 ` Ludovic Courtès 0 siblings, 0 replies; 98+ messages in thread From: Ludovic Courtès @ 2022-06-17 15:25 UTC (permalink / raw) To: Hartmut Goebel; +Cc: 54796-done, Maxime Devos Hi, Hartmut Goebel <h.goebel@crazy-compilers.com> skribis: > Many thanks for the review. Finally I finished this patch series and > pushed as 9cccf6490d98bd40ea1eb9e84ecf4a2b32614107 Yay, well done, thanks! Ludo’. ^ permalink raw reply [flat|nested] 98+ messages in thread
end of thread, other threads:[~2022-06-17 15:26 UTC | newest] Thread overview: 98+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-04-08 17:01 [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 01/22] import: Add hex.pm importer Hartmut Goebel 2022-04-09 11:52 ` Maxime Devos 2022-04-09 16:31 ` Hartmut Goebel 2022-04-09 11:53 ` Maxime Devos 2022-04-09 11:55 ` Maxime Devos 2022-04-09 16:50 ` Hartmut Goebel 2022-04-09 11:56 ` Maxime Devos 2022-04-09 11:58 ` Maxime Devos 2022-04-09 16:01 ` Hartmut Goebel 2022-04-09 11:59 ` Maxime Devos 2022-04-10 11:22 ` Hartmut Goebel 2022-04-09 12:07 ` Maxime Devos 2022-04-10 10:36 ` Hartmut Goebel 2022-04-10 12:26 ` Maxime Devos 2022-04-08 17:03 ` [bug#54796] [PATCH v3 02/22] gnu: Add erlang-cf Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 03/22] gnu: Add erlang-certifi Hartmut Goebel 2022-04-09 11:39 ` Maxime Devos 2022-04-10 10:27 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 04/22] gnu: Add erlang-erlware-commons Hartmut Goebel 2022-04-09 10:58 ` Maxime Devos 2022-04-09 15:33 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 05/22] gnu: Add erlang-cth-readable Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 06/22] gnu: Add erlang-bbmustache Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 07/22] gnu: Add erlang-getopt Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 08/22] gnu: Add erlang-eunit-formatters Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 09/22] gnu: Add erlang-providers Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 10/22] gnu: Add erlang-parse-trans Hartmut Goebel 2022-04-09 11:41 ` Maxime Devos 2022-04-09 15:19 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 11/22] gnu: Add erlang-hex-core Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 12/22] gnu: Add erlang-ssl-verify-fun Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 13/22] gnu: Add erlang-relx Hartmut Goebel 2022-04-09 11:43 ` Maxime Devos 2022-04-09 15:32 ` Hartmut Goebel 2022-04-09 11:45 ` Maxime Devos 2022-04-09 15:18 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 14/22] gnu: Add erlang-edown Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 15/22] gnu: Add erlang-jsone Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 16/22] gnu: Add erlang-proper Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 17/22] gnu: Add erlang-covertool Hartmut Goebel 2022-04-09 11:48 ` Maxime Devos 2022-04-09 15:40 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 18/22] gnu: Add rebar3 Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 19/22] gnu: Add rebar3-raw-deps Hartmut Goebel 2022-04-09 11:49 ` Maxime Devos 2022-04-09 15:50 ` Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 20/22] gnu: Add rebar3-git-vsn Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 21/22] gnu: Add rebar3-proper Hartmut Goebel 2022-04-08 17:03 ` [bug#54796] [PATCH v3 22/22] build-system: Add 'rebar3-build-system' Hartmut Goebel 2022-04-09 13:16 ` Maxime Devos 2022-04-09 16:04 ` Hartmut Goebel 2022-04-09 20:56 ` Maxime Devos 2022-04-10 18:49 ` Hartmut Goebel 2022-04-09 13:19 ` Maxime Devos 2022-04-09 16:28 ` Hartmut Goebel 2022-04-09 17:57 ` Maxime Devos 2022-04-10 18:47 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Hartmut Goebel 2022-04-10 18:56 ` [bug#54796] [PATCH v4 01/22] import: Add hex.pm importer Hartmut Goebel 2022-04-29 13:13 ` [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Ludovic Courtès 2022-05-05 12:40 ` Hartmut Goebel 2022-05-05 20:48 ` Ludovic Courtès 2022-05-05 21:06 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 02/22] build-system: Add 'rebar3-build-system' Hartmut Goebel 2022-04-29 13:06 ` [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Ludovic Courtès 2022-05-05 12:46 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 03/22] gnu: Add erlang-cf Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 04/22] gnu: Add erlang-certifi Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 05/22] gnu: Add erlang-erlware-commons Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 06/22] gnu: Add erlang-cth-readable Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 07/22] gnu: Add erlang-bbmustache Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 08/22] gnu: Add erlang-getopt Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 09/22] gnu: Add erlang-eunit-formatters Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 10/22] gnu: Add erlang-providers Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 11/22] gnu: Add erlang-parse-trans Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 12/22] gnu: Add erlang-hex-core Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 13/22] gnu: Add erlang-ssl-verify-fun Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 14/22] gnu: Add erlang-relx Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 15/22] gnu: Add erlang-edown Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 16/22] gnu: Add erlang-jsone Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 17/22] gnu: Add erlang-proper Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 18/22] gnu: Add erlang-covertool Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 19/22] gnu: Add rebar3 Hartmut Goebel 2022-04-29 13:16 ` [bug#54796] [PATCH v3 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Ludovic Courtès 2022-05-06 14:58 ` Hartmut Goebel 2022-05-09 8:25 ` Ludovic Courtès 2022-05-09 10:15 ` Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 20/22] gnu: Add rebar3-raw-deps Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 21/22] gnu: Add rebar3-git-vsn Hartmut Goebel 2022-04-10 18:57 ` [bug#54796] [PATCH v4 22/22] gnu: Add rebar3-proper Hartmut Goebel 2022-04-11 12:04 ` [bug#54796] [PATCH v4 00/22] Add importer for hex.pm and rebar3 build-system for Erlang Maxime Devos 2022-05-05 12:56 ` Hartmut Goebel 2022-04-29 13:18 ` [bug#54796] [PATCH v3 " Ludovic Courtès 2022-04-29 14:33 ` Maxime Devos 2022-06-14 21:29 ` Ludovic Courtès 2022-06-15 9:20 ` bug#54796: [PATCH v4 " Hartmut Goebel [not found] ` <1a53c4c0-3516-e337-2e51-ff45ee44cd8d@crazy-compilers.com> 2022-06-17 15:25 ` [bug#54796] " Ludovic Courtès
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/guix.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.