2011年10月09日

Lion+homebrew で w3m が動かなかったのがなんとかなったヒャッハー

※bdw-gcを開発版にしているのでw3m以外でそれに依存しているものがある場合等は要注意

Lionちゃんを使ってて、自分の環境だとw3mが動かなくって困っておりました。 なんだけど、 {macports} w3mがLionで動かないので対処してみた という記事で、MacPorts環境では動かせたというのがあったので、 ならばhomebrewでも試行錯誤したらどうにかなるのではっ! と思い 三日ぐらいかけてどうにかしました。

まず例の記事によると、 bdw-gc が 7.1 では駄目らしいので HomeBrew の Formula を編集する。 ってことで

$ sudo brew edit bdw-gc

Formulaファイルを開いて以下のようにする。

require 'formula'

class BdwGc < Formula
#  url 'http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-7.1.tar.gz'
  url 'http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-7.2alpha6.tar.gz'
  homepage 'http://www.hpl.hp.com/personal/Hans_Boehm/gc/'
# 7.1
#  md5 '2ff9924c7249ef7f736ecfe6f08f3f9b'
#  7.2alpha6
  md5 '319d0b18cc4eb735c8038ece9df055e4'

  fails_with_llvm "LLVM gives an unsupported inline asm error", :build => 2335

  def install
    # ucontext has been deprecated in 10.6
    # use this flag to force the header to compile
#    ENV.append 'CPPFLAGS', "-D_XOPEN_SOURCE" if MacOS.snow_leopard?
    ENV.append 'CPPFLAGS', "-D_XOPEN_SOURCE"# if MacOS.snow_leopard?

    system "./configure", "--disable-debug", "--disable-dependency-tracking",
                          "--prefix=#{prefix}"
    system "make install"
  end
end

なんだかんだ戻せるようにコメントアウトで本来のコードを残しているのは愛嬌ってことで。 (CPPFLAGS のところはいらないかもしれないけどこれで動いているからいいや)

そんでもって

$ sudo brew install bdw-gc

これだけでlinkはされるのかな? わかんないから心配なら

$ sudo brew link bdw-gc

しておくといいかもしれない。

それからw3mのFormulaをいじるために

$ sudo brew edit w3m

中身は

require 'formula'

class W3m < Formula
#  url 'http://downloads.sourceforge.net/project/w3m/w3m/w3m-0.5.2/w3m-0.5.2.tar.gz'
  url 'http://downloads.sourceforge.net/project/w3m/w3m/w3m-0.5.3/w3m-0.5.3.tar.gz'
  homepage 'http://w3m.sourceforge.net/'
#  md5 'ba06992d3207666ed1bf2dcf7c72bf58'
  md5 '1b845a983a50b8dec0169ac48479eacc'

  depends_on 'bdw-gc'

  fails_with_llvm :build => 2334

  def install
    system "./configure", "--disable-debug", "--disable-dependency-tracking",
                          "--prefix=#{prefix}"
    system "make install"
  end

  def patches
    "http://projects.qi-hardware.com/index.php/p/openwrt-packages/source/file/master/w3m/patches/003-GC_set_warn_proc.patch"
  end
end

どんな変更をしているかというと まずHomeBrewのw3mが古いので0.5.3を使うように変更。 これはpatchを当てるための前準備でもある。 で、patchesというメソッドを定義。 これを書いておくとパッチを当ててくれるよ! (参考: https://github.com/mxcl/homebrew/wiki/Formula-Cookbook)

ちなみにパッチの内容は

--- a/main.c
+++ b/main.c
@@ -833,7 +833,8 @@ main(int argc, char **argv, char **envp)
     mySignal(SIGPIPE, SigPipe);
 #endif

-    orig_GC_warn_proc = GC_set_warn_proc(wrap_GC_warn_proc);
+    orig_GC_warn_proc = GC_get_warn_proc();
+    GC_set_warn_proc(wrap_GC_warn_proc);
     err_msg = Strnew();
     if (load_argc == 0) {
  /* no URL specified */

こんなん。 bdw-gcの使い方が変わってるっぽいですね。 GC_set_warn_proc がnullを返すようにでもなったのかな。

あ、それとついでにimageも見られるように./configureのoptionも削ってます。

これで

$ brew install w3m

したらLionちゃんで動くw3mが手に入るよ! これでemacs-w3mも動いてむぎちゃん快適!

ちなみにEasyPackageだと余裕で動くそうです。 それに最初に張ったリンクによるとMacPortsでも余裕で動くようです。

タグ:Mac LION w3m HOMEBREW
posted by 麦汁 at 17:53 | Comment(0) | TrackBack(0) | Mac | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック