きりかノート 3冊め

おあそびプログラミング

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だよね、これは。

  1. Lionでのコンパイル、動作確認→問題なし
  2. w3mの`port configure'後のconfig.hやMakefileを10.8と10.7で比較→特にあやしいとこなし
  3. boehmgcの`port configure'後のconfig.hやMakefileを10.8と10.7で比較→特にあやしいとこなし
  4. boehmgcのテストを実行→Mountain LionでSEGV (ここだー!)
  5. 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に上げるよ。