🥬
rules_haskell v0.16 でビルドする
GHC は 9.2.5 に対応しているので、それでビルドします(現在対応する Stackage resolver は lts-20.11)。
エラーの対応
macOS でやってます。
Cabal
ERROR: /sandbox/external/stackage/BUILD.bazel:3833:22: HaskellCabalLibrary @stackage//:unliftio-core failed: (Exit 1): cabal_wrapper failed: error executing command bazel-out/host/bin/external/rules_haskell/haskell/cabal_wrapper bazel-out/darwin-fastbuild/bin/external/stackage/unliftio-core_cabal_wrapper_args.json
Use --sandbox_debug to see verbose messages from the sandbox
../../../bazel-out/darwin-fastbuild/bin/external/stackage/unliftio-core-0.2.1.0/unliftio-core-0.2.1.0/build/autogen/Paths_unliftio_core.hs:48:17: error:
Variable not in scope: splitFileName :: FilePath -> (a, b0)
|
48 | let (dir,_) = splitFileName exePath
| ^^^^^^^^^^^^^
../../../bazel-out/darwin-fastbuild/bin/external/stackage/unliftio-core-0.2.1.0/unliftio-core-0.2.1.0/build/autogen/Paths_unliftio_core.hs:49:16: error:
Variable not in scope: minusFileName :: t0 -> String -> String
|
49 | return ((dir `minusFileName` "bin") `joinFileName` dirRel)
| ^^^^^^^^^^^^^^^
Traceback (most recent call last):
File "/sandbox/darwin-sandbox/277/execroot/mdium/bazel-out/host/bin/external/rules_haskell/haskell/runghc.runfiles/rules_haskell/haskell/runghc.py", line 9, in <module>
subprocess.run([r.Rlocation("rules_haskell_ghc_darwin_amd64/bin/runghc")] + sys.argv[1:], check=True)
File "/usr/local/Cellar/python@3.9/3.9.10/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
前にも起きてたやつです。直したんですけど、なんやかんやあって戻っちゃったみたいです。これの原因自体は、Cabal が 3.6 から splitFileName
関数と minusFileName
関数を生成しなくなったためです。で、これどうすればいいかというと:
2つの関数を生成するようにパッチを当てた Cabal を Tweag が用意してあるので、それを使うように stack snapshot を書き換えて、全ての依存パッケージがこの Cabal を使うように "hoge": ["@stackage//:Cabal"]
と setup_deps
へ追記します。
全ての依存パッケージは stack ls dependencies
とかで列挙できます。
digest package
ERROR: /sandbox/external/stackage/BUILD.bazel:1282:22: HaskellCabalLibrary @stackage//:digest failed: (Exit 1): cabal_wrapper failed: error executing command bazel-out/host/bin/external/rules_haskell/haskell/cabal_wrapper bazel-out/darwin-fastbuild/bin/external/stackage/digest_cabal_wrapper_args.json
Use --sandbox_debug to see verbose messages from the sandbox
clang: warning: argument unused during compilation: '-no-pie' [-Wunused-command-line-argument]
Setup.hs: The program 'pkg-config' version >=0.9.0 is required but it could
not be found.
Traceback (most recent call last):
File "/sandbox/darwin-sandbox/318/execroot/mdium/bazel-out/host/bin/external/rules_haskell/haskell/runghc.runfiles/rules_haskell/haskell/runghc.py", line 9, in <module>
subprocess.run([r.Rlocation("rules_haskell_ghc_darwin_amd64/bin/runghc")] + sys.argv[1:], check=True)
File "/usr/local/Cellar/python@3.9/3.9.10/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
エラーメッセージは「The program 'pkg-config' version >=0.9.0 is required but it could not be found.」の部分です。色々調べた結果、digest パッケージ側の問題でした:
Bazel の場合、pkgconfig-depends
が機能しないっぽいので、フラグで指定したいという PR です。lts-20.11 の場合は digest-0.0.1.5 で、これがリリースされたのが 0.0.1.6 なのでバージョンを上げて、次のようにしてフラグを指定します:
},
+ flags = {
+ "digest": ["-pkg-config"],
+ },
local_snapshot = "//:stack-snapshot.yaml",
)
ちなみに、Cabal のフラグ機能は頭に -
を付けると False に、+
を付けると True になるみたいです。
Discussion