unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
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 --]

  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).