socket-test のために MirOS BSD をインストールしてみたのだが、ついでに ruby も動かしてみたところ、以下の対応が必要であった。
% uname -mrsv MirBSD 10 GENERIC#1382 i386
gcc コマンドがない。また、mgcc が note: someone does not honour COPTS correctly, passed 0 times というメッセージを stderr に吐く。
メッセージを除去するラッパーを ~/bin/gcc に作る。少なくとも config.h にちゃんと PRI_LL_PREFIX を定義させるために必要になる。stderr にメッセージが出ると、configure で ll の検出に失敗する。
miros% cat ~/bin/gcc #!/bin/sh fifo=/tmp/gccw.$$ mkfifo $fifo sed '/note: someone does not honour COPTS correctly, passed 0 times/d' >&2 < $fifo & mgcc "$@" 2> $fifo status="$?" wait rm $fifo exit $status
AUTOCONF_VERSION を設定しておかないと、autoconf がエラーになる。
export AUTOCONF_VERSION=2.61 とする。
autoconf-2.62 も入っているが、AUTOCONF_VERSION=2.62 とすると、SIZEOF_VOIDP のかわりに SIZEOF_VOID_ になってしまって変。
process.c で _SC_GETGR_R_SIZE_MAX が定義されていない
process.c に #undef HAVE_GETGRNAM_R を追加。
./miniruby -v で [FATAL] failed to allocate memory
posix_memalign(memptr, 16384, 16384) は EINVAL になってしまう。
gc.c に #undef HAVE_POSIX_MEMALIGN を追加
ld: unrecognised emulation mode: arch=i486 となってしまう。
configure.in の ARCH_FLAG="-march=i486" を : #ARCH_FLAG="-march=i486" というようにコメントアウト。
ld: -f may not be used without -shared となってしまう。
configure.in の LDSHARED の定義する分岐条件で、[openbsd*] を [openbsd*|mirbsd*] にする。
gdbm と libffi のパッケージは入れてあるのに、ext/gdbm と ext/fiddle が作られない。
configure に --with-opt-dir=/usr/mpkg を追加。結局、
./configure --prefix=/home/akr/ruby/o0 --with-opt-dir=/usr/mpkg CPPFLAGS=-DRUBY_DEBUG_ENV optflags=-O0 debugflags=-g3 warnflags='-W -Wall'
となる。
さて、どっちを直すべきか明らかなのもあるが、そうでないのもあるな。
posix_memalign はリポジトリでは治っているようだ。 <URL:https://www.mirbsd.org/cvs.cgi/src/lib/libc/stdlib/malloc.c.diff?r1=1.8;r2=1.9>
MirOS BSD の話で、ruby 側で対処してもいいかな、と思えるものは対処して、~/bin/gcc を作れば、trunk は以下で build できるところまでは持っていった。
./configure --prefix=dir \ --with-opt-dir=/usr/mpkg \ CPPFLAGS=-DRUBY_DEBUG_ENV \ optflags=-O0 \ debugflags=-g3 \ warnflags='-W -Wall' \ ac_cv_func_posix_memalign=no
追記: ac_cv_func_posix_memalign=no も指定しなくてもいいようにした。
[latest]