2015-10-13 27 views
5

Il problema di fondo:Haskell gtk Tipo di installazione conflitti

Sto tentando di installare il pacchetto di Haskell gtk utilizzando il standard mac instructions su OSX 10.10.4. In particolare, voglio eseguire threadscope, quindi ho bisogno di gtk. stadi precoci con homebrew e l'ammenda gtk buildtools lavoro, ma quando ho

cabal install gtk 

o utilizzare

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

ottengo il seguente errore di compilazione:

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: 

ho già avuto biblioteca di Haskell gtk e Applicazione threadscope installata e in esecuzione prima di aggiornare la piattaforma Haskell daDa 210 a ghc 7.10.2. All'inizio ho presupposto un conflitto di installazione, ma ho rimosso ripetutamente la piattaforma Haskell dal mio sistema utilizzando thorough removal instructions e ritentato l'installazione threadscope senza esito. Ho anche rimosso e reinstallato il sottostante gtk+ e pacchetti correlati usando homebrew, ancora una volta senza successo.

Non sono sicuro di dove siano originati i tipi Ptr() e Maybe DrawWindow e quindi da dove potrebbe provenire il conflitto. Qualche idea su cosa potrebbe andare storto sarebbe gradita!

risposta

1

C'è una ricetta per l'installazione di GTK e threadscope al blog di edsko:

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

Cerca la pagina per la "GTK sandbox".

Aggiornamento

sono stato in grado di costruire threadscope seguendo le istruzioni di cui sopra con GHC-7.10.2.

I comandi specifici che ho usato:

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 

Le versioni specifiche dei pacchetti installati nella sandbox:

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

Ciao, grazie per la tua risposta! Purtroppo questo ha provocato gli stessi errori di cui sopra durante la generazione di gtk. –

+0

Stai utilizzando GHC 7.10.2? La ricetta di cui sopra costruisce threadscope in una sandbox, in modo da poterla seguire senza disturbare i pacchetti installati se si è attualmente in una versione diversa di GHC. – ErikR

+0

Sì, sto usando GHC 7.10.2, e sono molto confuso perché la ricetta non ha funzionato, dal momento che una sandbox era la mia cosa certa di ultima istanza. –

3

forse si potrebbe provare a installare gtk con questa linea

cabal install gtk -fhave-quartz-gtk

+2

Variante dello stack: 'stack install --flag gtk: ha-quartz-gtk threadscope' –