まつもと ゆきひろです

In message "[ruby-list:3676] MSVC compile error"
    on 97/08/13, toyofuku / juice.or.jp <toyofuku / juice.or.jp> writes:

|  豊福@パパイヤです。

MSVCを識別するためのマクロ名はVC32で良いですか?

|・unistd.h などないファイルに対応する HAVE_UNISTD_H
|  などを define しないようにした。
|  でも数箇所 #ifdef HAVE_... なしで include
|  しているところもあったのでそこはコメントアウト
|  した。

これはこちらのミスでしょう.コメントアウトした場所を教えて下
さい.

|・R_OK, W_OK, X_OK がない
|  4, 2, 1 に define した。
|
|・S_ISGID, S_IXUGO がない
|  linux で定義されている値に define した。
|
|・gid_t がない
|  GETGROUPS_T には short を define した。
|
|・DIR がない
|  dir.c, glob.c がコンパイルできない。

ううう,この辺はどうすべきなんでしょう.Perlとかどうしてるの
かな.

|・fd_set がない
|  winsock.h を include した。

selectを使う場所ではwinsock.hをインクルードする必要があるよ
うですね.

|・eval.c に struct timeval がない
|  sys/time.h もないので代りに winsock.h を
|  include した。
|  (file.c io.c process.c time.c では自前で
|    struct timeval が定義されている。ただし
|    file.c では struct が stuct になっている。)

修正します.eval.cにもio.cと同様の定義を追加します.

|・OpenFile という名前が winbase.h のものとぶつかる
|  名前を変えた。

そうですか.では名前を変えましょう.

|・process.c の struct wail_data 定義の閉括弧の後に
|  セミコロンがない

修正します.

|・process.c の f_wait() の中の status = data.status;
|  でエラー
|  state = data.status; にした。

修正します.

|・SIGHUP, SIGQUIT がない
|  コメントアウトした。

#ifdef SIGHUPなどでチェックするようにしましょう.

|  dir.obj と glob.obj 以外をリンクしたときの
|未定義関数エラーを最後につけておきます。このうち気に
|なっているのは
|
|・ReadDataPending
|  READ_DATA_PENDING() 関係

これはシステムに合わせて自分で定義する必要があります.stdio
のバッファに読み込まれたデータがある時真を返す関数です.MSVC
で有効な定義がわかれば教えて下さい.前述の識別マクロを使って
組み込みますから.

|・alloca
|  _alloca はあるみたい

とりあえずruby.hでALLOCA_Nを_allocaを使うように変更してみて
下さい.それでだめなら,missing/alloca.cを使って下さい.その
場合,config.hに

#define C_ALLOCA

を追加する必要があると思います.

|・select@20
|  winsock.h で PASCAL FAR select(...)

selectを使っている全部のファイルでwinsock.hをインクルードす
れば良いのでしょうか?

|・strcasecmp
|  標準関数なんですか?

確かそのはずなんですけど.簡単に定義できますから,missingに
追加しておくようにしましょう.

|  これら以外の関数はどのライブラリをリンクすれば
|よいでしょうか。
|
|
|未定義関数一覧
|
|	ReadDataPending
|	S_ISBLK
|	S_ISFIFO
|	__WSAFDIsSet@8
|	_wait
|	alloca
|	chown
|	crypt
|	fchmod
|	fchown
|	fcntl
|	flock
|	fork
|	ftruncate
|	getegid
|	geteuid
|	getgid
|	getgroups
|	getpgrp
|	getppid
|	gettimeofday
|	getuid
|	ioctl
|	kill
|	link
|	lstat
|	pipe
|	random
|	readlink
|	select@20
|	setegid
|	setenv
|	seteuid
|	setpgrp
|	setregid
|	setreuid
|	sigblock
|	sigmask
|	sigsetmask
|	sleep
|	strcasecmp
|	symlink
|	syscall
|	truncate
|	utimes
|	vfork
|	wait

これらのうち,config.hでHAVE_XXXXが定義されているものは外す
ことでコンパイルできるようになるものが多いと思います.なかに
は対応が不十分なものもあると思いますが,それは指摘して下さい.

                                まつもと ゆきひろ /:|)