gksato
https://haskell-jp.slack.com/archives/CL3AXB1AL/p1675402815431589 (at atcoder-lang-update)
1. cabal-installにdependencyを解いてもらい,
2. それをもとにHackage API を叩いて
3.
みたいな手段を取りました.この1.に関して質問させてください.
ここでやりたいことは,「ビルドやインストールはしなくていいけど,現環境から見た,既ビルドのものも含めた全transitive dependenciesのリストが欲しい」ということになります.このために今回は結構乱暴な手段を取りました.Docker環境があったので,まっさらなGHC+Cabalをghcupでインストールしたのち,対象のパッケージ群を全部
色々いじっていると,適当に一個だけcabal packageを持つcabal projectを作り,Cabal packageの
がんばりました。直接installしていない物も含む、全transitive dependencyのライセンスのリスト:この件で,あるパッケージ群の全transitive dependenciesからlicenseを取ってくる作業をしたのですが,私の知識の範囲でできる限り車輪の再開発を避けて:
1. cabal-installにdependencyを解いてもらい,
2. それをもとにHackage API を叩いて
.cabal
ファイルをもらってくる,3.
Cabal-syntax
パッケージを使ってその .cabal
ファイルをパースしてライセンス情報を取るみたいな手段を取りました.この1.に関して質問させてください.
ここでやりたいことは,「ビルドやインストールはしなくていいけど,現環境から見た,既ビルドのものも含めた全transitive dependenciesのリストが欲しい」ということになります.このために今回は結構乱暴な手段を取りました.Docker環境があったので,まっさらなGHC+Cabalをghcupでインストールしたのち,対象のパッケージ群を全部
cabal install --lib
して ghc-pkg list
でインストールされている全パッケージのリストを取ってきたのです.しかし,これでは余計なパッケージまで見ている気がしますし,もうちょっとなんとかならんのか,という気がします.色々いじっていると,適当に一個だけcabal packageを持つcabal projectを作り,Cabal packageの
.cabal
ファイルは目的とするパッケージ群をdependenciesに持つ library だけを持つようにし,project の cabal.project
にはそれらのライブラリについて設定すべきフラグを持たせるようにすると, cabal freeze
で cabal.project.freeze
がなんかそれっぽいファイルになるのですが,これで合ってるのでしょうか…? cabal freeze
が良い方法なのか,あるいは別の方法があればお教えいただければありがたいです.