奮闘・HDBC-postgresqlのインストール(たぶん成功編)
ようやくのHDBC-postgresqlのインストールに成功しました。
もっとも動作確認まではやっていないので、まだ正しくインストール出来ているかどうかは分からないのですけれど。
ちなみに環境は以下の通りです。
- Mac OS X 10.6.8
- GHC7.0.3 (Glasgow Haskell Compiler, Version 7.0.3, for Haskell 98, stage 2 booted by GHC version 6.12.3)
- HDBC-postgresql 2.3.2.0
そもそも、pgconfigはあるのか?
前回PostgreSQLをインストールしたので、pgconfigは存在しているはずです。しかし念のため確認しておきます。
find /opt/ -name "pg*config"
結果は
/opt//local/lib/postgresql83/bin/pg_config
うん。pgconfig(ファイル名はpg_configだけど)はちゃんとありますね。
やったこと
正統な方法だとPostgreSQLをインストールした上でcabalコマンドがpgconfigを探すことが出来るようにするのがいいんでしょうけど、この方法は前回失敗しています。
そこで今回は、cabalコマンドによるインストールをあきらめ、HackageDBのHDBC-postgresqlのページからパッケージを取ってきて、Setup.hsを使うことにしました。
Setup.hsの中にきっとpgconfigを探しているコードが含まれているだろうから、そこを改変してしまおう、というアイデアです。
HackageDBのHDBC-postgresqlのページの「Downloads」のところからtarをダウンロード・解凍すると、Setup.hsというファイルが現れます。
その34行目辺りがpgconfigを探している箇所のようです。
pgconfig <- findProgramOnPath "pgconfig" verbosity pg_config <- findProgramOnPath "pg_config" verbosity return (pgconfig `mplus` pg_config)
findProgramOnPath関数がしっかり動いてくれれば、きっとこんな苦労しなくていいのでしょうけど。それともMacPortsでPostgreSQLをインストールしたのがいけなかったのかなぁ?
嘆いていても始まらないので、上記コードの書き換えを試してみましょう。
見たところ、名前が「pgconfig」あるいは「pg_config」というファイルを探してMaybeでパスを返しているようです。
そこでさっき調べたpg_configのパスを使って、決め打ちでJustを返すようにしてみます。
return (Just "/opt/local/lib/postgresql83/bin/pg_config") -- pgconfig <- findProgramOnPath "pgconfig" verbosity -- pg_config <- findProgramOnPath "pg_config" verbosity -- return (pgconfig `mplus` pg_config)
さて、インストールしてみましょう。
sudo runghc ./Setup.hs configure --global
結果は以下の通り。
Setup.hs:5:1: Warning: In the use of `defaultUserHooks' (imported from Distribution.Simple): Deprecated: "Use simpleUserHooks or autoconfUserHooks, unless you need Cabal-1.2 compatibility in which case you must stick with defaultUserHooks" Warning: defaultUserHooks in Setup script is deprecated. Configuring HDBC-postgresql-2.3.2.0...
おっ。警告こそ出たものの、うまくいっています!期待が持てそうです。
続いてbuild。
sudo runghc ./Setup.hs build
長いので結果は省略しますが、これもうまくいっています。
最後はinstall。
sudo runghc ./Setup.hs install
結果は以下の通り。
Setup.hs:5:1: Warning: In the use of `defaultUserHooks' (imported from Distribution.Simple): Deprecated: "Use simpleUserHooks or autoconfUserHooks, unless you need Cabal-1.2 compatibility in which case you must stick with defaultUserHooks" Installing library in /usr/local/lib/HDBC-postgresql-2.3.2.0/ghc-7.0.3 Registering HDBC-postgresql-2.3.2.0...
おお!警告は出たけど、成功した感じ!ghc-pkg listコマンドを使ってインストール出来たかどうか確認しましょう。
ghc-pkg list | grep -i hdbc
結果は・・・
HDBC-2.3.1.0 HDBC-postgresql-2.3.2.0 HDBC-2.3.1.0 HDBC-odbc-2.3.1.0
おお!!!!!ついにやった!!!!!
HDBC-2.3.1.0が2つあるのが気になるけど、とりあえずはいいでしょう!
やっとPostgreSQLに接続出来そうです。