MsgPackのPortfile

id:viver氏作成のMessagePackのPortfileを作成しました。下記のテキストをコピー&ペーストしてPortfileを作成し、http://blog.asial.co.jp/381 このページ等を参考にしてローカルのレポジトリに登録すればインストールできます。MessagePackはgccのバージョンが4.1以上なのでこのPortfileはgcc 4.2を指定しています。そのため、LeopardXcodeの最新版をインストールするかSnow Leopardである必要があります。

PortSystem      1.0

name            msgpack
version		0.3.7
categories      devel
description     MessagePack is a binary-based efficient data interchange format that is focused on high performance. It is like JSON, but very fast and small.
long_description  MessagePack is a binary-based efficient data interchange format that is focused on high performance. It is like JSON, but very fast and small.
homepage          http://msgpack.sourceforge.jp/
platforms         darwin
configure.compiler	gcc-4.2
master_sites	  http://sourceforge.jp/frs/redir.php?m=iij&f=%2Fmsgpack%2F43200
checksums	  md5 7d51c212f5e0b9943d8940dd7cfc046f

MacPorts 1.7.0リリース

12/13にMacPortsの新バージョンがリリースされたようです。ChangeLogを見る限りはバグフィックス以外の主な変更点は

  • +universalで64bit(x86_64, ppc64)が追加されるようになった
  • Portfileで使える変数に configure.{universal_target,universal_sysroot,universal_archs} が追加された
  • Portfileで使える変数に configure.{optflags,m32,m64,march,mtune}
  • port uninstall時に --recursiveをつけると依存するソフトを全てアンインストールするようになった。
  • fetch.typeにgitを追加。(git レポジトリからもソースをとって来れるようになったということかしら)
  • port searchでname, description and long_descriptionから検索するようになった。
    • ついでにport searchの結果表示が変わってdescriptionが表示されるようになってますね
  • port help が追加された。
  • +universalのデフォルトのMDT/SDKTigerでは10.4/10.4uに、Leopardでは10.5/10.5に戻した。

詳しい話は使ってみてのお楽しみというところで。

ThriftのMacportsパッケージ

今月のWEB+DB PRESSでも特集されていたThriftですが、Macportsに無い(debでも無いのですぐに作られるのは期待できない)ようだったので自分でPortfileを作ってみました。以下のファイルをコピー&ペーストしてPortfileという名前で保存し

$ sudo mkdir -p /opt/local/var/localports/devel/thrift
$ sudo cp Portfile /opt/local/local/var/localports/devel/thrift/
$ cd /opt/local/var/localports
$ sudo portindex
$ sudo port -v selfupdate

と実行すればMacportsにtxが組み込まれる。

$ port list thrift
thrift                         @20080411p1     devel/thrift

以下がPortfileの中身

PortSystem      1.0

name            thrift
version         20080411p1
categories      devel
description     A software framework for scalable cross-language services development.
long_description  Thrift is a software framework for scalable cross-language services development. It combines a powerful software stack wi$
homepage          http://developers.facebook.com/thrift/
platforms         darwin
master_sites      http://developers.facebook.com/thrift/
checksums         md5 8a28f61c897aeb388ef77c1ccb8b91d2
depends_lib       port:boost
depends_run       port:python25
configure.args    --with-libevent=no \
                  --with-java=no \
                  --enable-java=no \
                  --with-csharp=no \
                  --enable-gen-csharp=no \
                  --with-erlang=no \
                  --enable-gen-perl=no \
                  --enable-gen-php=no \
                  --enable-gen-ruby=no
configure.env-append PY_PREFIX=${prefix}

variant libevent {
        configure.args-delete   --with-libevent=no
        depends_lib-append      port:libevent
}

variant perl {
        configure.args-delete --enable-gen-perl=no
        depends_lib-append      port:perl5.8
        depends_lib-append      port:p5-bit-vector
        depends_run-append      port:p5-class-accessor
        post-configure {
                    system "cd ${worksrcpath}/lib/perl && perl Makefile.PL && cd ${worksrcpath}"
        }
        post-build {
                    system "cd ${worksrcpath}/lib/perl && make && cd ${worksrcpath}"
        }
        post-install {
                    system "cd ${worksrcpath}/lib/perl && make install && cd ${worksrcpath}"
        }

}

variant ruby {
        configure.args-delete --enable-gen-ruby=no
        depends_lib-append      port:ruby
        post-configure {
                    system "cd ${worksrcpath}/lib/rb && ruby setup.rb config && cd ${worksrcpath}"
        }
        post-build {
                    system "cd ${worksrcpath}/lib/rb && ruby setup.rb setup && cd ${worksrcpath}"
        }
        post-install {
                    system "cd ${worksrcpath}/lib/rb && ruby setup.rb install && cd ${worksrcpath}"
        }
}

default_variants        +libevent +perl +ruby

これで、以下のコマンドでインストールできます。

$ sudo port -v install thrift

尚、このパッケージでインストールされるThriftではC++,Python,Ruby,Perlしか使えません。本来はこの他にもPHP,Java,C#,Ocamo,Smalltalk,Haskell,Cocoa等でも使えますがインストールコマンドやドキュメントが無かったり、ユーザープログラムと共に同梱する必要があるものであったりしたので見送りました。また、Ruby, Perlに関しては必要なければ-ruby, -perlのオプションを付けることによってインストール対象から外すことができます。

参考URL

必要な情報のほとんどはここにある。

ローカルのリポジトリを作るコマンドはここを参考にしました。

まとめ

インストール構成が最も簡単なソフトウェアを用いてPortfileを作成致しました。依存関係もconfigureオプションも無いので、ちょっと他のソフトに応用するには情報が足りないかもしれませんが自作Macportsを作る流れは掴めたと思います。

解説

一行ずつ解説していきます。

name                    tx

パッケージの名前を指定します。

version                 0.12

ソフトウェアのバージョンです。なおダウンロードしてくるソースファイルは

name-version.tar.gz

です。autotoolsを使っているのならmake dist で作成されます。

revision                1

Portfile自体のバージョンです。同じバージョンのソフトウェアに対して修正等を行った時にはrevisionを
上げておくとアップデートされます。

description             Library for a compact trie data structure.

port search の検索の時に表示される説明文。端的に書きましょう。

long_description        Tx is a library for a compact trie data structure. \
  Tx requires 1/4 - 1/10 of the memory usage compared to the previous implementations, \
  and can therefore handle quite a large number of keys (e.g. 1 billion) efficiently. \
  A trie data structure supports exact matching and common prefix matching, \
  which are used for natural language processing etc. \
  Tx uses Level-Order Unary Degree Sequence (LOUDS) for trie representation.

port info で詳細に表示した時に現れる長い説明文です。

categories              devel

ソフトウェアの種類を表す。/opt/local/var/macports/sources/rsync.macports.org/release/ports/ を見るとどんなカテゴリがあるか分かると思います。ライブラリはdevelのようです。

platforms               darwin

動作する環境(OS)を指定します。MacportsMac以外にもFreeBSDLinuxでも動作するのでOSの指定がある場合はここで指定します。といってもほとんどのものはdarwinしか指定していないみたいです。

homepage                http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/tx.htm

プロジェクト本家等、情報が載っているホームページのアドレスです。

master_sites    http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/software/

ソフトウェアの存在しているURLです。Macportsは内部的に以下のコマンドでソースファイルを取得します。

$ wget master_sites/name-version.tar.gz

最後に

checksums               md5 9e381d2c6c6f0fed7371e9a2f5f64d98

ソフトウェアのチェックサムです。md5の他にsha1等に対応しています。

作ってみた

いきなりだが、コードを貼付ける。
ダウンロードはこちらから行って下さい。

PortSystem 1.0

name                    tx
version                 0.12
revision                1
description             Library for a compact trie data structure.
long_description        Tx is a library for a compact trie data structure. \
  Tx requires 1/4 - 1/10 of the memory usage compared to the previous implementations, \
  and can therefore handle quite a large number of keys (e.g. 1 billion) efficiently. \
  A trie data structure supports exact matching and common prefix matching, \
  which are used for natural language processing etc. \
  Tx uses Level-Order Unary Degree Sequence (LOUDS) for trie representation.
categories              devel
platforms               darwin
homepage                http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/tx.htm
master_sites    http://www-tsujii.is.s.u-tokyo.ac.jp/~hillbig/software/
checksums               md5 9e381d2c6c6f0fed7371e9a2f5f64d98

これをPortfileというファイル名で保存した後

$ sudo mkdir -p /opt/local/var/localports/devel/tx
$ sudo cp Portfile /opt/local/local/var/localports/devel/tx/
$ cd /opt/local/var/localports
$ sudo portindex
$ sudo port -v selfupdate

と実行すればMacportsにtxが組み込まれる。

$ port list tx
tx                             @0.12           devel/tx

ちゃんとでてきますね。