• 作成:

haskellのzlibライブラリがビルドに失敗するケースのワークアラウンド

問題

haskell/zlibがビルドに失敗することがあります。

 cabal test
Configuration is affected by the following files:
- cabal.project
Build profile: -w ghc-9.10.1 -O1
In order, the following will be built (use -v for more details):
 - brick-2.8.2 (lib) (requires build)
 - string-interpolate-0.3.4.0 (lib) (requires build)
 - zlib-0.7.1.0 (lib) (requires build)
 - streaming-commons-0.2.3.0 (lib) (requires build)
 - conduit-extra-1.3.7 (lib) (requires build)
 - monad-logger-0.3.41 (lib) (requires build)
 - sandwich-0.3.0.3 (lib) (requires build)
 - sandwich-0.3.0.3 (exe:sandwich-discover) (requires build)
 - wasmtime-hs-repro-0.1.0.0 (test:wasmtime-hs-repro-test) (first run)
Starting     string-interpolate-0.3.4.0 (lib)
Starting     zlib-0.7.1.0 (lib)
Starting     brick-2.8.2 (lib)
Building     zlib-0.7.1.0 (lib)
Building     string-interpolate-0.3.4.0 (lib)
Building     brick-2.8.2 (lib)
Installing   string-interpolate-0.3.4.0 (lib)
Completed    string-interpolate-0.3.4.0 (lib)
Installing   brick-2.8.2 (lib)
Completed    brick-2.8.2 (lib)

Failed to build zlib-0.7.1.0.
Build log (
/home/ncaq/.cache/cabal/logs/ghc-9.10.1/zlib-0.7.1.0-34d032fc305cdc5e3febd266686810c776d7db737981cfdcba227d8515000f04.log
):
Configuring library for zlib-0.7.1.0...
Preprocessing library for zlib-0.7.1.0...
running dist/build/Codec/Compression/Zlib/Stream_hsc_make failed (exit code -6)
rsp file was: "dist/build/Codec/Compression/Zlib/hsc2hscall4304-3.rsp"
output file:"dist/build/Codec/Compression/Zlib/Stream.hs"
command was: dist/build/Codec/Compression/Zlib/Stream_hsc_make  >dist/build/Codec/Compression/Zlib/Stream.hs
error: *** stack smashing detected ***: terminated

Error: [Cabal-7125]

Haskell開発環境にNix Flakesを使う - ncaq にも書きましたが。

エラーログもまともじゃないし、原因がよく分からなくて、再現性も不確かです。 git cloneしてきてcabal buildしたり、外側でnix profile install 'nixpkgs#haskellPackages.zlib'しても成功するので、自分の環境の原因かも知れないと思って報告しにくいです。

回避

根本的な回避策ではないことは承知の上でワークアラウンドします。

本来はghcjsやwasm向けの記述なのだと思いますが、フラグを設定すれば同梱しているCのソースを使ってくれて、今回はビルドに成功しました。

https://github.com/haskell/zlib/blob/858517c5216c9f59d313aa04150952d1f0dca6cc/zlib/zlib.cabal#L111-L113

cabal.projectに以下のように設定します。

constraints:
  zlib +bundled-c-zlib