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

アーカイブの一覧に戻る

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



Gauche-devel-jp メーリングリストの案内
アーカイブの一覧に戻る