Windows で Haskell iconv をビルドする
GHC 8.2 以降で stack を使う場合をここではとりあげる。
確信はないのだが、GHC 8.2 から GHC 自体が iconv に依存しなくなったのか、$(stack path --programs)\ghc-8.0.2\mingw\lib から libiconv.a と libiconv.dll.a がなくなっているため GHC 8.0 以前のようにビルドができなくなっている。
なので、まず libiconv を取得する。
stack exec -- pacman -S libiconv-devel
インストールされる場所は stack がデフォルトでは見に行ってくれないので明示してやる。MSYS バージョンは将来的に変わることもあるだろう。
stack build --extra-include-dirs="$(stack path --programs)\msys2-20180531\usr\include" --extra-lib-dirs="$(stack path --programs)\msys2-20180531\usr\lib"
これでコンパイルはできるがリンクに失敗する。
`libiconv_open' に対する定義されていない参照です
iconv パッケージの cabal ファイルを編集してやる。
--- a/iconv.cabal +++ b/iconv.cabal @@ -26,7 +26,7 @@ library includes: hsiconv.h include-dirs: cbits c-sources: cbits/hsiconv.c - if os(darwin) || os(freebsd) + if os(darwin) || os(freebsd) || os(windows) -- on many systems the iconv api is part of the standard C library -- but on some others we have to link to an external libiconv: extra-libraries: iconv
iconv を利用するプロジェクトの stack.yaml で、編集後のリポジトリーを extra-deps
に指定して stack build
するとビルドできる。