コードテストばっかり投げてて実際の提出をサボっていて,数日前にやっと
https://atcoder.jp/contests/language-test-202301/submissions/40808418を投げたのですが,そしたら
コンパイルエラーWarning: The package list for '' is 16 days old.
Run 'cabal update' to get the latest list of available packages.
Warning: The package list for '' is 16 days old.
Run 'cabal update' to get the latest list of available packages.
Warning: The directory
/home/runner/.cabal/store/ghc-9.4.4/incoming/new-2/home/runner/.cabal/store/ghc-9.4.4/submission-0.1.0.0-e-main-65f18b2df59be1b1a37cc9cf6a1a6fef2ceea8c33303cd81c9373b649724db38/bin
is not in the system search path.
という警告が出てしまいました.
その上,最後の,
Warning: The directory
云々の警告は未だ原因調査できておらず,どうやったら除去できるかもよくわかりません(あとで
questions にも投げようかと思います).
しかし,今回こちらで問題にしたいのは
Warning: The package list for
云々の方です.これは見慣れた警告で,なんとかなりそうです.言語/ライブラリ追加は終了しているものの,コマンド変更は未だ受け付けられていますので,コンパイル・インストールコマンドを修正して解決してしまって良さそうです.この警告が出される条件を
cabal-install
のコードを追って確かめれば,ad-hoc には,コンパイルコマンド
$ source ~/.ghcup/env && cd /judge/submission && cabal v2-install --installdir=.. --install-method=copy --offline
を実行する直前に,package repository cacheのtarのmodification dateを更新しておけばいいとわかります:
$ touch ~/.cabal/packages/hackage.haskell.org/01-index.tar
しかし,この方法はあまりに ad-hoc で implementation-dependent なので,この方法を実行していいかわからず,相談がしたかったのでこちらに書き込ませていただきました.
なお,このような方法に頼らなくても,
cabal --ignore-expiry v2-install
でコンパイルするか,
cabal.project
に
ignore-expiry: True
を足すかすれば良いかと思ったのですが,
ignore-expiry
は
cabal v2-update
の時に Hackage の署名の期限を検証しないことを表すもので,この問題には無関係のようですね(勘違いして cabal の github に issue を投げてしまったので,恥ずかしい思いをしました).