2015-10-13 14 views
5

Das Grundproblem:Haskell gtk installieren Typ Konflikte

Ich versuche Haskells gtk Paket mit der standard mac instructions auf OSX 10.10.4 zu installieren. Insbesondere möchte ich threadscope ausführen, also brauche ich gtk. Frühe Stadien mit homebrew und der gtk buildtools Arbeit in Ordnung, aber wenn ich

cabal install gtk 

oder verwende

cabal install --with-gcc=gcc-4.8 gtk 

Ich erhalte die folgenden Kompilierungsfehler:

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: Error: some packages failed to install: 

Ich hatte vorher Haskells gtk Bibliothek und threadscope Anwendung installiert und läuft, bevor ich meine Haskell-Plattform vonaktualisiert 210 bis ghc 7.10.2. Zuerst nahm ich einen Installationskonflikt an, aber ich habe wiederholt die Haskell-Plattform von meinem System mit der thorough removal instructions entfernt und die threadscope Installation ohne Erfolg wiederholt. Ich habe sogar die zugrunde liegenden gtk+ und verwandten Pakete mit homebrew entfernt und erneut installiert, wieder kein Erfolg.

Ich bin nicht sicher, wo die Typen Ptr() und Maybe DrawWindow stammen und daher, wo der Konflikt herkommen könnte. Irgendwelche Ideen, was schief gehen könnte, wären willkommen!

Antwort

1

Es ist ein Rezept für GTK und threadscope bei edsko Blog installieren:

http://www.edsko.net/2015/03/09/sandboxes-revisited/

die Seite Suche nach "GTK Sandbox".

aktualisieren

konnte ich threadscope mit den obigen Anweisungen mit ghc-7.10.2 bauen.

Die spezifischen Befehle, die ich verwendet:

export PATH=/opt/X11/lib/pkgconfig 
brew install gtk+      # installed gtk+-2.24.25 
brew install poppler     # installed poppler-0.35.0 
cabal sandbox init 
cabal install gtk2hs-buildtools 
cabal install gtk 
cabal install poppler --with-gcc=gcc-4.9 --extra-include-dirs=/usr/local/include 
cabal install threadscope 

Die spezifischen Versionen in der Sandbox installierten Pakete:

cairo-0.13.1.0 
ghc-events-0.4.4.0 
gio-0.13.1.0 
glib-0.13.2.1 
gtk-0.13.9 
hashtables-1.2.0.2 
pango-0.13.1.0 
poppler-0.13.1 
utf8-string-1.0.1.1 
+0

Hallo, danke für deine Antwort! Leider führte dies während des Builds von gtk zu den gleichen Fehlern wie oben. –

+0

Verwenden Sie GHC 7.10.2? Das obige Rezept erstellt Threadscope in einer Sandbox, so dass Sie es verfolgen können, ohne Ihre installierten Pakete zu stören, wenn Sie sich gerade auf einer anderen Version von GHC befinden. – ErikR

+0

Ja, ich benutze GHC 7.10.2, und ich bin sehr verwirrt, warum das Rezept nicht funktioniert hat, da eine Sandbox meine sichere Sache des letzten Ausweges war. –

3

vielleicht könnten Sie versuchen, gtk zu installieren mit dieser Linie

cabal install gtk -fhave-quartz-gtk

+2

Stack-Variante: 'Stack installieren --flag gtk: have-Quarz-GTK threescope' –