Pure Data の拡張オブジェクトを作る gcc on Mac OS X 版

永野さんが Pure Data の external object を Xcode を使って書くチュートリアルを公開してくださったので、これをみながら Unix 文化に生息するプログラマ向けに Makefile に落としてみました。

参考 : http://nagano.monalisa-au.org/?p=909

ファイルは Gist に置いたので貼りつけます。

ヘッダのサーチパスは Mac OS X で Pd-extended をインストールしている場合はこのへんにあります。自分でソース落としてコンパイルしている環境向けに作成する時にはそちらを参照しましょう。

ちょっと気になるのは、-undefined suppress -flat_namespace のところで、ここは手元で一番簡単に参照できた Makefile からひっぱってきたのですけど、永野さんの記事から推測すると -undefined dynamic_lookup にしたほうがいいのかもしれません。そうすると -flat_namespace がなくても通る。今まであまり気にしていなかったのですが、どうも gccMac OS X では Linux とは随分違うオプションを駆使しないといけないようです。ここは要調査。

サンプルソースhttp://iem.at/pd/externals-HOWTO/node3.html から丸写し。make して extra ディレクトリに置いてから起動すると、helloworld というボックスが作れるようになっています。やったー。

Rubyの拡張ライブラリを書いたことのある人ならサンプルソースをながめるとなんとなく Pd のオブジェクトモデルが想像できるかと思います。はい、概ねご想像の通りです。ただしクラスの拡張性はあんまりないですし組み込みの型は特別扱いです(オブジェクトじゃない)。そしてクラスはオブジェクトじゃないです。つまりいわゆる二階建てのモデルです。なのでクラスにオブジェクトのメモリサイズが埋め込まれています。継承もなし。

またこれを Pd-extended 向けにコンパイルするにあたってヘッダを眺めてて気がついたんですが、Pd-extended ってコア部分にも拡張が入ってますね。わたしは git 版のリポジトリ(多分ミラーパケット版、いわゆる Pd-vanilla)のソースをみていたのですが、組み込みの型(っていうのかな)に blob という可変長のメモリを扱う型が追加されています。な、なんだってー。