〜2002年4月中旬〜
折角なのでuClibc 0.9.11でmakeしてみる。
久し振りに更新してみた。これはなんとなく恐いのでglibcのまま。
quoted-printableな記事 だと化ける。
ruby-talk MLもsubscribeしたままだと、 ruby-talk-ja MLは(日本語訳+オリジナル)なので、 サイズ的に3倍に膨れあがる。unsubscribeした。
というわけで別解を考えてみた。
print true ? "Just another Ruby hacker," :-P
Pはどこにも定義されてないんだけど、評価されないからundefinedにはならない。 だから
print true ? "Just another Ruby hacker," :-D
というのもありだ。
久し振りに全部実行してみるとなんか変だ。 1.7だとエラーになるし、1.6.7でもHash#defaultの挙動が前と違っているようだ。
やっぱいつのまにか仕様変更になってる。
% ruby-1.6.6 -ve 'p({}.default=1)' ruby 1.6.6 (2001-12-26) [i386-linux] {} % ruby-1.6.7 -ve 'p({}.default=1)' ruby 1.6.7 (2002-03-01) [i586-linux] 1
Hash#defaultがdefault値を返すんだから、 1.6.6までがバグっていたということだろう。
読み返してみるとruby-talkをunsubscribeしたように読める。 ruby-talkにも投稿してるのでunsubscribeしたのはruby-talk-jaのほう。
独立してたのか。
util-linuxを上げたらlookが見るwordsの場所が/usr/share/dict/wordsに変更になってた。
% sudo ln -s /usr/dict /usr/share
としとこう。
About: CRUX is a lightweight, i686-optimized Linux distribution targeted at experienced Linux users. The primary focus of this distribution is "keep it simple", which is reflected in a simple tar.gz-based package system, BSD-style initscripts, and a relatively small collection of trimmed packages. The secondary focus is utilization of new Linux features and recent tools and libraries.
BSD-styleのinitscriptsってあたりに魅かれるものがある。 でもi686-optimizedじゃきっと動かないよなあ、このマシンじゃ。
info autoconfしていたらObsoleteなマクロの一覧を見つけた。 AC_CANONICAL三兄弟をAC_CANONICAL_SYSTEMにしようと思ってたのに、 obsoleteなのか。AC_CANONICAL_TARGETだけで十分らしい。
こんなリスト を用意してみた。 GNU grepだと-fでパターンをファイルで指定できるので
% grep -w -f autoconf-obsolete configure.in AC_INIT(ruby.h) AC_ERROR(cached CC is different -- throw away $cache_file AC_EXEEXT AC_OBJEXT AC_CHECK_TYPES([long long, off_t]) AC_OUTPUT($FIRSTMAKEFILE Makefile ext/extmk.rb)
という感じで実行できる。あ、AC_INITとかは使い方がobsolete ということで、AC_INIT自体がobsoleteなわけではない。 で、この場合は調べてみると結局obsoleteな使い方だった。 古い意味で使うときは
AC_INIT AC_CONFIG_SRCDIR(UNIQUE-FILE-IN-SOURCE-DIR)
とせよということらしい。今のAC_INITは
AC_INIT(PACKAGE, VERSION, [BUG-REPORT], [TARNAME])
と引数がまるで違う。 ま、たぶん今までのなんだかわけのわからんファイルを指定するというのが、 そもそも間違っていたと思うので十分納得できる変更だ。 AC_ERRORはAC_MSG_ERRORに変更。 AC_EXEEXT, AC_OBJEXTはなくても自動的にEXEEXTとOBJEXTは設定される。 AC_CHECK_TYPEはなんか説明が長くてよくわからない。 AC_OUTPUTには引数がなくなった。
AC_CONFIG_FILES(FILE...) AC_CONFIG_COMMANDS([default], EXTRA-CMDS, INIT-CMDS) AC_OUTPUT
とせよということらしい。つまり
AC_CONFIG_FILES([$FIRSTMAKEFILE Makefile ext/extmk.rb]) AC_OUTPUT
という感じか?
AC_CHECK_TYPEは後で詳しく調べよう。
更新。
うーむ。
test/interop/clientSOAP::Lite.rb test/interopR2/clientSOAP::Lite.rb sample/RAA/SOAP::Lite.pl
というファイル名はWindowsじゃやばいっす。 ま、大して影響はないが、::を__へrenameしてパッケージング。
というわけで全部揃った。 そういえばsetup.iniに依存関係も書けるんだったよなあ。 これも調べておかないと。
プレイステーション・ドットコム・ジャパンからメール。 「商品出荷のお知らせ」とあるが、中身には肝心の何を出荷したかが書かれてない。 注文番号は書いてある。
ご注文商品はホームページ上の(http://www.jp.playstation.com/) 「ログイン/ご購入履歴」よりご確認ください。
わからん。なんでそんな変なシステムになってるの? 商品名を明記するのがそんなに大変なことなのか?
いや見に行かなくてもPS2Linuxしか注文してないから、これ以外考えられないのだが。
ccache i686-pc-cygwin-gccだとdllwrapでまずい。 いいかげんgcc -sharedにすべきか?
とりあえずconfig.statusのLDSHAREDなどを書き換えて試す。
s,@LDSHARED@,ccache i686-pc-cygwin-gcc -shared -s,;t t s,@LIBRUBY_LDSHARED@,ccache i686-pc-cygwin-gcc -shared -s,;t t s,@LIBRUBY_DLDFLAGS@,--out-implib=$(LIBRUBY) $(RUBYDEF),;t t
これでいけそうかなと思ったら、tcltklibでこけた。
Warning: .drectve `%.*s' unrecognized Warning: .drectve `%.*s' unrecognized Warning: .drectve `%.*s' unrecognized Warning: .drectve `%.*s' unrecognized Cannot export ??_C@_03KBFG@Tcl?$AA@: symbol not found Cannot export ??_C@_0DM@EBFE@This?5interpreter?5does?5not?5suppor@: \ symbol not found
VC++用のlibraryをそのまま使っているが、ここにきて破綻したようだ。 あ、--def=tcltklib.defが無効で、-Wl,--export-all-symbolになってるからか。 extmk.rbから--def=を外そう。warningは残るが、これで一応最後まで通った。
libtclstub.aとlibtkstub.aは自前で作ってみるか。
むぅ。今月はもう100通を越えた。
なひさんには内緒で 作ってたりする 。いや内緒でもなんでもないんだが。
commitした。
AC_INIT(ruby, 1.7.2)
としたけど、もう1個こんなものを増やしちゃけないよね。 と思って最初は適当に
AC_INIT(ruby, 0.0)
としてみたんだが、どうすべきか?--helpすると最初に
`configure' configures ruby 1.7.2 to adapt to many kinds of systems.
と表示されるようになるのでとりあえず1.7.2を入れてみた。
w32apiの<mswsock.h>と<winsock2.h>の変更の影響でエラーになっていた。 しかたないので<mswsock.h>を明示的にinclude。
<winsock2.h>でsockaddr_storageが定義されるようになった。 ext/socket/extconf.rbでのチェックで _WIN32のときは<windows.h>と<mswsock.h>をincludeするように変更。
<windows.h>をincludeすると<winsock2.h>もincludeされちゃう w32apiが余計なお世話的な気もするが。
os_list.txtにPlamoは流石にない。自分で付け加えてみた。
--- os_list.txt.orig 2002-04-15 15:33:04.000000000 +0900 +++ os_list.txt 2002-04-17 18:14:42.000000000 +0900 @@ -167 +167,2 @@ Cygwin 1.3 cygwin 1.3 +Plamo 2.2 slackware-linux 2.2
slackwareに近いと思うのでslackware-linuxでいいかな。
来た。でもベータ版ですでに満足してしまっているので、熱が冷めた感がある。 解説書と書いてある小冊子を見てもkernelは2.4.1だし、他もほとんど変わりなし。 とりえあずインストールする必要なしと判断。
そもそもversion.hの中にも
#define RUBY_VERSION "1.7.2" #define RUBY_RELEASE_DATE "2002-04-19" #define RUBY_VERSION_CODE 172 #define RUBY_RELEASE_CODE 20020419
と同じものがある。 ANSI C必須になってるわけだし、これってなんとかなりそうな気もする。
AC_INITのほうは--helpや--versionすると表示される。 autoconf 2.53ならconfig.hにも
#define PACKAGE_NAME "ruby" #define PACKAGE_TARNAME "ruby" #define PACKAGE_VERSION "1.7.2" #define PACKAGE_STRING "ruby 1.7.2"
と入る。で、--versionのほうはなぜかconfigureに直に書かれてしまうんだよね。 PACKAGE_VERSIONとかを参照してればversion.hから抜き出して加工できるのに。 とりあえずはPACKAGE_*は使わないからどうでもいいかもしれないけど。
更新。
コマ送りして見ると3種類ぐらいのテクニックが使われているのがわかった。 2枚目に置くのはコマ送りしなくてもわかるけど、 ちょっと折り目を入れたときのテクニックは本当にすごい。 一瞬で上半分と下半分のカードを入れ換えてる。