From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1.migadu.com ([2001:41d0:1008:1e59::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms8.migadu.com with LMTPS id YHaQB+Wpm2UbKQEAkFu2QA (envelope-from ) for ; Mon, 08 Jan 2024 08:53:09 +0100 Received: from aspmx1.migadu.com ([2001:41d0:403:58f0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1.migadu.com with LMTPS id WGCqAeWpm2VIBwAA62LTzQ (envelope-from ) for ; Mon, 08 Jan 2024 08:53:09 +0100 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=none; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org"; dmarc=pass (policy=none) header.from=gnu.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1704700388; 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:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=ZXuImgH6k+6INEOcrKJI4RMhQp6fCgQZJjeCwG0v9js=; b=TDIhG9hu2+4f4LyaYI/Lu6ihSHfGQTkL7RycxGqVeiWyeIF97zFSAaknpc3q6JMKzdNeRs 8poy89I9BQOFgKh969MA7e7oTyhT6JVhsH/61AzGpoB6ZkBJmhCXPvkcot3/Tiwx0gZAMf I7Tkx1IYlKYgpReSbBXYlRJs0kDECgiPo1EKv79RzJfcD5d3lDrWLOOa9MoKj5EOmF2cmu 5XECSn/cSZpnAgHsRIUdr+7DZBQHS/q7265YQmEKGUBn1UVgKLrKwL3qRzatNebnq2sJ7B DCHEjGwQaWzeg1TWMc+9RIN/YvIHuohaXbinMO0B2wDZG9/ETn99T3UEfaPQoQ== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1704700388; a=rsa-sha256; cv=none; b=o0yN4Npjno0OZiB/MT41RikC6AlmfGRoOzJUWjXSCIeW708/4vd7TjqsHtPOke0GvBmAXt CFjY6zzaRtyXIE7KQl5BAU9JKUhntukMrJu8S9Lm2VLOgJ3CEOODhhnc6ebfG6+9zfdIDA LcIB5x2FN7p1jJLVvqdn7A7BbCUsYOaa39JwTPEYYTOC4Wp14nlJmEkrFpjneUkqMCGb25 hf3NOJ02IQXapsfhlBII9zcOkKng51ZlZ78Avcq1K9lR/4M8H5TvVw5NosaywV6XhfTgVg X3DlQacLv1E1T6G718hA7rNnRWA1ASlx276CCm6nE+kYUnsLOcvIJMt1xyIu4A== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org"; dmarc=pass (policy=none) header.from=gnu.org 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 A5E534157C for ; Mon, 8 Jan 2024 08:53:08 +0100 (CET) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rMkQj-0000xy-7n; Mon, 08 Jan 2024 02:52:17 -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 1rMkQh-0000xf-Fy for guix-devel@gnu.org; Mon, 08 Jan 2024 02:52:15 -0500 Received: from 11.mo583.mail-out.ovh.net ([46.105.47.167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rMkQf-0005iI-8R for guix-devel@gnu.org; Mon, 08 Jan 2024 02:52:15 -0500 Received: from director3.ghost.mail-out.ovh.net (unknown [10.109.140.140]) by mo583.mail-out.ovh.net (Postfix) with ESMTP id 487D827AE1 for ; Mon, 8 Jan 2024 07:52:01 +0000 (UTC) Received: from ghost-submission-6684bf9d7b-fxm46 (unknown [10.110.178.91]) by director3.ghost.mail-out.ovh.net (Postfix) with ESMTPS id 14ED61FEA6; Mon, 8 Jan 2024 07:52:01 +0000 (UTC) Received: from ngraves.fr ([37.59.142.95]) by ghost-submission-6684bf9d7b-fxm46 with ESMTPSA id 8P6lAqGpm2XbBAAAnnxy2g (envelope-from ); Mon, 08 Jan 2024 07:52:01 +0000 X-OVh-ClientIp: 81.67.146.208 To: guix-devel@gnu.org Cc: ngraves@ngraves.fr Subject: [PATCH 00/48] Extend bag-build to gexps. Date: Mon, 8 Jan 2024 08:51:53 +0100 Message-ID: <20240108075153.14849-1-ngraves@ngraves.fr> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Ovh-Tracer-Id: 12223050865440842466 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: 0 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedvkedrvdehiedggeelucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuqfggjfdpvefjgfevmfevgfenuceurghilhhouhhtmecuhedttdenucenucfjughrpefhvfevufffkffoggfgsedtkeertdertddtnecuhfhrohhmpefpihgtohhlrghsucfirhgrvhgvshcuoehnghhrrghvvghssehnghhrrghvvghsrdhfrheqnecuggftrfgrthhtvghrnhepkeffgeetfffgffejgeejvdffgfdtvdeuueetgfefuedvjeegvdegjeejveeuueevnecukfhppeduvdejrddtrddtrddupdekuddrieejrddugeeirddvtdekpdefjedrheelrddugedvrdelheenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduvdejrddtrddtrddupdhmrghilhhfrhhomhepoehnghhrrghvvghssehnghhrrghvvghsrdhfrheqpdhnsggprhgtphhtthhopedupdhrtghpthhtohepghhuihigqdguvghvvghlsehgnhhurdhorhhgpdfovfetjfhoshhtpehmohehkeefpdhmohguvgepshhmthhpohhuth Received-SPF: pass client-ip=46.105.47.167; envelope-from=ngraves@ngraves.fr; helo=11.mo583.mail-out.ovh.net X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Nicolas Graves From: Nicolas Graves via "Development of GNU Guix and the GNU System distribution." Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: guix-devel-bounces+larch=yhetil.org@gnu.org X-Migadu-Flow: FLOW_IN X-Migadu-Country: US X-Migadu-Spam-Score: -5.79 X-Spam-Score: -5.79 X-Migadu-Queue-Id: A5E534157C X-Migadu-Scanner: mx11.migadu.com X-TUID: OZyx3aH5HqgJ Rationale: Almost all build-systems are defined with gexpressions in functions that return derivations. Derivations are not easily extensible while gexps are. An example usage is given below. This is a pretty big rewrite that should recompile almost all packages, but a lot of grafting happens such as I could rebuild my system quickly. I was trying to get the build-phases of an existing package to apply to a local repository, because guix as a development tool for heavy packages (emacs, ungoogled-chromium) is tedious, and there are precious info in build-phases that can be applied in a local repository. I'm not aware of prior work on this particular issue. These patches allow to do extensions such as: (build-system (name 'local-gnu) (description "GNU Build System applied in the current directory") (lower (lambda* args (let ((old-bag (apply (build-system-lower (package-build-system emacs-pgtk)) args))) (bag (inherit old-bag) (build (lambda* build-args (mlet %store-monad ((builder (apply (bag-build old-bag) build-args))) (return (with-imported-modules '((guix build utils)) #~(begin (use-modules (guix build utils)) (with-directory-excursion #$(getcwd) #$builder)))))))))))) Of course this type of build-system isn't directly applicable because of the chroot of the builder, but this other trick makes it happen : ;; We can't use package->derivation directly because we want the user rather ;; than the daemon to build the derivation. (with-store store (run-with-store store (mlet* %store-monad ((bag -> (package->bag pkg)) (drv (bag->derivation bag pkg))) ;; ensure inputs are in the store. (built-derivations (derivation-inputs drv)) (with-environment-excursion (apply invoke (derivation-builder (pk 'd drv)) (derivation-builder-arguments drv)))))) This isn't polished yet, but could serve as an handy way to develop heavy packages locally while taking advantage of the code that's already in guix build phases. Nicolas Graves (48): guix: packages: Extend bag-build to support gexp. build-system: gnu: Improve gnu-cross-build style. build-system: gnu: Redefine gnu-build and gnu-cross-build. build-system: agda: Redefine agda-build. build-system: android-ndk: Redefine gnu-build. build-system: ant: Redefine ant-build. build-system: asdf: Redefine asdf-build. build-system: cargo: Redefine cargo-build and cargo-cross-build. build-system: chicken: Redefine chicken-build. build-system: clojure: Redefine clojure-build. build-system: cmake: Redefine cmake-build and cmake-cross-build. build-system: composer: Redefine composer-build. build-system: copy: Redefine copy-build. build-system: dub: Redefine dub-build. build-system: dune: Redefine dune-build. build-system: elm: Redefine elm-build. build-system: emacs: Redefine emacs-build. build-system: font: Redefine font-build. build-system: glib-or-gtk: Improve glib-or-gtk-cross-build style. build-system: glib-or-gtk: Redefine glib-or-gtk-build functions. build-system: go: Redefine go-build and go-cross-build. build-system: guile: Redefine guile-build and guile-cross-build. build-system: haskell: Redefine haskell-build. build-system: julia: Redefine julia-build. build-system: linux-module: Redefine linux-module-build functions. build-system: maven: Redefine maven-build. build-system: meson: Redefine meson-build and meson-cross-build. build-system: minify: Redefine minify-build. build-system: mix: Redefine mix-build. build-system: node: Redefine node-build. build-system: ocaml: Redefine ocaml-build. build-system: perl: Redefine perl-build and perl-cross-build. build-system: pyproject: Redefine pyproject-build. build-system: python: Redefine python-build. build-system: qt: Redefine qt-build and qt-cross-build. build-system: r: Redefine r-build. build-system: rakudo: Redefine rakudo-build. build-system: rebar: Redefine rebar-build. build-system: renpy: Redefine renpy-build. build-system: ruby: Improve ruby-cross-build style. build-system: ruby: Redefine ruby-build. build-system: scons: Redefine scons-build. build-system: texlive: Redefine texlive-build. build-system: tree-sitter: Redefine tree-sitter-build functions. build-system: vim: Redefine vim-build. build-system: waf: Improve waf-build style. build-system: zig: Redefine zig-build. build-system: trivial: Redefine trivial-build functions. guix/build-system.scm | 2 +- guix/build-system/agda.scm | 8 +- guix/build-system/android-ndk.scm | 8 +- guix/build-system/ant.scm | 8 +- guix/build-system/asdf.scm | 8 +- guix/build-system/cargo.scm | 19 ++--- guix/build-system/chicken.scm | 8 +- guix/build-system/clojure.scm | 8 +- guix/build-system/cmake.scm | 24 ++---- guix/build-system/composer.scm | 9 +-- guix/build-system/copy.scm | 11 +-- guix/build-system/dub.scm | 8 +- guix/build-system/dune.scm | 9 +-- guix/build-system/elm.scm | 8 +- guix/build-system/emacs.scm | 8 +- guix/build-system/font.scm | 10 +-- guix/build-system/glib-or-gtk.scm | 115 ++++++++++++---------------- guix/build-system/gnu.scm | 119 +++++++++++++---------------- guix/build-system/go.scm | 20 ++--- guix/build-system/guile.scm | 21 ++--- guix/build-system/haskell.scm | 8 +- guix/build-system/julia.scm | 8 +- guix/build-system/linux-module.scm | 17 ++--- guix/build-system/maven.scm | 8 +- guix/build-system/meson.scm | 25 ++---- guix/build-system/minify.scm | 8 +- guix/build-system/mix.scm | 12 +-- guix/build-system/node.scm | 8 +- guix/build-system/ocaml.scm | 9 +-- guix/build-system/perl.scm | 22 ++---- guix/build-system/pyproject.scm | 13 +--- guix/build-system/python.scm | 12 +-- guix/build-system/qt.scm | 17 ++--- guix/build-system/r.scm | 9 +-- guix/build-system/rakudo.scm | 8 +- guix/build-system/rebar.scm | 12 +-- guix/build-system/renpy.scm | 8 +- guix/build-system/ruby.scm | 48 ++++++------ guix/build-system/scons.scm | 9 +-- guix/build-system/texlive.scm | 11 +-- guix/build-system/tree-sitter.scm | 16 ++-- guix/build-system/trivial.scm | 41 ++++------ guix/build-system/vim.scm | 15 +--- guix/build-system/waf.scm | 32 ++++---- guix/build-system/zig.scm | 8 +- guix/packages.scm | 53 ++++++++++--- 46 files changed, 348 insertions(+), 520 deletions(-) -- 2.41.0