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 バイト 説明: 無し 다운로드