Subject: bug#27467: Xfce broken, because it propagates two different versions of gtk+

From: Ricardo Wurmus <[email-masked]>
Date: Tue, 27 Jun 2017 09:56:11 +0200

Ricardo Wurmus <[email-masked]> writes:

> Ludovic Courtès <[email-masked]> writes:
>
>> Ricardo Wurmus <[email-masked]> skribis:
>>
>>> Mark H Weaver <[email-masked]> writes:
>>>
>>>> [email-masked] (Ludovic Courtès) writes:
>>>>
>>>>> Mark H Weaver <[email-masked]> skribis:
>>>>>
>>>>>> I just tried to update my GuixSD system to commit
>>>>>> c57b56722f6c167c5a285f47802047de85a356ae on master.  "guix system build"
>>>>>> failed with the following error:
>>>>>>
>>>>>> guix system: error: profile contains conflicting entries for gtk+:out
>>>>>> guix system: error:   first entry: [email-masked]:out /gnu/store/901ify6fr2zlr2y2acpvlqr8lygmwj98-gtk+-2.24.31
>>>>>> guix system: error:    ... propagated from [email-masked]
>>>>>> guix system: error:    ... propagated from [email-masked]
>>>>>> guix system: error:   second entry: [email-masked]:out /gnu/store/fhqaljm8cf78irhqjbrm8n0ri1k2cznm-gtk+-3.22.15
>>>>>> guix system: error:    ... propagated from [email-masked]
>>>>>> guix system: error:    ... propagated from [email-masked]
>>>>>> guix system: error:    ... propagated from [email-masked]
>>>>>
>>>>> I just tried and Exo builds fine with GTK+3, so I would think this
>>>>> reference to GTK+2 was a mistake.  Can you check if it works fine for
>>>>> you with this change?
>>>>
>>>> After changing Exo to use Gtk+3, I get this:
>>>>
>>>> guix system: error: profile contains conflicting entries for gtk+:out
>>>> guix system: error:   first entry: [email-masked]:out /gnu/store/0m9hpckvamd048zgsrhx1dx2s5hrg1qk-gtk+-2.24.31
>>>> guix system: error:    ... propagated from [email-masked]
>>>> guix system: error:    ... propagated from [email-masked]
>>>> guix system: error:    ... propagated from [email-masked]
>>>> guix system: error:   second entry: [email-masked]:out /gnu/store/hc090rjjka3r9spvzl7yn5hcc2xgrgdh-gtk+-3.22.15
>>>> guix system: error:    ... propagated from [email-masked]
>>>> guix system: error:    ... propagated from [email-masked]
>>>> guix system: error:    ... propagated from [email-masked]
>>>
>>> libxfce4ui propagates both gtk+@3 and gtk+@2.  There is no conflict
>>> between these two versions of gtk, because they are installed into
>>> separate sub-directories under $prefix/lib.
>>
>> So this is on purpose, right?  Sounds weird no?
>
> It’s not unusual for some GUI libraries to support multiple backends.
> It’s a bit weird that this requires propagation, but according to the
> comment that’s because of the pkg-config files.
>
> libxfce4ui-1.pc needs propagation of gtk+@2, libxfce4ui-2.pc needs
> propagation of gtk+@3.  Maybe we could split that package up, so that
> the different variants are provided by separate variants.  Or we could
> simply not propagate gtk+@2 and only add it to packages that actually
> use gtk+@2.
>
> I’m giving this a try right now.

What do you think of the attached patches?  The first makes libxfce4ui
only propagate the latest gtk+, so I added gtk+-2 where needed.  The
second removes “exo” from the “xfce” meta-package, because it doesn’t
seem needed.  “exo” propagates “gtk+-2”, so it would be hard to prevent
the conflict otherwise.

These patches are only a temporary fix until we can find a way to mark
certain conflicts as unproblematic.

>From 9cbb90bfaeae0aa8fbdcfa0aa212dc1b3acac359 Mon Sep 17 00:00:00 2001
From: Ricardo Wurmus <[email-masked]>
Date: Tue, 27 Jun 2017 09:31:50 +0200
Subject: [PATCH 1/2] gnu: libxfce4ui: Do not propagate gtk+-2.

Propagation of both gtk+ and gtk+-2 causes a conflict to be detected,
preventing the installation of xfce.

* gnu/packages/xfce.scm (libxfce4ui)[propagated-inputs]: Move "gtk+-2"...
[inputs]: ...to here.
(garcon)[inputs]: Add "gtk+-2".
(xfce4-appfinder)[inputs]: Add "gtk+-2".
(xfce4-power-manager)[inputs]: Add "gtk+-2".
(ristretto)[inputs]: Add "gtk+-2".
---
 gnu/packages/xfce.scm | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index d7d1372dd..c9d519122 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -159,13 +159,15 @@ storage system.")
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)))
     (propagated-inputs
-     `(("gtk+-2" ,gtk+-2)  ; required by libxfce4ui-1.pc
-       ("gtk+-3" ,gtk+)    ; required by libxfce4ui-2.pc
+     `(("gtk+-3" ,gtk+)    ; required by libxfce4ui-2.pc
        ;; libxfce4kbd-private-2.pc refers to all these.
        ("libxfce4util" ,libxfce4util)
        ("xfconf" ,xfconf)))
     (inputs `(("libsm" ,libsm)
               ("libice" ,libice)
+              ;; FIXME: required by libxfce4ui-1.pc, so should be propagated,
+              ;; but will lead to a conflict with gtk+.
+              ("gtk+-2" ,gtk+-2)
               ("startup-notification" ,startup-notification)))
     (home-page "http://www.xfce.org/")
     (synopsis "Widgets library for Xfce")
@@ -221,6 +223,8 @@ development.")
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)
        ("glib:bin" ,glib "bin")))
+    (inputs
+     `(("gtk+" ,gtk+-2)))
     (propagated-inputs
      `(("libxfce4ui" ,libxfce4ui))) ; required by garcon-gtk2-1.pc
     (home-page "http://www.xfce.org/")
@@ -452,6 +456,7 @@ per window.")
        ("intltool" ,intltool)))
     (inputs
      `(("garcon" ,garcon)
+       ("gtk+" ,gtk+-2)
        ("libxfce4ui" ,libxfce4ui)))
     (home-page "http://www.xfce.org/")
     (synopsis "Xfce application finder")
@@ -750,6 +755,7 @@ system resources, while still being visually appealing and user friendly.")
        ("intltool" ,intltool)))
     (inputs
      `(("lbxrandr" ,libxrandr)
+       ("gtk+" ,gtk+-2)
        ("upower" ,upower)
        ("libnotify" ,libnotify)
        ("libxfce4ui" ,libxfce4ui)))
@@ -783,6 +789,7 @@ inhibit interface which allows applications to prevent automatic sleep.")
        ("pkg-config" ,pkg-config)))
     (inputs
      `(("desktop-file-utils" ,desktop-file-utils)
+       ("gtk+" ,gtk+-2)
        ("libexif" ,libexif)
        ("libxfce4ui" ,libxfce4ui)
        ("librsvg" ,librsvg)
-- 
2.12.2

>From a9037e23c3ccf656e5c2d53c22ff4b22c9db84e6 Mon Sep 17 00:00:00 2001
From: Ricardo Wurmus <[email-masked]>
Date: Tue, 27 Jun 2017 09:51:33 +0200
Subject: [PATCH 2/2] gnu: xfce: Do not propagate exo.

* gnu/packages/xfce.scm (xfce)[propagated-inputs]: Remove exo.
---
 gnu/packages/xfce.scm | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index c9d519122..2965b4340 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -705,8 +705,7 @@ on your desktop.")
     (build-system trivial-build-system)
     (arguments '(#:builder (mkdir %output)))
     (propagated-inputs
-     `(("exo"                  ,exo)
-       ("garcon"               ,garcon)
+     `(("garcon"               ,garcon)
        ("gnome-icon-theme"     ,gnome-icon-theme)
        ("gtk-xfce-engine"      ,gtk-xfce-engine)
        ("hicolor-icon-theme"   ,hicolor-icon-theme)
-- 
2.12.2

--
Ricardo

GPG: BCA6 89B6 3655 3801 C3C6  2150 197A 5888 235F ACAC
https://elephly.net