試した環境:
- Windows 10 Home 64bit (ver. 1607)
- stack v1.0.4
- LTSHaskell 7.5
(Bash for Windowsは使ってません)
うまくいかなかった方法
MSYS2を使っているので、
とりあえず、
pacman -S sqlite
したうえで、
cabalファイルにHDBC-sqlite3を書いたプロジェクトで
stack install
するも
Process exited with code: ExitFailure 1
Logs have been written to: C:\Users\Yuji\Dropbox\prg\prj\shioyaki\.stack-work\logs\HDBC-sqlite3-2.3.3.1.log
Configuring HDBC-sqlite3-2.3.3.1...
setup-Simple-Cabal-1.24.0.0-ghc-8.0.1.exe: Missing dependency on a foreign
library:
* Missing C library: sqlite3
This problem can usually be solved by installing the system package that
provides this library (you may need the "-dev" version). If the library is
already installed but in a non-standard location then you can use the flags
--extra-include-dirs= and --extra-lib-dirs= to specify where it is.
と怒られる。
上記のメッセージの通り
--extra-include-dirs=
と--extra-lib-dirs=
なるオプションがあるそうなので、msys2のインストールディレクトリーをあさるも、それらしいDLLやヘッダーファイルが見当たらない。
うまくいった方法
やむを得ずProgramming Notes: WindowsにHaskell HDBC-sqlite3のインストールを参考にSQLite本家のサイトからWindows用のDLL(sqlite-dll-win64-x64-3150100.zip)とヘッダーファイル(sqlite-amalgamation-3150100.zip)をとってきて、それぞれをC:\sqlite
ディレクトリーに展開。
その上で
stack build --extra-include-dirs="C:\sqlite" --extra-lib-dirs="C:\sqlite"
と実行したらインストールできた模様。
TODO
stack build
するたびに毎回上記のオプションを指定するのはかったるいので、方法を別途検討する。
追記: よく見たら stack.yaml
に同名の項目があった。stack new
などしたら出てくるデフォルトのstack.yaml
にも、次のようにコメントアウトされて書いてあるはず。
# Extra directories used by stack for building
# extra-include-dirs: [/path/to/dir]
# extra-lib-dirs: [/path/to/dir]
ただしこれはフルパスでないといけないので、プロジェクトディレクトリーのどこかに置きたい、みたいなケースではやっぱりstack build
をラップしたコマンドを作る必要があるだろう。
まぁ、作ればいいだけの話だけど。