Gauche-dbd-mysql5 のエラー

このつぶやきがちょっと面白そうだったので深追いしてみました。

このせいだったのかな…

$ file /opt/local/lib/gauche/0.8.13/i686-apple-darwin10.0.0/libgauche.dylib
/opt/local/lib/gauche/0.8.13/i686-apple-darwin10.0.0/libgauche.dylib: Mach-O dynamically linked shared library i386

そして gauche +universal はビルドエラーっと。時間ないから帰ってきてから再トライする。

$ sudo port install gauche +universal
--->  Computing dependencies for gauche
--->  Fetching gauche
--->  Verifying checksum(s) for gauche
--->  Extracting gauche
--->  Applying patches to gauche
--->  Configuring gauche
--->  Building gauche
Error: Target org.macports.build returned: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_gauche/work/Gauche-0.8.13" && /usr/bin/make -j2 all " returned error 2
Command output: vport.c:522: warning: assignment makes pointer from integer without a cast
vport.c: In function 'bport_flush':
vport.c:541: warning: assignment makes pointer from integer without a cast
In file included from ../../src/gauche.h:57,
                 from vport.c:36:
../../src/gauche/float.h:96: error: width of 'mant' exceeds its type
vport.c:39:28: error: gauche/uvector.h: No such file or directory
vport.c: In function 'bport_fill':
vport.c:521: warning: implicit declaration of function 'Scm_MakeU8VectorFromArrayShared'
vport.c:522: warning: assignment makes pointer from integer without a cast
vport.c: In function 'bport_flush':
vport.c:541: warning: assignment makes pointer from integer without a cast
lipo: can't figure out the architecture type of: /var/tmp//cctAqdp4.out
make[2]: *** [vport.o] Error 1
../../src/gauche-config --fixup-extension text-gettext
make[2]: ../../src/gauche-config: No such file or directory
../../src/gosh -ftest ../../src/gencomp --ext-module text/gettext.scm ./text-gettext-lib.scm
make[2]: ../../src/gosh: No such file or directory
make[2]: *** [text-gettext_head.c] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [text-gettext-lib.c] Error 1
make[1]: *** [all] Error 2
../src/gosh -q -I../src -I../lib -lgauche-init ./extract -en -o gauche-refe.texi gauche-ref.texi
make[1]: ../src/gosh: No such file or directory
../src/gosh -q -I../src -I../lib -lgauche-init ./extract -jp -o gauche-refj.texi gauche-ref.texi
make[1]: ../src/gosh: No such file or directory
make[1]: *** [gauche-refe.texi] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: *** [gauche-refj.texi] Error 1
make: *** [all] Error 2

Error: Status 1 encountered during processing.

こういうことらしい。

これ読んで分かった。

問題は次のように整理された。

  1. macport で gauche をインストールするときに build_arch=i386 を付けている
    • gauche-0.8.13 では x86_64 のビルドができないから
    • このメールに添付のパッチ当てないといかん
    • svn trunk には取り込まれているらしい
  2. gauche-dbd-mysql5 の野良ポートがインストールできてしまう
    • アーキテクチャのチェックしていないから
    • gauche-package 経由で gcc が呼ばれて、結果的に ldflag なしでリンクされてる
    • できる so は mach-o bundle x86_64 になってしまう
  3. gauche の実行バイナリは i386 だから x86_64 のイメージは読めない

ということで、対処するとしたら macport で gauche x86_64 がインストールできるようにするのが一番いいですね。
と思って Portfile 書こうとしてるけど途中。

結局こうなればいいと思うのです。

$ file dbd_mysql.so
dbd_mysql.so: Mach-O universal binary with 2 architectures
dbd_mysql.so (for architecture x86_64): Mach-O 64-bit bundle x86_64
dbd_mysql.so (for architecture i386):   Mach-O bundle i386