〜2003年3月上旬〜
442通。bsprocのために残しておこう。
mswin32で試しててたら、やはり /usr/usrになってしまった。 つまり今まではprefixの設定ができなかったので、 DESTDIRで代用していたというのが真相か?
!if !defined(prefix) prefix = /usr !endif !if !defined(DESTDIR) DESTDIR = !endif
と変更するのが筋だと思うけど、これだと
> nmake DESTDIR=c:/ruby install
と実行するとc:/ruby/usrにインストールされてしまう。これからは
> nmake DESTDIR=c:/ruby prefix= install
と実行する必要があるけど、いいよね?あ、それだけじゃだめだ。
> nmake prefix= > nmake DESTDIR=c:/ruby prefix= install
としないといけない。となると受け入れ難いか?
!if !defined(prefix) prefix = !endif !if !defined(DESTDIR) DESTDIR = /usr !endif
と変更すれば今まで通りだけど、なんか変だよね。 おそらく/usrにインストールする人はあまりいないと思うので、
!if !defined(prefix) prefix = !endif !if !defined(DESTDIR) DESTDIR = !endif
と何も設定しないほうがよさそう。 って、じゃあ、この6行はなくてもいいじゃん。
ここで改めてwin32/README.win32を読んでみると
(6) Run `((%nmake DESTDIR=<install_directory> install%))'
と書いてあった。やはりprefix = /usrはだめだな。 何も設定しないのが無難か。
更新。
prefix対応の確認のためbccwin32でも試してみたが、なんか変だ。
!ifndef prefix prefix = /usr !endif all: @echo $(prefix)
というMakefileを作って
% bmake prefix=
と実行するとなぜか1と表示する。この1はどこから来るのだ?
helpを見ると
-Dマクロ 1文字でマクロを定義する。これを行うとメイクファ イルに記述された式!ifdefマクロは真を返す [-D]マクロ=[文字列] 文字列でマクロを定義する。文字列にスペースやタ ブを含める場合は文字列を引用符で囲む。-Dは省略 可能
とあった。つまり文字列を指定しなかった場合は真にするために1にしてるんだろう。 -Dというオプション名からしてCPPと同じ考え方だ。
ext/extmk.rbで無条件にDESTDIR=を追加するのをやめよう。
それはそれとして、もしbcc32/Makefile.subで
!ifndef prefix prefix = /usr !endif
としてしまうとmakeの引数でprefixを空にすることはできないということになる。 といった意味でもなくしたほうがよさそうだ。
上のbmakeは実はshell scriptで
#! /bin/sh case "${0##*/}" in bmake) cmd=make;; *) cmd=${0##*/};; esac PATH=/c/borland/bcc55/bin:$PATH exec $cmd "$@"
としてる。bcc32は
% ls -l bcc32 lrwxrwxrwx 1 watanabe ruby 90 Jan 2 16:41 bcc32 -> bmake
てな感じで。makeの中からしか呼ばないならこのsymlinkは要らないんだけど。
mingw32のほうでmake DESTDIR=c:/fooとしてもだめだということに気づいた。 ext/**/Makefileは
prefix = $(DESTDIR)/usr/local
となっていても、topdirのMakefileは
prefix = /usr/local
なので、prefix対応するとext/**/Makefileでの設定は無効になるから。 preview2に入れるのは見送ろう。単純にtopdirのMakefileのほうも
prefix = $(DESTDIR)/usr/local
にすればいいかどうか、もうちょっと確認が必要だな。
一応今日までの変更を ここに置いておこう。
「実用化のめどは2006年です」と言ってました。
区切りということで、あまり意味はない。 その昔、Nemacsのひなまつりバージョンってのがあったなあ。
いろいろ考えてみたけど、topdirのprefixでDESTDIRを展開して、 その結果を各ext/**/Makefileが使うようになればいいんだよね。 つまりext/extmk.rbではDESTDIRを扱う必要なし。
スタティックにリンクすればuClibcじゃなくても依存しないはず。
更新。
更新。
考えてみると
% make CFLAGS=-O3
とかしたくなるんだから、 CFLAGSは-gと-O関係ぐらいにしといたほうがいいのかもしれない。 そうするとLDFLAGSも同じか?
asm statementに比べれば無駄が多いが、 たぶんコンパイラの挙動にはもう影響は受けないだろうという変更にした。 構造体を引数で渡してるだけなんだけど。
kogさんが二人いるけど、 *Messages*のほうはSHIMADAさんだよね。
RubyでQDBMを使えるように、とりあえずNDBM互換APIで対応してみた。 と言ってもext/dbm/extconf.rbに"qdbm" => ["relic.h"]を追加しただけなんだけど。
bRubyを動かすにはparse.yとeval.cにパッチをあてないといけない。 というわけで、Ruby binariesもパッチをあててからmakeすることにした。
まず最初に作ったのがこんなMakefile。
all: parse.y eval.c eval.c: ../ruby16/eval.c ../eval.c.patch patch -o eval.c ../ruby16/eval.c ../eval.c.patch parse.y: ../ruby16/parse.y ../parse.y.patch patch -o parse.y ../ruby16/parse.y ../parse.y.patch
$<とか$@を使えばコマンド部分は
patch -o $@ $< ../$(<F).patch
と書けそうだ。これとStatic Pattern Ruleを使ってまとめると
all: parse.y eval.c parse.y eval.c: % : ../ruby16/% ../%.patch patch -o $@ $< ../$(<F).patch
となる。
anti-spam toolを買わないかというspamが来た。 その商売に矛盾を感じないのか?
とりあえず各々1.8/を作ってそこに置くことにした。 拡張ライブラリはアルファベット順に作る。 あ、ディレクトリは違うけど同じファイル名になってしまうなあ。 Rubyのバージョンを含めるべきか? うささんのバイナリは-i586-mswin32-1.6.zipという感じか。 じゃ-i386-*-1.8.tar.gzにしよう。
amrita, aspectr, bdbと進めて、 bdb 0.4.0を作る前にBerkeley DBを4.1.25に上げようとしていたことを思い出した。 4.1.24のビルドディレクトリは残っていたので、それを参考に4.1.25を作った。 時間はかかるが作業は簡単。
と思ったらdb_version_4000がundefinedに。これはdb_versionでよさそうだ。
ところどころ抜けはあるが ruby-googleまで完。
foo-1.0-i386-cygwin-1.8.tar.gzという名前だと、 結局fooというパッケージのversion 1.0なので、 setup.exeにとっては変化がない。setup.iniで
@ foo-1.8
にすればいいのかなあ。あとcategoryとして無理矢理Rubyとしたらどうなるんだろう? なんかよさげだ。
rdocがやっとbetaが取れた。
うーむ。/usr/local/mingw/libなってた。まずいなあ。