3

I tried to install the gtk haskell on my mac. I used this site to install it. However I failed at the last step with the command: sudo cabal install --with-gcc=gcc-4.8 gtk

the terminal answer is:

Resolving dependencies...
cabal: Could not resolve dependencies:
next goal: gtk (user goal)
rejecting: gtk-0.14.5, gtk-0.14.4, gtk-0.14.3, gtk-0.14.2, gtk-0.13.9,
gtk-0.13.8.1, gtk-0.13.8, gtk-0.13.7, gtk-0.13.6, gtk-0.13.4, gtk-0.13.3,
gtk-0.13.2, gtk-0.13.1, gtk-0.13.0.3, gtk-0.13.0.2, gtk-0.13.0.1,
gtk-0.13.0.0, gtk-0.12.5.7, gtk-0.12.5.6, gtk-0.12.5.5, gtk-0.12.5.4,
gtk-0.12.5.3, gtk-0.12.5.2, gtk-0.12.5.1, gtk-0.12.5.0, gtk-0.12.4,
gtk-0.12.3.1, gtk-0.12.3, gtk-0.12.2, gtk-0.12.1, gtk-0.12.0, gtk-0.11.2,
gtk-0.11.1, gtk-0.11.0 (conflict: requires pkg-config package gtk+-2.0-any,
not found in the pkg-config database)
Dependency tree exhaustively searched.

Cabal should be up-to-date.

Thanks in advance.

EDIT: After doing ErikR recipe, it started to install with the command cabal install gtk. This is the error message, I got:

Resolving dependencies...
Configuring glib-0.13.4.0...
Building glib-0.13.4.0...
Installed glib-0.13.4.0
Downloading gio-0.13.3.0...
Downloading pango-0.13.3.0...
Configuring gio-0.13.3.0...
Configuring pango-0.13.3.0...
Building gio-0.13.3.0...
Building pango-0.13.3.0...
Installed pango-0.13.3.0
Installed gio-0.13.3.0
Downloading gtk-0.14.5...
Configuring gtk-0.14.5...
Building gtk-0.14.5...
Failed to install gtk-0.14.5
Build log ( /Users/Max/.cabal/logs/gtk-0.14.5.log ):
cabal: Entering directory '/var/folders/kr/2w9n7xxd6816d0rmgb05cfm00000gn/T/cabal-tmp-31721/gtk-0.14.5'
[1 of 1] Compiling Main             ( /var/folders/kr/2w9n7xxd6816d0rmgb05cfm00000gn/T/cabal-tmp-31721/gtk-0.14.5/dist/setup/setup.hs, /var/folders/kr/2w9n7xxd6816d0rmgb05cfm00000gn/T/cabal-tmp-31721/gtk-0.14.5/dist/setup/Main.o )
Linking /var/folders/kr/2w9n7xxd6816d0rmgb05cfm00000gn/T/cabal-tmp-31721/gtk-0.14.5/dist/setup/setup ...
Configuring gtk-0.14.5...
Building gtk-0.14.5...
Preprocessing library gtk-0.14.5...
[  1 of 209] Compiling Graphics.UI.Gtk.ModelView.Sequence ( Graphics/UI/Gtk/ModelView/Sequence.hs, dist/build/Graphics/UI/Gtk/ModelView/Sequence.o )
[  2 of 209] Compiling Graphics.UI.Gtk.Gdk.Enums ( dist/build/Graphics/UI/Gtk/Gdk/Enums.hs, dist/build/Graphics/UI/Gtk/Gdk/Enums.o )
[  3 of 209] Compiling Graphics.UI.Gtk.General.Enums ( dist/build/Graphics/UI/Gtk/General/Enums.hs, dist/build/Graphics/UI/Gtk/General/Enums.o )
[  4 of 209] Compiling Graphics.UI.Gtk.General.Threading ( Graphics/UI/Gtk/General/Threading.hs, dist/build/Graphics/UI/Gtk/General/Threading.o )
[  5 of 209] Compiling Graphics.UI.Gtk.Signals ( dist/build/Graphics/UI/Gtk/Signals.hs, dist/build/Graphics/UI/Gtk/Signals.o )
[  6 of 209] Compiling Graphics.UI.Gtk.Types ( dist/build/Graphics/UI/Gtk/Types.hs, dist/build/Graphics/UI/Gtk/Types.o )
[  7 of 209] Compiling Graphics.UI.Gtk.General.DNDTypes ( dist/build/Graphics/UI/Gtk/General/DNDTypes.hs, dist/build/Graphics/UI/Gtk/General/DNDTypes.o )
[  8 of 209] Compiling Graphics.UI.Gtk.Abstract.ContainerChildProperties ( dist/build/Graphics/UI/Gtk/Abstract/ContainerChildProperties.hs, dist/build/Graphics/UI/Gtk/Abstract/ContainerChildProperties.o )
[  9 of 209] Compiling Graphics.UI.Gtk.Embedding.Types ( dist/build/Graphics/UI/Gtk/Embedding/Types.hs, dist/build/Graphics/UI/Gtk/Embedding/Types.o )
[ 10 of 209] Compiling Graphics.UI.Gtk.Embedding.Embedding ( dist/build/Graphics/UI/Gtk/Embedding/Embedding.hs, dist/build/Graphics/UI/Gtk/Embedding/Embedding.o )
[ 11 of 209] Compiling Graphics.UI.Gtk.ModelView.Types ( dist/build/Graphics/UI/Gtk/ModelView/Types.hs, dist/build/Graphics/UI/Gtk/ModelView/Types.o )
[ 12 of 209] Compiling Graphics.UI.Gtk.Gdk.PixbufData ( Graphics/UI/Gtk/Gdk/PixbufData.hs, dist/build/Graphics/UI/Gtk/Gdk/PixbufData.o )
[ 13 of 209] Compiling Graphics.UI.Gtk.Gdk.PixbufAnimation ( dist/build/Graphics/UI/Gtk/Gdk/PixbufAnimation.hs, dist/build/Graphics/UI/Gtk/Gdk/PixbufAnimation.o )
[ 14 of 209] Compiling Graphics.UI.Gtk.Builder ( dist/build/Graphics/UI/Gtk/Builder.hs, dist/build/Graphics/UI/Gtk/Builder.o )
[ 15 of 209] Compiling Graphics.UI.Gtk.Abstract.Separator ( Graphics/UI/Gtk/Abstract/Separator.hs, dist/build/Graphics/UI/Gtk/Abstract/Separator.o )
[ 16 of 209] Compiling Graphics.UI.Gtk.Abstract.Scrollbar ( Graphics/UI/Gtk/Abstract/Scrollbar.hs, dist/build/Graphics/UI/Gtk/Abstract/Scrollbar.o )
[ 17 of 209] Compiling Graphics.UI.Gtk.Abstract.Scale ( dist/build/Graphics/UI/Gtk/Abstract/Scale.hs, dist/build/Graphics/UI/Gtk/Abstract/Scale.o )
[ 18 of 209] Compiling Graphics.UI.Gtk.Abstract.Object ( dist/build/Graphics/UI/Gtk/Abstract/Object.hs, dist/build/Graphics/UI/Gtk/Abstract/Object.o )
[ 19 of 209] Compiling Graphics.UI.Gtk.Abstract.Paned ( dist/build/Graphics/UI/Gtk/Abstract/Paned.hs, dist/build/Graphics/UI/Gtk/Abstract/Paned.o )
[ 20 of 209] Compiling Graphics.UI.Gtk.General.Structs ( dist/build/Graphics/UI/Gtk/General/Structs.hs, dist/build/Graphics/UI/Gtk/General/Structs.o )
[ 21 of 209] Compiling Graphics.UI.Gtk.Abstract.Range ( dist/build/Graphics/UI/Gtk/Abstract/Range.hs, dist/build/Graphics/UI/Gtk/Abstract/Range.o )
[ 22 of 209] Compiling Graphics.UI.Gtk.Embedding.Plug ( dist/build/Graphics/UI/Gtk/Embedding/Plug.hs, dist/build/Graphics/UI/Gtk/Embedding/Plug.o )

Graphics/UI/Gtk/Embedding/Plug.chs:120:6:
    Couldn't match expected type ‘Ptr ()’
                with actual type ‘Maybe DrawWindow’
    In the first argument of ‘gtk_plug_new’, namely
      ‘(fromNativeWindowId (fromMaybe nativeWindowIdNone socketId))’
    In the second argument of ‘($)’, namely
      ‘gtk_plug_new
         (fromNativeWindowId (fromMaybe nativeWindowIdNone socketId))’

Graphics/UI/Gtk/Embedding/Plug.chs:137:6:
    Couldn't match expected type ‘Ptr ()’
                with actual type ‘Maybe DrawWindow’
    In the second argument of ‘\ (Display arg1) arg2
                                 -> withForeignPtr arg1
                                    $ \ argPtr1 -> gtk_plug_new_for_display argPtr1 arg2’, namely
      ‘(fromNativeWindowId (fromMaybe nativeWindowIdNone socketId))’
    In the second argument of ‘($)’, namely
      ‘(\ (Display arg1) arg2
          -> withForeignPtr arg1
             $ \ argPtr1 -> gtk_plug_new_for_display argPtr1 arg2)
         display
         (fromNativeWindowId (fromMaybe nativeWindowIdNone socketId))’

Graphics/UI/Gtk/Embedding/Plug.chs:151:3:
    Couldn't match type ‘Ptr ()’ with ‘Maybe DrawWindow’
    Expected type: IO (Maybe DrawWindow)
      Actual type: IO (Ptr ())
    In the second argument of ‘($)’, namely
      ‘(\ (Plug arg1)
          -> withForeignPtr arg1 $ \ argPtr1 -> gtk_plug_get_id argPtr1)
         (toPlug self)’
    In the expression:
      liftM toNativeWindowId
      $ (\ (Plug arg1)
           -> withForeignPtr arg1 $ \ argPtr1 -> gtk_plug_get_id argPtr1)
          (toPlug self)
cabal: Leaving directory '/var/folders/kr/2w9n7xxd6816d0rmgb05cfm00000gn/T/cabal-tmp-31721/gtk-0.14.5'
cabal: Error: some packages failed to install:
gtk-0.14.5 failed during the building phase. The exception was:
ExitFailure 1
Max K
  • 171
  • 12
  • What versions of cabal/ghc are you using – epsilonhalbe Aug 12 '16 at 12:11
  • Which of the recipes to install gtk on that page did you follow - 1, 2, 3, 4, 5 or 6? Were you able to run `gtk-demo`? And what version of OS X are you running? – ErikR Aug 12 '16 at 12:49
  • cabal version 1.24.0.0 and ghc version 7.10.3, i tried recipe 2 . and os x version 10.11.6. yes, i was able to start the demo – Max K Aug 12 '16 at 13:12
  • Now that pkg-config is finding gtk+-2.0, now what happens when you try `cabal install gtk`? – ErikR Aug 12 '16 at 14:33
  • There is something amiss with your set of libraries. I would try using `stack` to build and use gtk. If that doesn't work I would create a new issue here: https://github.com/gtk2hs/gtk2hs/issues – ErikR Aug 12 '16 at 16:01
  • Link to stack: https://docs.haskellstack.org/en/stable/README/ – ErikR Aug 12 '16 at 16:04
  • btw - what version of the gtk libraries fo you have installed? I was able to build with cabal and I have version 2.24.25 installed in /usr/local/Cellar/gtk+/2.24.25. – ErikR Aug 12 '16 at 18:42
  • 2
    I had exactly the same problem today and I managed to install gtk using the have-quartz-gtk flag: `cabal install gtk -f have-quartz-gtk` (of course with the environment variable PKG_CONFIG_PATH set as suggested by ErikR) – eugenk Aug 16 '16 at 21:21

2 Answers2

3

The problem is that pkg-config cannot find the file gtk+-2.0.pc:

requires pkg-config package gtk+-2.0-any, not found in the pkg-config database

Steps to troublshoot:

  1. Check which directories pkg-config is configured to look for .pc files with:

    $  pkg-config --variable pc_path pkg-config
    
  2. On my system, gtk+-2.0.pc resides in /usr/local/lib/pkgconfig. I extended the search path by setting the PKG_CONFIG_PATH environment variable:

    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:
    
  3. Test that pkg-config can find gtk+-2.0:

    pkg-config gtk+-2.0 --exists && echo Found the library
    

    No output means the .pc file was not found. Another command you can use for checking is:

    pkg-config gtk+-2.0 --libs --print-errors
    

    You'll either see an error message or a long list of flags for the C compiler which tells it how to link with the gtk libraries.

  4. Another tip for finding the .pc file is to use the locate command (assuming the locate database has been updated):

    locate '*.pc' | grep gtk
    
ErikR
  • 51,541
  • 9
  • 73
  • 124
  • thank you for your fast solution, but it does not work for me. I changed the variable of PKG_CONFIG_PATH and got the answer "Found the library" in the next step. After another failed try in installing, I checked the error message (2nd part of 3) and it gave me a lot of flags like "-L/usr/local/Cellar/gtk+/2.24.29/lib". How can I link these flags? – Max K Aug 12 '16 at 14:08
  • Just saying "it does not work" is not very helpful. Please update your question with what you tried and what the error message is. – ErikR Aug 12 '16 at 14:18
  • As per @eugenk's comment above: `cabal install gtk -f have-quartz-gtk` fixed this for me. – Andy Hayden Sep 18 '16 at 06:16
1

If you are using Homebrew, you can install gtk+3 by typing:

brew install gtk+3