2015-08-13 3 views
20

Я пытаюсь установить GTK через заговорщиков, однако, я получаю следующие ошибки типа при построении егоCabal установить GTK неудачу

[ 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: error: 
    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: error: 
    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: error: 
    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) 
Failed to install gtk-0.13.9 
cabal: Error: some packages failed to install: 
gtk-0.13.9 failed during the building phase. The exception was: 
ExitFailure 1 

Чтобы установить этот пакет, вам нужно «gtk2hsC2hs» и тип ошибки находятся в файлах .chs, которые предположительно генерируются из инструмента gtk2hsC2hs. Это известная проблема с gtk2hsC2hs? Кто-нибудь еще смог создать этот пакет? Кто-нибудь знает о решении?

Я на Mac OS X Yosemite (10.10.4)

$ gtk2hsC2hs --version 
C->Haskell Compiler, version 0.13.13 (gtk2hs branch) "Bin IO", 27 May 2012 

$ cabal --version 
cabal-install version 1.22.6.0 
using version 1.22.4.0 of the Cabal library 

Я сделал cabal update, так что все мои пакеты, как представляется, до настоящего времени. Я также пытался создать некоторые из старых версий, доступных из хака, но я получаю те же ошибки.

Редактировать

Ошибки в создаваемых файлах, кажется, все сделки с импортом FFI, которые становятся порождаемыми gtk2hsC2hs. В нижней части файла, я получаю

кажется, последовательно перепутать Ptr() с Maybe DrawWindow. У вас такой неправильный тип Ptr(), или его использование неверное?

+0

Просто быстрый комментарий, не успел посмотреть достаточно написать ответ: '.chs' файлы не генерируются' gtk2hsC2hs'; они пишутся вручную и обрабатываются 'gtk2hsC2hs' для создания файлов' .hs'. Если вы хотите, вы можете посмотреть в этих файлах; 'cabal' хранит их в каталоге' dist'. Там будут прагмы, указывающие обратно из файла '.hs' в файл' .chs', так как GHC знает, где в файле '.chs' указать свои ошибки. –

+0

Хорошо, спасибо за подсказку. Я займусь этим. – Matt

ответ

21

У этого было очень простое решение.

cabal install gtk -fhave-quartz-gtk 

Было бы хорошо, если бы это было более хорошо документированы, но, надеюсь, это поможет кто-нибудь еще, что в конце концов в подобной ситуации

+1

Просто помог мне. Я могу подтвердить, что он работает на MacOSX 10.8. Благодаря! :) –

+2

Вариант стека (например, для установки нитей): 'stack install --flag gtk: have-quartz-gtk threadscope' –

Смежные вопросы