Shiro Kawai
shiro****@lava*****
2004年 7月 13日 (火) 05:46:44 JST
From: shelarcy <shela****@capel*****> Subject: [Gauche-devel-jp] Re: gosh の開発で行き詰まった Date: Mon, 12 Jul 2004 22:36:38 +0900 > --- 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; > } こんな書き方ってできましたっけ? (少なくともgccではだめ) 標準Cならこうしておく方が無難なような: #if __CYGWIN__ || WIN32_NATIVE もしくは #if defined(__CYGWIN__) || defined(WIN32_NATIVE) > やってなかったのでやりましたが、結果に変化がないようです。 > 他は全部認識されるのに、ドライブレターだけミスります。 今問題となってるのは、そこのコードが本当に含まれているのかどうか なんですから、例えば #ifdef __CYGWIN__ || WIN32_NATIVE #error "Yes, we're here!" /* support for wicked legacy DOS drive letter */ || (isalpha(*ptr) && *(ptr+1) == ':') #endif /* __CYGWIN__ || WIN32_NATIVE */ とかやってコンパイルすれば、該当部分が本当にコンパイルされているのか どうかが、実行するまでもなく確実にわかりますよね。問題の切り分けとは そういうことです。「ここまで来ているなら確実にこうなるはず」という ステップを踏んで行くのです。 > これには勘違いが含まれていました。どうやらコマンドライン上で > > /develop/Gauche-0.8/boost/temp/foo.scm -> そのまま > \develop\Gauche-0.8\boost\temp\foo.scm -> > \\develop\\Gauche-0.8\\boost\\temp\\foo.scm > > という変換が行われるようです。 違います。コマンドライン上では変換が行われず、Schemeプロンプトから 打ち込んでreadされる時に変換が行われるんです。なお、Schemeでwriteした 時にも(逆の)変換が行われます。 > > (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 時にはこうなるように設定してください。 それじゃgoshを他のディレクトリから起動したときに動きません。 --shiro