HaskellのOpenCLライブラリ http://hackage.haskell.org/package/OpenCL をコンパイルしようとして、clangのblocks構文でc2hsがコケる。

OpenCL.cabalには「cc-options: "-U__BLOCKS__"」とあって、どうも昔はcpp-optionsがc2hsに渡されずcc-optionsは渡されるという酷い仕様だった https://mail.haskell.org/pipermail/haskell-cafe/2010-March/073933.html のが、最近はcpp-optionsの方のみ渡されるように直っていたということらしい。 酷い。

調べてみると https://github.com/haskell/c2hs/issues/29 で --no-blocks というオプションが追加され、 https://github.com/haskell/c2hs/issues/77 で常に有効になるようになっていたらしい。 要は使っていたc2hsが古かった。