〜2002年4月上旬〜
Ruby 1.7をi686-pc-cygwinでmakeすると
socket.o(.text+0x23c9):socket.c: undefined reference to `sendmsg' socket.o(.text+0x24f0):socket.c: undefined reference to `recvmsg'
となる。nativeのcygwinではいけてるので、 クロスの環境が古くなってしまったようだ。 そろそろ、新しくしないと。
ext/socket/extconf.rbを見ると、 headerを見てmemberがあるかどうかのcheckしかしてないので、 こういう手抜きheaderがあるとお手上げだ。
と書いてたら早速 指摘 された。 しかたなくwinsup/cygwin/ChangeLogを覗く。書いてあった。 その結果が これ だ。
というわけでクロスの環境を新しくした。
% tar xfv cygwin-1.3.10-1-src.tar.bz2 --us=bzip2 % patch -p0 </some/where/cygwin-1.3.5-3.diff
このパッチ は以前作ったもの。ちょっとoffsetはあるけどあたる。
% cd cygwin-1.3.10-1/winsup % rmdir mingw % tar xfvz ../../mingw-runtime-1.2-1-src.tar.gz % ln -s mingw-runtime-1.2-1 mingw % rmdir w32api % tar xfv ../../w32api-1.2-2-src.tar.bz2 --us=bzip2 % ln -s w32api-1.2-1 w32api
mingwとw32apiは同梱されなくなった。cinstallもない。
% cd .. % mkdir build; cd build % CFLAGS=-Os CXXFLAGS=-Os \ ../configure \ --target=i686-pc-cygwin \ --prefix=/usr/local/cygwin % make -e tooldir=/usr/local/cygwin % make -e tooldir=/usr/local/cygwin install
あ、再放送してる。今日からか?
125通。ってどんどん増えてるよ。
韓国からのspamによく
[韻壱]
てのがSubjectについてるけど、これは広告という意味らしい。 去年の夏にこれをつければよしとかいう法律を作って、それを日本が真似たわけだ。 全くもって困ったもんだ。
相変わらずメールの配送が遅れてるようだが、 どうも23時から1時ぐらいが一番遅れるようだ。 未だにテレホタイムが関係してるのか?って情けないぞ。
100バイトあたりに境界があるようだ。
% tar tfz testunit-0.1.4-1.tar.gz | \ awk '{print length($0),$0}' | \ sort -n |tail -5 94 usr/local/doc/ruby/testunit-0.1.4/doc/classes/Test/Unit/UI/TestRunnerMediator.src/M000039.html 94 usr/local/doc/ruby/testunit-0.1.4/doc/classes/Test/Unit/UI/TestRunnerMediator.src/M000040.html 94 usr/local/doc/ruby/testunit-0.1.4/doc/classes/Test/Unit/UI/TestRunnerMediator.src/M000041.html 95 usr/local/doc/ruby/testunit-0.1.4/doc/classes/Test/Unit/UI/TestRunnerUtilities.src/M000030.html 103 usr/local/doc/ruby/testunit-0.1.4/doc/classes/Test/Unit/UI/Fox/TestRunner/from-@fault_detail_label.html
てゆか、100バイトを越えるファイル名が使えるのはGNU tarの拡張だっけ?
更新。
Tokyo.pm MLで開発版Perlのソースは
% rsync -avz rsync://ftp.linux.activestate.com/perl-current/ .
とすれば取ってこれることを知る。なるほど。 でもrsync serverか。会社は壁の中だしどうすればいい? http proxy rysncをキーでgoogleしてみると このパッチ が見つかった。さっそくあててみるかとsocket.cを見るとCONNECTの文字が。 くー、すでに対応済みか。てゆか、まずman rsyncしろよ。
% RSYNC_PROXY=proxy:port rsync -avz rsync://ftp.linux.activestate.com/perl-current/ .
で解決だ。こりゃいいや。
freshmeatで知る。更新。
更新。zlib/README.rsyncを読んで、-lzはやめた。
Specific changes that have been made to zlib for rsync include: - add Z_INSERT_ONLY to allow for efficient history updating without actually emitting any data. This is used to compress the matched blocks that don't cross the wire, which gives better compression ratios on the literal data. - fixed a number of minor compilation issues. (redefinition of MAX and other such trivial things) - include rsync.h to ensure that we get a consistent set of includes for all C code in rsync and to take advantage of autoconf As a result of the first item, the streams from rsync's version of zlib are *not compatible* with those produced by the upstream version of rsync. In other words, if you link rsync against your system's copy, it will not be able to interoperate with any other version if the -z option is used. (Sorry. Sometimes standard is better than better.)
The latest release is ccache 1.4. This release adds: ・ 2 level cache hierarchy ・ added CCACHE_NOLINK environment variable ・ nicer statistics formatting ・ slight change to the hash function to raise cache hit rate
ということらしい。
最近流行っているのか、2日連続で来た。あ、両方共skk MLだな。
あ、これだとblock_given?という変数があったら困るなと思ったら、 ?は変数には使えなくなって随分経つんだということに気づいた。
?がつかない場合は、やっぱrespond_to?を使って、
Object.respond_to? :foo
のほうが無難か。
Kernel.private_methods.include? "foo"
はちょっと効率が悪そう。
この人はどうもWindowsでも完璧に動かないと気がすまないようだ。 これ とか以前もpipeが動かないと騒いでた。
更新。
どれをダウンロードするのかちょっと迷った。 httpd-2.0.35.tar.gzなんだね。ってなぜそんなありふれた名前に? 確かに実行ファイルは歴史的な理由によりずーっとhttpdだったが。 defaultは/usr/local/apache2へインストールされるので、 1.3も残しておける。
更新。
気づいてなかったけど、CC='ccache gcc'でいいらしい。
You can either prefix your compile commands with "ccache" or you can create a symbolic link between ccache and the names of your compilers.
の前半部分を完璧に無視していた。 symlinkを置いている~/ccacheへはふだんPATHを通してないので、それでもいいな。
そうか。method_defined?を使えばいいんだ。
jcodeがStringのtr!とかを置き換えてしまうのはいやだという話はよく聞く。 この際動的に切り替えられる仕組みを考えてみよう。
まずdefだけしてるtr!とかもalias original_tr! tr!として残しておく。 さらにdef tr!ではなくdef jtr!と全部jをprefixをつけて、 alias tr! jtr!としておく。あとは
String.class_eval do alias_method :tr!, :original_tr! end
で元に戻し
String.class_eval do alias_method :tr!, :jtr! end
でjcodeを活かすString::jcodeというクラスメソッドを用意し切り替えられるようにする。 つまり
require 'jcode'
だと今までのjcodeで、さらに
String::jcode = false
とすると、tr!(orignal_tr!)とjtr!が使えるようになるというわけ。
def self.jcode=(mode) @@jcode = mode ? true : false prefix = {true=>'j', false=>'original_'}[@@jcode] class_eval do %w(tr delete squeeze tr_s chop).each do |method| alias_method method+'!', prefix+method+'!' alias_method method, prefix+method end end end def self.jcode @@jcode end self.jcode = true
てな感じ。そいうえばjlengthだけ日和ったのはなぜだっけかなあ。
def内でaliasするにはevalを使う方法もあるけど、 文字列を渡さなきゃいけないので面倒。 そういえばevalはなぜブロックを受けつけないんだろう?
あれ?1.2.6はすっかり忘れていたようだ。先月出てたのか。
Plamo 2.2.5にしようかなと思い見に行ってみると
kernel-2.2.19 + glibc-2.2.2 + XFree86 3.3.6
という構成だった。これではバージョンダウンになってしまう。
alias_methodはModuleクラスのメソッドなのでclass_evalは要らない。 あとsuccも追加して、privateは外そう。
def self::jcode=(mode) @@jcode = mode ? true : false prefix = {true=>'j', false=>'original_'}[@@jcode] %w(succ tr delete squeeze tr_s chop).each do |method| alias_method method+'!', prefix+method+'!' alias_method method, prefix+method end end def self::jcode @@jcode end self::jcode = true
思い出した。jlengthは後から俺が追加したからだ。やっぱ置き換えるか。
CVSでもいいけどrsyncでも同期可能。 parrot には
rsync -av --delete cvs.perl.org::parrot-HEAD parrot
と書かれてる。この::は
rsync -av --delete rsync://cvs.perl.org/parrot-HEAD parrot
と同じ意味。
makeは
% perl Configure.pl % make
という感じ。Configure自体はPerlで書かれてるせいか速い。
% perl Configure.pl --defaults
とすればすべてdefaultで処理する。 最適化オプションは何もつかない。
ふと気づとくと
http%3a%2f%2fwww.ruby-lang.org%2f%7eeban%2fruby%2fbinaries%2fcygwin
という長い名前のディレクトリができてる。 なるほど。new setup.exeは複数のミラーサイトを指定できるからね。
jcode.rbの最初と最後には謎の
$vsave, $VERBOSE = $VERBOSE, false $VERBOSE = $vsave
があるけど、これは
warning: method redefined; discarding old foo
というwarningを避けるためにある。 aliasで全部originalを残すようにすればこのwarningは消えるので小細工も必要なくなる。
今日の分を見終わって停止を押したら、 「天国への階段」で23年後の古尾谷雅人が出てきてびっくり。 あ、探偵物語の頃は「古老屋」雅人だったのか。 というか原田美枝子の美少女振りもびっくりだ。
更新。
The latest release is ccache 1.6. This release adds: ・ avoid 2nd call to cpp on cache miss ・ added CCACHE_CPP2 option ・ added explicit handling of /dev/null as an output ・ added multiple source files statistic ・ minor documentation updates
cache missしたときに2回cppを起動しないようになったようだ。
更新。bugfixらしい。
XMLで記述してPDFに変換するプレゼンテーションツール。 Perlで書かれている。 SVGをサポートしてるので円とか線とかも書ける。 サンプルを見て驚いたんだけど、Acrobat Readerってfull screen modeがあるんだね。 日本語が使えないのが残念。
makeの例のメッセージ「入ります」「出ます」をさまぁ〜ず三村調に
% LC_ALL=ja_JP.eucJP make make -C tmp make[1]: 入るのかよ! ディレクトリ `/home/watanabe/0204/tmp' make[1]: `all' に対して行うべき事はありません。 make[1]: 出るのかよ! ディレクトリ `/home/watanabe/0204/tmp'
としてみるのはどうだろう? というかやってみたんだが、rubyのmakeが小うるさいどころかかなりうるさい。 流石三村だ。