Just another Ruby porter,

〜2002年7月下旬〜


<Older(,) | Newer(.)> | Recent(/)>> | RDF

2002-07-21 (Sun)

Perl 5.8.0

patchlevel.hは予想通りだったが、make testは結局変わらず。 logを見比べてみると、ひとつ見落としがあった。うーむ。

ext/B/t/o............................# Failed at ../ext/B/t/o.t line 45
#      got '(foo) <bar>'
# expected '[Compiling!'
FAILED at test 7

host,target,build

例えばgccを例に挙げると

--target=i686-pc-cygwin --host=i686-pc-cygwin --build=i686-pc-linux

ならCygwin用のgccをCygwin上で動くようにLinux上で作るという意味になります。 実際Cygwinのパッケージはこのオプションで作られてます。

--target=i686-pc-cygwin --host=i686-pc-linux --build=i686-pc-linux

ならCygwin用のクロスのgccをLinux上で動くようにLinux上で作るという意味。 この場合はhostとbuildが共通なので省略可能。

--target=sh-elf --host=i686-pc-cygwin --build=i686-pc-linux

ならsh-elf用のクロスのgccをCygwin上で動くようにLinux上で作るという意味。

hostとbuildが違うときは、 --hostで指定したプラットフォーム用のクロスコンパイラが必要。 そのままコマンドのprefixになります。

で、Ruby Binariesの場合は

--target=i386-cygwin --host=i686-pc-cygwin --build=i586-pc-linux-gnu
--target=i386-mingw32 --host=i686-pc-cygwin --build=i586-pc-linux-gnu
--target=i386-msddosdjgpp --host=i586-msdosdjgpp --build=i586-pc-linux-gnu

となってます。


2002-07-22 (Mon)

[Cygwin] New package: dpkg-1.10.4-1

そうきたか。

Ogg Vorbis 1.0

記念にインストール。

Rate:         0.3625

と相変わらず遅いが、一年前に試したときより小さくなってる。 -qのdefaultが違うのかもしれないけど。

濱マイク

今日は青だった。これで青黄黄青か?


2002-07-23 (Tue)

[Cygwin] gcj

% cat HelloWorld.java
public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello World");
  }
}
% gcj --main=HelloWorld -Os -o hello HelloWorld.java
% ./hello
Hello World

--main=が必要らしい。サイズは

% ls -l hello.exe
-rwxr-xr-x    1 watanabe ruby      2145601 Jul 23 13:47 hello.exe

と、とんでもなくでかい。stripすると1.3MBぐらいになる。 最適化しないと余計な.stabsが残ってasが文句を言う。

% gcj --main=HelloWorld -o hello HelloWorld.java 
/tmp/ccGZQxBb.s: Assembler messages:
/tmp/ccGZQxBb.s:26: Warning: .stabs: description field '40002' too big, try a different debug format
/tmp/ccGZQxBb.s:76: Warning: .stabs: description field '10001' too big, try a different debug format

Warningだから気にしなければいいのかもしれないけど。


2002-07-24 (Wed)

[Ruby] scope-in-state

そういうもの だったのか。じゃ、jcode.rbも

module Jcode
  module String
    ...
  end
end

という構成にすればいいわけだ。早速実験。

% cat foo.rb
#!/usr/local/bin/ruby -Ke

require 'scope-in-state'

module Jcode
  module String
    def chop
      "chop"
    end
  end
end

ScopeJcode = ScopeInState.new(Jcode)

p 'あい'.chop
ScopeJcode.scope_in do
  p 'あい'.chop
end
p 'あい'.chop
% ruby foo.rb
"あ\244"
"chop"
"あ\244"

なるほど。original_succ!とかのaliasをやめればいけそうだ。

[Cygwin] mount

いつの間にかdefaultが-sになってる。なぜ?


2002-07-25 (Thu)

[Cygwin] gcj

staticにlinkするとさらに1MBほど増えます。

bash 2.05b

--enable-static-link --enable-minimal-configで作ってみる。 COND_COMMAND, DPAREN_ARITHMETIC, ARITH_FOR_COMMANDを見ないとまずいね。 #if definedしとこう


2002-07-26 (Fri)

Acrobat Reader 5.06

Changes: A security patch was applied to solve the famous
/tmp/AdobeFnt06.lst.VUID security problem reported in
http://online.securityfocus.com/archive/1/278984. 

2002-07-27 (Sat)

[Ruby] 1.7.2 (2002-07-26)

今回問題になっているのは、Regexp.quoteのバグと、 RegexpとStringが使える場所でStringを使ったときにquoteするという仕様変更。 困ったことにChangeLogには書かれてない。 バグのほうはruby自身を直せばいいだけだが、 仕様変更のほうはスクリプトを直さないといけない。

% ruby-1.7.2 -e 'p Regexp.quote("1.7")'      
"\\.7"
% ruby-1.7.2 -e 'p "a" =~ "^a"'
nil
% ruby-1.7.2 -e 'p "^" =~ "^"'      
0
% ruby-1.7.2 -e 'p "a" =~ /^a/'
0
% ruby-1.7.2 -e 'p "a".sub("^", "#")'
-e:1: warning: string pattern instead of regexp; \
  metacharacters no longer effective
"a"
% ruby-1.7.2 -e 'p "^".sub("^", "#")'
-e:1: warning: string pattern instead of regexp;  \
  metacharacters no longer effective
"#"
% ruby-1.7.2 -e 'p "a".sub(/^/, "#")'
"#a"

で、あちこちにあるわけだ。 気づいた2つはcommitされた直後に直したんだけど、 報告されてるようにまだ残ってる。

RubyUnit

うーむ。それはもともと

str.split('\n')

がバグっていて、

str.split("\n")

が正解だったのでは?奇しくも直ってしまったってことで。

GCC 3.1.1

% mkdir linux; cd linux
% CFLAGS=-Os CXXFLAGS=-Os ../configure --enable-languages=c,c++ \
  --with-system-zlib --enable-sjlj-exceptions --enable-threads
% time bootstrap
make bootstrap  21117.96s user 877.51s system 98% cpu 6:11:03.86 total


2002-07-28 (Sun)

diet bash

--enable-static-link --enable-minimal-configだとstripしても

% ls -l bash
-rwxr-xr-x    1 watanabe ruby       611816 Jul 28 19:09 bash

と、ちっともminimalじゃない。staticならやっぱdietlibcだよね。 dietlibcにはlocaleはないので

% mkdir diet
% ac_cv_func_setlocale=no ac_cv_header_locale_h=no \
  ac_cv_header_strings_h=no CFLAGS=-Os CC='diet gcc -nostdinc' \
  ../configure --enable-static-link --enable-minimal-config \
  --prefix=/usr --bindir=/bin

としてみた。<strings.h>は

#warning "your code included obsolescent <strings.h>.  \
  Please change that to <string.h>!"
#include <string.h>

となっててうるさいのでないものとして扱うことにする。 なぜかlocale.cは一部無条件でsetlocaleしてる場所があったので、 quick hack 。 結果はstripしてこのくらい。

% ls -l bash
-rwxr-xr-x    1 watanabe ruby       218688 Jul 28 19:20 bash

RubyUnit 0.5.4-03

更新。


2002-07-29 (Mon)

[Ruby] ext/extmk.rb.in

ext/configsub.rbを使えばいい気がしてきた。 特にmswin32専用ってわけでもないし。

RubyWin 0.0.4.1

更新。


2002-07-30 (Tue)

[Ruby] win32_getenv(rb_w32_getenv)

mingw32版でRUBY_TCL_DLLとRUBY_TK_DLLを設定するとエラーになると報告が来た。

When trying to use tcltklib (require 'tcltklib') I get the following error:
 F:/MINGW/USR/LOCAL/lib/ruby/1.6/tk.rb:7:in `require': tcltklib: \
 tcltk_stubs init error (-2) (LoadError)

確かにこうなるね。 -2というのはGetProcAddress("Tcl_CreateInterp")してるところで(ext/tcltklib/stubs.c)、 つまりこのシンボルは存在しないという意味だ。 LoadLibraryの結果を見るとなぜかtcl83.dllもtk83.dllも同じになってる。 ということはLoadLibraryに同じ文字列を渡していることを意味する。 で、思い出した。win32_getenvは毎回allocateしないようになったのだった。

ruby_tcl_dll = getenv("RUBY_TCL_DLL");
ruby_tk_dll = getenv("RUBY_TK_DLL");

だと、後から呼んだgetenvで上書きされてしまう。盲点だな。 strdupして解決。 stubs的にはDLLへPATHだけ通しておけばokなので、 とりあえずそれで我慢してねと返信。

PATHだけのほうが簡単なのでお勧めなのだが、 なぜかRUBY_TCL_DLLとRUBY_TK_DLLを使いたがる人が多い。


2002-07-31 (Wed)

OpenSSL 0.9.6e

configではgcc --versionじゃなくてgcc -dumpversionを使うようになった。 なるほど。これでGCC 3.1.1でも大丈夫だ。

[cvs] CVS_PASSWORD

src/ChangeLog-9395を見ると

Tue Dec 19 17:45:11 1995  Karl Fogel  <kfogel@floss.cyclic.com>

らしい。裏を取ってみると確かにlogin.cの1.21で 追加されてる


<Older(,) | Newer(.)> | Recent(/)>> | RDF


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

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