Windowsで Haskellの persistent-postgresqlモジュールをインストールする方法
Haskellの Persistentで PostgreSQLを使ってみようと思ったのですが、モジュールをインストールのに色々とハマったので手順をメモしておきます。
インストールする環境は以下の通り。現時点での最新のHaskell Platform を使用しています。
素の状態で、以下のコマンドを実行して「persistent-postgresql」をインストールしようとすると、
$ cabal-dev install persistent-postgresql
こんなエラーメッセージが出てインストールに失敗します。
Configuring postgresql-libpq-0.8.2.1... setup.exe: The program pgconfig is required but it could not be found. (中略) persistent-postgresql-1.0.3 depends on postgresql-libpq-0.8.2.1 which failed to install.
persistent-postgresqlが依存している、postgresql-libpq をインストールする際に、PostgreSQLのファイルが必要になります。
その他いくつか必要なファイルがあるため、それぞれインストールして行きます。
PostgreSQLのインストール
PostgreSQLはWindows版のインストーラが用意されているので、それを使ってインストールすればOKです。ただし、Haskell Platformは 32bit版しか用意されていないのでインストールするPostgreSQLも 32bit版にする必要があります。
PostgreSQL Download | EnterpriseDB このページの「Win x86-32」をクリックすればインストーラがDownloadできます。それをインストールしてしまいましょう(デフォルトでは『C:\Program Files (x86)\PostgreSQL\9.2』にインストールされるので、そこにインストールしたことにします)。
インストール後に、モジュールのインストール時に必要になるファイルは、Haskell Platformのbuild時にPATHが通った場所に置く必要があります。そのため、以下のコマンドを実行して必要なファイルをコピーしておきます。
$ cd /c/Program\ Files\ (x86)/PostgreSQL/9.2 $ cp bin/pg_config.exe /c/Program\ Files\ (x86)/Haskell\ Platform/2012.4.0.0/mingw/bin $ cp lib/libpq.dll /c/Program\ Files\ (x86)/Haskell\ Platform/2012.4.0.0/mingw/bin $ cp lib/libpq.dll lib/pq.dll
その他必要なファイルの入手
インストール時に、Haskell Platformのmingw環境でbuildが走るため、PostgreSQLの依存DLLを別途入手する必要があります。今回は GNUWin32プロジェクトから必要なDLLをDownloadすることにします*1。
libintl.dll
LibIntl for Windows より、Binaries をDownloadします。解凍した binフォルダの中に libintl3.dll があるので、以下のコマンドで Haskell Platformへコピーします。
$ cp bin/libintl3.dll /c/Program\ Files\ (x86)/Haskell\ Platform/2012.4.0.0/mingw/bin $ cp bin/libintl3.dll /c/Program\ Files\ (x86)/Haskell\ Platform/2012.4.0.0/mingw/bin/libintl.dll
ssleay32.dll
OpenSSL for Windows より、Binaries をDownloadします。解凍した binフォルダの中にあるdllを同様に、以下のコマンドで Haskell Platformへコピーします。
$ cp bin/*.dll /c/Program\ Files\ (x86)/Haskell\ Platform/2012.4.0.0/mingw/bin $ cp bin/libssl32.dll /c/Program\ Files\ (x86)/Haskell\ Platform/2012.4.0.0/mingw/bin/ssleay32.dll
モジュールのインストール
これで必要なファイルが揃ったはずです。後は以下のコマンドでインストールが完了するはずです。
$ cabal-dev install persistent-postgresql --extra-include-dirs=/c/Program\ Files\ \(x86\)/PostgreSQL/9.2/include --extra-lib-dirs=/c/Program\ Files\ \(x86\)/PostgreSQL/9.2/lib
しかし、これではまだ安心できません。最後にexeをbuildしておきましょう。
$ cabal-dev install
以上で、完了です。お疲れ様でした。
*1:自分でbuildすることも可能ですが茨の道です。。。