[Gauche-devel-jp] Re: gosh の開発で行き詰まった

Back to archive index

shelarcy shela****@capel*****
2004年 7月 12日 (月) 22:36:38 JST


On Mon, 12 Jul 2004 01:23:48 -1000 (HST), Shiro Kawai <shiro****@lava*****> 
wrote:
> あれ、ドライブレターは絶対パスとして認識してるはずですが、"./" が
> 前置されちゃってますね。ドライブレターの判断はload.cのScm_FindFileの
>
> #ifdef __CYGWIN__
> 	       /* support for wicked legacy DOS drive letter */
> 	       || (isalpha(*ptr) && *(ptr+1) == ':')
> #endif /* __CYGWIN__ */
>
> でやってます。そこをちゃんと通ってるかどうか確認してもらえますか。

--- load.c.2~	Mon Jul 12 07:48:18 2004
+++ load.c	Mon Jul 12 21:08:12 2004
@@ -275,10 +275,10 @@
       } else if (*ptr == '/'
                  || (*ptr == '.' && *(ptr+1) == '/')
                  || (*ptr == '.' && *(ptr+1) == '.' && *(ptr+2) == '/')
-#ifdef __CYGWIN__
+#ifdef __CYGWIN__ || WIN32_NATIVE
   	       /* support for wicked legacy DOS drive letter */
   	       || (isalpha(*ptr) && *(ptr+1) == ':')
-#endif /* __CYGWIN__ */
+#endif /* __CYGWIN__ || WIN32_NATIVE */
   	       ) {
           use_load_paths = FALSE;
       }

やってなかったのでやりましたが、結果に変化がないようです。
他は全部認識されるのに、ドライブレターだけミスります。

ついでなので、こっちもやっておきました。

--- main.c.1~	Tue Jul 06 14:50:04 2004
+++ main.c	Mon Jul 12 21:38:59 2004
@@ -271,11 +271,11 @@
           if (argv[optind][0] == '\0') Scm_Error("bad script name");
           if (argv[optind][0] == '/') {
               scriptfile = argv[optind];
-#ifdef __CYGWIN__
+#ifdef __CYGWIN__ || WIN32_NATIVE
   	} else if (isalpha(argv[optind][0]) && argv[optind][1] == ':') {
   	    /* support of wicked legacy DOS drive letter */
   	    scriptfile = argv[optind];
-#endif /* __CYGWIN__ */
+#endif /* __CYGWIN__  || WIN32_NATIVE */
           } else {
               if (stat(argv[optind], &statbuf) == 0) {
                   ScmDString ds;


>> 有野さんの patch での Scm_ConvertToNativePathname での変換がうまくいって
>> いないのに対し、
>>
>> C:\develop\Gauche-0.8\boost>gosh 
>> c:\develop\Gauche-0.8\boost\temp\foo.scm
>> *** ERROR: cannot find file
>> "./c:\\develop\\Gauche-0.8\\boost\\temp\\foo.scm" to load
>>
>> こちらは変換していないので \ の解釈がうまくいっていないというような感じ
>> ですね。
>
>> C:\develop\Gauche-0.8\boost>gosh -i
>> gosh>(dynamic-load "c:\develop\Gauche-0.8\boost\libgauche-uvector.dll")
>> *** ERROR: cannot find file
>> "c:developGauche-0.8boostlibgauche-uvector.dll" in *load-path*
>> ("undefined_site_arch_dir" "undefined_arch_dir")

これには勘違いが含まれていました。どうやらコマンドライン上で

/develop/Gauche-0.8/boost/temp/foo.scm -> そのまま
\develop\Gauche-0.8\boost\temp\foo.scm -> 
\\develop\\Gauche-0.8\\boost\\temp\\foo.scm

という変換が行われるようです。

それと、/ なら問題なく通りました。

gosh>(dynamic-load "c:/develop/Gauche-0.8/boost/libgauche-uvector.dll")
#t


> (3) これは絶対パスのファイルのロードに直接関係ないが、*load-path* が
>     ("undefined_site_arch_dir" "undefined_arch_dir")
>     のように表示されるということは、arch.hがちゃんと作られてない?

すると、問題はこれに絞られそうな感じですね。
cygwin での arch.h の指定位置に置いてあるファイルを見て確信を強めました。

あ、これ有野さんの patch 仕様です。拡張ライブラリを使うことを考えて
なかった時点のものです。

とりあえず原則に従って site_arch をここに

#define GAUCHE_SITE_ARCH_DIR "../site/lib"

dll 用のフォルダは適当なものを思いつかなかったので、ext のところに
指定して、そこに dll を置くことで解決しました。

#define GAUCHE_ARCH_DIR "../ext"

(dynamic-load "libgauche-uvector")
#t

というわけで autoconf + make 時にはこうなるように設定してください。


-- 
shelarcy <shela****@capel*****>
http://page.freett.com/shelarcy/
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: arch.h
型:         application/octet-stream
サイズ:     571 バイト
説明:       無し
다운로드 


Gauche-devel-jp メーリングリストの案内
Back to archive index