all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Liliana Marie Prikler <liliana.prikler@gmail.com>
To: 72406@debbugs.gnu.org
Cc: gemmaro.dev@gmail.com, andrew@trop.in,
	cox.katherine.e+guix@gmail.com, liliana.prikler@gmail.com
Subject: [bug#72406] [PATCH emacs-team WIP v4 01/24] build-system: emacs: Define package-with-explicit-emacs.
Date: Sun, 11 Aug 2024 14:58:42 +0200	[thread overview]
Message-ID: <19bb476657c13cc5ab2181de6259249a441942cc.1723381182.git.liliana.prikler@gmail.com> (raw)
In-Reply-To: <cover.1723381182.git.liliana.prikler@gmail.com>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 2967 bytes --]

* guix/build-system/emacs.scm (package-with-explicit-emacs): New procedure.
---
 guix/build-system/emacs.scm | 51 +++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/guix/build-system/emacs.scm b/guix/build-system/emacs.scm
index ebf97a5344..3a11738496 100644
--- a/guix/build-system/emacs.scm
+++ b/guix/build-system/emacs.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
+;;; Copyright © 2024 Liliana Marie Prikler <liliana.prikler@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -128,4 +129,54 @@ (define emacs-build-system
     (description "The build system for Emacs packages")
     (lower lower)))
 
+(define* (package-with-explicit-emacs emacs old-prefix new-prefix
+                                      #:key variant-property)
+  "Return a procedure of one argument, P.  The procedure creates a package with
+the same fields as P, which is assumed to use EMACS-BUILD-SYSTEM, such that
+it is compiled with EMACS instead.  The inputs are changed recursively
+accordingly.  If the name of P starts with OLD-PREFIX, this is replaced by
+NEW-PREFIX; otherwise, NEW-PREFIX is prepended to the name.
+
+When VARIANT-PROPERTY is present, it is used as a key to search for
+pre-defined variants of this transformation recorded in the 'properties' field
+of packages.  The property value must be the promise of a package.  This is a
+convenient way for package writers to force the transformation to use
+pre-defined variants."
+  (define package-variant
+    (if variant-property
+        (lambda (package)
+          (assq-ref (package-properties package)
+                    variant-property))
+        (const #f)))
+
+  (define (transform pkg)
+    (cond
+     ;; If VARIANT-PROPERTY is present, use that.
+     ((package-variant pkg)
+      => force)
+
+     ;; Otherwise build the new package object graph.
+     ((eq? (package-build-system pkg) emacs-build-system)
+      (package/inherit pkg
+        (location (package-location pkg))
+        (name (let ((name (package-name pkg)))
+                (string-append new-prefix
+                               (if (string-prefix? old-prefix name)
+                                   (substring name
+                                              (string-length old-prefix))
+                                   name))))
+        (arguments
+         (let ((emacs (if (promise? emacs)
+                          (force emacs)
+                          emacs)))
+           (ensure-keyword-arguments (package-arguments pkg)
+                                     `(#:emacs ,emacs))))))
+     (else pkg)))
+
+  (define (cut? pkg)
+    (or (not (eq? (package-build-system pkg) emacs-build-system))
+        (package-variant pkg)))
+
+  (package-mapping transform cut?))
+
 ;;; emacs.scm ends here
-- 
2.45.2





  reply	other threads:[~2024-08-11 13:02 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-31 19:58 [bug#72406] [PATCH emacs-team WIP 0/4] Simplify creation of emacs package variants Liliana Marie Prikler
2024-07-31 18:41 ` [bug#72406] [PATCH emacs-team WIP 2/4] build-system: emacs: Make emacs the default variant Liliana Marie Prikler
2024-07-31 18:42 ` [bug#72406] [PATCH emacs-team WIP 3/4] build-system: emacs: Define common variants Liliana Marie Prikler
2024-07-31 19:54 ` [bug#72406] [PATCH emacs-team WIP 4/4] etc: Provide snippet for defining emacs variants Liliana Marie Prikler
2024-07-31 19:57 ` [bug#72406] [PATCH emacs-team WIP 1/4] build-system: emacs: Define package-with-explicit-emacs Liliana Marie Prikler
2024-08-01  3:23 ` [bug#72406] [PATCH emacs-team WIP 0/4] Simplify creation of emacs package variants Suhail Singh
2024-08-01  4:32   ` Liliana Marie Prikler
2024-08-01  6:02     ` Suhail Singh
2024-08-01 16:54       ` Liliana Marie Prikler
2024-08-01 19:40         ` Suhail Singh
2024-08-11 12:59 ` [bug#72406] [PATCH emacs-team WIP v4 00/24] Build variants for other Emacsen Liliana Marie Prikler
2024-08-11 12:58   ` Liliana Marie Prikler [this message]
2024-09-03 15:18     ` [bug#72406] [PATCH emacs-team WIP v4 01/24] build-system: emacs: Define package-with-explicit-emacs Simon Tournier
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 03/24] build-system: emacs: Define common variants Liliana Marie Prikler
2024-09-03 15:21     ` Simon Tournier
2024-09-03 15:39       ` Simon Tournier
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 02/24] build-system: emacs: Make emacs the default variant Liliana Marie Prikler
2024-09-03 15:29     ` Simon Tournier
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 04/24] build-system: emacs: Handle variants in elpa naming Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 05/24] etc: Provide snippet for defining emacs variants Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 06/24] gnu: emacs-libgit: Build variants Liliana Marie Prikler
2024-09-03 15:32     ` Simon Tournier
2024-09-03 16:57       ` Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 07/24] gnu: emacs-eweouz: " Liliana Marie Prikler
2024-09-03 15:47     ` Simon Tournier
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 08/24] gnu: emacs-tablist: Define variants Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 10/24] gnu: emacs-fontaine: Reindent Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 09/24] gnu: emacs-pdf-tools: Build variants Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 12/24] gnu: emacs-dash: Define variants Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 11/24] gnu: emacs-bui: " Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 13/24] gnu: emacs-edit-indirect: " Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 14/24] gnu: emacs-geiser: " Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 15/24] gnu: emacs-geiser-guile: " Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 17/24] gnu: emacs-guix: Build variants Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 20/24] gnu: emacs-xelb: " Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 19/24] gnu: emacspeak: " Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 16/24] gnu: emacs-magit-popup: Define variants Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 18/24] [WIP] gnu: emacs-dvc: Build variants Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 21/24] gnu: emacs-exwm: " Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 23/24] gnu: eless: " Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 22/24] gnu: emacs-exwm-x: " Liliana Marie Prikler
2024-08-11 12:58   ` [bug#72406] [PATCH emacs-team WIP v4 24/24] gnu: Build all the other emacs-* variants Liliana Marie Prikler
2024-09-03 15:51   ` [bug#72406] [PATCH emacs-team WIP v4 00/24] Build variants for other Emacsen Simon Tournier
2024-09-03 16:52     ` Liliana Marie Prikler

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=19bb476657c13cc5ab2181de6259249a441942cc.1723381182.git.liliana.prikler@gmail.com \
    --to=liliana.prikler@gmail.com \
    --cc=72406@debbugs.gnu.org \
    --cc=andrew@trop.in \
    --cc=cox.katherine.e+guix@gmail.com \
    --cc=gemmaro.dev@gmail.com \
    /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 external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.