Mountain Lionでw3mがコンパイルできない件(とりあえずの回避策)
なんかLionのときもなんかあったよーな記憶がなくもないわけですが。
先に結論を書いとこう。boehmgcを最適化なしでコンパイルすると、とりあえずw3mは使える。
% sudo port -f uninstall boehmgc % sudo port -s install boehmgc configure.optflags=-O0 % sudo port clean w3m % sudo port install w3m % w3m http://www.macports.org/
調査経緯など
状況としては、w3mのコンパイル中に作成されるmktableというツールがSEGVして、適切なソースを生成できなくって止まってる。まあたぶんgcだよね、これは。
- Lionでのコンパイル、動作確認→問題なし
- w3mの`port configure'後のconfig.hやMakefileを10.8と10.7で比較→特にあやしいとこなし
- boehmgcの`port configure'後のconfig.hやMakefileを10.8と10.7で比較→特にあやしいとこなし
- boehmgcのテストを実行→Mountain LionでSEGV (ここだー!)
- SEGV箇所を調べようと、boehmgcを-O0 -gでコンパイル→テスト通ってしまう
いちおう該当しそうなチケットにも報告しといた。[#35378]
ちなみにboehmgcのテストなんだけど、ちょっと変わってる。こんな流れ。
% cd gc-7.2 % configure && make % make gctest : % ./gctest Switched to incremental mode Emulating dirty bits with mprotect/signals Completed 6 tests Allocated 11988803 collectable objects Allocated 1218 uncollectable objects Allocated 7498874 atomic objects Allocated 137743 stubborn objects Finalized 13467/13467 objects - finalization is probably ok Total number of bytes allocated is 672257386 Final heap size is 76849152 bytes Collector appears to work Completed 272 collections % make test_cpp : % ./test_cpp usage: test_cpp number-of-iterations Assuming 10 iters Starting iteration 1 Starting iteration 2 Starting iteration 3 Starting iteration 4 Starting iteration 5 Starting iteration 6 Starting iteration 7 Starting iteration 8 Starting iteration 9 Starting iteration 10 The test appears to have succeeded. %
個人的にはmake testとかで動いてほしいです。これは2つしかないからまだいいけど、同作者のlibatomic_opsとか、かったるいのです。(7/31追記: make checkでいけました。ゴメンナサイ)
ついでにboehmgcがport:libatomic_ops-develがインストールされているか否かで影響受けてしまうとこがあったので直した。(r96061) depends_libに追加するか、configureで避けるかだけど、今回はlib/のほうを無視するというのがいいでしょう。今後バージョンずれてくと問題起きるかもしんないし。
今後の予定?
フンイキ的にvolatile足せば直るような気がするので、パッチ作成にチャレンジするかも。できたらupstreamとMacPortsに上げるよ。