summaryrefslogtreecommitdiff
path: root/gnu/packages/elixir.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/elixir.scm')
-rw-r--r--gnu/packages/elixir.scm63
1 files changed, 60 insertions, 3 deletions
diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm
index 724b42512c..ef8c39d0d7 100644
--- a/gnu/packages/elixir.scm
+++ b/gnu/packages/elixir.scm
@@ -27,6 +27,7 @@
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix build-system gnu)
#:use-module (guix gexp)
+ #:use-module (guix utils)
#:use-module (guix git-download)
#:use-module (guix packages)
#:use-module (gnu packages)
@@ -96,9 +97,20 @@
(lambda* (#:key inputs #:allow-other-keys)
;; Some tests require access to a home directory.
(setenv "HOME" "/tmp")))
- (delete 'configure))))
- (inputs
- (list erlang git))
+ (delete 'configure)
+ (add-after 'install 'wrap-programs
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (programs '("elixir" "elixirc" "iex" "mix")))
+ (for-each (lambda (program)
+ (wrap-program (string-append out "/bin/" program)
+ '("ERL_LIBS" prefix ("${GUIX_ELIXIR_LIBS}"))))
+ programs)))))))
+ (inputs (list erlang git))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "GUIX_ELIXIR_LIBS")
+ (files (list (string-append "lib/elixir/" (version-major+minor version)))))))
(home-page "https://elixir-lang.org/")
(synopsis "Elixir programming language")
(description "Elixir is a dynamic, functional language used to build
@@ -106,3 +118,48 @@ scalable and maintainable applications. Elixir leverages the Erlang VM, known
for running low-latency, distributed and fault-tolerant systems, while also
being successfully used in web development and the embedded software domain.")
(license license:asl2.0)))
+
+(define-public elixir-hex
+ (package
+ (name "elixir-hex")
+ (version "2.0.5")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hexpm/hex.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1kvczwvij58kgkhak68004ap81pl26600bczg21mymy2sypkgxmj"))))
+ ;; The mix-build-system assumes that Hex exists.
+ ;; We build Hex using the gnu-build-system.
+ ;; Other Elixir packages use the mix-build-system.
+ (build-system gnu-build-system)
+ (inputs (list elixir))
+ (arguments
+ (list
+ ;; Hex is needed to build packages used to test Hex.
+ ;; To avoid this circularity, we disable tests.
+ #:tests? #f
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'bootstrap)
+ (delete 'configure)
+ (replace 'build
+ (lambda* (#:key inputs #:allow-other-keys)
+ (setenv "MIX_ENV" "prod")
+ (invoke "mix" "compile")))
+ (replace 'install
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (define X.Y #$(version-major+minor (package-version elixir)))
+ (define out (string-append (assoc-ref outputs "out") "/lib/elixir/" X.Y "/hex"))
+ (mkdir-p out)
+ (copy-recursively "_build/prod/lib/hex" out))))))
+ (synopsis "Package manager for the Erlang VM")
+ (description
+ "This project provides tasks that integrate with Mix, Elixir's build
+tool.")
+ (home-page "https://hexdocs.pm/makeup_elixir/")
+ (license license:bsd-2)))