subversion で遊ぼうと思いながら、端末環境の MacOSX でコンパイルできずに棚上げになっていたのを少々調査。
MacOSX では fink に任せて build させようとしているんだが、これがうまくいかない。何故か apache2 の install でコケてしまう。ログをよく見ると mod_access.so をインストール先にコピーしようとしたところで、その .so が何故かない。
ってんで、 |& tee hoge しながら build させてみる。
ログで mod_access を compile している当たりで何かヒントがないかと見てみると、
lding shared: mod_access.la mod_auth.la mod_auth_anon.la mod_auth_dbm.la mod_aut h_digest.la /bin/sh /sw/share/apr-0/build/libtool --silent --mode=compile gcc -g -O2 -DD ARWIN -DSIGPROCMASK_SETS_THREAD_MASK -DAP_HAVE_DESIGNATED_INITIALIZER -I/sw/incl ude -I/sw/include/apr-0 -I/sw/include -I. -I/sw/src/apache2-2.0.47-5/httpd-2.0. 47/os/unix -I/sw/src/apache2-2.0.47-5/httpd-2.0.47/server/mpm/worker -I/sw/src/a pache2-2.0.47-5/httpd-2.0.47/modules/http -I/sw/src/apache2-2.0.47-5/httpd-2.0.4 7/modules/filters -I/sw/src/apache2-2.0.47-5/httpd-2.0.47/modules/proxy -I/sw/sr c/apache2-2.0.47-5/httpd-2.0.47/include -I/sw/src/apache2-2.0.47-5/httpd-2.0.47/ modules/dav/main -prefer-pic -c mod_access.c && touch mod_access.slo /bin/sh /sw/share/apr-0/build/libtool --silent --mode=link gcc -g -O2 -DDARW IN -DSIGPROCMASK_SETS_THREAD_MASK -DAP_HAVE_DESIGNATED_INITIALIZER -I/sw/include -I/sw/include/apr-0 -I/sw/include -I. -I/sw/src/apache2-2.0.47-5/httpd-2.0.47/ os/unix -I/sw/src/apache2-2.0.47-5/httpd-2.0.47/server/mpm/worker -I/sw/src/apac he2-2.0.47-5/httpd-2.0.47/modules/http -I/sw/src/apache2-2.0.47-5/httpd-2.0.47/m odules/filters -I/sw/src/apache2-2.0.47-5/httpd-2.0.47/modules/proxy -I/sw/src/a pache2-2.0.47-5/httpd-2.0.47/include -I/sw/src/apache2-2.0.47-5/httpd-2.0.47/mod ules/dav/main -export-dynamic -L/sw/lib -o mod_access.la -rpath /sw/lib/apa che2/modules -module -avoid-version mod_access.lo /sw/share/apr-0/build/libtool: Mach-O dynamically linked shared library: command not found
思いっきりうさん臭い部分があるじゃん(^^;;;。 どう見ても libtool の中で存在しないコマンドを叩こうとしたってことだろう。この libtool も fink が compile して作ったはずなのに、まさか俺しか引っかかってないんだろうか?ともあれ、 libtool の中でこの文字列を探すと
# Method to check whether dependent libraries are shared objects. deplibs_check_method="file_magic Mach-O dynamically linked shared library" # Command to use when deplibs_check_method == file_magic. file_magic_cmd="/usr/bin/file -L"
こんな感じでばっちり埋まってる。問題は、こいつがどう参照されるかで、 sh の -x option 使って、ログからコケてた時のコマンドを実行してベタに出力させてみる。
+ deplibs_check_method=file_magic Mach-O dynamically linked shared library + file_magic_cmd=/usr/bin/file -L
値を突っ込んでるところはこのとおりちゃんと見えてる。
+ eval /usr/bin/file -L '"$potlib"' + /usr/bin/sed 10q + 'Mach-O dynamically linked shared library' /sw/share/apr-0/build/libtool: Mach-O dynamically linked shared library: command not found
コケた所はこんな感じ。問題は、この部分が script 中でどこに埋まっているかだが、
+ set dummy file_magic Mach-O dynamically linked shared library ++ expr 'file_magic Mach-O dynamically linked shared library' : 'file_magic \(.* \)' + file_magic_regex=Mach-O dynamically linked shared library
ログのちょっと前にこんな部分があって、こっちは割と簡単に
file_magic*) set dummy $deplibs_check_method file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
と発見できる。この後ろを見てゆくと…
if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then
sed を実行している部分が指紋になってくれて、コケた原因がばっちり判る。 そうっ、 $EGREP が未定義なのだッ
(o_ _)oイイノカヨソレデ…
しかし、この libtool には、他にも
/sw/share/apr-0/build/libtool: test: : integer expression expected
が山ほど出てくるんだよね…………
[referer: [an error occurred while processing this directive]]