スタッフブログ

  • 最新配信
  • RSS

PHPのreadline拡張を単体でインストールしようとしてはまった時のメモ

 : 技術全般 2008/8/29 10:20

Blogger's Avatar

satoです。
今回はPHP5.2のreadline拡張をビルドしたときにハマったことを書いておきます。

PHPの拡張はPHPのビルド時に指定することが多いと思いますが、sharedでビルドしてextension=〜.soで適用することもできます。こちらのほうが後から取り外しもできるので便利です。
しかし今回はそもそもPHPのビルド時の指定を忘れていたので、直接単体でビルドを試してみます。

拡張はPHPのソースのext以下に入っています。今回はreadlineなので、ext/readlineに移動してphpizeしてconfigureします。

checking for readline in -ledit... no
configure: error: edit library required by readline not found

とか言われてしまいます。
libeditは、readlineのBSDライセンス版的なものなのですが、私の環境ではreadlineしか入っていなかったのでreadlineを使いたいところです。

configureを見ると

# Check whether --with-libedit or --without-libedit was given.

とか書いてある行があります。
--without-libeditとか書けば大丈夫なのでしょうか。

./configure --with-php-config=/opt/php5.2/bin/php-config --without-libedit --with-readline=/usr/lib

checking for readline in -ledit... no
configure: error: edit library required by readline not found

変化がありません。--with-libedit=noでも変わらないようです。

configureを追うと、

echo "$as_me:$LINENO: checking for libedit readline replacement" >&5
echo $ECHO_N "checking for libedit readline replacement... $ECHO_C" >&6

# Check whether --with-libedit or --without-libedit was given.
if test "${with_libedit+set}" = set; then
  withval="$with_libedit"
  PHP_LIBEDIT=$withval
else

  PHP_LIBEDIT=no

  if test "$PHP_ENABLE_ALL" && test "yes" = "yes"; then
    PHP_LIBEDIT=$PHP_ENABLE_ALL
  fi

fi;

このあたりでlibeditのチェックをしていることがわかります。
echoでデバッグすると、どうやらPHP_ENABLE_ALL="yes, shared"になっているため、常に通ってしまうようです。
しかしconfigureを読むのに慣れていないので、この変数がどこで設定されているのかはわかりませんでした。

よくわからないので、

  if test "$PHP_ENABLE_ALL" && test "yes" = "yes"; then
    PHP_LIBEDIT=$PHP_ENABLE_ALL
  fi

を削除してしまします。が、変化がありません。
  PHP_LIBEDIT=no
の次の行で、echo $PHP_LIBEDITとしても"yes, shared"と出力されています。

よくわからないので、その後のチェック終了後だと思われる(3242行目あたり)

  ext_output="yes, shared"
  ext_shared=yes
  test "$PHP_LIBEDIT" = "no" && PHP_LIBEDIT=yes

の後に
PHP_LIBEDIT=no
と追加してしまいます。これでconfigureが通り、無事ビルドできました。

もしかすると何か設定があるのかもしれませんが、とりあえず今回はこれで正常に利用できているのでこれでよしとします。
正しい方法をご存じの方がいらっしゃいましたら是非ご教授お願いします。

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.