SML#のebuild書きました、もしくはmultilibとの戦い
流行ってるらしいので。
https://github.com/unarist/unarist-overlay/blob/master/dev-lang/smlsharp/smlsharp-2.0.0.ebuild
licenseとかpatchとかちらばってるのでlayman使うといいかも。
作った
また,SML#は現時点での最新版であるLLVM3.4 32bitを必要としますので,多くのディストリビューションで自力ビルドが必要かと思います.
http://d.hatena.ne.jp/keita44_f4/20140412/1397279451
Gentooだからそんなの余裕ですね^^と思っていたんですが、見事にLLVM 32bitではまりました。
- そもそもmultilibが面倒だった
- ebuild側
- DEPENDに[abi_x86_32]つけて、toolchain切り替えるだけなので簡単
- 基本的にはmultilib_toolchain_setupがconfigureのパラメータをうまく設定してくれます
- llvm[abi_x86_32]はx86用のllvm-configを違う名前でインストールするのでconfigureの修正が必要
- 今のところ{triple}-llvm-configとllvm-config.x86にインストールされるが、前者は「# Backwards compat, will be happily removed someday.」とか書いてあったので、llvm-config.x86 llvm-configの順に検索させるようにした*1
とはいえ調査や環境の調整に手間取っただけで、ebuild書くの自体は簡単でいいですね。ビルドバッチみたいなものだから応用も効くし。
emul-linuxからgx86-multilibへの移行
stable.use.maskじゃ駄目なの? -> 理由はわかっていないけどuse.maskで。
emul-linux-*消さない方法ないの? -> 依存関係無視していいから一度消した方が多分簡単。
- use.maskに-abi_x86_32を書く
- 一旦emul-linuxを全部emerge -Cで消す
- そのままuDNすると[-abi_x86_32]が優先されるのかコンフリクトの嵐なので、package.useでemul-linuxにだけabi_x86_32付けてしまう
- emerge --autounmask-write -uDN worldを繰り返して必要なUSEフラグや~外しをする
- ここまで来るとコンフリクトも4つぐらいにまで減ったので、指摘されたパッケージを適当にemergeしていく
- 完
autounmaskがあるとはいえ、なるべくそういった変更を避けた提案をしようとしてコンフリクトするケースが多いみたい。というかそりゃそうだ。
なのでバージョンを明示してあげると、USEフラグ変えろ!キーワード変えろ!となり話が進む。
読んだ
- Xubuntu編 http://d.hatena.ne.jp/keita44_f4/20140412/1397279451
- Arch編 http://cohama.hateblo.jp/entry/2014/05/08/010819
- GentooWiki http://wiki.gentoo.org/wiki/Multilib/gx86-multilib その他multilib周りを。
- Gentooの開発ガイド http://devmanual.gentoo.org/ ebuildの書きかたは主にここを見ながら。amd64のところにABIの話もあるけど、よくわからなかった。
- abi_x86_32の話 http://gentooligan.blogspot.jp/2013/10/your-daily-nightmare-with-abix86.html
フォーラムとかbugzillaとか
ところで
SML#書いたことないです。