Ludovic Courtès (2015-10-16 11:20 +0300) wrote:

> Alex Kost <[email protected]> skribis:
>
>> What about modifying ‘guix’ package to make various "View graph" actions
>> in "M-x guix" work by default (without installing graphviz)?
>
> I would rather change Guix itself: What about adding ‘guix-dot-program’
> to guix-config.el.in, set to "@DOT_USER_PROGRAM@" (which doesn’t exist
> yet)?

Great idea!  However I think instead of moving ‘guix-dot-program’ to
"guix-config.el.in", it is better to move ‘guix-guile-program’ to
"guix-external.el" instead (explained below).

> We can’t use @DOT@ because currently it is set to something like:
>
>   DOT='${SHELL} /home/ludo/src/guix/build-aux/missing dot'

Yes, that's why I didn't use @DOT@, and decided to modify the ‘guix’
package instead.

> So we need an AC_PATH_PROG for dot that defines the ‘DOT_USER_PROGRAM’
> substitution variable.
>
> Does that make sense?

Yes, this is great!  I didn't think to go this way, thanks!

Along with the patch for this change, I'm also attaching a patch to
"improve" guix-config.el: to make all its constants begin with
"guix-config-" prefix and to use them in the real variables that may be
modified by a user.  WDYT?

>From dd793147718cb18766268c8aad50d24b88ffe6b6 Mon Sep 17 00:00:00 2001
From: Alex Kost <[email protected]>
Date: Fri, 16 Oct 2015 20:34:32 +0300
Subject: [PATCH 1/2] build: Set DOT_USER_PROGRAM for Emacs interface.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Suggested by Ludovic Courtès <[email protected]>.

* configure.ac: Set DOT_USER_PROGRAM variable.
* emacs/guix-config.el.in (guix-config-dot-program): New constant.
* emacs/guix-external.el (guix-dot-program): Use it.
---
 configure.ac            | 1 +
 emacs/guix-config.el.in | 4 ++++
 emacs/guix-external.el  | 7 ++++++-
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index bb3d947..74683fb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -206,6 +206,7 @@ AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env])
 AC_CONFIG_FILES([test-env],     [chmod +x test-env])
 
 dnl Emacs interface.
+AC_PATH_PROG([DOT_USER_PROGRAM], [dot])
 AM_PATH_LISPDIR
 AM_CONDITIONAL([HAVE_EMACS], [test "x$EMACS" != "xno"])
 
diff --git a/emacs/guix-config.el.in b/emacs/guix-config.el.in
index 16434ce..b7020de 100644
--- a/emacs/guix-config.el.in
+++ b/emacs/guix-config.el.in
@@ -1,6 +1,7 @@
 ;;; guix-config.el --- Compile-time configuration of Guix.
 
 ;; Copyright © 2015 Mathieu Lirzin <[email protected]>
+;; Copyright © 2015 Alex Kost <[email protected]>
 
 ;; This file is part of GNU Guix.
 
@@ -35,6 +36,9 @@ strings of the form:
 
 Where ARGS is a list of arguments to the guile program.")
 
+(defconst guix-config-dot-program "@DOT_USER_PROGRAM@"
+  "Name of the 'dot' executable defined at the configure time.")
+
 (provide 'guix-config)
 
 ;;; guix-config.el ends here
diff --git a/emacs/guix-external.el b/emacs/guix-external.el
index d233473..ce83589 100644
--- a/emacs/guix-external.el
+++ b/emacs/guix-external.el
@@ -23,11 +23,16 @@
 
 ;;; Code:
 
+(require 'guix-config)
+
 (defgroup guix-external nil
   "Settings for external programs."
   :group 'guix)
 
-(defcustom guix-dot-program (executable-find "dot")
+(defcustom guix-dot-program
+  (if (string= "" guix-config-dot-program)
+      (executable-find "dot")
+    guix-config-dot-program)
   "Name of the 'dot' executable."
   :type 'string
   :group 'guix-external)
-- 
2.5.0

>From be9e01b3c2d6ca9f47c5bdac38effe7a7bb707dc Mon Sep 17 00:00:00 2001
From: Alex Kost <[email protected]>
Date: Fri, 16 Oct 2015 20:48:24 +0300
Subject: [PATCH 2/2] emacs: config: Use "emacs-config-" prefix for constants.

* emacs/guix-config.el.in (guix-emacs-interface-directory,
  guix-state-directory): Rename to ...
  (guix-config-emacs-interface-directory, guix-config-state-directory):
  ...this.
  (guix-config-guile-program): New constant.
  (guix-guile-program): Move to ...
* emacs/guix-external.el (guix-guile-program): ...here.  Make it a
  'defcustom'.
* emacs/guix-profiles.el (guix-default-profile): Use
  'guix-config-state-directory'.
* emacs/guix-backend.el (guix-load-path): Use
  'guix-config-emacs-interface-directory'.
---
 emacs/guix-backend.el   |  3 ++-
 emacs/guix-config.el.in | 14 ++++----------
 emacs/guix-external.el  | 11 +++++++++++
 emacs/guix-profiles.el  |  2 +-
 4 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/emacs/guix-backend.el b/emacs/guix-backend.el
index 412d648..e7c158b 100644
--- a/emacs/guix-backend.el
+++ b/emacs/guix-backend.el
@@ -56,9 +56,10 @@
 (require 'geiser-guile)
 (require 'guix-geiser)
 (require 'guix-config)
+(require 'guix-external)
 (require 'guix-emacs)
 
-(defvar guix-load-path guix-emacs-interface-directory
+(defvar guix-load-path guix-config-emacs-interface-directory
   "Directory with scheme files for \"guix.el\" package.")
 
 (defvar guix-helper-file
diff --git a/emacs/guix-config.el.in b/emacs/guix-config.el.in
index b7020de..a02b362 100644
--- a/emacs/guix-config.el.in
+++ b/emacs/guix-config.el.in
@@ -20,21 +20,15 @@
 
 ;;; Code:
 
-(defconst guix-emacs-interface-directory
+(defconst guix-config-emacs-interface-directory
   (replace-regexp-in-string "${prefix}" "@prefix@" "@emacsuidir@"))
 
-(defconst guix-state-directory
+(defconst guix-config-state-directory
   ;; This must match `NIX_STATE_DIR' as defined in `daemon.am'.
   (or (getenv "NIX_STATE_DIR") "@guix_localstatedir@/guix"))
 
-(defvar guix-guile-program "@GUILE@"
-  "Name of the guile executable used for Guix REPL.
-May be either a string (the name of the executable) or a list of
-strings of the form:
-
-  (NAME . ARGS)
-
-Where ARGS is a list of arguments to the guile program.")
+(defconst guix-config-guile-program "@GUILE@"
+  "Name of the 'guile' executable defined at the configure time.")
 
 (defconst guix-config-dot-program "@DOT_USER_PROGRAM@"
   "Name of the 'dot' executable defined at the configure time.")
diff --git a/emacs/guix-external.el b/emacs/guix-external.el
index ce83589..0af52c3 100644
--- a/emacs/guix-external.el
+++ b/emacs/guix-external.el
@@ -29,6 +29,17 @@
   "Settings for external programs."
   :group 'guix)
 
+(defcustom guix-guile-program guix-config-guile-program
+  "Name of the 'guile' executable used for Guix REPL.
+May be either a string (the name of the executable) or a list of
+strings of the form:
+
+  (NAME . ARGS)
+
+Where ARGS is a list of arguments to the guile program."
+  :type 'string
+  :group 'guix-external)
+
 (defcustom guix-dot-program
   (if (string= "" guix-config-dot-program)
       (executable-find "dot")
diff --git a/emacs/guix-profiles.el b/emacs/guix-profiles.el
index 1a41745..2c19368 100644
--- a/emacs/guix-profiles.el
+++ b/emacs/guix-profiles.el
@@ -26,7 +26,7 @@
   "User profile.")
 
 (defvar guix-default-profile
-  (concat guix-state-directory
+  (concat guix-config-state-directory
           "/profiles/per-user/"
           (getenv "USER")
           "/guix-profile")
-- 
2.5.0

Reply via email to