有馬@FITECです。

VC++ 用の makefile を編集して WATCOM C/C++ 10.5J で ruby-1.1c2 を make しようと
してるのですが、一筋縄では通ってくれません。作業経過を報告します。

WATCOM C/C++ には、以下の定義済みシンボルがあります。いくつかのOSをターゲットと
して設定できるので、それぞれ以下のようなシンボルを利用できます。

__WATCOMC__     コンパイラ識別。

ターゲット別定義シンボル

__DOS__         (DOSエクステンダを含む)MS-DOS。
MSDOS           (DOSエクステンダを含む)MS-DOS。
__OS2__         OS/2(16ビットまたは32ビット)。
__QNX__         QNX。
__NETWARE_386__ Novell NetWare 386。
__NT__          WindowsNT。

以下は、コンパイラにエラーといわせないために行った変更個所です。grep の出力です。
diff でなくてすみません。ほとんどは、プロトタイプと引数の型が合わないとか、
引数の数が違うというメッセージに対して対処したものです。

__WATCOMC__ の場合は、以下を定義しない。

MISSING\NT.H	226 	#ifndef __WATCOMC__             /* __WATCOMC__*/
MISSING\NT.H	227 	#define O_BINARY 0x8000         /* __WATCOMC__*/
MISSING\NT.H	228 	#endif                          /* __WATCOMC__*/
CONFIG.H	54 	#ifndef __WATCOMC__             /* __WATCOMC__*/
CONFIG.H	55 	#define S_IFMT   _S_IFMT        /* __WATCOMC__*/
CONFIG.H	56 	#define S_IFDIR  _S_IFDIR       /* __WATCOMC__*/
CONFIG.H	57 	#define S_IFCHR  _S_IFCHR       /* __WATCOMC__*/
CONFIG.H	58 	#define S_IFREG  _S_IFREG       /* __WATCOMC__*/
CONFIG.H	59 	#define S_IREAD  _S_IREAD       /* __WATCOMC__*/
CONFIG.H	60 	#define S_IWRITE _S_IWRITE      /* __WATCOMC__*/
CONFIG.H	61 	#define S_IEXEC  _S_IEXEC       /* __WATCOMC__*/
CONFIG.H	62 	#define S_IFIFO  _S_IFIFO       /* __WATCOMC__*/
CONFIG.H	63 	#endif                          /* __WATCOMC__*/

条件判断の追加。

EXT\WIN32API\WIN32API.C	161 	#if defined(_MSC_VER) || defined(__LCC__) || defined(__WATCOMC__)
EXT\WIN32API\WIN32API.C	177 	#if defined(_MSC_VER) || defined(__LCC__) || defined(__WATCOMC__)
FILE.C	970 	#  ifndef __WATCOMC__           /* __WATCOMC__*/
FILE.C	971 	#   define utimbuf _utimbuf     /* __WATCOMC__*/
FILE.C	972 	#  endif                        /* __WATCOMC__*/

識別子衝突。

IO.C で interrupt を interrupt_flag に変更

引数が多かったもの

RE.C	244 	    reg_expr_str(str, RREGEXP(re)->str,RREGEXP(re)->len);    /* __WATCOMC__*/

引数が足りなかったもの

HASH.C	538 	    hash_foreach(hash, each_value_i, 0); /* __WATCOMC__ */
HASH.C	555 	    hash_foreach(hash, each_key_i, 0); /* __WATCOMC__ */

引数の型キャスト。関数定義の型にあわせようとしてるだけです。

BIGNUM.C	107 	    return bignorm((VALUE)RBIGNUM(x)); /* __WATCOMC__ */
BIGNUM.C	1264 	    return big_mod((VALUE)v, max); /* __WATCOMC__ */
DLN.C	81 	# if defined(__hp9000s300) || defined(__NetBSD__) || defined(__BORLANDC__) || defined(__FreeBSD__) || defined(NeXT) || 
defined(__WATCOMC__)
EVAL.C	1456 		if (ev_const_defined((NODE *)the_frame->cbase, node->nd_vid)) { /* __WATCOMC__ */
EVAL.C	2174 			ev_const_defined((NODE *)the_frame->cbase, node->nd_vid)) { /* __WATCOMC__ */
EVAL.C	2203 		result = ev_const_get((NODE *)the_frame->cbase, node->nd_vid); /* __WATCOMC__ */
GC.C	611 			if (p->as.basic.flags) obj_free((VALUE)p); /* __WATCOMC__*/
GC.C	1020 		    run_final((VALUE)p); /* __WATCOMC__*/
MARSHAL.C	668 			r_regist((VALUE)big, arg); /* __WATCOMC__*/
RE.C	641 		kcode_none((VALUE)re); /* __WATCOMC__ */
RE.C	644 		kcode_euc((VALUE)re); /* __WATCOMC__ */
RE.C	647 		kcode_sjis((VALUE)re); /* __WATCOMC__ */
RE.C	651 	    kcode_set_option((VALUE)re); /* __WATCOMC__ */
STRUCT.C	219 	    st = make_struct((VALUE)name, (VALUE)rest, klass); /* __WATCOMC__ */
STRING.C	899 	    str_replace(str, beg, len, (VALUE)val); /* __WATCOMC__*/
STRING.C	1094 		    str_replace2(str, beg, end, (VALUE *)val); /* __WATCOMC__*/
STRING.C	1104 			str_replace2(str, beg, end, (VALUE *)str_to_str(val)); /* __WATCOMC__*/
IO.C	1846 	    VALUE line = f_gets_method(argc, &argv); /* __WATCOMC__ */
IO.C	1937 	    while (!NIL_P(line = f_gets_method(argc, &argv))) {  /* __WATCOMC__ */
IO.C	2507 	    while (RTEST(str = f_gets_method(argc, &argv))) {  /* __WATCOMC__ */

メッセージがたくさん出てうろたえているため、以下のファイルはまだ未検討です。

dir.c error.c parse.y

--
 有馬 康弘 <fit0298 / fitec.co.jp>