From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1.migadu.com ([2001:41d0:303:e224::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms13.migadu.com with LMTPS id cOZLDdumamYzEwEA62LTzQ:P1 (envelope-from ) for ; Thu, 13 Jun 2024 07:59:23 +0000 Received: from aspmx1.migadu.com ([2001:41d0:303:e224::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1.migadu.com with LMTPS id cOZLDdumamYzEwEA62LTzQ (envelope-from ) for ; Thu, 13 Jun 2024 09:59:23 +0200 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=goryachev.org header.s=dkim header.b="brVS/pCS"; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" ARC-Seal: i=1; s=key1; d=yhetil.org; t=1718265563; a=rsa-sha256; cv=none; b=JuydUQ6FIZqQjn+jQhdsa5BT9mla3hEw3Ou2EqQRKhWrXFxHjaP8ky3kwwUYJgngdalWLv L7zLGS/KUqUb96wrhHOk2IGk9ik+Nqlc5J+FMi74ckLqAM1n+vtkI6iKLM/A90nP89O48I h1CnV5YnECj6WAz97YIMKSWqC16bQ0Y51JJgaOiGBJQzrXSFNN1B+Hp3nntiU6YsaKwj/i xd5WZIF/NAH/A/gM+jvge2GHg0hTfrvGuAviceC+8woduXaLtGyy5oZ8ZMSp7+yfEtrkF7 03910syBm5OGb3aqXRdebH6cHYpB506pGRpR1OYwytbqAfps9cWDapmPTbQ0bA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=goryachev.org header.s=dkim header.b="brVS/pCS"; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1718265563; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=K3FiXOJfokAi12JSq2qfUgGiBL7l8iF8xz+fE7+WQeU=; b=F90A1br7dGaj4Xpt9zs66XNNrXBejvq13Vi+OiT8XblceAMxUimWcQsAK+gJiIm7xLmwoe kLsb0bA9rVtAUtsQpSGVMWnjJZ/3S0zStRmPKHF5MrJtv5q+GX9wU5bulbtcVaHKZ+EkWi Y5EB+2rWEbVKuB+zp+6oSZFDEKRxJaLbEI8ZEhu2QOIkMMAuT7UFWSZw975KSQ58GP5L/W 65BrFKiJrv0RyfNWNzIUyMPa3AQO69lKHul6Ogj2Mc82WhzFU3IvVIHeuGSwO5vJJeJ3th nX/+UXPlU59ROqcDa8d4SYQjT3girwdo3L3z04w0JI/8liioFtwBdvteYCQ2iw== Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id E0EF51270E for ; Thu, 13 Jun 2024 09:59:22 +0200 (CEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sHfMO-0004sq-2Q; Thu, 13 Jun 2024 03:59:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sHdoh-0000fS-Kl for guix-patches@gnu.org; Thu, 13 Jun 2024 02:20:11 -0400 Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sHdoh-0006SA-CJ for guix-patches@gnu.org; Thu, 13 Jun 2024 02:20:11 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1sHdog-0001Jw-LN for guix-patches@gnu.org; Thu, 13 Jun 2024 02:20:10 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#71527] [PATCH 18/20] gnu: elixir: Add src output, metas correction, lint warnings fix. Resent-From: Igor Goryachev Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 13 Jun 2024 06:20:10 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 71527 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 71527@debbugs.gnu.org Cc: Igor Goryachev Received: via spool by 71527-submit@debbugs.gnu.org id=B71527.17182595934895 (code B ref 71527); Thu, 13 Jun 2024 06:20:10 +0000 Received: (at 71527) by debbugs.gnu.org; 13 Jun 2024 06:19:53 +0000 Received: from localhost ([127.0.0.1]:54881 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sHdoO-0001Gj-Op for submit@debbugs.gnu.org; Thu, 13 Jun 2024 02:19:53 -0400 Received: from mail.goryachev.org ([104.248.201.73]:49372) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sHdo0-0001C8-Af for 71527@debbugs.gnu.org; Thu, 13 Jun 2024 02:19:30 -0400 Received: from localhost.localdomain (213-91-248-88.ip.btc-net.bg [213.91.248.88]) by mail.goryachev.org (Postfix) with ESMTPSA id 710981202E5; Thu, 13 Jun 2024 09:19:28 +0300 (MSK) Date: Thu, 13 Jun 2024 09:17:55 +0300 Message-ID: <5e77f8a0948230db8da07c37c5b1f24fec44acb7.1718205806.git.igor@goryachev.org> X-Mailer: git-send-email 2.45.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=goryachev.org; s=dkim; t=1718259568; bh=K3FiXOJfokAi12JSq2qfUgGiBL7l8iF8xz+fE7+WQeU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Transfer-Encoding; b=brVS/pCSbgaGtigYiaOmSnXDL+xu61vmPKM+xo9NegSV125aDxcLcpQo1c3yoYavbhprnk7tPne9D4HHULn6Q0LsMwprb40a1WZGb/Krd3MEh+5+ChRUAIf+gbf+Tow74K0bcsfluDM/OmqiRM9Chs4y+CmcTuosia6ywedC7eQ= X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Mailman-Approved-At: Thu, 13 Jun 2024 03:58:59 -0400 X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Igor Goryachev X-ACL-Warn: , Igor Goryachev via Guix-patches From: Igor Goryachev via Guix-patches via Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: guix-patches-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN X-Migadu-Queue-Id: E0EF51270E X-Migadu-Scanner: mx12.migadu.com X-Migadu-Spam-Score: -6.34 X-Spam-Score: -6.34 X-TUID: MYrte6NrkAbh * 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 - #: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: - ;; . - (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"))) + (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 + #: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: + ;; . + (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 -- 2.45.1