64bit linux で Subversion が コンパイルできなくて死亡

Subversion のビルドに苦戦してます… orz

終結

apr-util.i386 は入っているも、apr-util.x86_64 が入っていなかった…というアホな事してました。うわん! 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/pkgconfigapr-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 が開けないと死ぬわけです。 $fileget_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 にコピー。 そして、コピーしたモノを開いて、 /liblib64 に変更。

そして再度 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 されているだろうと思い、ファイルを開いてみようとすると…………ファイルがない。

……ここで気づくわけです。


  • lib64/pkgconfig に apr-1.pc が無かった。
  • apr-x86_64.h が無かった。


apr の 64bit版が入ってないだけじゃ無ぇの!?


というわけで、yum install apr-devel.x86_64 してみたところ、見事に conifugre が通るようになりましたとさ。

apr-util-devel を i386 / x86_64 両方インストールして満足してたよ… orz