From: Andrew Tropin via Guix-patches via <guix-patches@gnu.org>
To: 71527@debbugs.gnu.org
Cc: Igor Goryachev <igor@goryachev.org>
Subject: [bug#71527] [PATCH 18/20] gnu: elixir: Add src output, metas correction, lint warnings fix.
Date: Thu, 20 Jun 2024 16:29:43 +0400 [thread overview]
Message-ID: <87sex7n6fc.fsf@trop.in> (raw)
In-Reply-To: <5e77f8a0948230db8da07c37c5b1f24fec44acb7.1718205806.git.igor@goryachev.org>
[-- Attachment #1: Type: text/plain, Size: 12710 bytes --]
On 2024-06-13 09:17, Igor Goryachev via Guix-patches via wrote:
> * gnu/packages/elixir.scm (elixir): Add src output, metas correction, lint warnings fix.
>
> Change-Id: I93ae35239168de9a8d8d99ca83950edfce735bc2
> ---
> gnu/packages/elixir.scm | 201 +++++++++++++++++++++++-----------------
> 1 file changed, 114 insertions(+), 87 deletions(-)
>
> diff --git a/gnu/packages/elixir.scm b/gnu/packages/elixir.scm
> index 7675b38ffb..aa4a24fcda 100644
> --- a/gnu/packages/elixir.scm
> +++ b/gnu/packages/elixir.scm
> @@ -34,83 +34,108 @@ (define-module (gnu packages elixir)
> #:use-module (guix git-download)
> #:use-module (guix packages)
> #:use-module (gnu packages)
> + #:use-module (gnu packages bash)
> #:use-module (gnu packages erlang)
> #:use-module (gnu packages version-control))
>
> (define-public elixir
> - (package
> - (name "elixir")
> - (version "1.16.3")
> - (source
> - (origin
> - (method git-fetch)
> - (uri (git-reference
> - (url "https://github.com/elixir-lang/elixir")
> - (commit (string-append "v" version))))
> - (file-name (git-file-name name version))
> - (sha256
> - (base32 "0db1f6p8409ld81lfd9ln9ir4v55h48lzsbd91jz0hns7ninlh2r"))
> - (patches (search-patches "elixir-path-length.patch"))))
> - (build-system gnu-build-system)
> - (arguments
> - (list
> - #:test-target "test"
> - #:parallel-tests? #f ;see <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32171#23>
> - #:make-flags #~(list (string-append "PREFIX=" #$output))
> - #:phases
> - #~(modify-phases %standard-phases
> - (add-after 'unpack 'make-git-checkout-writable
> - (lambda _
> - (for-each make-file-writable (find-files "."))))
> - (add-after 'make-git-checkout-writable 'replace-paths
> - (lambda* (#:key inputs #:allow-other-keys)
> - ;; Note: references end up obfuscated in binary BEAM files where
> - ;; they may be invisible to the GC and graft code:
> - ;; <https://issues.guix.gnu.org/54304#11>.
> - (substitute* '("lib/mix/lib/mix/release.ex"
> - "lib/mix/lib/mix/tasks/release.init.ex")
> - (("#!/bin/sh")
> - (string-append "#!" (search-input-file inputs "/bin/sh"))))
> - (substitute* "bin/elixir"
> - (("ERTS_BIN=\n")
> - (string-append
> - "ERTS_BIN="
> - ;; Elixir Releases will prepend to ERTS_BIN the path of
> - ;; a copy of erl. We detect if a release is being generated
> - ;; by checking the initial ERTS_BIN value: if it's empty, we
> - ;; are not in release mode and can point to the actual erl
> - ;; binary in Guix store.
> - "\nif [ -z \"$ERTS_BIN\" ]; then ERTS_BIN="
> - (string-drop-right (search-input-file inputs "/bin/erl") 3)
> - "; fi\n")))
> - (substitute* "bin/mix"
> - (("#!/usr/bin/env elixir")
> - (string-append "#!" #$output "/bin/elixir")))))
> - (add-before 'build 'make-current
> - ;; The Elixir compiler checks whether or not to compile files by
> - ;; inspecting their timestamps. When the timestamp is equal to the
> - ;; epoch no compilation will be performed. Some tests fail when
> - ;; files are older than Jan 1, 2000.
> - (lambda _
> - (for-each (lambda (file)
> - (let ((recent 1400000000))
> - (utime file recent recent 0 0)))
> - (find-files "." ".*"))))
> - (add-before 'check 'set-home
> - (lambda* (#:key inputs #:allow-other-keys)
> - ;; Some tests require access to a home directory.
> - (setenv "HOME" "/tmp")))
> - (delete 'configure)
> - (add-after 'install 'wrap-programs
> - (lambda* (#:key inputs outputs #:allow-other-keys)
> - (let* ((out (assoc-ref outputs "out"))
> - (programs '("elixir" "elixirc" "iex")))
> - ;; mix can be sourced as an elixir script by other elixir
> - ;; program, for example `iex -S mix`, so we should not wrap
> - ;; mix into shell script.
> - (substitute* (string-append out "/bin/mix")
> - (("Mix.start\\(\\)")
> - (format #f "\
> + (let* ((compiler-path "lib/elixir/src/elixir_erl_compiler.erl")
> + (compiler-path-orig (string-append compiler-path ".orig")))
Moved this let inside phases gexp.
> + (package
> + (name "elixir")
> + (version "1.16.3")
> + (source
> + (origin
> + (method git-fetch)
> + (uri (git-reference
> + (url "https://github.com/elixir-lang/elixir")
> + (commit (string-append "v" version))))
> + (file-name (git-file-name name version))
> + (sha256
> + (base32 "0db1f6p8409ld81lfd9ln9ir4v55h48lzsbd91jz0hns7ninlh2r"))
> + (patches (search-patches "elixir-path-length.patch"))))
> + (build-system gnu-build-system)
> + (arguments
> + (list
> + #:test-target "test"
> + #:parallel-tests? #f ;see <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32171#23>
> + #:make-flags #~(list (string-append "PREFIX=" #$output))
> + #:phases
> + #~(modify-phases %standard-phases
> + (add-after 'unpack 'make-git-checkout-writable
> + (lambda _
> + (for-each make-file-writable (find-files "."))))
> + (add-after 'make-git-checkout-writable 'replace-paths
> + (lambda* (#:key inputs #:allow-other-keys)
> + ;; Note: references end up obfuscated in binary BEAM files where
> + ;; they may be invisible to the GC and graft code:
> + ;; <https://issues.guix.gnu.org/54304#11>.
> + (substitute* '("lib/mix/lib/mix/release.ex"
> + "lib/mix/lib/mix/tasks/release.init.ex")
> + (("#!/bin/sh")
> + (string-append "#!" (search-input-file inputs "/bin/sh"))))
> + (substitute* "bin/elixir"
> + (("ERTS_BIN=\n")
> + (string-append
> + "ERTS_BIN="
> + ;; Elixir Releases will prepend to ERTS_BIN the path of
> + ;; a copy of erl. We detect if a release is being generated
> + ;; by checking the initial ERTS_BIN value: if it's empty, we
> + ;; are not in release mode and can point to the actual erl
> + ;; binary in Guix store.
> + "\nif [ -z \"$ERTS_BIN\" ]; then ERTS_BIN="
> + (string-drop-right (search-input-file inputs "/bin/erl") 3)
> + "; fi\n")))
> + (substitute* "bin/mix"
> + (("#!/usr/bin/env elixir")
> + (string-append "#!" #$output "/bin/elixir")))))
> + (add-after 'replace-paths 'pre-install-source
> + (lambda* (#:key outputs #:allow-other-keys)
> + (copy-recursively "lib" (string-append (assoc-ref outputs "src")
> + "/source/lib"))))
> + ;; Temporarily patch the compiler to place correct source locations
> + ;; into module info instead of build directory.
> + (add-after 'pre-install-source 'patch-elixir-compiler
> + (lambda* (#:key outputs #:allow-other-keys)
> + (copy-recursively #$compiler-path #$compiler-path-orig)
> + (let ((source (string-append "/tmp/guix-build-" #$name "-"
> + #$version ".drv-0"))
> + (destination (assoc-ref outputs "src")))
> + (substitute* #$compiler-path
> + (("source, Source")
> + (string-append "source, string:replace(Source, \""
> + source "\", \"" destination "\")"))))))
> + (add-before 'build 'make-current
> + ;; The Elixir compiler checks whether or not to compile files by
> + ;; inspecting their timestamps. When the timestamp is equal to the
> + ;; epoch no compilation will be performed. Some tests fail when
> + ;; files are older than Jan 1, 2000.
> + (lambda _
> + (for-each (lambda (file)
> + (let ((recent 1400000000))
> + (utime file recent recent 0 0)))
> + (find-files "." ".*"))))
> + ;; Unpatch the compiler and recompile it.
> + (add-after 'build 'restore-and-recompile
> + (lambda _
> + (copy-recursively #$compiler-path-orig #$compiler-path)
> + (delete-file #$compiler-path-orig)
> + (invoke "make")))
> + (add-before 'check 'set-home
> + (lambda* (#:key inputs #:allow-other-keys)
> + ;; Some tests require access to a home directory.
> + (setenv "HOME" "/tmp")))
> + (delete 'configure)
> + (add-after 'install 'wrap-programs
> + (lambda* (#:key inputs outputs #:allow-other-keys)
> + (let* ((out (assoc-ref outputs "out"))
> + (programs '("elixir" "elixirc" "iex")))
> + ;; mix can be sourced as an elixir script by other elixir
> + ;; program, for example `iex -S mix`, so we should not wrap
> + ;; mix into shell script.
> + (substitute* (string-append out "/bin/mix")
> + (("Mix.start\\(\\)")
> + (format #f "\
> ~~w[GUIX_ELIXIR_LIBS ERL_LIBS]
> |> Enum.map(&System.get_env/1)
> |> Enum.reject(&is_nil/1)
> @@ -118,23 +143,25 @@ (define-public elixir
> |> case do \"\" -> :ok; erl_libs -> System.put_env(\"ERL_LIBS\", erl_libs) end
> System.put_env(\"MIX_REBAR3\", System.get_env(\"MIX_REBAR3\", \"~a\"))
> Mix.start()"
> - (search-input-file inputs "/bin/rebar3"))))
> - (for-each (lambda (program)
> - (wrap-program (string-append out "/bin/" program)
> - '("ERL_LIBS" prefix ("${GUIX_ELIXIR_LIBS}"))))
> - programs)))))))
> - (inputs (list erlang rebar3 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
> + (search-input-file inputs "/bin/rebar3"))))
> + (for-each (lambda (program)
> + (wrap-program (string-append out "/bin/" program)
> + '("ERL_LIBS" prefix ("${GUIX_ELIXIR_LIBS}"))))
> + programs)))))))
> + (outputs '("out" "src"))
> + (inputs (list bash-minimal erlang rebar3 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 "Functional meta-programming aware language")
> + (description "Elixir is a dynamic, functional language used to build
> scalable and maintainable applications. Elixir leverages the Erlang VM, known
> for running low-latency, distributed and fault-tolerant systems, while also
> being successfully used in web development and the embedded software domain.")
> - (license license:asl2.0)))
> + (license license:asl2.0))))
>
> (define-public elixir-hex
> (package
--
Best regards,
Andrew Tropin
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]
next prev parent reply other threads:[~2024-06-20 12:31 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-12 15:25 [bug#71527] [PATCH 00/20] Update erlang, elixir things, add xxkb Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 01/20] gnu: rebar3: Make rebar3 escriptize reproducible Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 02/20] gnu: erlang: Update to 26.2.5 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 03/20] gnu: erlang-certifi: Update to 2.13.0 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 04/20] gnu: erlang-covertool: Update to 2.0.6 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 05/20] gnu: erlang-cth-readable: Update to 1.6.0 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 06/20] gnu: erlang-edown: Update to 0.9.1 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 07/20] gnu: erlang-erlware-commons: Update to 1.7.0 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 08/20] gnu: erlang-getopt: Update to 1.0.3 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 09/20] gnu: erlang-hex-core: Update to 0.10.0 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 10/20] gnu: erlang-jsone: Update to 1.8.1 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 11/20] gnu: erlang-parse-trans: Update to 3.4.2 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 12/20] gnu: erlang-relx: Update to 4.9.0 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 13/20] gnu: erlang-ssl-verify-fun: Update to 1.1.7 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 14/20] gnu: rebar3: Update to 3.23.0 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 15/20] gnu: erlang-lfe: Update to 2.1.4 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 16/20] gnu: elixir: Update to 1.16.3 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 17/20] gnu: elixir-hex: Update to 2.1.1 Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 18/20] gnu: elixir: Add src output, metas correction, lint warnings fix Igor Goryachev via Guix-patches via
2024-06-20 12:29 ` Andrew Tropin via Guix-patches via [this message]
2024-06-13 6:17 ` [bug#71527] [PATCH 19/20] gnu: erlang: Add chunks compilation Igor Goryachev via Guix-patches via
2024-06-13 6:17 ` [bug#71527] [PATCH 20/20] gnu: Add xxkb Igor Goryachev via Guix-patches via
2024-06-20 12:37 ` [bug#71527] [PATCH 00/20] Update erlang, elixir things, add xxkb Andrew Tropin via Guix-patches via
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sex7n6fc.fsf@trop.in \
--to=guix-patches@gnu.org \
--cc=71527@debbugs.gnu.org \
--cc=andrew@trop.in \
--cc=igor@goryachev.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).