бойкий гремлин с GHC 7.4

Я следую этому процессу, проверенному с помощью GHC 7.2.2 для установки gtk2hs и связанного комплекта , но я попал в небольшую загвоздку. Я использую Mac OS X Lion, glib 2.30.2, установленный через homebrew, и ghc 7.4 (кандидат на выпуск, выпущенный незадолго до Рождества). Я полагаю, что моя версия gcc может быть актуальной

bash-3.2$ gcc --version
i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)

Проблема возникает при попытке установить зависимость glib во время cabal install gtk. Я попробовал отдельные cabal unpack glib и cabal install, и я получил эту жалобу на паранойю указателя.

bash-3.2$ cabal install
Resolving dependencies...
Configuring glib-0.12.2...
Building glib-0.12.2...
Preprocessing library glib-0.12.2...
System/Glib/hsgclosure.c: In function 'gtk2hs_closure_marshal':

System/Glib/hsgclosure.c:110:0:
     warning: passing argument 1 of 'rts_evalIO' from incompatible pointer type

System/Glib/hsgclosure.c:110:0:
     error: void value not ignored as it ought to be

Соответствующая строка соответствующего файла

cap=rts_evalIO(CAP rts_apply(CAP (HaskellObj)runIO_closure, call),&ret);

но у меня нет опыта, чтобы интерпретировать его.

Я задал тот же вопрос в комментарии к обсуждению на Reddit. что привело меня к процессу в первую очередь, но я подумал, что могу искать мудрости и здесь.

Изменил ли GHC 7.4 то, как это делается, или более вероятно, что что-то еще сломано ранее в настройке? Очевидно, что это не эта проблема, но на этом уровне мало что очевидно для меня. У меня нет хорошей ментальной модели того, что происходит.

Буду признателен за любой светлый пролив.


person pigworker    schedule 22.01.2012    source источник


Ответы (2)


Да, GHC 7.4 кое-что изменил. rts_evalIO определяется в include/RtsAPI.h, ранее это было

Capability * 
rts_evalIO (Capability *, HaskellObj p, /*out*/HaskellObj *ret);

Теперь, в 7.4, это

void rts_evalIO (/* inout */ Capability **,
                 /* in    */ HaskellObj p,
                 /* out */   HaskellObj *ret);

Аналогично изменились и другие функции rts_eval*. Короче говоря, glib-0.12.2 не собирается с 7.4. Либо взломайте его самостоятельно, чтобы он скомпилировался (я подозреваю, что это очень нетривиально), либо подождите и используйте 7.2.2, пока не будет выпущен новый glib, который работает с 7.4.

person Daniel Fischer    schedule 22.01.2012
comment
Спасибо, что подтвердили, что это серьезное изменение. Мне, вероятно, придется немного поучиться, прежде чем я смогу исправить это самостоятельно. Думаю, я подожду. - person pigworker; 23.01.2012

darcs получают http://code.haskell.org/gtk2hs/

из журнала:

Thu Jan 19 22:50:06 PST 2012  Duncan Coutts <[email protected]>
  * Fix the type generator for GHC 7.4
  GHC 7.4 is stricter about FFI imports with newtypes, the newtype
  constructor must be visible at the point of import.

Thu Jan 19 22:42:43 PST 2012  Duncan Coutts <[email protected]>
  * Fix cairo for GHC 7.4
  Changes in Num type class

Thu Jan 19 22:40:20 PST 2012  Duncan Coutts <[email protected]>
  * Fix glib for change in RTS API in GHC 7.4
person mgsloan    schedule 23.01.2012