unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Andrew Tropin <andrew@trop.in>
To: "Nicolas Graves via Development of GNU Guix and the GNU System
	distribution." <guix-devel@gnu.org>,
	guix-devel@gnu.org
Cc: ngraves@ngraves.fr
Subject: Re: [PATCH 00/48] Extend bag-build to gexps.
Date: Wed, 31 Jul 2024 16:57:07 +0400	[thread overview]
Message-ID: <87ttg5bty4.fsf@trop.in> (raw)
In-Reply-To: <20240108075153.14849-1-ngraves@ngraves.fr>

[-- Attachment #1: Type: text/plain, Size: 7856 bytes --]

On 2024-01-08 08:51, Nicolas Graves via "Development of GNU Guix and the GNU System distribution." wrote:

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

Looks really interesting and relevant, need to allocate resources to try
it out someday.

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

-- 
Best regards,
Andrew Tropin

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

      parent reply	other threads:[~2024-07-31 12:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-08  7:51 [PATCH 00/48] Extend bag-build to gexps Nicolas Graves via Development of GNU Guix and the GNU System distribution.
2024-01-10 21:50 ` Nicolas Graves via Development of GNU Guix and the GNU System distribution.
2024-07-31 12:57 ` Andrew Tropin [this message]

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=87ttg5bty4.fsf@trop.in \
    --to=andrew@trop.in \
    --cc=guix-devel@gnu.org \
    --cc=ngraves@ngraves.fr \
    /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).