httpd-2.2.29 をソースからインストールすると error: 'APR_INT32_MAX' undeclared に遭遇した

CentOS 5.xにて、httpd-2.2.29 をソースからインストールした時の話。

<環境>
CentOS 5.11/httpd-2.2.29


以下のオプションでconfigure を実行。

# ./configure\
  --enable-so\
  --enable-ssl\
  --enable-auth_digest\
  --enable-unique-id\
  --enable-deflate\
  --enable-rewrite\
  --enable-proxy\
  --enable-expires\
  --enable-headers


makeする。

# make
・・・略
mod_deflate.c: In function 'deflate_out_filter':
mod_deflate.c:790: error: 'APR_INT32_MAX' undeclared (first use in this function)
mod_deflate.c:790: error: (Each undeclared identifier is reported only once
mod_deflate.c:790: error: for each function it appears in.)
mod_deflate.c: In function 'deflate_in_filter':
mod_deflate.c:1165: error: 'APR_INT32_MAX' undeclared (first use in this function)
mod_deflate.c: In function 'inflate_out_filter':
mod_deflate.c:1550: error: 'APR_INT32_MAX' undeclared (first use in this function)
make[3]: *** [mod_deflate.lo] Error 1
make[3]: Leaving directory `/usr/local/src/httpd-2.2.29/modules/filters'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/usr/local/src/httpd-2.2.29/modules/filters'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/httpd-2.2.29/modules'
make: *** [all-recursive] Error 1


APR関連のエラーが発生。

APRは「Apache Portable Runtime」である。
http://ja.wikipedia.org/wiki/Apache_Portable_Runtime


APR関連の確認。

# rpm -qa | grep apr
apr-util-devel-1.2.7-11.el5_5.2
apr-1.2.7-11.el5_6.5
apr-util-1.2.7-11.el5_5.2
apr-devel-1.2.7-11.el5_6.5


検索すると、makeできない原因は、APRのバージョンの模様。
https://issues.apache.org/bugzilla/show_bug.cgi?id=57035
「APR_INT32_MAX」は、APR1.3で導入されたので、APR1.2以前ではダメとの事。


./configure にて、APR関連のオプションは以下の通り。

Optional Packages:
  --with-included-apr     Use bundled copies of APR/APR-Util
  --with-apr=PATH         prefix for installed APR or the full path to apr-config
  --with-apr-util=PATH    prefix for installed APU or the full path to apu-config


./configure でAPR関連の出力は以下の通り。

checking for APR... yes
checking for APR-util... yes
  adding "-I/usr/include/apr-1" to INCLUDES
checking for APR version 1.2.0 or later... yes
checking for APR-util version 1.2.0 or later... yes
  setting EXTRA_INCLUDES to "-I$(top_builddir)/srclib/pcre -I. -I$(top_srcdir)/os/$(OS_DIR) -I$(top_srcdir)/server/mpm/$(MPM_SUBDIR_NAME) -I$(top_srcdir)/modules/http -I$(top_srcdir)/modules/filters -I$(top_srcdir)/modules/proxy -I$(top_srcdir)/include -I$(top_srcdir)/modules/generators -I$(top_srcdir)/modules/mappers -I$(top_srcdir)/modules/database -I/usr/include/apr-1 -I$(top_srcdir)/modules/proxy/../generators -I/usr/kerberos/include -I$(top_srcdir)/modules/ssl -I$(top_srcdir)/modules/dav/main"


./configure で「checking for APR version 1.2.0 or later... yes」とか書いてあるのに、実際は1.3 以上が必要なのか・・・。

yum の apr-devel apr-util-devel(いずれも バージョン 1.2.7)がインストールされた状態で、configure するには、./configure のオプションに「--with-included-apr」を指定し、httpdにバンドルされたAPRを使うとmakeできる。
バンドルされているのは APR 1.5.3 なので、エラーにならない。


また、yumで apr-devel と apr-util-devel を削除すると、自動的にhttpdにバンドルされたAPRを使うようになる。

# yum remove apr-devel apr-util-devel

RPMパッケージのARPが見つからないため、バンドルされたものを使う模様。

# ./configure | grep -i apr
checking for APR... reconfig
configuring package in srclib/apr now
Configuring APR library
APR Version: 1.5.1
checking for chosen layout... apr
Applying APR hints file rules for i686-pc-linux-gnu
APR will use threads
checking which format to use for apr_ssize_t... %d
checking which format to use for apr_size_t... %u
checking which type to use for apr_off_t... off64_t
decision on apr_lock implementation method... SysV IPC semget()
checking if APR supports IPv6... yes
  setting apr_has_xthread_files to "0"
  setting apr_procattr_user_set_requires_password to "0"
  setting apr_thread_func to ""
  setting apr_has_user to "1"
config.status: creating include/apr.h
config.status: creating build/apr_rules.mk
config.status: creating apr-1-config
config.status: creating apr.pc
config.status: creating include/arch/unix/apr_private.h
config.status: include/apr.h is unchanged
config.status: include/arch/unix/apr_private.h is unchanged
srclib/apr configured properly
checking for APR-util... reconfig
configuring package in srclib/apr-util now
APR-util Version: 1.5.3
checking for chosen layout... apr-util
Applying apr-util hints file rules for i686-pc-linux-gnu
checking for APR... yes
  adding "-I/usr/local/pgsql/include" to APRUTIL_PRIV_INCLUDES
  adding "-I/usr/include" to APRUTIL_PRIV_INCLUDES
  setting APRUTIL_EXPORT_LIBS to "-lexpat"
  setting APRUTIL_LIBS to "-lexpat"
checking whether APR has DSO support... yes
  adding "/usr/local/src/httpd-2.2.29/srclib/apr/libapr-1.la" to APRUTIL_LIBS
  adding "-luuid" to APRUTIL_LIBS
  adding "-lrt" to APRUTIL_LIBS
  adding "-lcrypt" to APRUTIL_LIBS
  adding "-lpthread" to APRUTIL_LIBS
  adding "-ldl" to APRUTIL_LIBS
config.status: creating apr-util.pc
config.status: creating include/apr_ldap.h
srclib/apr-util configured properly
  adding "-I/usr/local/src/httpd-2.2.29/srclib/apr/include" to INCLUDES
  adding "-I/usr/local/src/httpd-2.2.29/srclib/apr-util/include" to INCLUDES
  setting EXTRA_INCLUDES to "-I$(top_builddir)/srclib/pcre -I. -I$(top_srcdir)/os/$(OS_DIR) -I$(top_srcdir)/server/mpm/$(MPM_SUBDIR_NAME) -I$(top_srcdir)/modules/http -I$(top_srcdir)/modules/filters -I$(top_srcdir)/modules/proxy -I$(top_srcdir)/include -I$(top_srcdir)/modules/generators -I$(top_srcdir)/modules/mappers -I$(top_srcdir)/modules/database -I/usr/local/src/httpd-2.2.29/srclib/apr/include -I/usr/local/src/httpd-2.2.29/srclib/apr-util/include -I$(top_srcdir)/modules/proxy/../generators -I/usr/kerberos/include -I$(top_srcdir)/modules/ssl -I$(top_srcdir)/modules/dav/main"


まとめると、以下のいずれかの方法で、CentOS 5.x で httpd-2.2.29 のソースからインストールする際のmakeでエラーにならない。

  • configure のオプションに「--with-included-apr」を指定し、バンドルされたAPRを使ってmake
  • CentOS 5.x 標準のAPRのパッケージ(apr-devel, apr-util-devel)を削除する(自動的にバンドルされたAPRを使ってmakeされる)