From: nobu.nakada@... Date: 2002-10-10T13:43:01+09:00 Subject: [ruby-dev:18473] Compiling using oldnames on mswin/mingw/bccwin なかだです。 [ruby-talk:52801]の件ですが、こんなところでどうでしょうか。気に なる点としては * utime.hもsys/utime.hもないけれどそれ以外のどこかで struct utimbufを定義してあるという環境ではコンパイルできなくなる。 * bccで_open()の替わりに_sopen()を使ってるのは、単に引数の数を 合わせるためだけ? * strcasecmp()とstrncasecmp()は#defineのままでよい? できればついでにNTじゃなくて_WIN32とかにしてしまったほうがいい かも知れません。 Index: configure.in =================================================================== RCS file: /cvs/ruby/src/ruby/configure.in,v retrieving revision 1.146 diff -u -2 -p -r1.146 configure.in --- configure.in 4 Oct 2002 05:46:45 -0000 1.146 +++ configure.in 10 Oct 2002 03:07:22 -0000 @@ -268,5 +271,5 @@ cygwin*) rb_cv_have_daylight=no ac_cv_func_setitimer=no ;; -mingw*) LIBS="-lwsock32 -lmsvcrt $LIBS" +mingw*) LIBS="-lcoldname -lwsock32 -lmsvcrt $LIBS" rb_cv_need_io_flush_between_rw=no rb_cv_need_io_flush_before_seek=no @@ -351,5 +354,5 @@ AC_CHECK_HEADERS(stdlib.h string.h unist fcntl.h sys/fcntl.h sys/select.h sys/time.h sys/times.h sys/param.h\ syscall.h pwd.h a.out.h utime.h memory.h direct.h sys/resource.h \ - sys/mkdev.h) + sys/mkdev.h sys/utime.h) dnl Checks for typedefs, structures, and compiler characteristics. Index: file.c =================================================================== RCS file: /cvs/ruby/src/ruby/file.c,v retrieving revision 1.113 diff -u -2 -p -r1.113 file.c --- file.c 6 Sep 2002 08:59:38 -0000 1.113 +++ file.c 10 Oct 2002 03:49:27 -0000 @@ -55,4 +55,6 @@ VALUE rb_time_new _((time_t, time_t)); #ifdef HAVE_UTIME_H #include +#elif defined HAVE_SYS_UTIME_H +#include #endif @@ -1207,20 +1209,9 @@ rb_file_s_utime(argc, argv) #else -#ifndef HAVE_UTIME_H -# ifdef NT -# if defined(__BORLANDC__) -# include -# else -# include -# endif -# if defined(_MSC_VER) || defined __MINGW32__ -# define utimbuf _utimbuf -# endif -# else +#if !defined HAVE_UTIME_H && !defined HAVE_SYS_UTIME_H struct utimbuf { long actime; long modtime; }; -# endif #endif Index: util.c =================================================================== RCS file: /cvs/ruby/src/ruby/util.c,v retrieving revision 1.29 diff -u -2 -p -r1.29 util.c --- util.c 28 Aug 2002 08:05:23 -0000 1.29 +++ util.c 10 Oct 2002 03:46:16 -0000 @@ -247,6 +247,11 @@ valid_filename(char *s) // It doesn't exist, so see if we can open it. */ - - if ((fd = _open(s, O_CREAT, 0666)) >= 0) { + +#ifdef __BORLANDC__ + fd = _open(s, O_CREAT); +#else + fd = _open(s, O_CREAT, 0666); +#endif + if (fd >= 0) { _close(fd); _unlink (s); /* don't leave it laying around */ Index: bcc32/Makefile.sub =================================================================== RCS file: /cvs/ruby/src/ruby/bcc32/Makefile.sub,v retrieving revision 1.8 diff -u -2 -p -r1.8 Makefile.sub --- bcc32/Makefile.sub 15 Sep 2002 12:57:21 -0000 1.8 +++ bcc32/Makefile.sub 10 Oct 2002 03:24:19 -0000 @@ -199,5 +199,5 @@ config.h: Makefile $(srcdir)bcc32/Makefi /* \#define HAVE_SYS_WAIT_H 1 */ \#define HAVE_STRING_H 1 -/* \#define HAVE_UTIME_H 1 */ +\#define HAVE_UTIME_H 1 \#define HAVE_MEMORY_H 1 /* \#define HAVE_ST_BLKSIZE 1 */ Index: Makefile.sub =================================================================== RCS file: /cvs/ruby/src/ruby/win32/Makefile.sub,v retrieving revision 1.28 diff -u -2 -p -r1.28 Makefile.sub --- Makefile.sub 15 Sep 2002 12:57:20 -0000 1.28 +++ Makefile.sub 10 Oct 2002 02:25:36 -0000 @@ -93,5 +93,5 @@ RFLAGS = -r EXTLIBS = !endif -LIBS = user32.lib advapi32.lib wsock32.lib $(EXTLIBS) +LIBS = oldnames.lib user32.lib advapi32.lib wsock32.lib $(EXTLIBS) MISSING = acosh.obj crypt.obj win32.obj isinf.obj isnan.obj LDSHARED = $(CC) -LD @@ -275,5 +275,5 @@ s,@CPPFLAGS@,$(CPPFLAGS),;t t s,@FFLAGS@,$(FFLAGS),;t t s,@LDFLAGS@,$(LDFLAGS),;t t -s,@LIBS@,user32.lib advapi32.lib wsock32.lib,;t t +s,@LIBS@,$(LIBS),;t t s,@exec_prefix@,$${prefix},;t t s,@prefix@,,;t t Index: win32/win32.c =================================================================== RCS file: /cvs/ruby/src/ruby/win32/win32.c,v retrieving revision 1.71 diff -u -2 -p -r1.71 win32.c --- win32/win32.c 1 Oct 2002 15:26:39 -0000 1.71 +++ win32/win32.c 10 Oct 2002 03:51:40 -0000 @@ -1325,7 +1325,12 @@ valid_filename(char *s) // It doesn't exist, so see if we can open it. // - - if ((fd = _open(s, _O_CREAT, 0666)) >= 0) { - close(fd); + +#ifdef __BORLANDC__ + fd = _open(s, _O_CREAT); +#else + fd = _open(s, _O_CREAT, 0666); +#endif + if (fd >= 0) { + _close(fd); _unlink (s); // don't leave it laying around return 1; Index: win32/win32.h =================================================================== RCS file: /cvs/ruby/src/ruby/win32/win32.h,v retrieving revision 1.30 diff -u -2 -p -r1.30 win32.h --- win32/win32.h 1 Oct 2002 15:26:39 -0000 1.30 +++ win32/win32.h 10 Oct 2002 03:23:53 -0000 @@ -1,4 +1,4 @@ -#ifndef EXT_NT_H -#define EXT_NT_H +#ifndef RUBY_WIN32_H +#define RUBY_WIN32_H /* @@ -57,9 +57,4 @@ extern "C++" { #include #include -#if !defined(__BORLANDC__) -# include -#else -# include -#endif #include #include @@ -88,63 +83,27 @@ extern "C++" { #define getchar() rb_w32_getc(stdin) #define putchar(_c) rb_w32_putc(_c, stdout) -#define fgetchar(_stream) getchar() -#define fputchar(_c, _stream) putchar(_c) +#define fgetchar() getchar() +#define fputchar(_c) putchar(_c) -#ifndef __BORLANDC__ +#ifndef __MINGW32__ +static inline int +strcasecmp(const char *s1, const char *s2) +{ + return stricmp(s1, s2); +} -#define access _access -#define chmod _chmod -#define chsize _chsize -#define dup _dup -#define dup2 _dup2 -#define isatty _isatty -#define open _open -#define setmode _setmode -#define execl _execl -#define execle _execle -#define execlp _execlp -#define execlpe _execlpe -#define execv _execv -#define execve _execve -#define execvp _execvp -#define execvpe _execvpe -#define lseek _lseek -#define spawnl _spawnl -#define spawnle _spawnle -#define spawnlp _spawnlp -#define spawnlpe _spawnlpe -#define spawnv _spawnv -#define spawnve _spawnve -#define spawnvp _spawnvp -#define spawnvpe _spawnvpe -#if _MSC_VER < 800 -#define fileno _fileno +static inline int +strncasecmp(const char *s1, const char *s2, size_t n) +{ + return strnicmp(s1, s2, n); +} #endif -#define strcasecmp _stricmp -#define strncasecmp _strnicmp -#else -#define strcasecmp stricmp -#define strncasecmp strnicmp -#define _open _sopen -#endif - -#define close _close -#define creat _creat -#define eof _eof -#define filelength _filelength -#define locking _locking -#define mktemp _mktemp -#define perror _perror -#define read _read -#define sopen _sopen -#define tell _tell -#define umask _umask -#define unlink _unlink -#define write _write + #define getpid rb_w32_getpid #define sleep(x) rb_w32_sleep((x)*1000) -#define utime _utime #define vsnprintf _vsnprintf #define snprintf _snprintf +#define Sleep(msec) (void)rb_w32_sleep(msec) + #undef stat #define stat(path,st) rb_w32_stat(path,st) @@ -162,4 +121,11 @@ extern char * NtGetBin(void); extern pid_t pipe_exec(char *, int, FILE **, FILE **); extern int flock(int fd, int oper); +extern int rb_w32_sleep(unsigned long msec); +extern void rb_w32_enter_critical(void); +extern void rb_w32_leave_critical(void); +extern int rb_w32_putc(int, FILE*); +extern int rb_w32_getc(FILE*); +extern int rb_w32_close(int); +extern int rb_w32_fclose(FILE*); extern int rb_w32_accept(int, struct sockaddr *, int *); extern int rb_w32_bind(int, struct sockaddr *, int); @@ -189,4 +155,5 @@ extern struct protoent * rb_w32_getproto extern struct servent * rb_w32_getservbyname(char *, char *); extern struct servent * rb_w32_getservbyport(int, char *); + extern char * rb_w32_getenv(const char *); extern int rb_w32_rename(const char *, const char *); @@ -471,11 +438,5 @@ struct tms { /* thread stuff */ HANDLE GetCurrentThreadHandle(void); -int rb_w32_main_context(int arg, void (*handler)(int)); -int rb_w32_sleep(unsigned long msec); -void rb_w32_enter_critical(void); -void rb_w32_leave_critical(void); -int rb_w32_putc(int, FILE*); -int rb_w32_getc(FILE*); -#define Sleep(msec) (void)rb_w32_sleep(msec) +extern int rb_w32_main_context(int arg, void (*handler)(int)); /* -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦