http://d.hatena.ne.jp/tokuhirom/20090624/1245812352
Cのライブラリをラップするステップ
引数に該当の方が指定された場合に挿入されるコードを記述
src/*.cに、Cのライブラリをラップするコードを実装して配備。
(全部.xsにかくのも、小さめなのだったらそれでもいいのかも)
includeに.hを置く
perl Makefile.PL; make
prove -b t/*.t
use blib したスクリプトで実際に使ってみるとか
Text::Migemoから。
#define NEED_newCONSTSUB
static void
init_constants()
{
HV *stash;
stash = gv_stashpv("Text::Migemo", 1);
newCONSTSUB(stash, "MIGEMO_DICTID_MIGEMO", newSViv(MIGEMO_DICTID_MIGEMO));
newCONSTSUB(stash, "MIGEMO_DICTID_ROMA2HIRA", newSViv(MIGEMO_DICTID_ROMA2HIRA));
newCONSTSUB(stash, "MIGEMO_DICTID_HIRA2KATA", newSViv(MIGEMO_DICTID_HIRA2KATA));
newCONSTSUB(stash, "MIGEMO_DICTID_HAN2ZEN", newSViv(MIGEMO_DICTID_HAN2ZEN));
newCONSTSUB(stash, "MIGEMO_DICTID_INVALID", newSViv(MIGEMO_DICTID_INVALID));
newCONSTSUB(stash, "MIGEMO_OPINDEX_OR", newSViv(MIGEMO_OPINDEX_OR));
newCONSTSUB(stash, "MIGEMO_OPINDEX_NEST_IN", newSViv(MIGEMO_OPINDEX_NEST_IN));
newCONSTSUB(stash, "MIGEMO_OPINDEX_NEST_OUT", newSViv(MIGEMO_OPINDEX_NEST_OUT));
newCONSTSUB(stash, "MIGEMO_OPINDEX_SELECT_IN", newSViv(MIGEMO_OPINDEX_SELECT_IN));
newCONSTSUB(stash, "MIGEMO_OPINDEX_SELECT_OUT", newSViv(MIGEMO_OPINDEX_SELECT_OUT));
newCONSTSUB(stash, "MIGEMO_OPINDEX_NEWLINE", newSViv(MIGEMO_OPINDEX_NEWLINE));
}
TYPEMAPセクションは、コンパイラーに対して指示されたCの型をPerlの値にマッピングするのに使うべきINPUTセク-ションもしくはOUTPUTセクションにあるコード片を指示します。
PerlIO_printf(PerlIO_stderr(), "debugdebug")
http://d.hatena.ne.jp/tokuhirom/20090702/1246523440
prove --exec 'perl -Iblib/lib -Iblib/arch -MTest::Valgrind' t/*.t
Devel::Peekでレファレンスカウント見る
use Devel::Peek "Dump"; print Dump(MyXS::hoge()) . "\n";
http://d.hatena.ne.jp/tokuhirom/20081209/1228829454
http://subtech.g.hatena.ne.jp/hirose31/20080512/1210582471