history

青木日記 RSS

<前の日 | この月 | 次の日>

2004-12-10

NetBSD 2.0

http://www.netbsd.org/Releases/formal-2.0/NetBSD-2.0.html

NetBSD がメジャーバージョンアップ。 この機会に AlphaStation 500 に NetBSD を入れ直そうかな。

とか言って、いつ作業するつもりなんですかねこの人。

(19:06)

パスにスペース問題

TMail のバグレポートをもらった。 なかなか要領を得ないレポートだったが、 ようするに「Ruby のインストール先パスにスペースが入ってるので nmake が動かなくてインストールできないよ問題」らしい。

なんつーんですかね、シンクロニシティ? 同じ問題は集中して起きる法則? あるいは、同じ問題が同時に起きると印象に残るのでそういう事例ばかりが強調される法則? 統計的に言えば類似の問題はある程度集中するのが自然ですよの法則?

そんなメタな話は置いとくとして、 やっぱりこれは根本的に解決しないとまずいような気がする。 かと言って根本的な解決策なんてあまり思いつかない。

  • 拡張ライブラリは作らないように気をつける
  • Rubyはスペースの入ってないパスにインストールする
  • 拡張ライブラリ専用 make を Ruby で書く
  • make に頼らず setup.rb でコンパイルする

うーむ……。 根本的にはビルド機構 (make とシェルツール) を Ruby で書くのがベストかなあ。Windows を考慮に入れれば シェルとか make に可搬性がないのは明らかだ。 その一方、Ruby の拡張ライブラリを入れるからには Ruby が使えると仮定するのは自然である。 setup.rb もそういう前提のもとに作られている。 その setup.rb が仮定から外れた make という存在に関わるのはおかしい。

つまり extconf.rb は捨てて…… いや捨てなくてもいいな、create_makefile を置き換えれば十分だ。 make / Makefile を経由せずに直接情報をとりこみ、 自力でコンパイラその他を起動すればよい。

そういえば rake なんてのもあったなあ。 ruby-talk では setup.rb を rake に組み込めるようにしてくれって言われたけど、 上記の道筋では逆に、setup.rb に rake を組み込むほうがよいのかもしれん。

いや、そこまでいかなくてもいいかもしれないな。 どうせ setup.rb はインストールでは make を使ってないんだから、 あとはコンパイルだけ通せば十分じゃないだろうか。

さらに言えば困るのは Windows だけなんだから、 mswin32 なコンパイル環境だけごまかせれば十分だ。 これならなんとかなるかもしれないな。

(20:33)

optparse めも

CVS コマンドみたいなサブコマンドを OptionParser で実装する

~ % cat t
require 'optparse'
 
parser = OptionParser.new
parser.on('-i') { puts "-i" }
parser.on('-o') { puts '-o' }
 
subparsers = Hash.new {|h,k|
  $stderr.puts "no such subcommand: #{k}"
  exit 1
}
subparsers['add'] = OptionParser.new.on('-i') { puts "add -i" }
subparsers['del'] = OptionParser.new.on('-i') { puts "del -i" }
subparsers['list'] = OptionParser.new.on('-i') { puts "list -i" }
 
parser.order!(ARGV)
subparsers[ARGV.shift].parse!(ARGV) unless ARGV.empty?
 
~ % ruby t
~ % ruby t -i
-i
~ % ruby t -i del -i
-i
del -i
~ % ruby t -o del -i
-o
del -i
~ % ruby t -i del -o
-i
/usr/lib/ruby/1.9/optparse.rb:1445:in `complete': invalid option: -o (OptionParser::InvalidOption)
        from /usr/lib/ruby/1.9/optparse.rb:1443:in `catch'
        from /usr/lib/ruby/1.9/optparse.rb:1443:in `complete'
        from /usr/lib/ruby/1.9/optparse.rb:1304:in `order!'
        from /usr/lib/ruby/1.9/optparse.rb:1273:in `catch'
        from /usr/lib/ruby/1.9/optparse.rb:1273:in `order!'
        from /usr/lib/ruby/1.9/optparse.rb:1353:in `permute!'
        from /usr/lib/ruby/1.9/optparse.rb:1380:in `parse!'
        from t:16

(23:34)

本日のツッコミ(全2件) [ツッコミを入れる]
なかだ (2004-12-11 12:11)

サブコマンドの例は、optparse単体で配布してたときにはサンプルを入れてたんですが。
でもこっちのほうが分かりやすそうなので、sample/optparse/に入れていいですか。

青木 (2004-12-11 12:17)

もちろん構いません。好きなように使ってください。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS