homebrew の Formula を追加する
MacBook Air にしたときに macports から homebrew に乗り換えた、が、 macports に比べて homebrew ははじめから入っているパッケージが少ない。
入っていないものは自力でコンパイルすればいいのだけれど、 homebrew で入れたものと自力で入れたものが混ざってなんだかいやだ・・・。
そんなときは自分で Formula (パッケージ(のようなもの)を定義するRubyファイル) を書けばいいのです。
macports でもパッケージを追加したりできたんだろか…。
調べずに移行してしまったのでその辺はわからず。
参考ページ。本家。
https://github.com/mxcl/homebrew/wiki/Formula-Cookbook
以下は apache の Formula を書く手順。 内容は参考ページに書いてあることほぼそのまんま。
ソースのURLを指定してcreate
$ brew create http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.2.19.tar.gz
実行すると Formula のひな形が $EDITOR で開かれる。
require 'formula' class Httpd < Formula url 'http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.2.19.tar.gz' homepage '' md5 'e9f5453e1e4d7aeb0e7ec7184c6784b5' # depends_on 'cmake' def install system "./configure", "--disable-debug", "--disable-dependency-tracking", "--prefix=#{prefix}" # system "cmake . #{std_cmake_parameters}" system "make install" end end
ひな形を編集
今回は、
- homepage を指定
- コメントアウトを削除
- configure オプションを追加
を行って、結果以下のように。
require 'formula' class Httpd < Formula url 'http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.2.19.tar.gz' homepage 'http://httpd.apache.org/' md5 'e9f5453e1e4d7aeb0e7ec7184c6784b5' def install system "./configure", *configure_args system "make" system "make install" end def configure_args return [ "--prefix=#{prefix}", "--disable-debug", "--disable-dependency-tracking", "--enable-so", "--enable-rewrite", "--mandir=#{man}", ] end end
homepage は必須ではないけど、本家のリポジトリに取り込まれたかったら書かないといけないらしい。
homebrew でインストール
$ brew install httpd
うまくいかなければ Formula をいじくってどうにかする。 たいていは configure オプションをいじればどうにかなるはず。 保存場所は /usr/local/Library/Formula/httpd.rb 。
パッチを当てたい場合
すでにパッチが公開されていて、それを適用しつつインストールしたい場合。 patches というメソッドを定義して、パッチをテキストで返したり、URLで返したりすればいいみたい。
以下の例は冒頭の参考ページのものをそのまま掲載。
URLで指定する場合。
def patches # fixes doc install on OS X 10.6 "http://gist.github.com/623/my.patch/raw/" end
patch コマンドのオプションを指定する場合。
def patches # back ported fix for memory leak in drawing functions { :p0 => "http://gist.github.com/623/my.patch/raw/" } end
Forumla ファイルに書き込んでしまう場合。
class Foo < Formula def patches # fixes your mum (she was b0rked) DATA end end __END__ diff --git a/foo/showfigfonts b/foo/showfigfonts index 643c60b..543379c 100644 --- a/foo/showfigfonts +++ b/foo/showfigfonts @@ -14,6 +14,7 @@ …
おわり
冒頭の参考ページにはほかにもいろいろ使える方法が書いてあるので、 読んでみるとおもしろいです。