LoginSignup
9
9

More than 5 years have passed since last update.

cabal install が Permission DeniedでこけるときのWorkaround

Posted at

症状

cabal install で、 dist/ ディレクトリを含むパッケージをインストール仕様とするとコケる。

(Issueがある https://github.com/haskell/cabal/issues/1698)

原因

cabal sdistコマンドを既にdistディレクトリがある状態で実行すると、それをtarballに含めてしまう。この状態で build を行うとうまく行かない場合があるので、現在のcabal installでは、

  • dist/ を dist-tmp/ にリネーム
  • dist/ を新しく作る
  • dist-tmp を $distpref (パラメータ) にリネーム

という手順を踏んでから、buildを行っているようである。

しかし、 $distpref はデフォルトでは "dist" になっているため、結局同じ名前にリネームしているどころか、Windowsのディレクトリ操作APIではこれがPermission Deniedで失敗する。それゆえ、distディレクトリを含むパッケージのインストールが主にWindowsで上手くいかない。
(この操作にどういう意味があるのか僕にはよく分からなかったので、理解できた方教えてくださると助かります。)

対処方法

根本的な対策はソースコード中にTODOと書いてあることや、Issueがでていることから、近い将来には行われると思うが、ひとまずは、

$ cabal install happy --distpref=wdist

などと、 --distpref に "dist" 以外の(多分なんでも良い)名前を指定してやればうまくいく。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9