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

Back to archive index

shelarcy shela****@capel*****
2004年 7月 10日 (土) 08:15:27 JST


On Fri, 09 Jul 2004 08:45:48 -1000 (HST), Shiro Kawai <shiro****@lava*****> 
wrote:
>> patch どうでしたでしょうか?
>> shiro さんの環境が回復してから音沙汰がないので気になるのですが……?
>
> ああすみません。うちでWindowsを走らせるというのはかなりの努力が
> 必要なんです。

了解です。やれる分だけやって、分からないところを尋ねるといういつもの調
子でやっていきます。

> 実際に試すにはMinGWの環境を整えないとならないんで、今のところ
> patchを眺めただけですが、ちゃんとやるのは道遠しって感じがします。
> ただ、とりあえず走らせるだけならport関係さえ何とかすれば何とか
> なりそうですね。
>
> 気がついたところをいくつか。
>
> - portの出力関係はスタブが入ってるだけ (何でもかんでもOutputDebugString)
>   なんで、replが欲しければここをちゃんと書かないとだめですね。

もしや、と思ってスタブを外してみたらうまく動きました。
元の patch での GUI アプリケーション生成の際に障害が出ていたということな
のかな?

C:\develop\Gauche-0.8\boost>gosh
*** ERROR: unbound variable: sys-access
Stack Trace:
_______________________________________
   0  (sys-access dotfile F_OK)
         At line 145 of "../lib/gauche/interactive.scm"
WARNING: couldn't load gauche.interactive


+(if "!defined(WIN32_NATIVE)"
   (define-cproc sys-access (pathname::<string> amode::<int>)
     "int r;
     if (geteuid() != getuid() || getegid() != getgid()) {
       Scm_Error(\"cannot use sys-access in suid/sgid program.\");
     }
     SCM_SYSCALL(r, access(Scm_GetStringConst(pathname), amode));
-  SCM_RETURN((r == 0)? SCM_TRUE : SCM_FALSE);")
+  SCM_RETURN((r == 0)? SCM_TRUE : SCM_FALSE);"))

これで逃げているのがよくないんですよね。……でも、geteuid、getuid、
getegid、getgid あたりって存在しないし……

> - boostを使うなら、いずれ本筋のMakefile.inとboost/Jamfileのsyncを取る
>   方法を考えないとまずいですね。ソースファイルに変更があったときに両方を
>   直すのは避けたいですから。同様にconfig.hについても、別に持ってしまうと
>   config.n.inの変更に追従できないですから、自動生成の方法を考える必要が
>   あります。まあconfigureだけcygwinかMSYSで走らせればいいわけですが。

そのあたりはちゃんとしたものが出来上がったら shiro さんにやってもらいた
いと思います。autotools 使えないので……。

> - signal関係はもう少し綺麗な方法がありそうな気もします。SIGINTが使える
>   のだから、Windows無いでもシグナルマスクを制御する何らかの方法がある
>   はずですよね?  Scm_SigCheck内でSIGPROCMASKを消してますが、ここは
>   どうにかしてsignalをブロックする必要があります。

見たところ存在するのは

#define	SIGINT		2	/* Interactive attention */
#define	SIGILL		4	/* Illegal instruction */
#define	SIGFPE		8	/* Floating point error */
#define	SIGSEGV		11	/* Segmentation violation */
#define	SIGTERM		15	/* Termination request */
#define SIGBREAK	21	/* Control-break */
#define	SIGABRT		22	/* Abnormal termination (abort) */
#define	SIG_DFL	((__p_sig_fn_t) 0)
#define	SIG_IGN	((__p_sig_fn_t) 1)
#define	SIG_ERR ((__p_sig_fn_t) -1)
#define NSIG 23     /* maximum signal number + 1 */

_CRTIMP __p_sig_fn_t __cdecl	signal(int, __p_sig_fn_t);
_CRTIMP int __cdecl	raise (int);

のようですが、これでどうにかなるのかな?
signal 関係良く分からない……。


> - bignum.c冒頭のallocaまわりのパッチがよく分からないんですが、今のだと
>   ちょっとまずくないかしら。

そのあたりは、元の patch がそうなってたからそうしたという形なので、直す
必要があれば直します。



-- 
shelarcy <shela****@capel*****>
http://page.freett.com/shelarcy/



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