Haskell Platform for Windows のインストール
意外と難しかったのでメモ。
Cabal-Install - HaskellWiki を参考にした。
まずは、 Haskell Platform for Windows から "Haskell Platform 2013.2.0.0 for Windows" (2014-07-21 現在の最新)をダウンロードして実行してインストールします(ここまでは簡単)。
cabal をアップデート
先に結論を言います。
再起動した後、管理者権限のコマンドプロンプトで "cabal install cabal-install --global" する。
コマンドプロンプトで、cabal update すると、こう言われます。
>cabal update Config file path source is default config file. Config file C:\Users\Yuki\AppData\Roaming\cabal\config not found. Writing default configuration to C:\Users\Yuki\AppData\Roaming\cabal\config Downloading the latest package list from hackage.haskell.org Note: there is a new version of cabal-install available. To upgrade, run: cabal install cabal-install
言われた通りに cabal install cabal-install します。
>cabal install cabal-install Resolving dependencies... Downloading Cabal-1.20.0.1... C:\Users\Yuki\AppData\Local\Temp\Cabal-1.20.0.1-5532\Cabal-1.20.0.1\Distribution \Compat\Environment.hs:0:4: lexical error (UTF-8 decoding error) Failed to install Cabal-1.20.0.1 cabal: Error: some packages failed to install: Cabal-1.20.0.1 failed during the configure step. The exception was: ExitFailure 1 cabal-install-1.20.0.3 depends on Cabal-1.20.0.1 which failed to install.
は?? 言われた通りにやっただけなんですけど…
再起動してもう一回やると一応動きました。まあ、ここはご愛嬌です。
しかし、すぐに別のエラーが。
[76 of 76] Compiling Main ( C:\Users\Yuki\AppData\Local\Temp\Cabal-1 .20.0.1-4308\Cabal-1.20.0.1\Setup.hs, C:\Users\Yuki\AppData\Local\Temp\Cabal-1.2 0.0.1-4308\Cabal-1.20.0.1\dist\setup\Main.o ) Linking C:\Users\Yuki\AppData\Local\Temp\Cabal-1.20.0.1-4308\Cabal-1.20.0.1\dist \setup\setup.exe ...
setup.exe - アプリケーション エラー
アプリケーションを正しく起動できませんでした (0xc0000142)。[OK] をクリックしてアプリケーションを閉じてください。
OK
コマンドプロンプト自体がフリーズしてしまいました。
様子を見てみると、どうもウィルススキャンソフトの avast が悪さをしているようです(自分の意志でビルドしたプログラムをスキャンするのはやめて欲しいですね…)。
一旦スキャンを無効にし、もう一度実行します。
(略) [78 of 78] Compiling Distribution.Simple ( Distribution\Simple.hs, dist\build\Di stribution\Simple.o ) In-place registering Cabal-1.20.0.1... Installing library in C:\Users\Yuki\AppData\Roaming\cabal\i386-windows-ghc-7.6.3\Cabal-1.20.0.1 Registering Cabal-1.20.0.1... Installed Cabal-1.20.0.1 (略) [76 of 76] Compiling Main ( Main.hs, dist\build\cabal\cabal-tmp\Main .o ) Linking dist\build\cabal\cabal.exe ... Installing executable(s) in C:\Users\Yuki\AppData\Roaming\cabal\bin Installed cabal-install-1.20.0.3
今度はちゃんとインストール出来たようです。確認します。
>cabal --version cabal-install version 1.16.0.2 using version 1.16.0 of the Cabal library
1.20 じゃない…。どうなってるの…。
ログをよく見ると、新しい cabal のインストール先が C:\Users\ユーザー名\AppData\Roaming\cabal\bin なのに対して、環境変数パスが C:\Program Files (x86)\Haskell Platform\2013.2.0.0\lib\extralibs\bin を優先しているため、更新されていないほうが実行されてしまうようです。
対策としては、
- C:\Program Files (x86)\Haskell Platform\2013.2.0.0\lib\extralibs\bin\cabal.exe を上書きする
- C:\Users\ユーザー名\AppData\Roaming\cabal\bin の方を優先パスにする
- C:\Program Files (x86)\Haskell Platform\2013.2.0.0\lib\extralibs\bin\cabal.exe が更新されるようにインストールする方法を探す
などあります。(1) は 01. 環境構築 - とりあえず雑記帳 で推奨(?)されていました。
しかし、根本解決にはならないため、(3) の方法を探します。
ユーザーフォルダの実行ファイルが更新されてしまうのは、おそらくグローバルの実行ファイルを上書きする権限が無いせいだと思われます。普通にコマンドプロンプトを起動した場合、ユーザー権限しか無いため、C:\Program Files (x86) を書き換えできません。
というわけで、コマンドプロンプトを右クリックして「管理者で実行」の状態で同じようにやってみます。
C:\Windows\system32>cabal update Downloading the latest package list from hackage.haskell.org Note: there is a new version of cabal-install available. To upgrade, run: cabal install cabal-install C:\Windows\system32>cabal install cabal-install Resolving dependencies... Configuring cabal-install-1.20.0.3... Building cabal-install-1.20.0.3... Preprocessing executable 'cabal' for cabal-install-1.20.0.3... [ 1 of 76] Compiling Distribution.Client.Dependency.Modular.Version ( Distributi on\Client\Dependency\Modular\Version.hs, dist\build\cabal\cabal-tmp\Distribution \Client\Dependency\Modular\Version.o ) (略) [76 of 76] Compiling Main ( Main.hs, dist\build\cabal\cabal-tmp\Main .o ) Linking dist\build\cabal\cabal.exe ... Installing executable(s) in C:\Users\Yuki\AppData\Roaming\cabal\bin Installed cabal-install-1.20.0.3
失敗でした。明示的にグローバルに指定しないといけないようです。
cabal --help を見ても何も手がかりがないので、ググってみると、"--global" オプションを付けると共通の場所にインストールできるらしいという情報を得たのでやってみます。
C:\Windows\system32>cabal install cabal-install --global Resolving dependencies... [ 1 of 76] Compiling Distribution.GetOpt ( C:\Users\Yuki\AppData\Local\Temp\Caba l-1.20.0.1-3360\Cabal-1.20.0.1\Distribution\GetOpt.hs, C:\Users\Yuki\AppData\Loc al\Temp\Cabal-1.20.0.1-3360\Cabal-1.20.0.1\dist\setup\Distribution\GetOpt.o ) (略) [76 of 76] Compiling Main ( C:\Users\Yuki\AppData\Local\Temp\Cabal-1 .20.0.1-3360\Cabal-1.20.0.1\Setup.hs, C:\Users\Yuki\AppData\Local\Temp\Cabal-1.2 0.0.1-3360\Cabal-1.20.0.1\dist\setup\Main.o ) Linking C:\Users\Yuki\AppData\Local\Temp\Cabal-1.20.0.1-3360\Cabal-1.20.0.1\dist \setup\setup.exe ... Configuring Cabal-1.20.0.1... Building Cabal-1.20.0.1... Preprocessing library Cabal-1.20.0.1... [ 1 of 78] Compiling Paths_Cabal ( dist\build\autogen\Paths_Cabal.hs, dist\ build\Paths_Cabal.o ) (略) [78 of 78] Compiling Distribution.Simple ( Distribution\Simple.hs, dist\build\Di stribution\Simple.o ) In-place registering Cabal-1.20.0.1... Installing library in C:\Program Files (x86)\Haskell\i386-windows-ghc-7.6.3\Cabal-1.20.0.1 Registering Cabal-1.20.0.1... Installed Cabal-1.20.0.1 Configuring cabal-install-1.20.0.3... Building cabal-install-1.20.0.3... Preprocessing executable 'cabal' for cabal-install-1.20.0.3... [ 1 of 76] Compiling Distribution.Client.Dependency.Modular.Version ( Distributi on\Client\Dependency\Modular\Version.hs, dist\build\cabal\cabal-tmp\Distribution \Client\Dependency\Modular\Version.o ) (略) [44 of 76] Compiling Distribution.Client.Dependency.Modular.Preference ( Distrib ution\Client\Dependency\Modular\Preference.hs, dist\build\cabal\cabal-tmp\Distri bution\Client\Dependency\Modular\Preference.o ) (ここで固まった)
途中で止まってしまいました。もう一度です。
C:\Windows\system32>cabal install cabal-install --global Resolving dependencies... Configuring cabal-install-1.20.0.3... Building cabal-install-1.20.0.3... Preprocessing executable 'cabal' for cabal-install-1.20.0.3... [ 1 of 76] Compiling Distribution.Client.Dependency.Modular.Version ( Distributi on\Client\Dependency\Modular\Version.hs, dist\build\cabal\cabal-tmp\Distribution \Client\Dependency\Modular\Version.o ) (略) [76 of 76] Compiling Main ( Main.hs, dist\build\cabal\cabal-tmp\Main .o ) Linking dist\build\cabal\cabal.exe ... Installing executable(s) in C:\Program Files (x86)\Haskell\bin Installed cabal-install-1.20.0.3 C:\Windows\system32>cabal --version cabal-install version 1.20.0.3 using version 1.20.0.1 of the Cabal library
やっと出来ました…。ここまでで1時間です。
しかし、C:\Program Files (x86)\Haskell Platform\2013.2.0.0\lib\extralibs\bin ではなく、C:\Program Files (x86)\Haskell\bin にインストールされたようです。予想と違いましたが、そっちもパスに入っているので問題無いです。
ちなみに、--global でインストールされるディレクトリは C:\Users\(ユーザー名)\AppData\Roaming\cabal\config の install-dirs global で指定されているようです。