Gentoo LinuxやArch LinuxなどでStackage LTS 12が使用できないのはncurses 5をインストールしていないからでした
問題
私の管理するパッケージに最新のstackageだとビルドができないというissueが届きました.
yesod-form-bootstrap4-1.0.0 build failure with yesod-*-1.6.2 · Issue #2 · ncaq/yesod-form-bootstrap4
それならばとりあえず最新のstackageを試すべきだなと思って,
stack config set resolver lts
してstack setup
します.
すると以下のエラーが発生しました.
% stack setup
Writing implicit global project config file to: /home/ncaq/.stack/global-project/stack.yaml
Note: You can change the snapshot via the resolver field there.
Using latest snapshot resolver: lts-12.0
Downloaded lts-12.0 build plan.
No setup information found for ghc-8.4.3 on your platform.
This probably means a GHC bindist has not yet been added for OS key 'linux64-ncurses6', 'linux64-tinfo6'.
Supported versions: ghc-7.8.4, ghc-7.10.2, ghc-7.10.3, ghc-8.0.1, ghc-8.0.2, ghc-8.2.1, ghc-8.2.2, ghc-8.4.1, ghc-8.4.2
なるほど私のプラットフォームはlinux64-ncurses6
もしくはlinux64-tinfo6
で,
このプラットフォームにはghc-8.4.3は対応していないということですね.
調査
実際対応リスト
stack-setup-2.yaml
を見るとghc-8.4.3はlinux64
にしか載っていないですね.
調べてみると, GentooだけではなくArch Linuxでも同じ症状は起きているようです.
しかし,
何故私のGentoo環境は対応しているlinux64
ではなくlinux64-tinfo6
と判別されるのでしょうか?
それを確かめるために私はソースコードに飛びました.
色々見てみたら,
stack/Setup.hs
のこの場所で標準かそうでないかを区別していることがわかりました.
stack/Setup.hs at 735240f5b99c343e5d86fa57db0893a3fd05f32a · commercialhaskell/stack
hastinfo5 <- checkLib $(mkRelFile "libtinfo.so.5")
hastinfo6 <- checkLib $(mkRelFile "libtinfo.so.6")
hasncurses6 <- checkLib $(mkRelFile "libncursesw.so.6")
hasgmp5 <- checkLib $(mkRelFile "libgmp.so.10")
hasgmp4 <- checkLib $(mkRelFile "libgmp.so.3")
let libComponents = concat
[ [["tinfo6"] | hastinfo6 && hasgmp5]
, [[] | hastinfo5 && hasgmp5]
, [["ncurses6"] | hasncurses6 && hasgmp5 ]
, [["gmp4"] | hasgmp4 ]
]
useBuilds $ map
(\c -> case c of
[] -> CompilerBuildStandard
_ -> CompilerBuildSpecialized (intercalate "-" c))
libComponents
tinfoのバージョン5がインストールされていると標準判定を貰えるようですね.
解決
ではsys-libs/ncurses-5.9-r101:5
をインストールして試してみましょう.
sys-libs/ncurses tinfo
をpackage.use
に書いてtinfoもインストールしないとおそらくダメです.
私は元々書いていたので問題はありませんが.
% sudo emerge ncurses:5
すると
% stack setup
Preparing to install GHC to an isolated location.
This will not interfere with any system-level installation.
Downloaded ghc-8.4.3.
Installed GHC.
stack will use a sandboxed GHC it installed
For more information on paths, see 'stack path' and 'stack exec env'
To use this GHC and packages outside of a project, consider using:
stack ghc, stack ghci, stack runghc, or stack exec
問題なくstack setupが通りました.
報告
とりあえずこの問題はStackのissueに報告しました.
後はStackの責任者たちがncurses 6向けにもビルドを提供するとか, 適切なエラー表示を出すとか, 方針を決めてくれるでしょう. 明確に正しい挙動が決まっているバグならともかく, 今回のはどう修正すれば良いのか即座にわからないですし, ビルド提供するのはGitHubのリリースに介入する権限が無いとダメなので, こちらでPull Requestを作ってしまうのは難しいですね.
結局グローバルでは戻しました
LTS 12にしたらxmonadのビルドも通らなくなってしまったのでグローバルでは11に戻しました. これも報告しないといけませんね.
どちらにせよローカルプロジェクト環境ではnightlyのGHC 8.4.3を試さないといけないので, workaroundが見つかって良かったです.