Subject: bug#34922: guile-wm crashes on login

From: jesse <[email-masked]>
Date: Tue, 19 Mar 2019 16:58:06 -0600

I am trying to use guile-wm, but it fails when I launch it.
I define an operating system that includes guile-wm as a package and use
it to build a virtual machine image. Here is the operating system
definition:
~~~~~

(use-modules (gnu) (gnu system nss))
(use-service-modules desktop)
(use-package-modules certs gnome guile-wm)

(operating-system
 (host-name "piranhaplant")
 (timezone "America/Boise")
 (locale "en_US.utf8")

 (bootloader (bootloader-configuration
              (bootloader grub-bootloader)
              (target "/dev/sda")))

 (file-systems (cons (file-system
                      (device (file-system-label "mini8"))
                      (mount-point "/")
                      (type "ext4"))
                     %base-file-systems))

 (users
  %base-user-accounts)

 (packages (cons* nss-certs
                  gvfs
          guile-wm
                  %base-packages))

 (services (cons* (gnome-desktop-service)
                  %desktop-services))

 (name-service-switch %mdns-host-lookup-nss))

~~~~~

When I try to log in, it flashes an error so fast I cannot record it,
then returns to the login screen. When I launch it from a console, it
sends the following to stderr:

~~~~~

;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;;       or pass the --no-auto-compile argument to disable.
;;; compiling
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/bin/.guile-wm-real
;;; compiling
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/shared.scm
;;; compiling
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml.scm
;;; compiling
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/connection.scm
;;; compiling
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/struct.scm
;;; compiling
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/type.scm
;;; compiling
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/enum.scm
;;; compiling
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/records.scm
;;; compiled
/root/.cache/guile/ccache/2.2-LE-8-3.A/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/records.scm.go
;;; compiled
/root/.cache/guile/ccache/2.2-LE-8-3.A/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/enum.scm.go
;;; compiled
/root/.cache/guile/ccache/2.2-LE-8-3.A/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/type.scm.go
;;; compiling
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/union.scm
;;; compiled
/root/.cache/guile/ccache/2.2-LE-8-3.A/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/union.scm.go
;;; compiled
/root/.cache/guile/ccache/2.2-LE-8-3.A/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/struct.scm.go
;;; compiled
/root/.cache/guile/ccache/2.2-LE-8-3.A/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/connection.scm.go
;;; compiling
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/doc.scm
;;; compiled
/root/.cache/guile/ccache/2.2-LE-8-3.A/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/doc.scm.go
;;; compiling
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/auth.scm
;;; WARNING: compilation of
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/auth.scm
failed:
;;; no code for module (xcb xml xproto)
;;; WARNING: compilation of
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml.scm
failed:
;;; no code for module (xcb xml xproto)
;;; compiling
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/core.scm
;;; WARNING: compilation of
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/xml/core.scm
failed:
;;; no code for module (xcb xml xproto)
;;; WARNING: compilation of
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/shared.scm
failed:
;;; no code for module (xcb xml xproto)
;;; WARNING: compilation of
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/bin/.guile-wm-real
failed:
;;; no code for module (xcb xml xproto)
;;; compiling
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/user.scm
;;; compiling
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/command.scm
;;; compiling
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/event-loop.scm
;;; WARNING: compilation of
/gnu/store/gv2n0k75d5svzcgwqna33nvhvczrj3z2-guile-xcb-1.3-1.db7d5a3/share/guile/site/2.2/xcb/event-loop.scm
failed:
;;; no code for module (xcb xml xproto)
;;; WARNING: compilation of
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/command.scm
failed:
;;; no code for module (xcb xml xproto)
;;; compiling
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/log.scm
;;; compiled
/root/.cache/guile/ccache/2.2-LE-8-3.A/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/log.scm.go
;;; compiling
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/keymap.scm
;;; compiled
/root/.cache/guile/ccache/2.2-LE-8-3.A/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/keymap.scm.go
;;; compiling
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/text.scm
;;; compiling
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/draw.scm
;;; WARNING: compilation of
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/draw.scm
failed:
;;; no code for module (xcb xml xproto)
;;; WARNING: compilation of
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/text.scm
failed:
;;; no code for module (xcb xml xproto)
;;; compiling
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/color.scm
;;; WARNING: compilation of
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/color.scm
failed:
;;; no code for module (xcb xml xproto)
;;; WARNING: compilation of
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/user.scm
failed:
;;; no code for module (xcb xml xproto)
;;; compiling
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/redirect.scm
;;; WARNING: compilation of
/gnu/store/q549b5c0fwds1l8bycvabva3jwr86p63-guile-wm-1.0-1.f3c7b3b/share/guile/site/2.2/guile-wm/redirect.scm
failed:
;;; no code for module (xcb xml xproto)
Backtrace:
In ice-9/boot-9.scm:
   222:29 19 (map1 (((guile-wm keymap)) ((guile-wm redirect)) ((…)) …))
   222:17 18 (map1 (((guile-wm redirect)) ((xcb event-loop)) ((…)) …))
  2800:17 17 (resolve-interface (guile-wm redirect) #:select _ #:hide …)
In ice-9/threads.scm:
    390:8 16 (_ _)
In ice-9/boot-9.scm:
  2726:13 15 (_)
In ice-9/threads.scm:
    390:8 14 (_ _)
In ice-9/boot-9.scm:
  2994:20 13 (_)
   2312:4 12 (save-module-excursion #<procedure 1942ab0 at ice-9/boo…>)
  3014:26 11 (_)
In unknown file:
          10 (primitive-load-path "guile-wm/redirect" #<procedure 11…>)
In ice-9/eval.scm:
   721:20  9 (primitive-eval (define-module (guile-wm redirect) # # …))
In ice-9/psyntax.scm:
  1235:36  8 (expand-top-sequence ((define-module (guile-wm #) # …)) …)
  1182:24  7 (parse _ (("placeholder" placeholder)) ((top) #(# # …)) …)
   285:10  6 (parse _ (("placeholder" placeholder)) (()) _ c&e (eval) …)
In ice-9/eval.scm:
   293:34  5 (_ #<module (#{ g23682}#) bf1aa0>)
In ice-9/boot-9.scm:
   2874:4  4 (define-module* _ #:filename _ #:pure _ #:version _ # _ …)
  2887:24  3 (_)
   222:17  2 (map1 (((xcb xml xproto)) ((xcb xml)) ((xcb #)) ((…)) #))
   2803:6  1 (resolve-interface _ #:select _ #:hide _ #:prefix _ # _ …)
In unknown file:
           0 (scm-error misc-error #f "~A ~S" ("no code for modu…" …) …)

ERROR: In procedure scm-error:
no code for module (xcb xml xproto)

Some deprecated features have been used.  Set the environment
variable GUILE_WARN_DEPRECATED to "detailed" and rerun the
program to get more information.  Set it to "no" to suppress
this message.

~~~~~
From what I can tell, it is attempting to re-compile guile-wm, and
cannot find the prerequisite guile-xcb package files.

Possible solutions:

-Edit the guile-wm package to include guile-xcb in the
propagated-inputs. As the manual says, "Another example where
|propagated-inputs| is useful is for languages that lack a facility to
record the run-time search path akin to the |RUNPATH| of ELF files; this
includes Guile, Python, Perl, and more. To ensure that libraries written
in those languages can find library code they depend on at run time,
run-time dependencies must be listed in |propagated-inputs| rather than
|inputs|."

If there are no objections to taking this action as suggested by the
manual, here is a patch:
~~~~~

From 7bd5859eaef1b823ade87faa790092a553b40a91 Mon Sep 17 00:00:00 2001
From: jesse <[email-masked]>
Date: Tue, 19 Mar 2019 16:19:38 -0600
Subject: [PATCH] Fix guile-wm to have guile-xcb as a propagated-input.

---
 gnu/packages/guile-wm.scm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/guile-wm.scm b/gnu/packages/guile-wm.scm
index 7b1731171..40b56d64e 100644
--- a/gnu/packages/guile-wm.scm
+++ b/gnu/packages/guile-wm.scm
@@ -139,8 +139,8 @@ dependencies.")
                #t)))))
       (native-inputs `(("pkg-config" ,pkg-config)
                        ("texinfo" ,texinfo)))
-      (inputs `(("guile" ,guile-2.2)
-                ("guile-xcb" ,guile-xcb)))
+      (inputs `(("guile" ,guile-2.2)))
+      (propagated-inputs `(("guile-xcb" ,guile-xcb)))
       (home-page "https://github.com/mwitmer/guile-wm/releases")
       (description
        "Guile-WM is a simple window manager that's completely
customizable—you
-- 
2.20.1

~~~~~

I could not test this fix because even in a guix environment and
pre-inst-env with the patch, guix does not recognize the file I edited
as the file that defines the guile-wm package. (I think that's a problem
with my OS.) However, when I included a similarly revised definition of
guile-wm in an OS definition, guile did not try to re-build guile-wm, so
I think this is progress on the guile-wm crash bug. It does not allow me
to run guile-wm as my window manager, but it does fix one part of the
problem.

-Jesse