Установка gtk3 для Haskell (GHCJS)

Я пытаюсь установить GHCJS на Mac OSX (Yosemite). На данный момент я обновил Alex и Happy и установил gtk2hs-buildtools. Теперь, когда я запускаю cabal install ghcjs-dom, мне говорят, что мне нужно установить pkg-config...

~/Haskell/ghcjs-test/domTest: cabal install ghcjs-dom
Resolving dependencies...
Configuring cairo-0.13.1.1...
...
[2 of 2] Compiling Main             ( SetupMain.hs, dist/setup-wrapper/Main.o )
Linking dist/setup-wrapper/setup ...
Configuring cairo-0.13.1.1...
setup: The program 'pkg-config' version >=0.9.0 is required but it could not
be found.
Failed to install glib-0.13.2.2
Build log ( /Users/markkaravan/.cabal/logs/glib-0.13.2.2.log ):
...

Хмммм, pkg-config а?

~/Haskell/ghcjs-test/domTest: cabal install pkg-config
cabal: There is no package named 'pkg-config'.

Затем я продолжаю запускать cabal install ghcjs-dom, каждый раз натыкаясь на зависимость, которую затем мне приходится искать в Google и устанавливать через brew. Это происходит примерно 4 или 5 раз. Наконец, я застрял на gtk.

~/Haskell/ghcjs-test/domTest: cabal install ghcjs-dom
Resolving dependencies...
... 
Configuring gtk3-0.14.2...
setup: The pkg-config package 'gtk+-3.0' is required but it could not be
found.
cabal: Error: some packages failed to install:
ghcjs-dom-0.2.3.1 depends on gtk3-0.14.2 which failed to install.
gtk3-0.14.2 failed during the configure step. The exception was:
ExitFailure 1
webkitgtk3-0.14.1.1 depends on gtk3-0.14.2 which failed to install.

После того, как не удалось установить его, я пытаюсь установить его с помощью Cabal:

~/Haskell/ghcjs-test/domTest: cabal install gtk
Resolving dependencies...
Downloading gtk-0.14.2...
Configuring gtk-0.14.2...
Building gtk-0.14.2...
Failed to install gtk-0.14.2
Build log ( /Users/markkaravan/.cabal/logs/gtk-0.14.2.log ):
[1 of 2] Compiling SetupWrapper     ( /var/folders/br/4zwhphlx3816v87cc0bb5sxh0000gn/T/cabal-tmp-12417/gtk-0.14.2/SetupWrapper.hs, /var/folders/br/4zwhphlx3816v87cc0bb5sxh0000gn/T/cabal-tmp-12417/gtk-0.14.2/dist/setup/SetupWrapper.o )
[2 of 2] Compiling Main             ( /var/folders/br/4zwhphlx3816v87cc0bb5sxh0000gn/T/cabal-tmp-12417/gtk-0.14.2/dist/setup/setup.hs, /var/folders/br/4zwhphlx3816v87cc0bb5sxh0000gn/T/cabal-tmp-12417/gtk-0.14.2/dist/setup/Main.o )
Linking /var/folders/br/4zwhphlx3816v87cc0bb5sxh0000gn/T/cabal-tmp-12417/gtk-0.14.2/dist/setup/setup ...
[1 of 2] Compiling Gtk2HsSetup      ( Gtk2HsSetup.hs, dist/setup-wrapper/Gtk2HsSetup.o )
[2 of 2] Compiling Main             ( SetupMain.hs, dist/setup-wrapper/Main.o )
Linking dist/setup-wrapper/setup ...
Configuring gtk-0.14.2...
Building gtk-0.14.2...
Preprocessing library gtk-0.14.2...
[  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: Error: some packages failed to install:
gtk-0.14.2 failed during the building phase. The exception was:
ExitFailure 1

Теперь я потерян. Google отстает. Любые идеи?


person Mark Karavan    schedule 13.01.2016    source источник
comment
Хм, интересно, зачем ghcjs нужен gtk. Они кажутся довольно... несовместимыми.   -  person luqui    schedule 13.01.2016


Ответы (1)


Вам нужно brew install gtk+3. Выполнение cabal install gtk установит только привязки Haskell для gtk. Тем не менее, причина, по которой вы получаете ошибки сборки при попытке установить gtk (который вам не нужен), заключается в том, что вам не хватает флага -fhave-quartz-gtk, который необходим для Mac.

person Matt    schedule 13.01.2016
comment
кажется, он установил gtk-0.14.2, но когда я запускаю cabal install ghcjs-dom, он терпит неудачу, говоря Failed to install gtk3-0.14.2. Удалось ли вам уйти с gtk, а не с gtk3? - person Mark Karavan; 13.01.2016
comment
Извините, я должен был прочитать ваш вопрос более внимательно. Вам нужен пакет gtk3 Haskell, который зависит от системного пакета gtk+-3.0. Вы можете получить gtk+-3.0 через brew install gtk+3 на Mac (при условии, что у вас есть homebrew, а если у вас его нет, вам обязательно нужно его получить). Я обновил свой ответ соответственно. - person Matt; 13.01.2016
comment
Что ж, это сработало, поэтому я отмечаю это как правильное. Теперь он застрял на Failed to install webkitgtk3-0.14.1.1... есть ли список зависимостей для этих пакетов GHCJS? - person Mark Karavan; 13.01.2016
comment
Попробуйте сделать cabal install ghcjs-dom -f-gtk3. Это будет использовать обычный gtk, а не gtk3. Теперь это потребует от вас выполнения cabal install gtk -fhave-quartz-gtk в какой-то момент. - person Matt; 13.01.2016
comment
Building gtk-0.13.9...Failed to install gtk-0.13.9 Возникает похожая ошибка - person Mark Karavan; 14.01.2016
comment
Кажется, по какой-то причине им нужна более старая версия gtk. Вам нужно будет явно указать номер версии, например cabal install gtk-0.13.9 -fhave-quartz-gtk - person Matt; 14.01.2016
comment
Это установило gtk-0.13.9. Когда я запускаю cabal install ghcjs-dom -f-gtk3, я получаю Failed to install webkit-0.14.1.1. Когда я пытаюсь установить эту версию с помощью cabal install gtk-0.14.1.1 -fhave-quartz-gtk, я получаю cabal: Could not resolve dependencies: - person Mark Karavan; 14.01.2016