From patchwork Thu Mar 7 21:45:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Daniel Ziltener X-Patchwork-Id: 61472 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 5729927BBE9; Thu, 7 Mar 2024 23:04:53 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,PP_MIME_FAKE_ASCII_TEXT,SPF_HELO_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id C313627BBE2 for ; Thu, 7 Mar 2024 23:04:49 +0000 (GMT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1riMmu-0005uw-GB; Thu, 07 Mar 2024 18:04:32 -0500 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 1riMms-0005uP-7m for guix-patches@gnu.org; Thu, 07 Mar 2024 18:04:30 -0500 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 1riMmr-00033r-Vv for guix-patches@gnu.org; Thu, 07 Mar 2024 18:04:30 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1riMnN-0003Zw-KA for guix-patches@gnu.org; Thu, 07 Mar 2024 18:05:01 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#68564] [PATCH] build-system: fix the Chicken build system References: <5f79ce0097f1092706b65abd99940d06@lyrion.ch> In-Reply-To: <5f79ce0097f1092706b65abd99940d06@lyrion.ch> Resent-From: Daniel Ziltener Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 07 Mar 2024 23:05:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 68564 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 68564@debbugs.gnu.org Cc: dziltener@lyrion.ch Received: via spool by 68564-submit@debbugs.gnu.org id=B68564.170985266213705 (code B ref 68564); Thu, 07 Mar 2024 23:05:01 +0000 Received: (at 68564) by debbugs.gnu.org; 7 Mar 2024 23:04:22 +0000 Received: from localhost ([127.0.0.1]:55326 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1riMmk-0003Yx-1e for submit@debbugs.gnu.org; Thu, 07 Mar 2024 18:04:22 -0500 Received: from 195-15-241-199.dc3-a.pub1.etik-cloud.com ([195.15.241.199]:31043 helo=lyrion.ch) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1riMme-0003Yk-Pd for 68564@debbugs.gnu.org; Thu, 07 Mar 2024 18:04:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lyrion.ch; s=20230702; t=1709852620; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc; bh=fUILOY/3TSHfh7IZBl92z0AlnP8a53ZPUJI5EWe3LgY=; b=Hm7FTZaDCw/q/lS3MrUR7HxKQo33YMT9wEll22FGxz73JfN0LtlKSKzjAo+nLCYUD92qXl lM776w1t3TxjDNi6GvjLznGMwG35OthKnviRJn9US5IzX1ldulCYtTPWnlTOUw97fWeMjg sDxNQCqcVZbg+reBhD0h66jZqFwexJWoan5KuYsjnlpfkqJa55scGGG8eGw3ky7qDcf6xa hHNWmlizzdWRJCHGgukoPBkbeT9YVn+62oU7knyYhrf/MjT+o+NSW92SKdJzTac6b4tR0q Kv3qrDHgZKzjTPfexaL2MpxJlnV/BfV2Cc10xIeEgZaLEcJn8jFihU22HrOEiw== Received: from localhost ( [2a06:6880:42c:1600:a85:a578:71dc:aaf4]) by lyrion.ch (OpenSMTPD) with ESMTPSA id 82498ee2 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Thu, 7 Mar 2024 23:03:40 +0000 (UTC) Message-ID: <68952d6a346ad09483bd6c64356916ac@lyrion.ch> Date: Thu, 7 Mar 2024 22:45:58 +0100 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Daniel Ziltener X-ACL-Warn: , Daniel Ziltener via Guix-patches X-Patchwork-Original-From: Daniel Ziltener via Guix-patches via From: Daniel Ziltener Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches --- guix/build-system/chicken.scm | 38 ++++++++++++++++++++++------- guix/build/chicken-build-system.scm | 27 +++++++++----------- 2 files changed, 41 insertions(+), 24 deletions(-) diff --git a/guix/build-system/chicken.scm b/guix/build-system/chicken.scm index 9f518e66e6..e2b93391bf 100644 --- a/guix/build-system/chicken.scm +++ b/guix/build-system/chicken.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2020 raingloom ;;; Copyright © 2021 Ludovic Courtès ;;; Copyright © 2021 Xinglu Chen +;;; Copyright © 2024 Daniel Ziltener ;;; ;;; This file is part of GNU Guix. ;;; @@ -23,9 +24,12 @@ (define-module (guix build-system chicken) #:use-module (guix gexp) #:use-module (guix store) #:use-module (guix monads) + #:use-module (guix download) #: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-1) #:use-module (guix packages) #:export (%chicken-build-system-modules chicken-build @@ -45,10 +49,10 @@ (define %chicken-build-system-modules ,@%gnu-build-system-modules)) (define (default-chicken) + "Return the default Chicken package." ;; Lazily resolve the binding to avoid a circular dependency. - ;; TODO is this actually needed in every build system? (let ((chicken (resolve-interface '(gnu packages chicken)))) - (module-ref chicken 'chicken))) + (module-ref chicken 'chicken))) (define* (lower name #:key source inputs native-inputs outputs system target @@ -57,7 +61,7 @@ (define* (lower name #:rest arguments) "Return a bag for NAME." (define private-keywords - '(#:target #:chicken #:inputs #:native-inputs)) + '(#:target #:chicken #:inputs #:native-inputs #:outputs)) ;; TODO: cross-compilation support (and (not target) @@ -77,18 +81,31 @@ (define private-keywords ,@native-inputs)) (outputs outputs) (build chicken-build) - (arguments (strip-keyword-arguments private-keywords arguments))))) + (arguments + (substitute-keyword-arguments + (strip-keyword-arguments private-keywords arguments) + ((#:extra-directories extra-directories) + `(list ,@(append-map + (lambda (name) + (match (assoc name inputs) + ((_ pkg) + (match (package-transitive-propagated-inputs pkg) + (((propagated-names . _) ...) + (cons name propagated-names)))))) + extra-directories)))))))) (define* (chicken-build name inputs - #:key - source + #:key source + (tests? #t) + (parallel-build? #f) + (build-flags ''()) + (configure-flags ''()) + (extra-directories ''()) (phases '%standard-phases) - (outputs '("out")) + (outputs '("out" "static")) (search-paths '()) (egg-name "") (unpack-path "") - (build-flags ''()) - (tests? #t) (system (%current-system)) (guile #f) (imported-modules %chicken-build-system-modules) @@ -103,6 +120,9 @@ (define builder #:source #+source #:system #$system #:phases #$phases + #:configure-flags #$configure-flags + #:extra-directories #$extra-directories + #:parallel-build? #$parallel-build? #:outputs #$(outputs->gexp outputs) #:search-paths '#$(sexp->gexp (map search-path-specification->sexp diff --git a/guix/build/chicken-build-system.scm b/guix/build/chicken-build-system.scm index 8f9f59cc25..1b8a50621e 100644 --- a/guix/build/chicken-build-system.scm +++ b/guix/build/chicken-build-system.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2020 raingloom +;;; Copyright © 2024 Daniel Ziltener ;;; ;;; This file is part of GNU Guix. ;;; @@ -32,7 +33,6 @@ (define-module (guix build chicken-build-system) ;; CHICKEN_INSTALL_REPOSITORY is where dependencies are looked up ;; its first component is also where new eggs are installed. -;; TODO: deduplicate with go-build-system.scm ? ;; TODO: the binary version should be defined in one of the relevant modules ;; instead of being hardcoded everywhere. Tried to do that but got undefined ;; variable errors. @@ -42,13 +42,12 @@ (define (chicken-package? name) (define* (setup-chicken-environment #:key inputs outputs #:allow-other-keys) (setenv "CHICKEN_INSTALL_REPOSITORY" - (string-concatenate - ;; see TODO item about binary version above - (append (list (assoc-ref outputs "out") "/var/lib/chicken/11/") - (let ((oldenv (getenv "CHICKEN_INSTALL_REPOSITORY"))) - (if oldenv - (list ":" oldenv) - '()))))) + (string-append (assoc-ref outputs "out") "/var/lib/chicken/11/")) + (setenv "CHICKEN_INSTALL_PREFIX" + (string-append (assoc-ref outputs "out") "/bin/")) + (setenv "CHICKEN_REPOSITORY_PATH" + (string-append (getenv "CHICKEN_REPOSITORY_PATH") + ":" (getenv "CHICKEN_INSTALL_REPOSITORY"))) (setenv "CHICKEN_EGG_CACHE" (getcwd)) #t) @@ -58,9 +57,9 @@ (define* (setup-chicken-environment #:key inputs outputs #:allow-other-keys) (define* (unpack #:key source egg-name unpack-path #:allow-other-keys) "Relative to $CHICKEN_EGG_CACHE, unpack SOURCE in UNPACK-PATH, or EGG-NAME when UNPACK-PATH is unset. If the SOURCE archive has a single top level -directory, it is stripped so that the sources appear directly under UNPACK-PATH. -When SOURCE is a directory, copy its content into UNPACK-PATH instead of -unpacking." +directory, it is stripped so that the sources appear directly under +UNPACK-PATH. When SOURCE is a directory, copy its content into UNPACK-PATH +instead of unpacking." (define (unpack-maybe-strip source dest) (let* ((scratch-dir (string-append (or (getenv "TMPDIR") "/tmp") "/scratch-dir")) @@ -93,6 +92,7 @@ (define (unpack-maybe-strip source dest) (define* (build #:key egg-name #:allow-other-keys) "Build the Chicken egg named by EGG-NAME" + (invoke "echo" (getenv "CHICKEN_REPOSITORY_PATH")) (invoke "chicken-install" "-cached" "-no-install" egg-name)) (define* (install #:key egg-name #:allow-other-keys) @@ -104,11 +104,8 @@ (define* (check #:key egg-name tests? #:allow-other-keys) ;; there is no "-test-only" option, but we've already run install ;; so this just runs tests. ;; i think it's a fair assumption that phases won't be reordered. - (setenv "CHICKEN_REPOSITORY_PATH" - (string-append (getenv "CHICKEN_INSTALL_REPOSITORY") - ":" - (getenv "CHICKEN_REPOSITORY_PATH"))) (when tests? + (invoke "echo" (getenv "CHICKEN_REPOSITORY_PATH")) (invoke "chicken-install" "-cached" "-test" "-no-install" egg-name))) (define* (stamp-egg-version #:key egg-name name #:allow-other-keys)