shelarcy
shela****@capel*****
2004年 7月 13日 (火) 09:18:13 JST
On Mon, 12 Jul 2004 10:46:44 -1000 (HST), Shiro Kawai <shiro****@lava*****> wrote: > 今問題となってるのは、そこのコードが本当に含まれているのかどうか > なんですから、例えば > > #ifdef __CYGWIN__ || WIN32_NATIVE > #error "Yes, we're here!" > /* support for wicked legacy DOS drive letter */ > || (isalpha(*ptr) && *(ptr+1) == ':') > #endif /* __CYGWIN__ || WIN32_NATIVE */ > > とかやってコンパイルすれば、該当部分が本当にコンパイルされているのか > どうかが、実行するまでもなく確実にわかりますよね。問題の切り分けとは > そういうことです。「ここまで来ているなら確実にこうなるはず」という > ステップを踏んで行くのです。 ああ、そうか #error "Yes, we're here!" があったか。コンパイルして試しまし た。 Template Haskell にあるから当然といえば当然ですね。 本でばかり独学してきて実地でほとんどやってこなかったのが仇になっていた みたいです。すみません。 > 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) > >> やってなかったのでやりましたが、結果に変化がないようです。 >> 他は全部認識されるのに、ドライブレターだけミスります。 そうですね。そうしないと WIN32_Native の定義による認識フラグが無視されます ね。 そういうわけで直しました。 --- main.c.2~ Mon Jul 12 21:38:59 2004 +++ main.c Tue Jul 13 08:12:23 2004 @@ -271,7 +271,7 @@ if (argv[optind][0] == '\0') Scm_Error("bad script name"); if (argv[optind][0] == '/') { scriptfile = argv[optind]; -#ifdef __CYGWIN__ || WIN32_NATIVE +#if __CYGWIN__ || WIN32_NATIVE } else if (isalpha(argv[optind][0]) && argv[optind][1] == ':') { /* support of wicked legacy DOS drive letter */ scriptfile = argv[optind]; --- load.c.2~ Mon Jul 12 21:53:33 2004 +++ load.c Tue Jul 13 08:17:36 2004 @@ -275,7 +275,7 @@ } else if (*ptr == '/' || (*ptr == '.' && *(ptr+1) == '/') || (*ptr == '.' && *(ptr+1) == '.' && *(ptr+2) == '/') -#ifdef __CYGWIN__ || WIN32_NATIVE +#if __CYGWIN__ || WIN32_NATIVE /* 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した > 時にも(逆の)変換が行われます。 そのようですね。 >> dll 用のフォルダは適当なものを思いつかなかったので、ext のところに >> 指定して、そこに dll を置くことで解決しました。 >> >> #define GAUCHE_ARCH_DIR "../ext" >> >> (dynamic-load "libgauche-uvector") >> #t >> >> というわけで autoconf + make 時にはこうなるように設定してください。 > > それじゃgoshを他のディレクトリから起動したときに動きません。 確かに。binary として配るのならともかく、そうでないなら決めうちはまず いですね。 -- shelarcy <shela****@capel*****> http://page.freett.com/shelarcy/