Just another Ruby porter,

〜2002年1月中旬〜


<Prev(,) | Next(.)> | Recent(/)>> | RDF

2002-01-11 (Fri)

Linux 2.4.18-pre3

そろそろリリース?

しあわせの書

なんと今日発送しましたのメールが。明日には届くかな。

rpkg

multi-platformがどーのこーのとか書いてあるわりには、lib/rpkg/rpkg.rbに

`cp -a doc/* #{$dirs.doc}/#{@name}`

とかあったりで、全然ポータブルじゃない。

QUICKSTART
quickstart/

でとどめ。

Lapidary 0.2.1

rpkgで使われているので、あらかじめパッケージを作っとこう。

% mkdir ~/dist/i386-cygwin/usr/local/lib/ruby/site_ruby/1.6/Lapidary
% cp -a*.rb UI ~/dist/i386-cygwin/usr/local/lib/ruby/site_ruby/1.6/Lapidary
% cat >../lapidary.contents
DOC=ChangeLog LICENSE README examples *.html
CONTENTS=usr/local/lib/ruby/site_ruby/$(RUBYVER)/Lapidary
% make -f ../Makefile.pack PACKAGE=lapidary VERSION=0.2.1 \
  TARGET=i386-cygwin
% make -f ../Makefile.pack PACKAGE=lapidary VERSION=0.2.1 \
  TARGET=i386-mingw32 symlink
% make -f ../Makefile.pack PACKAGE=lapidary VERSION=0.2.1 \
  TARGET=i386-msdosdjgpp symlink

2002-01-12 (Sat)

raf

very niceらしいが、w3mだと何も表示されない。 vしてHTMLソースを見てみると、

<script>
if ( navigator.appName == "Netscape" )
{
        location.replace("http://lafor.eresmas.com/raf/raf.html.gz");
}
else
{
        location.replace("http://lafor.eresmas.com/raf/raf_nc.html");
}
</script>
<script src=http://www.eresmas.com/js/fly.js></script>

ともう笑うしかない。 Netscapeじゃないほう に行ってみるとやはりJavaScriptで、結局のところ笑うしかないのであった。

xmms 1.2.6

早速makeだ。 とその前に xmms-ja のほうも調べてみると、やはりすでにあった。 xmms-1.2.6j_20020109 source を使うことにした *1

% CFLAGS=-Os ./configure --enable-kanji --prefix=/usr/local
% make
% make install

で、問題なし。iconvが使われるから--enable-kanjiは関係ないが、 以前のままのオプションでやってみた。 起動してみるとPLAYLIST EDITORで日本語が全く表示されない。 README.jpを読むと自分で設定しろってことになってるようだ。 [Option]-[Preferences]-[Audio I/O Plugins]-[Input Plugins]- [MPEG Layer 1/2/3 Player]-[Configure]-[Title]に

□ Convert Input  SJIS -> EUC-JP
□ Convert Output EUC -> SJIS

というのがある。これって1.2.5のころにはあったっけ? まあいいや。 ここをチェックしてiconv的に有効な文字列を入れろということなんだろう。 で、見事に表示されたのであった。


*1: patchをあてると 例の問題 があるので。

Badtrans.B

ほんとに多いよね。今日も来てるし。"TAKIMOTO Nobukazu"。

「!広告!」をSubjectに表示義務

これに従うspamが本当にあったら面白いんだが。2月1日を楽しみに待とう。 てゆか、うちには日本のspamはほとんど来ないんだった。


2002-01-13 (Sun)

preempt-kernel-rml-2.4.18-pre3-1

出たようなので更新してみる。

RubyUnit 0.5.3, Win32OLE 0.3.3

更新。

mmap 0.1.6

Cygwinにはmlockとかないのでやめとく。 と思ったが適当に#ifdefしたらtestsが通ったのでパッケージを作った。

#!Nobu Nakada

なかださんはinterpreterだったのか。

ruby-talk vs. ruby-list (02:53)

いつruby-talkがruby-listを抜くか一目ではわかりにくくなったので、 ここ1ヶ月は注意しよう。あと2349通。

しあわせの書

まだ読んでないけど、例の仕掛けは確認した。すごすぎる。 15年ぐらい前に発行された文庫本なので、 かなり大きな本屋じゃないと置いてないんだろうなあ。

[Ruby] Re: CVS

make cleanはもったいないから基本的にしないし。ってなんという理由だ。

たとえばbuild directoryを別に用意した場合、

% cvs co ruby
% mkdir build; cd build
% autoconf ../ruby/configure.in >configure; chmod +x configure
% ./configure --srcdir=../ruby
% make
cd ../ruby && autoconf
...

てな感じで、Makefile自体srcdirにconfigureがあることを前提にしてるので、 強制してるというか。個人的にはこのtargetが大嫌いなんだけど。

config.status:  $(srcdir)/configure
                $(SHELL) ./config.status --recheck

$(srcdir)/configure: $(srcdir)/configure.in
                cd $(srcdir) && $(AUTOCONF)

2002-01-14 (Mon)

Linux: Preemptible Kernel Compatible With O(1) Scheduler

おお、これは早速試さないと。と思ったが、

linux-2.4.17.tar.bz2
patch-2.4.18-pre3.bz2
preempt-kernel-rml-2.4.18-pre3-ingo-1.patch

という組み合わせではrejectしてまう。 .rejを見ても周りは全然存在しないコードだし。どうなってんだろう? カーネルのソースを取ってくるにも20MB以上じゃちょっとねえ。

あ、そうじゃなくてO(1) schedulerパッチもあてないといけないのか。 結局 これ をpre3にむりやりあてたらいけたようだ。

とりあえず無事に立ち上がった。今日一日使ってみよう。

"Anthony David Smith"

海外からBadtrans.Bは初めてかも。 なぜかvirusは日本から、spamは海外からよく来る。

bdb 0.28

前回は詳しく書いてなかったので、そのあたりを。 以前、 簡単にクロスでmakeできなくなった と書いたが、 src/以下は普通の拡張ライブラリなので直接ここで作業すればいい。

% cd src; mkdir cygwin mingw
% cd cygwin
% i386-cygwin-ruby ../extconf.rb \
  --with-db-prefix=/usr/local/cygwin-local/BerkeleyDB.3.3 \
  --enable-test
% make
% upx *.so
% make site-install

% ../cd mingw
% i386-mingw32-ruby ../extconf.rb \
  --with-db-prefix=/usr/local/mingw/BerkeleyDB.3.3 \
  --enable-test
% make
% upx *.so
% make site-install

--enable-testをつけると-ldb4,-ldb3,-ldb2のテストをしなくなる。 単なる時間の節約にすぎないのでなくてもいい。 って、これは論理が逆だねえ。

defaultは--enable-testで、--disable-testで-ldbのみにするなら

--- src/extconf.rb.orig	Sun Dec  9 01:08:43 2001
+++ src/extconf.rb	Mon Jan 14 19:52:38 2002
@@ -11 +11 @@
-unless (!test && (have_library("db4", "db_version") ||
+unless (test != false && (have_library("db4", "db_version") ||

という手が考えられる。testがnilかtrueのときにはテストする。

Makefile.pack

PACKAGEとかVERSIONとか書くのが面倒になってきたので、 って一年も経っているのに今頃かよ、 P,V,Tでもいけるようにした。

ifneq ($(P),)
  PACKAGE=$(P)
endif
ifneq ($(V),)
  VERSION=$(V)
endif
ifneq ($(T),)
  TARGET=$(T)
endif

これでこんな感じで短く書ける。

% cat ../bdb.contents
DOC=Changes README.en bdb.html bdb.rd docs examples tests tests.diff
% make -f ../Makefile.pack P=bdb V=0.2.8 T=i386-cygwin
% make -f ../Makefile.pack P=bdb V=0.2.8 T=i386-mingw32

make install vs. make site-install

間違えてmake installしてしまわないように、 ターゲットを書き換えてしまうことにした。 どこで書き換えるのがいいかなと考えたが、 どうせi386-{cygwin,mingw32}-rubyを必ず使うので、 スクリプトがextconf.rbだったらMakefileをいじることにした。

case "$script" in
  *extconf.rb) ruby -pi~ -e 'sub /^(install:)/,"system-\\1"' Makefile;;
esac

を追加した。

install: site-install

もMakefileに追加すればもっといいかもしれないが、 間違いに気づくだけで十分だ。

Devel::Which

作ってみた。

% ruby -rdevel/which -e 'p which_library "gtk"'
"/usr/local/lib/ruby/site_ruby/1.6/i386-linux/gtk.so"

どこにインストールしたっけなあってのを確認するために、 whereis_libraryなんてのもあるといいかも。

rdoc alpha-7

まだalpha versionではあるけど試してみた。 実際にドキュメントを埋め込んでなくても、 なかなか見事なClass browserとして使える。

net/smtp.rbを試したら無限ループしてるようだ。

install.rbを見ると

# 'Markup' will eventually be a separate package, but
# for now we'll install it automatically

Dir.chdir("markup") && system("ruby install.rb")

とあるが、markupが別になったらDir.chdirは例外になるからあまり意味はない。

それはそれとして、パッケージとしてまとめとこう。

DATE: 14 Ene 02 07:28:43 a.m.

という形式のメールが来た。自作fromがエラーになる。 sample/from.rbをちょっといじって使っているんだけど、

y = m = d = 0
y, m, d = parsedate(date) if date

でy, m, dのいずれもnilになっているらしい。 そのメールを見ると

DATE: 14 Ene 02 07:28:43 a.m.

となってて、こりゃparseできないだろうなと一目でわかる。 sample/from.rbを見るといつのまにか

y, m, d = parsedate(date) if date
y ||= 0; m ||= 0; d ||= 0

となっていた。くー。

てゆか、spamなんだから、どうでもいいんだが。


2002-01-15 (Tue)

FDclone 2.0

7年ぐらい前にベータテスターをしていたのだった。懐しい。 それはそれとして fdsh ってのはなかなか興味深い存在だ。

Yuya版rb2exe

%Rubyでyu-yanさんにちらっと仕組を教えてもらったが、よくわからなかった。 単にLoadLibraryということだけど、これの引数はファイル名。 ということは一時ファイルとしてWin32API.soをどこかに作るんだろうか? ソースが公開されるのを待とう。

あ、requireを静的な拡張ライブラリにするのはどう?という提案をしてみたけど、 本当にうまくいくかなあ。


2002-01-16 (Wed)

Ruby/GTK 0.26-1

もうめちゃくちゃだ。 0.26-1のCygwin版は このパッチ をあてたまま-DNATIVE_WIN32したgtk.soだった。 これじゃ全く意味がない。 Mark Slagellさんに指摘されるまで気づかなかった。 やはりクロスでやってると確認が甘くなるな。

MinGW版のほうはWindows 98で

-e:1:in 'require': 1157: One of the library files needed to run this 
application cannot be found.   - 
C:/SITE/RUBYM/USR/LOCAL/lib/ruby/site_ruby/1.6/i386-mingw32/gtk.so 
(LoadError)

となるらしい。Windows 2000では正常という話で、単に長さの問題? メッセージの通りDLLが1個足りないという気もしないでもないが。

それとまだ中身は0.25じゃないかと問われてしまった。 前回は明かにタイムスタンプが8月だったので、 0.25に違いないと思ったけど、今回は間違いないはず。 なにしろちゃんとSEGVするんだから *1

どうすればバージョンがわかるのか

% grep -i version **/*.[ch]

してみた。するとsrc/rbgtkconst.cには

#define RBGTK_MAJOR_VERSION 0
#define RBGTK_MINOR_VERSION 2
#define RBGTK_MICRO_VERSION 5

とある。え?俺のせいじゃないよ、こりゃ。

% LD_LIBRARY_PATH=. ruby -v -rgtk -e 'p Gtk::BINDING_VERSION'
ruby 1.6.6 (2001-12-26) [i386-linux]
[0, 2, 5]

Copyright問題と似たようなもんか。

#define RBGTK_MICRO_VERSION 6

に変更して0.26-2を出そう。


*1: いやSEGVしちゃだめ。

undefined method `inherited' for false (NameError)

とかなんとかやってると、最新のRuby 1.6.6では上記のエラーになったりで、 こういうときは速いマシンが欲しくなるな。

あれ?ruby-devにこの件でメール出したのに届いてない? 7時頃返ってきた。8時間もかかってる。

Devel::Which

whereis_libraryが入った。ありがとうgotokenさん。

Vote for Windows Installer packages

新しいインストーラはVC++に決まったようだが、 それに入れて欲しいパッケージがあったら ここ へ行こう。

とりあえず、その結果を尊重してこっちも作ろう。

Suica

今日からtouch & goなのだ。定期入れの真ん中にしまいこんだ。


2002-01-17 (Thu)

%string

eval %qPprint eval %-eval %:'Just another Ruby hacker,' :-P

が1.6.6ではエラーになる。

* parse.y (yylex): disallow alpha-numeric and mbchar for
  terminator of %string.

最後の:-Pが肝なので別解を考えよう。

html-parser 19990912p2

まずはhtml-parserだ。

REXML 1.2.5

結構サイズが大きいんだなあ。

NQXML 1.1.3

XML関連が多いね。まずは簡単なこの3つのパッケージを作成。

Log4r 1.0.0

1.0.0になったね。

FreeML

リニューアルしたはいいがSubjectがなんか変じゃない? たとえば[rubyist:1015]はこんな感じになってる。

Subject: [rubyist:1015] Re:
 $B<!4|%j%j!<%9$K8~$1$F:#8e(B

FreeMLのシステムの問題だと思うけど、これはdecodeすると

Subject: [rubyist:1015] R
 e:
 次期リリースに向けて今後

となる(nkf -mの結果)。なぜにRとe:に分割する? しかもe:の後に無意味な^Mがあるし。 というか要らんとこまでencodeしてるし。 このencodeのしかたはOutlookよりひどいな。

どうもFreeMLは好きになれない。

[rubyist:1023]がRe:だけになってしまったのも、これが原因か?

RDoc alpha-8

net/smtp.rbもちゃんとparseできるようになった。

Alpha-8 is necessary because of a serious bug in -7 which caused
looping when parsing some method parameter lists.

メール配送の遅れ

今日も一日rimのメールは遅れ気味だった。今度はなにが原因?

!広告!

オージス総研から「!広告!」メールが来た。 会社のメールアドレス宛てだったから、ObjectDay2001かな。


2002-01-18 (Fri)

ldd

cygwin ML で検索すると、 objdump -pの出力結果をフィルタリングしたシェルスクリプトが見つかった。 やってることは再帰的に

% objdump -p foo.exe | grep 'DLL Name'

してDLLを見つけ、whichするようなもんかな。

Linuxでは、というかglibc 2.2.3からlddはシェルスクリプトになってる模様。

% sh -x ldd =ruby

してみると最終的には

% LD_TRACE_LOADED_OBJECTS=1 \
  LD_WARN= \
  LD_BIND_NOW= \
  LD_LIBRARY_VERSION=6 \
  LD_VERBOSE= \
  /usr/local/bin/ruby

を実行しているだけのように見える。 いや実際にこの通り環境変数を設定してruby自体を実行すると、 lddでお馴染の結果が得られるわけだが、 こんな仕組みになっていたなんて全然知らなかった。

% LD_TRACE_LOADED_OBJECTS=1 ruby
        libruby.so.1.6.6 => /usr/local/lib/libruby.so.1.6.6 (0x4001a000)
        libdl.so.2 => /lib/libdl.so.2 (0x400c2000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x400c5000)
        libm.so.6 => /lib/libm.so.6 (0x400f2000)
        libc.so.6 => /lib/libc.so.6 (0x40115000)
        libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0x4022c000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

bdb 0.2.9

更新。Changes:

* stupid bug with free()
* added -R for Solaris 2 (Thanks Amos Gouaux <amos+ruby@utdallas.edu>)

Win32 Modules

HomepageもDownloadも

e-mail me with request

なんだけど、提供する場所を持ってないということなんだろうか? そういえばいきなりバイナリをruby-talkへ投げたやつが以前いたな。 同一人物だよ

パッケージは作らないほうがよさそうだ。メールを出すのも面倒だし。

rimnetメール配送遅延発生

3日も経ってからってちょっと報告が遅いんじゃない?

The Ruby Way

やっと来た。結構時間がかかったな。こんなに分厚いとは思わなかった。 600ページほど。

BEGIN, END

RubyでBEGINとENDが使えるようになって随分経つが、

BEGIN do ... end
END do ... end

はいつの間にかエラーになってる。 採用された当初はできたと思うんだけど夢だったんだろうか? でもこうして並べてみるとBEGINとEndとendは確かになんか変だ。

do end派としては残念だ。

depend

mkmf.rbが

{$(srcdir)}.c.#{$OBJEXT}:
        $(CC) $(CFLAGS) -I$(<D) $(CPPFLAGS) -c $(<:/=\\)

こうなってるので、win32ole.cは必要ない。助田さんに頼むのがいいのかな。

win32ole.o : $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h

でいいんだよね。

荒技としてはmkmf.rbでMakefileにコピーする際削除してしまうとか。

line.gsub!(/[^\s]+\.(cc|cpp|cxx|c|C)\s*/, '')

をwhile loopの最初に入れる。うーむ。

というか律義にdependを作らなくてもいい気もする。


2002-01-19 (Sat)

freshmeat newsletter

どうせ毎日見てるのでsubscribeしてみた。

WindowsInstaller

・ voting is open until end of the day Friday, and then I'm going to start
   adding them up.

ということなので日本時間では今日締め切られる予定。 03:00 JST現在これだけ。*はすでにRuby Binariesでパッケージング済みのもの。 PostgreSQL/RubyはRuby/PostgreSQLの間違いと思われるので消した。

ActiveScriptRuby, ArunaDB, AspectR, *BDB, *eruby, FXRuby,
*html-parser, IOWA, irb-tools, *Lapidary, *Log4r, mysql-ruby,
*NArray, *NQXML, *OptionParser, Pickaxe Book, RbWrap, *RDoc,
*REXML, *ri, Rubicon, RubyCOM, Ruby DBI, *Ruby/GDLib, RubyGL,
*Ruby/GTK, Ruby-MCrypt, RubyMock, Ruby/ODBC, Ruby/PostgreSQL,
*Ruby/Tk, *RubyUnit, *ruby-zlib, rudl, SOAP4R, *vruby/swin,
*WEBrick, *Win32OLE, *XMLParser, xmlrpc4r

こうして見ると、XML, HTML, Database, GUI, UnitTestが目につく。

とりあえずなんだかわからんRubyMockあたりを RAA で調べておくか。 これもRubyUnitがらみらしい。

といいつつも、次はSOAP4Rにしよう。


2002-01-20 (Sun)

RubyUnit 0.5.4

更新。ChangeLog:

* runit/testfailure.rb: correct not to occure 
  warning message with ruby -w. (Thanks to David Alan Black)

/etc/hosts

Cygwinは/etc/hostsを見ません。そこはWindowsと同じ。 BINDでも入れて-lresolvすればUnixと同じだけど、 そんなことする人はもういないだろうなあ。

Linux 2.4.18-pre4

kernel.orgが今トラブってるらしいが、 その前に2.4.18-pre4はダウンロードしておいた。 makeしてinstallしてみると。

find kernel -path '*/pcmcia/*' -name '*.o' | xargs -i -r ln -sf ../{} pcmcia
if [ -r System.map ]; then /sbin/depmod -ae -F System.map \
  2.4.18-pre4; fi
depmod: *** Unresolved symbols in \
  /lib/modules/2.4.18-pre4/kernel/fs/minix/minix.o
depmod:         waitfor_one_page

てな感じだ。 grep waitfor_one_page **/*.[ch]してみるとなくなったわけではない。 patchをgrepしたらわかった。

-EXPORT_SYMBOL(waitfor_one_page);

が原因だ。exportするのをやめたらしい。 これじゃminixとかext2をモジュールにできない。 よくわからんが、こいつを元に戻して、例によってO(1)+preemptもあてて、 勝手にEXTRAVERSIONを書き換えて更新。

% uname -r
2.4.18-pre4-sched-O1-H6-preempt

setup.exeでLog4Rをインストール

setup.exeでwarningになると%Rubyに話題になってる模様。 IRCはlogをダイアルアップ時に取ってきてたまに見るだけなので、 ここに書いておこう。

grep warning: *.ccしてみると、どうも

usr/local/doc/ruby/log4r-1.0.0/doc/rdoc/classes/Log4r/FileOutputter
usr/local/doc/ruby/log4r-1.0.0/doc/rdoc/classes/Log4r/FileOutputter.src

の存在がいけない感じ。 FileOutputterをCreateDirectoryした後にFileOutputter.srcをCreateDirectoryすると、 なぜかERROR_ALREADY_EXISTSになってしまう。 でもここだけ抜き出してテストプログラムを書くとちゃんとうまくいくし。 うーむ。setup.exeのバグとしか思えないんだけどよくわからない。

SOAP4Rとuri

早速SOAP4R 1.4.2をダウンロードしてみたわけだが、 uriがredistにあるんだよね。 つい先日1.6にuriはaddされたわけで、どうしよう? 1.6.7が出てからにしようかな。 てゆか1.6.7はどうなったんだ?

pdnsd

Proxy DNSだけど/etc/hostsを見てくれるので、tinydnsも必要ない。これはいいかも。 しばらく使ってみよう。

[Mingw-msys] (ANNOUNCEMENT) msys-1.0.3 has been released.

In version 1.0.4, you'll be able to use symlinks in the parameter list    
to a win32 program.                                                       

ってどうやって実現するんだろう?

zsh 4.0.4

今頃になって4.0.4にした。

zshってpartial completionも使えるのか。

% ls /u/l/l/r/1.6/<TAB>

とすれば

% ls /usr/local/lib/ruby/1.6/

となる。

fake-ruby

i386-cygwin-rubyとかi386-mingw32-rubyとかこの日記にはたびたび出てくるけど、 その実体は現在こうなっている。

/usr/local/bin/fake-ruby:

#!/bin/sh
RUBY_PLATFORM=$(expr $0 : '.*/\(i386-[^-/]*\)') \
exec /usr/local/bin/ruby -rfake "$@"

/usr/local/lib/ruby/site_ruby/fake.rb:

class Object
  platform = ENV['RUBY_PLATFORM'] or raise 'Set RUBY_PLATFORM'
  version = ENV['RUBY_VERSION'] || RUBY_VERSION
  dist = ENV['RUBY_DIST']

  destdir = File.join((dist || File.expand_path('~/dist')), platform)

  $:.collect! do |x|
    x.sub! /^\/usr/, destdir+'/usr'
    x.sub! Regexp.quote(RUBY_PLATFORM), platform
    x.sub! /\d+\.\d+/, version[/\d+\.\d+/] 
    x
  end

  remove_const :RUBY_PLATFORM
  RUBY_PLATFORM = platform

  if defined? PLATFORM
    remove_const :PLATFORM
    PLATFORM = platform
  end

  remove_const :RUBY_VERSION
  RUBY_VERSION = version

  if defined? VERSION
    remove_const :VERSION
    VERSION = version
  end

  CROSS_COMPILING = true

  ENV['PATH'] = File.join(destdir, 'usr/local/bin') + ':' + ENV['PATH']
  END {
    if /\bextconf\.rb\b/ =~ $0 and File.exist?('Makefile')
      ARGV.replace ['Makefile']
      $-i = '~'
      while line = gets
        print line.sub(/^(install:)/, 'system-\1')
      end
      print "\nexport PATH:=#{ENV['PATH']}\n"
    end
  }
end

fake_TARGET.rb では-sでグローバル変数を介して情報を渡していたが、 全部環境変数に変更した。仕上げに

% ln -s /usr/local/bin/fake-ruby /usr/local/bin/i386-cygwin-ruby
% ln -s /usr/local/bin/fake-ruby /usr/local/bin/i386-mingw32-ruby
% ln -s /usr/local/bin/fake-ruby /usr/local/bin/i386-msdosdjgpp-ruby

としてある。fake.rbのPATHは

% ln -s /usr/local/bin/fake-ruby ~/dist/i386-cygwin/usr/local/bin/ruby
% ln -s /usr/local/bin/fake-ruby ~/dist/i386-mingw32/usr/local/bin/ruby
% ln -s /usr/local/bin/fake-ruby ~/dist/i386-msdosdjgpp/usr/local/bin/ruby

のため。 fake-rubyの

RUBY_PLATFORM=$(expr $0 : '.*/\(i386-[^-/]*\)') \

が肝だ。 ディレクトリやコマンド名にそのままプラットフォームを含めているのはそのため。

本当はexprを使わずにi386-*を抜き出したいところではある。 ~/distを考えなければ

name=${0##*/}
RUBY_PLATFORM=${name%-ruby}

でいいんだけど。exprと逆に取り除く方向なので難しい。

x=${0%/usr/local/bin/ruby}
target=${x##*/}
RUBY_PLATFORM=${target%-ruby}

という手はあるなあ。Rubyで書くとこれだけの話ではあるが。

#!/usr/local/bin/ruby
ENV['RUBY_PLATFORM'] = $0[/i386-[^-\/]+/]
exec '/usr/local/bin/ruby', '-rfake', *ARGV

GNU makeはMakefileに

export PATH:=/some/where/bin:$(PATH)

と書ける。位置はどこでもいい。 $-i = '~'を使っているため最初に入れるのが面倒だから最後に入っている。

print "\nexport PATH:=#{ENV['PATH']}\n"

の最初の"\n"はWin32OLEのため。なぜかdependに改行がなかった。 でも0.3.3-01でうまい具合にdependは更新されて改行がついたので、 もう"\n"はなくてもいいかも。 これでMakefileに直接rubyと書いてあっても、 ~/dist以下のrubyが起動されるため、 いちいちMakefileを書き換えたりRUBY=とかmakeの引数で渡す必要がなくなる。

bashでbasename, dirname

ついでにbashだけでbasename, dirnameを書くとこうなる。

$ a=/usr/local/bin/ruby
$ echo ${a##*/}
ruby
$ echo ${a%/*}
/usr/local/bin

bashに限らず最近のshなら使えると思うけど。zshとかkshとかashとか。

[Cygwin] wget

Cygwinのwgetがなかなか1.8に上がらないのは、 1.8だと:portをそのままファイル名にしてしまうかららしい。

Cygwin 1.3.7-1

freshmeat newsletterでCygwin 1.3.7が出たことを知る。 明日試そう。

zshとruby

なんとなく

% ruby -<TAB>

してみるとちゃんと出てくる。

--copyright -- copyright notice
--debug     -- debug mode
--help      -- print help message
--verbose   -- verbose mode
--version   -- print version
--yydebug   -- compiler debug mode
<以下省略>

早速/usr/local/share/zsh/4.0.4/functions/_rubyを見てみると最後に libraryがどうのこうのとある。ってことは

% ruby -r<TAG>

で出るのか?出るね。 CWDにいっぱいファイルがあるとそれも出てくるから.rbと.soに限定したいところだ。 _perl_modulesぐらいのことはしないと駄目かな。

diet libc版ash

ついでにdiet libcでashをmakeしてみた。 ソースはcygwinのものを使用。 パッチ

% patch -p1 </some/where/ash-20011018-1-diet.diff
% ./configure
% make CFLAGS='-D__DIET_LIBC__ -D_BSD_SOURCE -Os' \
  CC='diet gcc' CC_BUILD='diet gcc'
% sudo cp sh-new /bin/ash

<Prev(,) | Next(.)> | Recent(/)>> | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!