понедельник, 21 мая 2012 г.

Сборка Leksah для Mac OS X


Здесь собраны заметки, написанные по ходу сборки Leksah под Mac. Готовая сборка для Mac есть на родном сайте - http://leksah.org/download.html. Есть вероятность, что она у вас запустится.

Устанавливаем leksah-0.12.0.3 и leksah-server-0.12.0.5 под 64-х битную Mac OS X 10.6.

Считаем, что у нас имеется ghc-7.0.4 (сборка будет работать только для ghc-7.0). На момент написания статьи ghc-7.0.4 входил в состав Haskell-Platform-2011.4.

Устанавливаем haddock-2.9.2 с alex-2.3.5

Для сборки haddock-2.9.2 потребуется alex-2.3.5. С другой версией alex пакет haddock может не собраться, так что: cabal install alex-2.3.5 
PATH=~/Library/Haskell/ghc-7.0.4/lib/alex-2.3.5/bin:$PATH cabal install haddock-2.9.2

Устанавливаем порты с поддержкой +no_x11 +quartz

port clean cairo
port install cairo +no_x11 +quartz
port clean pango
port install pango +no_x11 +quartz
port clean gtk2
port install gtk2 +no_x11 +quartz
port install ige-mac-integration 
port install gtksourceview2 +no_x11 +quartz

Кстати, без GTK без X11 работает намного лучше, чем GTK с X11. Советую под Mac всегда ставить GTK с Quartz. Например, у меня в GTK с X11 не работает смена раскладки клавиатуры.

Собираем gtk-mac-integration

Забираем последнюю версию gtk-mac-integration отсюда - http://ftp.acc.umu.se/pub/gnome/sources/gtk-mac-integration/1.0/. Распаковываем архив и стандартным методом "configure-make-make install" ставим gtk-mac-integration в /opt/local.

Устанавливаем haskell-пакет для gtk-mac-integration:

cabal install gtk-mac-integration

Устанавливаем GTK для Haskell

cabal install gtk2hs-buildtools
cabal install cairo glib pango

Патчим gtk-0.12.3

Скачиваем исходник gtk-0.12.3 с Hackage. Заходим в файл Graphics/UI/Gtk/General/hsgthread.c и удаляем строчку, в которой инклудится gthread.h.

Если этого не сделате, то словите ошибку:

[207 of 207] Compiling Graphics.UI.Gtk ( dist/build/Graphics/UI/Gtk.hs, dist/build/Graphics/UI/Gtk.p_o )
In file included from Graphics/UI/Gtk/General/hsgthread.c:29:0:
/opt/local/include/glib-2.0/glib/gthread.h:28:2:
error: #error "Only can be included directly."

Собираем gtk-0.12.3

cabal configure --flags="have-quartz-gtk"
На всякий случай нужно проверить файл dist/setup-config на наличие там строчки: (FlagName "have-quartz-gtk",True)
cabal build
cabal install

Устанавливаем gtksourceview2-0.12.3

Если устанавливать gtksourceview2 из Hackage, то он не установится:

Preprocessing library gtksourceview2-0.12.3...
dist/build/Graphics/UI/Gtk/SourceView/Types.h:1:28: error: gtksourceview2.h: No such file or directory
gtk2hsC2hs: Error during preprocessing custom header file

Поэтому скачиваем исходник, добавляем в находящийся там файл gtksrouceview2.h строчку

#include <gtksourceview/gtksourceview.h>


и копируем gtksourceview2.h в /opt/local/include/gtksourceview-2.0.

Теперь собираем gtksourceview2 из исходников:

cabal configure --extra-include-dirs=/opt/local/include/gtksourceview-2.0
cabal build
cabal install

Подготовительные действия закончены

cabal install --extra-lib-dirs=/usr/lib leksah-server
cabal install --extra-lib-dirs=/usr/lib leksah


Здесь --extra-lib-dirs=/usr/lib указывает путь до libiconv.

или
cabal install leksah --constraint="haddock < 2.9.4" 
если у вас уже стоят другие haddock'и.

Напоследок

  • Если собирать gtk-mac-integration с +universe, то Leksah не поставится.
  • Видите такое сообщение про сборке?

Undefined symbols:
  "_gdk_x11_drawable_get_xid", referenced from:
      _s2YlN_info in libHSgtk-0.12.3.a(Structs.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status

Диагноз - пакет gtk-0.12.3 собран без поддержки quartz. Нужно пересобрать GTK.
  • При запуске программа может шуметь:
objc[84915]: Class GtkApplicationDelegate is implemented in both /opt/local/lib/libigemacintegration.0.dylib and /opt/local/lib/libgtkmacintegration.0.dylib. One of the two will be used. Which one is undefined.
objc[84915]: Class GtkApplicationNotificationObject is implemented in both /opt/local/lib/libigemacintegration.0.dylib and /opt/local/lib/libgtkmacintegration.0.dylib. One of the two will be used. Which one is undefined.
objc[84915]: Class GNSMenuBar is implemented in both /opt/local/lib/libigemacintegration.0.dylib and /opt/local/lib/libgtkmacintegration.0.dylib. One of the two will be used. Which one is undefined.
objc[84915]: Class GNSMenuItem is implemented in both /opt/local/lib/libigemacintegration.0.dylib and /opt/local/lib/libgtkmacintegration.0.dylib. One of the two will be used. Which one is undefined.
Using default Yi configuration


Это из-за того, что в системе установлен и ige-gtk-integration и gtk-mac-integration.

Комментариев нет:

Отправить комментарий