all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Mathieu Lirzin <mthl@gnu.org>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: 30147@debbugs.gnu.org
Subject: [bug#30147] Simplify “scripts/guix”
Date: Tue, 23 Jan 2018 13:29:17 +0100	[thread overview]
Message-ID: <87efmg92si.fsf@gnu.org> (raw)
In-Reply-To: <87fu6x7x9m.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Tue, 23 Jan 2018 10:13:57 +0100")

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

Hello,

ludo@gnu.org (Ludovic Courtès) writes:

> Mathieu Lirzin <mthl@gnu.org> skribis:
>
>> From 342444897673d5f9d9a475986e76ca2e912f6674 Mon Sep 17 00:00:00 2001
>> From: Mathieu Lirzin <mthl@gnu.org>
>> Date: Wed, 17 Jan 2018 17:14:24 +0100
>> Subject: [PATCH 1/2] =?UTF-8?q?build:=20Expand=20=E2=80=98scripts/guix?=
>>  =?UTF-8?q?=E2=80=99=20at=20Make=20time.?=
>> MIME-Version: 1.0
>> Content-Type: text/plain; charset=UTF-8
>> Content-Transfer-Encoding: 8bit
>>
>> This moves the complexity of Autotools variable expansion outside of the
>> application code.
>>
>> * scripts/guix.in (config-lookup): Delete.
>> (maybe-augment-load-paths!, run-guix-main): Use fully expanded variables
>> instead of calling ‘config-lookup’.
>> * configure.ac: Don't use AC_CONFIG_FILES for ‘scripts/guix’.
>> * Makefile.am (scripts/guix): New rule.
>> (do_subst): New variable.
>> (CLEANFILES, EXTRA_DIST): Adapt.
>
> That’s a good idea.  I applied it with the changes below, mostly to
> account for Eric’s suggestions.

Thanks.

>> From b6f8331455da1ffc4896b06cd2ee98e09b05be43 Mon Sep 17 00:00:00 2001
>> From: Mathieu Lirzin <mthl@gnu.org>
>> Date: Wed, 17 Jan 2018 19:55:49 +0100
>> Subject: [PATCH 2/2] guix: Refactor script.
>> MIME-Version: 1.0
>> Content-Type: text/plain; charset=UTF-8
>> Content-Transfer-Encoding: 8bit
>>
>> * scripts/guix.in: Use ‘and-let*’ and remove empty surrounding ‘let’.
>> (run-guix-main, maybe-augment-load-paths!): Inline them.
>
> This is entirely subjective but I prefer the current style (in fact I
> never use SRFI-2), so I’d rather skip this patch.  WDYT?  :-)

I tried to avoid it, but the pipelining of checks for #f makes it very
tempting to use it.  But indeed this is a matter of style, so let's not
use it.

Here is an alternative patch that beside the pedantic issue of replacing

   (and updates-dir (file-exists? updates-dir))

with

   (and=> updates-dir file-exists?)

removes the surrounding empty 'let' that doesn't make sense to me.
Additionaly the compilation of the script is now possible which is
convenient for basic syntax checks.  This is done by using the ‘-e main
-s’ command-line switches.


[-- Attachment #2: 0001-guix-Refactor-script.patch --]
[-- Type: text/x-patch, Size: 3857 bytes --]

From 77379bbf2642762927c01cc7f10eb5761626f172 Mon Sep 17 00:00:00 2001
From: Mathieu Lirzin <mthl@gnu.org>
Date: Tue, 23 Jan 2018 12:52:33 +0100
Subject: [PATCH] guix: Refactor script.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* scripts/guix.in: Remove empty surrounding ‘let’.  Define 'main' as the
procedure called when running the script.
(maybe-augment-load-paths!): Rename to ...
(augment-load-paths!): ... this.  Use 'and=>' for 'file-exists?'.
(run-guix-main): Rename to ...
(main): ... this.  Call 'augment-load-paths!'.
---
 scripts/guix.in | 57 +++++++++++++++++++++++++++++----------------------------
 1 file changed, 29 insertions(+), 28 deletions(-)

diff --git a/scripts/guix.in b/scripts/guix.in
index af50a782b..e0f0ae7e0 100644
--- a/scripts/guix.in
+++ b/scripts/guix.in
@@ -1,4 +1,5 @@
-#!@GUILE@ --no-auto-compile
+#!@GUILE@ \
+--no-auto-compile -e main -s
 -*- scheme -*-
 !#
 ;;; GNU Guix --- Functional package management for GNU
@@ -25,34 +26,34 @@
 ;; It's okay to import modules from core Guile though.
 (use-modules (srfi srfi-26))
 
-(let ()
-  (define-syntax-rule (push! elt v) (set! v (cons elt v)))
+(define-syntax-rule (push! elt v) (set! v (cons elt v)))
 
-  (define (maybe-augment-load-paths!)
-    (unless (getenv "GUIX_UNINSTALLED")
-      (push! "@guilemoduledir@" %load-path)
-      (push! "@guileobjectdir@" %load-compiled-path)
-      (let ((updates-dir (and=> (or (getenv "XDG_CONFIG_HOME")
-                                    (and=> (getenv "HOME")
-                                           (cut string-append <> "/.config")))
-                                (cut string-append <> "/guix/latest"))))
-        (when (and updates-dir (file-exists? updates-dir))
-          ;; XXX: Currently 'guix pull' puts both .scm and .go files in
-          ;; UPDATES-DIR.
-          (push! updates-dir %load-path)
-          (push! updates-dir %load-compiled-path)))))
+(define (augment-load-paths!)
+  ;; Add installed modules to load-path.
+  (push! "@guilemoduledir@" %load-path)
+  (push! "@guileobjectdir@" %load-compiled-path)
 
-  (define (run-guix-main)
-    (let ((guix-main (module-ref (resolve-interface '(guix ui))
-                                 'guix-main)))
-      (bindtextdomain "guix" "@localedir@")
-      (bindtextdomain "guix-packages" "@localedir@")
-      (apply guix-main (command-line))))
+  ;; Add modules fetched by 'guix pull' to load-path.
+  (let ((updates-dir (and=> (or (getenv "XDG_CONFIG_HOME")
+                                (and=> (getenv "HOME")
+                                       (cut string-append <> "/.config")))
+                            (cut string-append <> "/guix/latest"))))
+    (when (and=> updates-dir file-exists?)
+      ;; XXX: Currently 'guix pull' puts both .scm and .go files in
+      ;; UPDATES-DIR.
+      (push! updates-dir %load-path)
+      (push! updates-dir %load-compiled-path))))
 
-  (maybe-augment-load-paths!)
+(define* (main #:optional (args (command-line)))
+  (unless (getenv "GUIX_UNINSTALLED")
+    (augment-load-paths!))
 
-  ;; XXX: It would be more convenient to change it to:
-  ;;   (exit (run-guix-main))
-  ;; but since the 'guix' command is not updated by 'guix pull', we cannot
-  ;; really do it now.
-  (run-guix-main))
+  (let ((guix-main (module-ref (resolve-interface '(guix ui))
+                               'guix-main)))
+    (bindtextdomain "guix" "@localedir@")
+    (bindtextdomain "guix-packages" "@localedir@")
+    ;; XXX: It would be more convenient to change it to:
+    ;;   (exit (apply guix-main (command-line)))
+    ;; but since the 'guix' command is not updated by 'guix pull', we cannot
+    ;; really do it now.
+    (apply guix-main args)))
-- 
2.16.0


[-- Attachment #3: Type: text/plain, Size: 76 bytes --]


-- 
Mathieu Lirzin
GPG: F2A3 8D7E EB2B 6640 5761  070D 0ADE E100 9460 4D37

  reply	other threads:[~2018-01-23 12:30 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-17 19:25 [bug#30147] Simplify “scripts/guix” Mathieu Lirzin
2018-01-22 18:19 ` Eric Bavier
2018-01-23 11:06   ` Mathieu Lirzin
2018-01-23  9:13 ` bug#30147: " Ludovic Courtès
2018-01-23 12:29   ` Mathieu Lirzin [this message]
2018-01-23 14:01     ` [bug#30147] " Ludovic Courtès
2018-01-24 11:45       ` Mathieu Lirzin
2018-01-24 13:46         ` Ludovic Courtès

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=87efmg92si.fsf@gnu.org \
    --to=mthl@gnu.org \
    --cc=30147@debbugs.gnu.org \
    --cc=ludo@gnu.org \
    /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.