Gauche:Windows/VC++:log:old_2004
- 2003年の、有野氏らによる試み: Gauche:Windows/VC++:log:old_2003
- 現在: Gauche:Windows/VC++
作業記録
その後の進展もなく記事が古くなってしまったため、patch を作った最終作業記録を残して log 送りにします。 -- shelarcy
新しいものを上にしましょう。
gauche/int64.h 内の stdint.h と inttype.h をインクルード
shelarcy (2004/06/02 06:15:10 PDT): stdint.h と inttype.h は C99 のものなので、無いと言われます。次期標準に入るはずですがそれまでは待てません。こういうのが無い場合にはどうやってやっているんでしょうか? (というか有野さんどうやってコンパイルしたんだろう。mingw から取ってくるというのは万人向けではないし……)
- とりあえず stdint.h を Boost に差し替えてやると cstdio で構文エラー満載、やけになって vc7.1-stlport に対応していないことを知っているくせに stlport まで導入してやると今度は stlport 内の type_traits で構文エラー満載。
#include <boost/cstdint.hpp>
- inttype.h の場合、その内部のこのあたりで構文エラーが発生するのでどうしようもないか……
extern __inline__ intmax_t __cdecl imaxabs (intmax_t j) {return (j >= 0 ? j : -j);} imaxdiv_t __cdecl imaxdiv (intmax_t numer, intmax_t denom); /* 7.8.2 Conversion functions for greatest-width integer types */ intmax_t __cdecl strtoimax (const char* __restrict__ nptr, char** __restrict__ endptr, int base); uintmax_t __cdecl strtoumax (const char* __restrict__ nptr, char** __restrict__ endptr, int base); intmax_t __cdecl wcstoimax (const wchar_t* __restrict__ nptr, wchar_t** __restrict__ endptr, int base); uintmax_t __cdecl wcstoumax (const wchar_t* __restrict__ nptr, wchar_t** __restrict__ endptr, int base);
- 2004/06/02 08:45:33 PDT: ああ、そうか cygwin で configure かけたときに有効にしてしまったものが入っているのか。これも見当違いということですね。
- って思ってたら、stdint.h 内の型がないために構文エラー起こしている……。
- Shiro(2004/06/02 13:56:31 PDT): stdint.h はわりと最近の変更で入ったものです。 こういうことがあるので、自分で検証できないプラットフォームのサポートに 躊躇があるんです…たとえあるバージョンで動作するパッチをもらっても、 次の変更でそれが動くかどうか保証できないんで。 なんかうまい開発モデルはありませんかね。
- shelarcy: 専門の管理人を立てるという方法ではダメですよね。手詰まりなので、とりあえずこれまでの成果を元に Gauche:Windows/MinGW を始めてみます。
2004/06/01 09:42:42 PDT - 2004/06/01 17:39:37 PDT
上記 patch の問題点
- arch.h への適用は直接ではなく、autotools を通してやること。
- いや、VC のプロジェクトファイル等を使うときに make を使える保証がないのだから、autotools や make で最初の arch.h の内容を削除して置き換えるようにした方が良さそう。
- 現在のバージョンでは src/load.c の HAVE_DLFCN_H は何処に?
- dl_dlopen.c に移動
- main.c を使わなくしたからといって、main.c だけ他でやっている
#ifdef WIN32_NATIVE #include <io.h> #else #include <unistd.h> #endif
をやらないと、後々響く気がする。 - signal.c 逃げまくり。
+#ifndef WIN32_NATIVE +#define HAVE_A_SIGHUP +#define HAVE_A_SIGQUIT +#define HAVE_A_SIGKILL +#define HAVE_A_SIGUSR1 +#define HAVE_A_SIGUSR2 +#define HAVE_A_SIGPIPE +#define HAVE_A_SIGALRM +#define HAVE_A_SIGCHLD +#define HAVE_A_SIGCONT +#define HAVE_A_SIGSTOP +#define HAVE_A_SIGTSTP +#define HAVE_A_SIGTTIN +#define HAVE_A_SIGTTOU +#define HAVE_A_PASSWD +#endif + + /* Master signal handler vector. */ static struct sigHandlersRec { sigset_t masterSigset; /* The signals Gauche is _allowed_ to handle. @@ -80,9 +98,13 @@ int num; int defaultHandle; } sigDesc[] = { +#ifdef HAVE_A_SIGHUP SIGDEF(SIGHUP, SIGDEF_EXIT), /* Hangup (POSIX) */ +#endif SIGDEF(SIGINT, SIGDEF_ERROR), /* Interrupt (ANSI) */ +#ifdef HAVE_A_SIGQUIT SIGDEF(SIGQUIT, SIGDEF_EXIT), /* Quit (POSIX) */ +#endif SIGDEF(SIGILL, SIGDEF_NOHANDLE), /* Illegal instruction (ANSI) */ #ifdef SIGTRAP SIGDEF(SIGTRAP, SIGDEF_ERROR), /* Trace trap */ @@ -95,22 +117,44 @@ SIGDEF(SIGBUS, SIGDEF_NOHANDLE), /* BUS error (4.2 BSD) */ #endif SIGDEF(SIGFPE, SIGDEF_ERROR), /* Floating-point exception (ANSI) */ +#ifdef HAVE_A_SIGKILL SIGDEF(SIGKILL, SIGDEF_NOHANDLE), /* Kill, unblockable (POSIX) */ +#endif +#ifdef HAVE_A_SIGUSR1 SIGDEF(SIGUSR1, SIGDEF_ERROR), /* User-defined signal 1 (POSIX) */ +#endif SIGDEF(SIGSEGV, SIGDEF_NOHANDLE), /* Segmentation violation (ANSI) */ +#ifdef HAVE_A_SIGUSR2 SIGDEF(SIGUSR2, SIGDEF_ERROR), /* User-defined signal 2 (POSIX) */ +#endif +#ifdef HAVE_A_SIGPIPE SIGDEF(SIGPIPE, SIGDEF_ERROR), /* Broken pipe (POSIX) */ +#endif +#ifdef HAVE_A_SIGALRM SIGDEF(SIGALRM, SIGDEF_ERROR), /* Alarm clock (POSIX) */ +#endif SIGDEF(SIGTERM, SIGDEF_EXIT), /* Termination (ANSI) */ #ifdef SIGSTKFLT SIGDEF(SIGSTKFLT, SIGDEF_ERROR), /* Stack fault */ #endif +#ifdef HAVE_A_SIGCHLD SIGDEF(SIGCHLD, SIGDEF_NOHANDLE), /* Child status has changed (POSIX) */ +#endif +#ifdef HAVE_A_SIGCONT SIGDEF(SIGCONT, SIGDEF_NOHANDLE), /* Continue (POSIX) */ +#endif +#ifdef HAVE_A_SIGSTOP SIGDEF(SIGSTOP, SIGDEF_NOHANDLE), /* Stop, unblockable (POSIX) */ +#endif +#ifdef HAVE_A_SIGTSTP SIGDEF(SIGTSTP, SIGDEF_NOHANDLE), /* Keyboard stop (POSIX) */ +#endif +#ifdef HAVE_A_SIGTTIN SIGDEF(SIGTTIN, SIGDEF_NOHANDLE), /* Background read from tty (POSIX) */ +#endif +#ifdef HAVE_A_SIGTTOU SIGDEF(SIGTTOU, SIGDEF_NOHANDLE), /* Background write to tty (POSIX) */ +#endif #ifdef SIGURG SIGDEF(SIGURG, SIGDEF_NOHANDLE), /* Urgent condition on socket (4.2 BSD) */ #endif
これの意義が良く分からない - string.c, sinbol.c, system.c 定義なし
- Shiro: シグナルですが、単に#ifdef SIGHUPとかで囲むのではだめですか。 SIGHUPは定義されちゃってるけど使えない、とかなんだろうか。
- shelarcy: SIGHUP を replace する mechanism は用意されてないって書いてますね。すると、何でしょうか?
- shelarcy (2004/06/01 20:25:09 PDT): ついでに、なんとか VC のプロジェクトファイルを実行してコンパイルしようとする状態までいったのですが、gauche/int64.h の <stdint.h> がないという部分で撃沈しました。
2003/03/09 09:05:31 PST
- コンパイルフラグをWIN32_NATIVEに変更
- パスの扱いをC:を/gauche_drive/c/に変換する事で対応