Здесь собраны заметки, написанные по ходу сборки 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
Устанавливаем 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.