4

Haskell で記述された CLI ツール用の自己完結型の実行可能ファイルをコンパイルしようとしています。この例に従って、Cabal v3.2 と ghc v8.10.3 を使用して Github Actions でさまざまなオペレーティング システムの実行可能ファイルを自動的にビルドしました。

これはうまく機能しているようで、実行可能ファイルは表面的には機能しますが、実際にデータに適用すると、Linux バージョンで次のエラー メッセージが表示されます (Windows ビルドはテストしませんでしたが、MacOS バージョンにも同じ問題があることを同僚が確認しました)。 ):

myprogram-0.3.2-Linux-ghc-8.10.3: 
/home/runner/.cabal/store/ghc-8.10.3/pandoc-citeproc-0.17.0.2-
0607b6a3d51d41b0211d235af7fcf6eeb452dc6738775583dac1146860db61b1/
share/locales/locales-en-US.xml: openBinaryFile: does not exist (No such file or directory)

これは、私がBibTeXファイルの解析に依存しているpandoc-citeprocに、実行可能ファイルにパックされない追加のデータファイルがあることを示しています。実際、cabal-install のドキュメントで次の文を見つけました。

コピーされた実行可能ファイルは、ストアのデータ ファイルを使用する可能性があるため、自己完結型ではないことに注意してください。ソース

また、これらの追加ファイルを既に含める方法でビルドできることをパンドックのドキュメントで読みました。

pandoc が使用するデータ ファイルがバイナリに埋め込まれているように、pandoc をコンパイルすることができます。結果のバイナリは、任意のディレクトリから実行でき、完全に自己完結型です。cabal では、-fembed_data_files を cabal configure または cabal install コマンドに追加します。スタックでは、--flag pandoc:embed_data_files を使用します。ソース

cabal install上記のエラー メッセージを回避するために実行可能ファイルをビルドするにはどうすればよいですか? これが可能であることを願っています。ここで重要な何かを見逃していません。

私は試した

cabal install exe:myprogram --install-method=copy --overwrite-policy=always -fembed_data_files

無駄に。

4

1 に答える 1