64bit linux で Subversion が コンパイルできなくて死亡
Subversion のビルドに苦戦してます… orz
apxs が機嫌悪いよ編
問題点と結論
checking for Apache module support via DSO through APXS... cannot open /httpd/bu ild/config_vars.mk: No such file or directory at /usr/sbin/apxs line 201. configure: error: no - APXS refers to an old version of Apache Unable to locate /mod_dav.h
と configure で怒られてしまった…
結論としては /usr/lib64/pkgconfig に apr-1 な設定ファイルが存在しないため、設定が読めずで死んでしまっていました。
よって、/usr/lib/pkgconfig/apr-1.pc を /usr/lib64/pkgconfig/apr-1.pc にコピー。 そして、コピーしたモノを開いて、ライブラリパスで /lib な箇所をlib64 に変更すればOKでした。(が別の問題が発生しました orz)
調査
そりゃ /httpd なディレクトリなんて存在しない以上怒られる…ってか、相対パスっぽいのの作成に失敗している臭い…(苦笑
とりあえず apxs:201 近辺を見るとこうなっています。
sub get_config_vars{ my ($file, $rh_config) = @_; open IN, $file or die "cannot open $file: $!"; while (<IN>){ if (/^\s*(.*?)\s*=\s*(.*)$/){ $rh_config->{$1} = $2; } } close IN; }
$file が開けないと死ぬわけです。 $file は get_config_vars の第一引数で指定されます。 というわけで、呼び出し元がおかしいと。
で、呼び出し元を見ると…
my $libdir = `pkg-config --variable=libdir apr-1`; chomp $libdir; my $installbuilddir = $libdir . "/httpd/build"; get_config_vars("$installbuilddir/config_vars.mk",\%config_vars);
ふむ。 $libdir が空っぽらしい。 pkg-config --variable=libdir apr-1 って何だよと実行してみると、案の定結果が空っぽ……
うーむ? つまり、パッケージのインストールがなんか変…?
とりあえず、pkg-config について調べてみたところ、次の情報を得ることが出来ました。
pkg-configは、ライブラリのインストール時に作られるpkg-config用のメタデータファイル(*.pc)を使って求められた情報を出力している。このファイルはpkgconfig用のディレクトリ(例えば/usr/lib/pkgconfig)に保存されている。
http://d.hatena.ne.jp/ultraist/20070624/pkgconfig
……なんか嫌な予感。 lib/pkgconfig に設定ファイルは存在するけど、lib64/pkgconfig に設定ファイルが無いだけじゃ無ぇの!? と。 確認します。
# ls /usr/lib/pkgconfig apr-1.pc libcrypto.pc libxml-2.0.pc openssl.pc apr-util-1.pc libcurl.pc libxul-embedding.pc valgrind.pc dbus-1.pc libpcsclite.pc libxul.pc vorbis.pc devmapper-event.pc libssl.pc mozilla-js.pc vorbisenc.pc devmapper.pc libusb.pc mozilla-plugin.pc vorbisfile.pc libckyapplet.pc libuser.pc ogg.pc xmlsec1.pc # ls /usr/lib64/pkgconfig apr-util-1.pc gthread-2.0.pc mozilla-js.pc blkid.pc libckyapplet.pc mozilla-plugin.pc com_err.pc libcrypto.pc nspr.pc dbus-1.pc libcurl.pc nss.pc devmapper-event.pc libexslt.pc ogg.pc devmapper.pc libidn.pc openssl.pc e2p.pc libnfsidmap.pc shared-mime-info.pc ext2fs.pc libpcsclite.pc sqlite3.pc fontutil.pc librpcsecgss.pc ss.pc glib-2.0.pc libssl.pc uuid.pc gmodule-2.0.pc libusb.pc valgrind.pc gmodule-export-2.0.pc libuser.pc vorbis.pc gmodule-no-export-2.0.pc libxml-2.0.pc vorbisenc.pc gnome-mime-data-2.0.pc libxslt.pc vorbisfile.pc gnome-python-2.0.pc libxul-embedding.pc xmlsec1.pc gobject-2.0.pc libxul.pc
うん! lib64 には apr-1.pc ってのが無いッ!
というわけで、/usr/lib/pkgconfig/apr-1.pc を /usr/lib64/pkgconfig/apr-1.pc にコピー。 そして、コピーしたモノを開いて、 /lib を lib64 に変更。
そして再度 configure をすると…通った……!!! とおもったら、別の問題が! orz
Python/C 連携がなんかおかしいよ編
checking for apr_int64_t Python/C API format string... configure: error: failed to recognize APR_INT64_T_FMT on this platform
なんて怒られました…。 そして困ったことに、コレについての情報は Web を探してもものすごい少数しかヒットしないこと。 …うーん、おいらの環境がおかしいのかコレは…(苦笑 orz
調査
configure の上記エラーメッセージが出ている近辺をさぐると、<apr.h> を include して APR_INT64_T_FMT のテストをしていました……って、また apr かよ。
とりあえず、apr.h を覗くと次のように書かれていました。
#if defined(__i386__) #include "apr-i386.h" #elif defined(__ia64__) #include "apr-ia64.h" #elif defined(__powerpc64__) #include "apr-ppc64.h" #elif defined(__powerpc__) #include "apr-ppc.h" #elif defined(__s390x__) #include "apr-s390x.h" #elif defined(__s390__) #include "apr-s390.h" #elif defined(__x86_64__) #include "apr-x86_64.h" #else #error "This apr-devel package does not work your architecture?" #endif
そして apr-x86_64.h が更に include されているだろうと思い、ファイルを開いてみようとすると…………ファイルがない。
……ここで気づくわけです。
apr の 64bit版が入ってないだけじゃ無ぇの!?
というわけで、yum install apr-devel.x86_64 してみたところ、見事に conifugre が通るようになりましたとさ。