HSDL

CabalとHSCについて知ったので、
GHC6.4では使えなくなっていたHSDLを
( http://fxp.hp.infoseek.co.jp/haskell/HSDL/ )
Cabalに対応したり、いろいろした。
とりあえずGHC6.4で動くようになったので、これでよしとする。


というわけで、わき道にそれたが、
HSQLも微妙に進展した。ソース中の

#if defined(_WIN32_)

というところを

#if defined(_WIN32)

に直すと、とりあえずコンパイルはできるようになった。
これが分かるまでどれだけ苦労したか…。
というわけで、一応コンパイルはできたが、
次はリンクができない。
もう本当にどうすれば良いのか。

昨日のHSQL

いろいろやっているうちになんとかリンクはできるようになった。
とりあえず、前段階で何でリンクできなかったかというと、
GHCが持ってるmingwWindowsネイティブ版MySQLのライブラリが
リンクできなかったということ。
mingwに渡せるライブラリを作ることはほぼ不可能っぽいので、
DLL版のほうからインポートライブラリを作成して
ごちゃごちゃやればいけた。
というか、ここに書いてあった。
http://www.synnottsoftware.com/tutorials/mysqlwindows.php
Cygwin or mingwWindowsMySQLとリンクする方法だ。


で、リンクできたは良いものの、
connectを呼び出すと落ちる。

main.exe: internal error: resumeThread: thread not found
    Please report this as a bug to glasgow-haskell-bugs@haskell.org,
    or http://www.sourceforge.net/projects/ghc/

thread not found てどういうことやねん。
これは、

{- OPTIONS -fffi -}

#include <ghcconfig.h>

import Foreign
import Foreign.C

#include <windows.h>
#include <mysql.h>

type MYSQL = Ptr ()

foreign import ccall "mysql.h mysql_init" mysql_init :: MYSQL -> IO MYSQL

main = do
  pMySQL <- mysql_init nullPtr
  return ()

のような簡単なソースでも落ちるので、
多分GHCからmysql_initを呼び出すと起こってしまうのだろう。


こんなのどうすればいいのか、
というわけで、調べてみたら、こんな記事が見つかった。
http://www.mail-archive.com/glasgow-haskell-bugs@haskell.org/msg05881.html
投稿日二年前なんだけど。
いやいや、すぐ直すって書いてあるやん。
というか、6.2で直ってるって書いてあるのに、
6.4でも発現するというのは一体どういうこと?


さて、結局どうすればいいんだろうか。