[#7631] 1.3 to 1.4 — Katsuyuki Komatsu <komatsu@...>

小松です。

26 messages 1999/08/12
[#7632] Re: 1.3 to 1.4 — matz@... (Yukihiro Matsumoto) 1999/08/12

まつもと ゆきひろです

[#7634] Re: 1.3 to 1.4 — Katsuyuki Komatsu <komatsu@...> 1999/08/13

小松です。

[#7636] Re: 1.3 to 1.4 — matz@... (Yukihiro Matsumoto) 1999/08/13

まつもと ゆきひろです

[#7638] cvs HEAD (Re: Re: 1.3 to 1.4) — EGUCHI Osamu <eguchi@...> 1999/08/13

えぐち@エスアンドイーです。

[#7647] Re: cvs HEAD (Re: Re: 1.3 to 1.4) — matz@... (Yukihiro Matsumoto) 1999/08/13

まつもと ゆきひろです

[#7641] Re: [ruby-ext:00382] New coerce scheme — keiju@... (石塚圭樹)

けいじゅ@日本ラショナルソフトウェアです.

26 messages 1999/08/13

[ruby-dev:7552] Re: cannot install ruby-gtk into FreeBSD 2.2.x

From: Katsuyuki Komatsu <komatsu@...>
Date: 1999-08-06 10:53:44 UTC
List: ruby-dev #7552
小松です。

ruby-listから移行しました。

# File::ALT_SEPARATORありがとうございます。
# これを使ったwhich.rbの[ruby-list:15880]版との差分つけました。

In message of [ruby-list:15913] Re: cannot install ruby-gtk into FreeBSD 2.2.x
    on 1999/8/6 04:59:10 gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) wrote:
|file.c:eaccess() をみたけど、よく分かりませんでした。という
|のも djcpp とかの mode の扱いをしらないので。NTは別扱いのよ
|うです。

mswin32では、ファイルが存在しなくても常にtest(?x, prog)が
trueを返すみたいです。バグかな?

# 下のmswin32 (NT)とmswin32 (98)の所を参照。

|>bash-2.02$ ln -s ruby.exe r
|このとき、test(?x, "./r") の結果ってどうなるんでしょう??

cygwinではtrueでした。
ruby.exeがあるとき./rubyがtrueになるのがすごい。

|まぁ何にせよ、この手の実行可能性を調べるためのライブラリには
|必要性を感じますので何とかしませんか??

Fileに追加ですかね?

実行ファイルかも知れない拡張子の優先順位付きのリストは必須として、
後は、なにがあればいいかな?

# perlのFile::Spec::*とかExtUtils::MM_*とかは参考になるかも。

|とりあえずは、File::PATH_SEPARATOR でおおまかに切り分けて、
|拡張子の優先順序を分かってる範囲で列挙するということで。問題
|が出たら徐々に RUBY_PLATFORM とかで精度を上げていくという作
|戦でどうでしょ??

とりあえず、dln.cから抜き出してみました。

    mswin32 (95, 98) COMMAND.COM:
	.com .exe .bat
    mswin32 (NT) CMD.EXE:
	.com .exe .bat .cmd
	ENV["PATHEXT"] (たとえば".COM;.EXE;.BAT;.CMD"になっている)
	にも設定されてますがどこまで信用できるかはよくわかりません。
    os2_emx CMD.EXE?:
	.com .exe .bat .cmd
    djgpp ?:
	.btm .sh .ksh .pl .sed
    human ?:
	.r .x .bat

== cygwin ==
bash-2.02$ cat x.rb
while file = ARGV.shift
  print file, ": "
  p test(?x, file)
end
bash-2.02$ ls r*
r            range.o      re.o         ruby.exe     rubycw.dll
random.o     rbconfig.rb  regex.o      ruby.o
bash-2.02$ ./ruby -v
ruby 1.3.6 (1999-07-28) [i586-cygwin]
bash-2.02$ ./ruby x.rb ./r ./ruby ./ruby.exe ./ruby.com ./ruby.bat ./ruby.cmd
./r: true
./ruby: true
./ruby.exe: true
./ruby.com: false
./ruby.bat: false
./ruby.cmd: false
bash-2.02$ touch ruby.bat
bash-2.02$ ./ruby x.rb r ruby ruby.exe ruby.com ruby.bat ruby.cmd
r: true
ruby: true
ruby.exe: true
ruby.com: false
ruby.bat: true
ruby.cmd: false
bash-2.02$ mv ruby.exe ruby.com
bash-2.02$ ./r -v
bash: ./r: No such file or directory
bash-2.02$ ./ruby -v
bash: ./ruby: No such file or directory
bash-2.02$ ./ruby.com x.rb r ruby ruby.exe ruby.com ruby.bat ruby.cmd
r: false
ruby: false
ruby.exe: false
ruby.com: true
ruby.bat: true
ruby.cmd: false
bash-2.02$ touch ruby.rb
bash-2.02$ ./ruby.com x.rb ruby.rb
ruby.rb: false
bash-2.02$ cat > ruby.rb
#!
bash-2.02$ ./ruby.com x.rb ruby.rb
ruby.rb: true
bash-2.02$ mv ruby.com ruby.exe; rm ruby.bat ruby.rb
bash-2.02$ 

== mswin32 (NT) ==
C:\TEMP>ver

Windows NT Version 5.0

C:\TEMP>ruby -v
ruby 1.3.6 (1999-07-28) [i386-mswin32]

C:\TEMP>dir /b ruby*

ruby.c
ruby.obj
ruby.exe

C:\TEMP>ruby x.rb ruby ruby.c ruby.obj ruby.exe ruby.x
ruby: true
ruby.c: true
ruby.obj: true
ruby.exe: true
ruby.x: true

C:\TEMP>

== mswin32 (98) ==
C:\TEMP>ver

Windows 98 [Version 4.10.1998]


C:\TEMP>dir /b ruby*
ruby.c
ruby.obj
ruby.exe

C:\TEMP>ruby x.rb ruby ruby.c ruby.obj ruby.exe ruby.x
ruby: true
ruby.c: true
ruby.obj: true
ruby.exe: true
ruby.x: true

C:\TEMP>

--- which.rb-ruby-list-15880	Wed Aug  4 21:17:45 1999
+++ which.rb	Fri Aug  6 18:59:45 1999
@@ -4,3 +4,3 @@
   def which(target, all = false)
-    path = ENV['PATH'].split(File::PATH_SEPARATOR)
+    path = ENV['PATH'].split(File::PATH_SEPARATOR, -1).uniq
 
@@ -8,3 +8,3 @@
     for prog in target
-      if (prog =~ File::SEPARATOR)
+      if (prog =~ File::SEPARATOR or prog =~ Regexp.quote(File::ALT_SEPARATOR))
 	res.push prog if test(?x, prog) && test(?f, prog)
@@ -12,2 +12,3 @@
 	for e in path
+	  e = "." if e == ""
 	  cmd = e + File::SEPARATOR + prog

--
小松克行 / Katsuyuki Komatsu <komatsu@sarion.co.jp>

In This Thread

Prev Next