diff options
author | Tobias Geerinckx-Rice <me@tobias.gr> | 2021-10-08 23:26:24 +0200 |
---|---|---|
committer | Tobias Geerinckx-Rice <me@tobias.gr> | 2021-10-08 23:31:34 +0200 |
commit | a1679b74c9aa20bb51bc4add82ebb7ba78926b9c (patch) | |
tree | 40457ca25c4bf06e203b2b261b15977d2ee36891 | |
parent | ea3d456a5a4ec1bc4cf9a60f04c2ed49881f2b67 (diff) | |
download | guix-a1679b74c9aa20bb51bc4add82ebb7ba78926b9c.tar.gz |
Revert the #51061 patch series for now.
This reverts commits f63c79bf7674df012517f8e9148f94c611e35f32 ..f86f7e24b39928247729020df0134e2e1c4cde62 for more chillax reviewing. See <https://issues.guix.gnu.org/51061#32>.
-rw-r--r-- | Makefile.am | 5 | ||||
-rw-r--r-- | gnu/packages/erlang.scm | 492 | ||||
-rw-r--r-- | guix/build-system/rebar3.scm | 143 | ||||
-rw-r--r-- | guix/build/rebar3-build-system.scm | 150 | ||||
-rw-r--r-- | guix/hexpm-download.scm | 76 | ||||
-rw-r--r-- | guix/import/hexpm.scm | 290 | ||||
-rw-r--r-- | guix/import/utils.scm | 1 | ||||
-rw-r--r-- | guix/scripts/import.scm | 2 | ||||
-rw-r--r-- | guix/scripts/import/hexpm.scm | 114 | ||||
-rw-r--r-- | guix/upstream.scm | 20 |
10 files changed, 2 insertions, 1291 deletions
diff --git a/Makefile.am b/Makefile.am index bb0b5989d2..f2b6c8e8da 100644 --- a/Makefile.am +++ b/Makefile.am @@ -99,7 +99,6 @@ MODULES = \ guix/extracting-download.scm \ guix/git-download.scm \ guix/hg-download.scm \ - guix/hexpm-download.scm \ guix/swh.scm \ guix/monads.scm \ guix/monad-repl.scm \ @@ -163,7 +162,6 @@ 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,7 +215,6 @@ 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 \ @@ -265,7 +262,6 @@ 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 \ @@ -313,7 +309,6 @@ 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/gnu/packages/erlang.scm b/gnu/packages/erlang.scm index 13235c6f1f..32bc12ebb8 100644 --- a/gnu/packages/erlang.scm +++ b/gnu/packages/erlang.scm @@ -4,7 +4,6 @@ ;;; 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, 2021 Hartmut Goebel <h.goebel@crazy-compilers.com> ;;; Copyright © 2021 Oskar Köök <oskar@maatriks.ee> ;;; Copyright © 2021 Cees de Groot <cg@evrl.com> ;;; @@ -27,10 +26,8 @@ #: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 hexpm-download) #:use-module (guix packages) #:use-module (guix utils) #:use-module (gnu packages) @@ -38,7 +35,6 @@ #: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)) @@ -225,491 +221,3 @@ 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-bbmustache - (package - (name "erlang-bbmustache") - (version "1.12.1") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "bbmustache" version)) - (sha256 - (base32 "0wbfayx6940zf57bpwg1m9sk3cpgam2q8n0w74alkrc4gc7hn47w")))) - (build-system rebar3-build-system) - (inputs - `(("erlang-edown" ,erlang-edown) - ("erlang-getopt" ,erlang-getopt) - ("erlang-rebar3-git-vsn" ,erlang-rebar3-git-vsn))) - (arguments - `(#:tests? #f ;; requires mustache specification file - #:phases - (modify-phases %standard-phases - (add-after 'build 'build-escript - (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"))) - #t))))) - (home-page "https://github.com/soranoba/bbmustache/") - (synopsis "Binary pattern match Based Mustache template engine for Erlang") - (description "This Erlang library provides a Binary pattern match Based -Mustache template engine") - (license license:expat))) - -(define-public erlang-certifi - (package - (name "erlang-certifi") - (version "2.7.0") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "certifi" version)) - (sha256 - (base32 "1ssiajvll5nilrnsg23ja3qz2fmvnbhy176c8i0gqj0h1alismn9")))) - (build-system rebar3-build-system) - (inputs - `(("parse-trans" ,erlang-parse-trans))) - (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") - (version "0.3.1") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "cf" version)) - (sha256 - (base32 "0vnmbb1n899xw2p4x6c3clpzxcqqdsfbfhh1dfy530i3201vr2h4")))) - (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))) - -(define-public erlang-covertool - (package - (name "erlang-covertool") - (version "2.0.4") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "covertool" version)) - (sha256 - (base32 "10krv66nabzrgkz4k3gfp7zx1x9030vnkhc0n1f1chwzwf4sa6nx")))) - (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") - (version "1.5.1") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "cth_readable" version)) - (sha256 - (base32 "0hqzgd8fvs4d1bhpm6dkm3bm2jik4qbl78s514r5ivwjxw1dzrds")))) - (build-system rebar3-build-system) - (propagated-inputs - `(("erlang-cf" ,erlang-cf))) - (arguments - `(#:tests? #f)) ;; no test-suite - (home-page "https://github.com/ferd/cth_readable") - (synopsis "Common Test hooks for more readable logs for Erlang") - (description "This package provides an OTP library to be used for CT log -outputs you want to be readable around all that noise they contain.") - (license license:bsd-3))) - -(define-public erlang-edown - (package - (name "erlang-edown") - (version "0.8.4") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "edown" version)) - (sha256 - (base32 "1khk5yxqjix2irsr02i0zpkv52myakpw4ahsr4fcy81l3xlk58dx")))) - (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") - (version "1.6.0") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "erlware_commons" version)) - (sha256 - (base32 "0xc3kiylingqrrnzhxm2j2n5gr3hxqgpibhi9nva9bwjs4n155fm")))) - (build-system rebar3-build-system) - (propagated-inputs - `(("erlang-cf" ,erlang-cf))) - (native-inputs - `(("git" ,git))) ;; Required for tests - (arguments - `(#:tests? #f)) ;; TODO: 1/219 tests fail - very simple one, though - (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))) - -(define-public erlang-eunit-formatters - (package - (name "erlang-eunit-formatters") - (version "0.5.0") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "eunit_formatters" version)) - (sha256 - (base32 "18q3vb12799584kdb998298b6bfh686mzi5s7pkb7djrf93vgf5f")))) - (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") - (version "1.0.2") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "getopt" version)) - (sha256 - (base32 "1yxs36l1ll56zrxn81kw5qd8fv1q14myhjylk7dk31palg7jl725")))) - (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))) - -(define-public erlang-hex-core - (package - (name "erlang-hex-core") - (version "0.8.2") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "hex_core" version)) - (sha256 - (base32 "15fybnqxl5lzkpd8fjj1fxmj8cxcdpkxn0cvwc41cv0vxv3pw797")))) - (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 - `(("erlang-proper" ,erlang-proper) - ("erlang-rebar3-proper" ,erlang-rebar3-proper))) - (propagated-inputs - `(("erlang-getopt" ,erlang-getopt))) - (home-page "https://github.com/hexpm/hex_core") - (synopsis "Reference implementation of Hex specifications") - (description "This package provides the reference implementation of Hex -specifications.") - (license license:asl2.0))) - -(define-public erlang-jsone - (package - (name "erlang-jsone") - (version "1.6.1") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "jsone" version)) - (sha256 - (base32 "1wdbj4a736bg2fh4qk7y3h6lsdi84ivvypgbkphzy0mfz7nkc97p")))) - (build-system rebar3-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'unpack 'disable-covertool - (lambda _ - (substitute* "rebar.config" - (("\\{project_plugins, \\[covertool\\]\\}\\." _) ""))))))) - (home-page "https://github.com/sile/jsone/") - (synopsis "Erlang JSON Library") - (description "An Erlang library for encoding and decoding JSON data.") - (license license:expat))) - -(define-public erlang-parse-trans - (package - (name "erlang-parse-trans") - (version "3.4.1") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "parse_trans" version)) - (sha256 - (base32 "1g3ablipihi8z64j9195pmrlf7gymyi21j2da9y509igs3q1sxfc")))) - (build-system rebar3-build-system) - (inputs - `(("erlang-getopt" ,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-proper - (package - (name "erlang-proper") - (version "1.4.0") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "proper" version)) - (sha256 - (base32 "1b0srk0swbns6807vxwhj1hfrql7r14arysaax99kvl12f4q3qci")))) - (build-system rebar3-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'unpack 'disable-covertool - (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") - (version "1.9.0") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "providers" version)) - (sha256 - (base32 "0rq5zrqrsv2zgg84yfgh1faahnl4hkn92lja43iqihyiy181813z")))) - (propagated-inputs - `(("erlang-cf" ,erlang-cf) - ("erlang-erlware-commons" ,erlang-erlware-commons) - ("erlang-getopt" ,erlang-getopt))) - (build-system rebar3-build-system) - (home-page "https://github.com/tsloughter/providers") - (synopsis "Erlang providers library") - (description "This package provides an Erlang providers library.") - (license license:asl2.0))) - -(define-public erlang-rebar3-git-vsn - (package - (name "erlang-rebar3-git-vsn") - (version "1.1.1") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "rebar3_git_vsn" version)) - (sha256 - (base32 "1ra4xjyc40r97aqb8aq2rll1v8wkf9jyisnbk34xdqcgv9s9iw7d")))) - (build-system rebar3-build-system) - (inputs - `(("git" ,git))) - (arguments - `(;; Running the tests require binary artifact (tar-file containing - ;; samples git repos) - #: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))) - -(define-public erlang-rebar3-proper - (package - (name "erlang-rebar3-proper") - (version "0.12.1") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "rebar3_proper" version)) - (sha256 - (base32 "0j3a9byxbdrfinynq2xdz5mz7s4vpdlsmv7lln80lpqxswnafpfv")))) - (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))) - -(define-public erlang-rebar3-raw-deps - (package - (name "erlang-rebar3-raw-deps") - (version "2.0.0") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "rebar3_raw_deps" version)) - (sha256 - (base32 "1w8whb86yl2mpv67biqnwaam8xpm4pq8yyidifzj1svjyd37hxv7")))) - (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))) - -(define-public erlang-relx - (package - (name "erlang-relx") - (version "4.5.0") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "relx" version)) - (sha256 - (base32 "12fjcb5b992ixxkc7v7v55ln1i5qak7dzmzqvf6hx50l1ip3hh58")))) - (build-system rebar3-build-system) - (propagated-inputs - `(("erlang-bbmustache" ,erlang-bbmustache) - ("erlang-cf" ,erlang-cf) - ("erlang-erlware-commons" ,erlang-erlware-commons) - ("erlang-getopt" ,erlang-getopt) - ("erlang-providers" ,erlang-providers))) - (home-page "https://erlware.github.io/relx/") - (synopsis "Release assembler for Erlang/OTP Releases") - (description "Relx assembles releases for an Erlang/OTP release. Given a -release specification and a list of directories in which to search for OTP -applications it will generate a release output. That output depends heavily on -what plugins available and what options are defined, but usually it is simply -a well configured release directory.") - (license license:asl2.0))) - -(define-public erlang-ssl-verify-fun - (package - (name "erlang-ssl-verify-fun") - (version "1.1.6") - (source - (origin - (method hexpm-fetch) - (uri (hexpm-uri "ssl_verify_fun" version)) - (sha256 - (base32 "0bwdqhnmlv0jfs5mrws2a75zngiihnvcni2hj4l65r5abnw050vx")))) - (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))) - -(define-public rebar3 - (package - (name "rebar3") - (version "3.17.0") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/erlang/rebar3.git") - (commit version))) - (file-name (git-file-name name version)) - (sha256 - (base32 "02sk3whrbprzlih4pgcsd6ngmassfjfmkz21gwvb7mq64pib40k6")))) - (build-system gnu-build-system) - (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" "-xzf" input "-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")) - #t)) - (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"))) - #t)) - (delete 'check)))) - (native-inputs - `(("erlang" ,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))) diff --git a/guix/build-system/rebar3.scm b/guix/build-system/rebar3.scm deleted file mode 100644 index af0d0edc59..0000000000 --- a/guix/build-system/rebar3.scm +++ /dev/null @@ -1,143 +0,0 @@ -;;; 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 packages) - #:use-module (guix derivations) - #:use-module (guix search-paths) - #:use-module (guix build-system) - #:use-module (guix build-system gnu) - #:use-module (ice-9 match) - #:use-module (srfi srfi-26) - #:export (%rebar3-build-system-modules - rebar3-build - rebar3-build-system)) - -;; -;; Standard build procedure for Erlang packages using Rebar3. -;; - -(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." - (define private-keywords - '(#:source #:target #:rebar #: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 store name inputs - #:key - (tests? #t) - (test-target "eunit") - (configure-flags ''()) - (make-flags ''("skip_deps=true" "-vv")) - (build-target "compile") - ;; TODO: pkg-name - (phases '(@ (guix build rebar3-build-system) - %standard-phases)) - (outputs '("out")) - (search-paths '()) - (system (%current-system)) - (guile #f) - (imported-modules %rebar3-build-system-modules) - (modules '((guix build rebar3-build-system) - (guix build utils)))) - "Build SOURCE with INPUTS." - (define builder - `(begin - (use-modules ,@modules) - (rebar3-build #:name ,name - #:source ,(match (assoc-ref inputs "source") - (((? derivation? source)) - (derivation->output-path source)) - ((source) - source) - (source - source)) - #:make-flags ,make-flags - #:configure-flags ,configure-flags - #:system ,system - #:tests? ,tests? - #:test-target ,test-target - #:build-target ,build-target - #:phases ,phases - #:outputs %outputs - #:search-paths ',(map search-path-specification->sexp - search-paths) - #:inputs %build-inputs))) - - (define guile-for-build - (match guile - ((? package?) - (package-derivation store guile system #:graft? #f)) - (#f ; the default - (let* ((distro (resolve-interface '(gnu packages commencement))) - (guile (module-ref distro 'guile-final))) - (package-derivation store guile system #:graft? #f))))) - - (build-expression->derivation store name builder - #:inputs inputs - #:system system - #:modules imported-modules - #:outputs outputs - #:guile-for-build guile-for-build)) - -(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 deleted file mode 100644 index d503fc9944..0000000000 --- a/guix/build/rebar3-build-system.scm +++ /dev/null @@ -1,150 +0,0 @@ -;;; 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 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 (%standard-phases - rebar3-build)) - -;; -;; 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) - (symlink (string-append elibdir "/" dirname) - (string-append "_checkouts/" dirname))) - (list-directories elibdir))))) - input-directories) - #t) - -(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." - ;; archives from hexpm typicalls do not contain a directory level - ;; TODO: Check if archive contains a directory level - (mkdir "source") - (chdir "source") - (if (file-is-directory? source) - (begin - ;; Preserve timestamps (set to the Epoch) on the copied tree so that - ;; things work deterministically. - (copy-recursively source "." - #:keep-mtime? #t)) - (begin - (if (string-suffix? ".zip" source) - (invoke "unzip" source) - (invoke "tar" "xvf" source)))) - #t) - -(define* (build #:key (make-flags '()) (build-target "compile") - #:allow-other-keys) - (apply invoke `("rebar3" ,build-target ,@make-flags))) - -(define* (check #:key target (make-flags '()) (tests? (not target)) - (test-target "eunit") - #:allow-other-keys) - (if tests? - (apply invoke `("rebar3" ,test-target ,@make-flags)) - (format #t "test suite not run~%")) - #t) - -(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 - (pkg-name (package-name-version->erlang-name name)) - #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (build-dir "_build/default/lib") - (pkg-dir (string-append out %erlang-libdir "/" pkg-name))) - (for-each - (lambda (pkg) - (for-each - (lambda (dirname) - (let ((src-dir (string-append build-dir "/" pkg "/" 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 build-dir)) - (false-if-exception - (delete-file (string-append pkg-dir "/priv/Run-eunit-loop.expect"))) - #t)) - -(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)) diff --git a/guix/hexpm-download.scm b/guix/hexpm-download.scm deleted file mode 100644 index 25247cb79b..0000000000 --- a/guix/hexpm-download.scm +++ /dev/null @@ -1,76 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2017 Mathieu Lirzin <mthl@gnu.org> -;;; Copyright © 2017 Christopher Baines <mail@cbaines.net> -;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.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 hexpm-download) - #:use-module (ice-9 match) - #:use-module (guix extracting-download) - #:use-module (guix packages) ;; for %current-system - #:use-module (srfi srfi-26) - #:export (hexpm-fetch - - %hexpm-repo-url - hexpm-url - hexpm-url? - hexpm-uri)) - -;;; -;;; An <origin> method that fetches a package from the hex.pm repository, -;;; unwrapping the actual content from the download tarball. -;;; - -;; 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-url - (string-append (%hexpm-repo-url) "/tarballs/")) -(define hexpm-url? - (cut string-prefix? hexpm-url <>)) - -(define (hexpm-uri name version) - "Return a URI string for the package hosted at hex.pm corresponding to NAME -and VERSION." - (string-append hexpm-url name "-" version ".tar")) - -(define* (hexpm-fetch url hash-algo hash - #:optional name - #:key - (filename-to-extract "contents.tar.gz") - (system (%current-system)) - (guile (default-guile))) - "Return a fixed-output derivation that fetches URL and extracts -\"contents.tar.gz\". The output is expected to have hash HASH of type -HASH-ALGO (a symbol). By default, the file name is the base name of URL; -optionally, NAME can specify a different file name. By default, the file name -is the base name of URL with \".gz\" appended; optionally, NAME can specify a -different file name." - (define file-name - (match url - ((head _ ...) - (basename head)) - (_ - (basename url)))) - - (http-fetch/extract url "contents.tar.gz" hash-algo hash - ;; urls typically end with .tar, but contents is .tar.gz - (or name (string-append file-name ".gz")) - #:system system #:guile guile)) diff --git a/guix/import/hexpm.scm b/guix/import/hexpm.scm deleted file mode 100644 index 018732d8c1..0000000000 --- a/guix/import/hexpm.scm +++ /dev/null @@ -1,290 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com> -;;; Copyright © 2016 David Craven <david@craven.ch> -;;; Copyright © 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org> -;;; Copyright © 2019 Martin Becze <mjbecze@riseup.net> -;;; Copyright © 2020, 2021 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 - hexpm-recursive-import - %hexpm-updater)) - - -;;; -;;; Interface to https://hex.pm/api, version 2. -;;; https://github.com/hexpm/specifications/blob/master/apiary.apib -;;; 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. /api/packages/${name} -;; It can have several "releases", each of which has its own set of -;; requirements, buildtool, 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))))) - -;; Hexpm meta. -(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 version. -(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 https://hex.pm and return the corresopnding <hexpm> -record or #f if it was not found." - (let ((json (json-fetch (package-url name)))) - (and json - (json->hexpm json)))) - -;; Hexpm release. /api/packages/${name}/releases/${version} -(define-json-mapping <hexpm-release> make-hexpm-release hexpm-release? - json->hexpm-release - (number hexpm-release-number "version") ;string - (url hexpm-release-url) ;string - (requirements hexpm-requirements "requirements")) ;list of <hexpm-dependency> -;; meta:build_tools -> alist - -;; Hexpm dependency. Each dependency (each edge in the graph) is annotated as -;; being a "normal" dependency or a development dependency. There also -;; information about the minimum required version, such as "^0.0.41". -(define-json-mapping <hexpm-dependency> make-hexpm-dependency - hexpm-dependency? - json->hexpm-dependency - (app hexpm-dependency-app "app") ;string - (optional hexpm-dependency-optional) ;bool - (requirement hexpm-dependency-requirement)) ;string - -(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." - (let* ((url (hexpm-version-url version*)) - (json (json-fetch url))) - (json->hexpm-release json))) - - -;;; -;;; Converting hex.pm packages to Guix packages. -;;; - -(define* (make-hexpm-sexp #:key name version tarball-url - home-page synopsis description license - #:allow-other-keys) - "Return the `package' s-expression for a rust package with the given NAME, -VERSION, tarball-url, HOME-PAGE, SYNOPSIS, DESCRIPTION, and LICENSE." - (call-with-temporary-directory - (lambda (directory) - (let ((port (http-fetch tarball-url)) - (tar (open-pipe* OPEN_WRITE "tar" "-C" directory - "-xf" "-" "contents.tar.gz"))) - (dump-port port tar) - (close-port port) - - (let ((status (close-pipe tar))) - (unless (zero? status) - (error "tar extraction failure" status)))) - - (let ((guix-name (hexpm-name->package-name name)) - (sha256 (bytevector->nix-base32-string - (call-with-input-file - (string-append directory "/contents.tar.gz") - port-sha256)))) - - `(package - (name ,guix-name) - (version ,version) - (source (origin - (method hexpm-fetch) - (uri (hexpm-uri ,name version)) - (sha256 (base32 ,sha256)))) - (build-system ,'rebar3-build-system) - (home-page ,(match home-page - (() "") - (_ home-page))) - (synopsis ,synopsis) - (description ,(beautify-description description)) - (license ,(match license - (() #f) - ((license) license) - (_ `(list ,@license))))))))) - -(define (strings->licenses strings) - (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-version package) - (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-version 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*))) - - (and package version* - (let ((dependencies (hexpm-release-dependencies release)) - (pkg-meta (hexpm-meta package))) - (values - (make-hexpm-sexp - #:name package-name - #:version version-number - #:home-page (or (hexpm-docs-html-url package) - ;; 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) - (string-append "erlang-" (string-join (string-split name #\_) "-"))) - - -;;; -;;; Updater -;;; - -(define (hexpm-package? package) - "Return true if PACKAGE is a package from hex.pm." - (let ((source-url (and=> (package-source package) origin-uri)) - (fetch-method (and=> (package-source package) origin-method))) - (and (eq? fetch-method hexpm-fetch) - (match source-url - ((? string?) - (hexpm-url? source-url)) - ((source-url ...) - (any hexpm-url? source-url)))))) - -(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-version 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 hexpm-package?) - (latest latest-release))) diff --git a/guix/import/utils.scm b/guix/import/utils.scm index aaad247c63..a180742ca3 100644 --- a/guix/import/utils.scm +++ b/guix/import/utils.scm @@ -359,7 +359,6 @@ the expected fields of an <origin> object." ("git-fetch" (@ (guix git-download) git-fetch)) ("svn-fetch" (@ (guix svn-download) svn-fetch)) ("hg-fetch" (@ (guix hg-download) hg-fetch)) - ("hexpm-fetch" (@ (guix hexpm-download) hexpm-fetch)) (_ #f))) (uri (assoc-ref orig "uri")) (sha256 sha)))))) diff --git a/guix/scripts/import.scm b/guix/scripts/import.scm index aaadad4adf..40fa6759ae 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" "hexpm" + "gem" "go" "cran" "crate" "texlive" "json" "opam" "minetest")) (define (resolve-importer name) diff --git a/guix/scripts/import/hexpm.scm b/guix/scripts/import/hexpm.scm deleted file mode 100644 index 95a291f1a8..0000000000 --- a/guix/scripts/import/hexpm.scm +++ /dev/null @@ -1,114 +0,0 @@ -;;; 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 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 (ice-9 match) - #:use-module (ice-9 format) - #:export (guix-import-hexpm)) - - -;;; -;;; 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_ " - -r, --recursive import packages recursively")) - (newline) - (display (G_ " - -h, --help display this help and exit")) - (display (G_ " - -V, --version display version information and exit")) - (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)) - - -;;; -;;; Entry point. -;;; - -(define (guix-import-hexpm . args) - (define (parse-options) - ;; Return the alist of option values. - (args-fold* args %options - (lambda (opt name arg result) - (leave (G_ "~A: unrecognized option~%") name)) - (lambda (arg result) - (alist-cons 'argument arg result)) - %default-options)) - - - (let* ((opts (parse-options)) - (args (filter-map (match-lambda - (('argument . value) - value) - (_ #f)) - (reverse opts)))) - (match args - ((spec) - (define-values (name version) - (package-name->name+version spec)) - - (if (assoc-ref opts 'recursive) - (map (match-lambda - ((and ('package ('name name) . rest) pkg) - `(define-public ,(string->symbol name) - ,pkg)) - (_ #f)) - (hexpm-recursive-import name version)) - (let ((sexp (hexpm->guix-package name #:version version))) - (unless sexp - (leave (G_ "failed to download meta-data for package '~a'~%") - (if version - (string-append name "@" version) - name))) - sexp))) - (() - (leave (G_ "too few arguments~%"))) - ((many ...) - (leave (G_ "too many arguments~%")))))) diff --git a/guix/upstream.scm b/guix/upstream.scm index f1fb84eb45..632e9ebc4f 100644 --- a/guix/upstream.scm +++ b/guix/upstream.scm @@ -24,10 +24,6 @@ #:use-module (guix discovery) #:use-module ((guix download) #:select (download-to-store url-fetch)) - #:use-module ((guix hexpm-download) - #:select (hexpm-fetch)) - #:use-module ((guix extracting-download) - #:select (download-to-store/extract)) #:use-module (guix gnupg) #:use-module (guix packages) #:use-module (guix diagnostics) @@ -434,23 +430,9 @@ SOURCE, an <upstream-source>." #:key-download key-download))) (values version tarball source)))))) -(define* (package-update/hexpm-fetch store package source - #:key key-download) - "Return the version, tarball, and SOURCE, to update PACKAGE to -SOURCE, an <upstream-source>." - (match source - (($ <upstream-source> _ version urls signature-urls) - (let* ((url (first urls)) - (name (or (origin-file-name (package-source package)) - (string-append (basename url) ".gz"))) - (tarball (download-to-store/extract - store url "contents.tar.gz" name))) - (values version tarball source))))) - (define %method-updates ;; Mapping of origin methods to source update procedures. - `((,url-fetch . ,package-update/url-fetch) - (,hexpm-fetch . ,package-update/hexpm-fetch))) + `((,url-fetch . ,package-update/url-fetch))) (define* (package-update store package #:optional (updaters (force %updaters)) |