gakkieのBlog

ubuntuでPHPエクステンションを作ろう-1

このエントリーを含むはてなブックマークはてなブックマーク - ubuntuでPHPエクステンションを作ろう-1 この記事をクリップ!Livedoorクリップ - ubuntuでPHPエクステンションを作ろう-1 Yahoo!ブックマークに登録 BuzzurlにブックマークBuzzurlにブックマーク @niftyクリップに追加 このエントリをつぶやくこのWebページのtweets Share on Tumblr FC2ブックマークへ追加 newsing it! この記事をChoix! Googleブックマークに追加 Bookmark this on Delicious Digg This FriendFeedで共有

私がWEBエンジニアとして勤めています。
WEB業界ではPHPが蔓延しています。
私はほとんど使っていませんが。

ということは、WEB系エンジニアとして転職すると、
「ヤツはPHPが使えるに決まっている!もしかしたらエクステンションを作る方が速いかもしれない!」
と思われるのはまちがいないのです。

このままでは、未来の上司や同僚ががっかりしてしまいます。

ということでPHPエクステンションを、
一般的な技術だけで作れるようになろうという試みです。
ドキュメントじゃないので、失敗例も書いていきます。

私の今の環境を記載します。
[code]
$ uname -a
Linux ubuntu 2.6.20-16-generic #2 SMP Fri Aug 31 00:55:27 UTC 2007 i686 GNU/Linux
$ php -v
PHP 5.2.1 (cli) (built: Jul 17 2007 18:14:23)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
[/code]

流れ

会社で作ったときの流れを思い出すと、

  • スケルトンから必要なコードを自動生成(ext_skel)
  • 設定ファイルを編集
  • Cでプログラムを編集
  • ビルド

のような感じだったと思います。
まずは、スケルトンからコードを生成したいです。

ext_skelがない!

最初にubuntuでPHPを開発するためのパッケージ(だと思われる)をインストールしました。
[code]
$ sudo aptitude install php5-dev
[/code]
が、ext-skelは入っていません。

ubuntu特有かと思い検索してみると、

Ubuntu (new upstream) php5 5.2.2-1ubuntu1
Drop the ext_skel binary and skeleton dir from php5-dev, as it has
been deemed obsolete upstream and the version in the tarball is not
considered useful anymore. PEAR::PECL_Gen upstream will replace it.

だそうです。

PEAR::PECL_Gen

というわけでPEARをインストールして、PECL_Genというものをインストールしてみます。
[code]
$ sudo aptitude install php-pear
$ sudo pear install PECL_Gen
No releases available for package “pear.php.net/PECL_Gen” – package pecl/PECL_Gen can be installed with “pecl install PECL_Gen”
Cannot initialize ‘PECL_Gen’, invalid or missing package file
Package “PECL_Gen” is not valid
install failed
[/code]

peclパッケージのPECL_Genを使えと、たらいまわし。

pecl/PECL_Gen

peclコマンドはよく知らないのでWebから落としてみました。
[code]
$ wget http://pecl.php.net/get/PECL_Gen-0.9.9.tgz
$ tar xzf PECL_Gen-0.9.9.tgz
[/code]

しかし、おかしなことにvoid.cなんてカラのファイルしかありません。
ひどいです。
package.xmlを読むと、
[code]
PECL_Gen has been split up into CodeGen and CodeGen_PECL
packages and has moved back to PEAR

[/code]
つまり、CodeGenとCodeGen_PECLを使えと!
さらにたらい回し!!

PEAR::CodeGen_PECL

仕方がないので、CodeGen_PECLをインストールして実行してみます。

[code]
$ sudo pear install codegen_pecl
$ pecl-gen
Usage:

pecl-gen [-h] [–force] [–experimental] [–version]
[–extname=name] [–proto=file] [–skel=dir] [–stubs=file]
[–no-help] [–xml[=file]] [–full-xml] [–function=proto] [specfile.xml]
(後略)
[/code]

やっとスケルトンが作成できそうです。
この先は次回。

スケルトンまとめ

PHPにはいくつかエクステンション用のスケルトン作成プログラムがあります。
PHP5において、エクステンションを作る場合、PEAR::CodeGen_PECLをインストールしてください。




Leave a Reply