スタッフブログ
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が通り、無事ビルドできました。
もしかすると何か設定があるのかもしれませんが、とりあえず今回はこれで正常に利用できているのでこれでよしとします。
正しい方法をご存じの方がいらっしゃいましたら是非ご教授お願いします。