diff --git a/configure.ac b/configure.ac index 339ee3b2f2..43e517f370 100644 --- a/configure.ac +++ b/configure.ac @@ -526,6 +526,7 @@ AS_CASE(["$target_os"], RT_VER=`echo "$rb_cv_msvcrt" | tr -cd [0-9]` test "$RT_VER" = "" && RT_VER=60 test "$rb_cv_msvcrt" = "ucrt" && RT_VER=140 + AS_IF([test $RT_VER -lt 80], AC_MSG_ERROR(Runtime library $RT_VER is not supported)) AC_DEFINE_UNQUOTED(RUBY_MSVCRT_VERSION, $RT_VER) sysconfdir= ]) diff --git a/debug.c b/debug.c index 4717a0bc9c..b92faa8f36 100644 --- a/debug.c +++ b/debug.c @@ -168,9 +168,7 @@ ruby_debug_breakpoint(void) } #if defined _WIN32 -# if RUBY_MSVCRT_VERSION >= 80 extern int ruby_w32_rtc_error; -# endif #endif #if defined _WIN32 || defined __CYGWIN__ #include @@ -233,9 +231,7 @@ ruby_env_debug_option(const char *str, int len, void *arg) SET_WHEN("ci", ruby_on_ci, 1); SET_WHEN_UINT("rgengc", &ruby_rgengc_debug, 1, ruby_rgengc_debug = 1); #if defined _WIN32 -# if RUBY_MSVCRT_VERSION >= 80 SET_WHEN("rtc_error", ruby_w32_rtc_error, 1); -# endif #endif #if defined _WIN32 || defined __CYGWIN__ SET_WHEN_UINT("codepage", ruby_w32_codepage, numberof(ruby_w32_codepage), diff --git a/error.c b/error.c index abf50b696a..f452f7b01c 100644 --- a/error.c +++ b/error.c @@ -1076,7 +1076,7 @@ NORETURN(static void die(void)); static void die(void) { -#if defined(_WIN32) && defined(RUBY_MSVCRT_VERSION) && RUBY_MSVCRT_VERSION >= 80 +#if defined(_WIN32) _set_abort_behavior( 0, _CALL_REPORTFAULT); #endif diff --git a/ext/socket/getaddrinfo.c b/ext/socket/getaddrinfo.c index 5b82499655..9a65490b1d 100644 --- a/ext/socket/getaddrinfo.c +++ b/ext/socket/getaddrinfo.c @@ -62,9 +62,6 @@ #endif #include #else -#if defined(_MSC_VER) && _MSC_VER <= 1200 -#include -#endif #include #include #include diff --git a/ext/socket/getnameinfo.c b/ext/socket/getnameinfo.c index ffda7f98c7..98da8c1647 100644 --- a/ext/socket/getnameinfo.c +++ b/ext/socket/getnameinfo.c @@ -55,9 +55,6 @@ #endif #endif #ifdef _WIN32 -#if defined(_MSC_VER) && _MSC_VER <= 1200 -#include -#endif #include #include #define snprintf _snprintf diff --git a/include/ruby/internal/compiler_is/msvc.h b/include/ruby/internal/compiler_is/msvc.h index 8a864ea558..824f0ecc21 100644 --- a/include/ruby/internal/compiler_is/msvc.h +++ b/include/ruby/internal/compiler_is/msvc.h @@ -38,19 +38,8 @@ # define RBIMPL_COMPILER_VERSION_MINOR (_MSC_FULL_VER % 10000000 / 100000) # define RBIMPL_COMPILER_VERSION_PATCH (_MSC_FULL_VER % 100000) -#elif defined(_MSC_FULL_VER) -# define RBIMPL_COMPILER_IS_MSVC 1 -# /* _MSC_FULL_VER = XXYYZZZZ */ -# define RBIMPL_COMPILER_VERSION_MAJOR (_MSC_FULL_VER / 1000000) -# define RBIMPL_COMPILER_VERSION_MINOR (_MSC_FULL_VER % 1000000 / 10000) -# define RBIMPL_COMPILER_VERSION_PATCH (_MSC_FULL_VER % 10000) - #else -# define RBIMPL_COMPILER_IS_MSVC 1 -# /* _MSC_VER = XXYY */ -# define RBIMPL_COMPILER_VERSION_MAJOR (_MSC_VER / 100) -# define RBIMPL_COMPILER_VERSION_MINOR (_MSC_VER % 100) -# define RBIMPL_COMPILER_VERSION_PATCH 0 +# error Unsupported MSVC version #endif #endif /* RBIMPL_COMPILER_IS_MSVC_H */ diff --git a/include/ruby/win32.h b/include/ruby/win32.h index 69e92ed9ff..57e8ab471b 100644 --- a/include/ruby/win32.h +++ b/include/ruby/win32.h @@ -30,15 +30,10 @@ extern "C++" { /* template without extern "C++" */ #if !defined(_WIN64) && !defined(WIN32) #define WIN32 #endif -#if defined(_MSC_VER) && _MSC_VER <= 1200 -#include -#endif #include #include #include -#if !defined(_MSC_VER) || _MSC_VER >= 1400 #include -#endif #if defined(__cplusplus) && defined(_MSC_VER) } #endif @@ -59,13 +54,7 @@ extern "C++" { /* template without extern "C++" */ #include #include #include -#if defined(__cplusplus) && defined(_MSC_VER) && _MSC_VER == 1200 -extern "C++" { /* template without extern "C++" */ -#endif #include -#if defined(__cplusplus) && defined(_MSC_VER) && _MSC_VER == 1200 -} -#endif #include #include #include @@ -436,7 +425,7 @@ extern int rb_w32_utruncate(const char *path, rb_off_t length); #define HAVE_TRUNCATE 1 #define truncate rb_w32_utruncate -#if defined(_MSC_VER) && _MSC_VER >= 1400 && _MSC_VER < 1800 +#if defined(_MSC_VER) && _MSC_VER < 1800 #define strtoll _strtoi64 #define strtoull _strtoui64 #endif diff --git a/internal/bits.h b/internal/bits.h index 2b5aecf112..bbd59ffaca 100644 --- a/internal/bits.h +++ b/internal/bits.h @@ -30,13 +30,13 @@ #include /* for uintptr_t */ #include "internal/compilers.h" /* for MSC_VERSION_SINCE */ -#if MSC_VERSION_SINCE(1310) +#ifdef _MSC_VER # include /* for _byteswap_uint64 */ #endif #if defined(HAVE_X86INTRIN_H) # include /* for _lzcnt_u64 */ -#elif MSC_VERSION_SINCE(1310) +#elif defined(_MSC_VER) # include /* for the following intrinsics */ #endif @@ -50,16 +50,13 @@ # pragma intrinsic(__lzcnt64) #endif -#if MSC_VERSION_SINCE(1310) +#if defined(_MSC_VER) # pragma intrinsic(_rotl) # pragma intrinsic(_rotr) # ifdef _WIN64 # pragma intrinsic(_rotl64) # pragma intrinsic(_rotr64) # endif -#endif - -#if MSC_VERSION_SINCE(1400) # pragma intrinsic(_BitScanForward) # pragma intrinsic(_BitScanReverse) # ifdef _WIN64 @@ -266,7 +263,7 @@ ruby_swap16(uint16_t x) #if __has_builtin(__builtin_bswap16) return __builtin_bswap16(x); -#elif MSC_VERSION_SINCE(1310) +#elif defined(_MSC_VER) return _byteswap_ushort(x); #else @@ -281,7 +278,7 @@ ruby_swap32(uint32_t x) #if __has_builtin(__builtin_bswap32) return __builtin_bswap32(x); -#elif MSC_VERSION_SINCE(1310) +#elif defined(_MSC_VER) return _byteswap_ulong(x); #else @@ -298,7 +295,7 @@ ruby_swap64(uint64_t x) #if __has_builtin(__builtin_bswap64) return __builtin_bswap64(x); -#elif MSC_VERSION_SINCE(1310) +#elif defined(_MSC_VER) return _byteswap_uint64(x); #else @@ -323,7 +320,7 @@ nlz_int32(uint32_t x) #elif defined(__x86_64__) && defined(__LZCNT__) return (unsigned int)_lzcnt_u32(x); -#elif MSC_VERSION_SINCE(1400) /* &&! defined(__AVX2__) */ +#elif defined(_MSC_VER) /* &&! defined(__AVX2__) */ unsigned long r; return _BitScanReverse(&r, x) ? (31 - (int)r) : 32; @@ -352,7 +349,7 @@ nlz_int64(uint64_t x) #elif defined(__x86_64__) && defined(__LZCNT__) return (unsigned int)_lzcnt_u64(x); -#elif defined(_WIN64) && MSC_VERSION_SINCE(1400) /* &&! defined(__AVX2__) */ +#elif defined(_WIN64) && defined(_MSC_VER) /* &&! defined(__AVX2__) */ unsigned long r; return _BitScanReverse64(&r, x) ? (63u - (unsigned int)r) : 64; @@ -538,7 +535,7 @@ ntz_int32(uint32_t x) #if defined(__x86_64__) && defined(__BMI__) return (unsigned)_tzcnt_u32(x); -#elif MSC_VERSION_SINCE(1400) +#elif defined(_MSC_VER) /* :FIXME: Is there any way to issue TZCNT instead of BSF, apart from using * assembly? Because issuing LZCNT seems possible (see nlz.h). */ unsigned long r; @@ -559,8 +556,8 @@ ntz_int64(uint64_t x) { #if defined(__x86_64__) && defined(__BMI__) return (unsigned)_tzcnt_u64(x); - -#elif defined(_WIN64) && MSC_VERSION_SINCE(1400) +` +#elif defined(_WIN64) && defined(_MSC_VER) unsigned long r; return _BitScanForward64(&r, x) ? (int)r : 64; @@ -608,10 +605,10 @@ RUBY_BIT_ROTL(VALUE v, int n) #elif __has_builtin(__builtin_rotateleft64) && (SIZEOF_VALUE * CHAR_BIT == 64) return __builtin_rotateleft64(v, n); -#elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 32) +#elif defined(_MSC_VER) && (SIZEOF_VALUE * CHAR_BIT == 32) return _rotl(v, n); -#elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 64) +#elif defined(_MSC_VER) && (SIZEOF_VALUE * CHAR_BIT == 64) return _rotl64(v, n); #elif defined(_lrotl) && (SIZEOF_VALUE == SIZEOF_LONG) @@ -632,10 +629,10 @@ RUBY_BIT_ROTR(VALUE v, int n) #elif __has_builtin(__builtin_rotateright64) && (SIZEOF_VALUE * CHAR_BIT == 64) return __builtin_rotateright64(v, n); -#elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 32) +#elif defined(_MSC_VER) && (SIZEOF_VALUE * CHAR_BIT == 32) return _rotr(v, n); -#elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 64) +#elif defined(_MSC_VER) && (SIZEOF_VALUE * CHAR_BIT == 64) return _rotr64(v, n); #elif defined(_lrotr) && (SIZEOF_VALUE == SIZEOF_LONG) diff --git a/numeric.c b/numeric.c index 731a809523..3d6648f7d6 100644 --- a/numeric.c +++ b/numeric.c @@ -1591,17 +1591,11 @@ rb_float_equal(VALUE x, VALUE y) } else if (RB_FLOAT_TYPE_P(y)) { b = RFLOAT_VALUE(y); -#if MSC_VERSION_BEFORE(1300) - if (isnan(b)) return Qfalse; -#endif } else { return num_equal(x, y); } a = RFLOAT_VALUE(x); -#if MSC_VERSION_BEFORE(1300) - if (isnan(a)) return Qfalse; -#endif return RBOOL(a == b); } @@ -1734,16 +1728,10 @@ rb_float_gt(VALUE x, VALUE y) } else if (RB_FLOAT_TYPE_P(y)) { b = RFLOAT_VALUE(y); -#if MSC_VERSION_BEFORE(1300) - if (isnan(b)) return Qfalse; -#endif } else { return rb_num_coerce_relop(x, y, '>'); } -#if MSC_VERSION_BEFORE(1300) - if (isnan(a)) return Qfalse; -#endif return RBOOL(a > b); } @@ -1777,16 +1765,10 @@ flo_ge(VALUE x, VALUE y) } else if (RB_FLOAT_TYPE_P(y)) { b = RFLOAT_VALUE(y); -#if MSC_VERSION_BEFORE(1300) - if (isnan(b)) return Qfalse; -#endif } else { return rb_num_coerce_relop(x, y, idGE); } -#if MSC_VERSION_BEFORE(1300) - if (isnan(a)) return Qfalse; -#endif return RBOOL(a >= b); } @@ -1819,16 +1801,10 @@ flo_lt(VALUE x, VALUE y) } else if (RB_FLOAT_TYPE_P(y)) { b = RFLOAT_VALUE(y); -#if MSC_VERSION_BEFORE(1300) - if (isnan(b)) return Qfalse; -#endif } else { return rb_num_coerce_relop(x, y, '<'); } -#if MSC_VERSION_BEFORE(1300) - if (isnan(a)) return Qfalse; -#endif return RBOOL(a < b); } @@ -1862,16 +1838,10 @@ flo_le(VALUE x, VALUE y) } else if (RB_FLOAT_TYPE_P(y)) { b = RFLOAT_VALUE(y); -#if MSC_VERSION_BEFORE(1300) - if (isnan(b)) return Qfalse; -#endif } else { return rb_num_coerce_relop(x, y, idLE); } -#if MSC_VERSION_BEFORE(1300) - if (isnan(a)) return Qfalse; -#endif return RBOOL(a <= b); } @@ -1899,10 +1869,7 @@ rb_float_eql(VALUE x, VALUE y) if (RB_FLOAT_TYPE_P(y)) { double a = RFLOAT_VALUE(x); double b = RFLOAT_VALUE(y); -#if MSC_VERSION_BEFORE(1300) - if (isnan(a) || isnan(b)) return Qfalse; -#endif - return RBOOL(a == b); + return RBOOL(a == b); } return Qfalse; } diff --git a/parser_bits.h b/parser_bits.h index ca7535280e..cbe42db396 100644 --- a/parser_bits.h +++ b/parser_bits.h @@ -30,13 +30,13 @@ #include /* for uintptr_t */ #include "internal/compilers.h" /* for MSC_VERSION_SINCE */ -#if MSC_VERSION_SINCE(1310) +#if defined(_MSC_VER) # include /* for _byteswap_uint64 */ #endif #if defined(HAVE_X86INTRIN_H) # include /* for _lzcnt_u64 */ -#elif MSC_VERSION_SINCE(1310) +#elif defined(_MSC_VER) # include /* for the following intrinsics */ #endif @@ -50,7 +50,7 @@ # pragma intrinsic(__lzcnt64) #endif -#if MSC_VERSION_SINCE(1310) +#if defined(_MSC_VER) # pragma intrinsic(_rotl) # pragma intrinsic(_rotr) # ifdef _WIN64 @@ -59,7 +59,7 @@ # endif #endif -#if MSC_VERSION_SINCE(1400) +#if defined(_MSC_VER) # pragma intrinsic(_BitScanForward) # pragma intrinsic(_BitScanReverse) # ifdef _WIN64 @@ -180,7 +180,7 @@ ruby_swap16(uint16_t x) #if __has_builtin(__builtin_bswap16) return __builtin_bswap16(x); -#elif MSC_VERSION_SINCE(1310) +#elif defined(_MSC_VER) return _byteswap_ushort(x); #else @@ -195,7 +195,7 @@ ruby_swap32(uint32_t x) #if __has_builtin(__builtin_bswap32) return __builtin_bswap32(x); -#elif MSC_VERSION_SINCE(1310) +#elif defined(_MSC_VER) return _byteswap_ulong(x); #else @@ -212,7 +212,7 @@ ruby_swap64(uint64_t x) #if __has_builtin(__builtin_bswap64) return __builtin_bswap64(x); -#elif MSC_VERSION_SINCE(1310) +#elif defined(_MSC_VER) return _byteswap_uint64(x); #else @@ -237,7 +237,7 @@ nlz_int32(uint32_t x) #elif defined(__x86_64__) && defined(__LZCNT__) return (unsigned int)_lzcnt_u32(x); -#elif MSC_VERSION_SINCE(1400) /* &&! defined(__AVX2__) */ +#elif defined(_MSC_VER) /* &&! defined(__AVX2__) */ unsigned long r; return _BitScanReverse(&r, x) ? (31 - (int)r) : 32; @@ -266,7 +266,7 @@ nlz_int64(uint64_t x) #elif defined(__x86_64__) && defined(__LZCNT__) return (unsigned int)_lzcnt_u64(x); -#elif defined(_WIN64) && MSC_VERSION_SINCE(1400) /* &&! defined(__AVX2__) */ +#elif defined(_WIN64) && defined(_MSC_VER) /* &&! defined(__AVX2__) */ unsigned long r; return _BitScanReverse64(&r, x) ? (63u - (unsigned int)r) : 64; @@ -452,7 +452,7 @@ ntz_int32(uint32_t x) #if defined(__x86_64__) && defined(__BMI__) return (unsigned)_tzcnt_u32(x); -#elif MSC_VERSION_SINCE(1400) +#elif defined(_MSC_VER) /* :FIXME: Is there any way to issue TZCNT instead of BSF, apart from using * assembly? Because issuing LZCNT seems possible (see nlz.h). */ unsigned long r; @@ -474,7 +474,7 @@ ntz_int64(uint64_t x) #if defined(__x86_64__) && defined(__BMI__) return (unsigned)_tzcnt_u64(x); -#elif defined(_WIN64) && MSC_VERSION_SINCE(1400) +#elif defined(_WIN64) && defined(_MSC_VER) unsigned long r; return _BitScanForward64(&r, x) ? (int)r : 64; @@ -522,10 +522,10 @@ RUBY_BIT_ROTL(VALUE v, int n) #elif __has_builtin(__builtin_rotateleft64) && (SIZEOF_VALUE * CHAR_BIT == 64) return __builtin_rotateleft64(v, n); -#elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 32) +#elif defined(_MSC_VER) && (SIZEOF_VALUE * CHAR_BIT == 32) return _rotl(v, n); -#elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 64) +#elif defined(_MSC_VER) && (SIZEOF_VALUE * CHAR_BIT == 64) return _rotl64(v, n); #elif defined(_lrotl) && (SIZEOF_VALUE == SIZEOF_LONG) @@ -546,10 +546,10 @@ RUBY_BIT_ROTR(VALUE v, int n) #elif __has_builtin(__builtin_rotateright64) && (SIZEOF_VALUE * CHAR_BIT == 64) return __builtin_rotateright64(v, n); -#elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 32) +#elif defined(_MSC_VER) && (SIZEOF_VALUE * CHAR_BIT == 32) return _rotr(v, n); -#elif MSC_VERSION_SINCE(1310) && (SIZEOF_VALUE * CHAR_BIT == 64) +#elif defined(_MSC_VER) && (SIZEOF_VALUE * CHAR_BIT == 64) return _rotr64(v, n); #elif defined(_lrotr) && (SIZEOF_VALUE == SIZEOF_LONG) diff --git a/random.c b/random.c index bf5588186c..0fd953b81e 100644 --- a/random.c +++ b/random.c @@ -230,7 +230,7 @@ int_pair_to_real_inclusive(uint32_t a, uint32_t b) const uint128_t m = ((uint128_t)1 << dig) | 1; uint128_t x = ((uint128_t)a << 32) | b; r = (double)(uint64_t)((x * m) >> 64); -#elif defined HAVE_UINT64_T && !MSC_VERSION_BEFORE(1300) +#elif defined HAVE_UINT64_T uint64_t x = ((uint64_t)a << dig_u) + (((uint64_t)b + (a >> dig_u)) >> dig_r64); r = (double)x; diff --git a/regint.h b/regint.h index 9924e5f62a..9f59ca6006 100644 --- a/regint.h +++ b/regint.h @@ -266,19 +266,6 @@ # include #endif -#ifdef _WIN32 -# if defined(_MSC_VER) && (_MSC_VER < 1300) -# ifndef _INTPTR_T_DEFINED -# define _INTPTR_T_DEFINED -typedef int intptr_t; -# endif -# ifndef _UINTPTR_T_DEFINED -# define _UINTPTR_T_DEFINED -typedef unsigned int uintptr_t; -# endif -# endif -#endif /* _WIN32 */ - #ifndef PRIdPTR # ifdef _WIN64 # define PRIdPTR "I64d" diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 1b1eeb69d9..8495ee59ef 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -2518,15 +2518,6 @@ opt_equality_specialized(VALUE recv, VALUE obj) double a = RFLOAT_VALUE(recv); double b = RFLOAT_VALUE(obj); -#if MSC_VERSION_BEFORE(1300) - if (isnan(a)) { - return Qfalse; - } - else if (isnan(b)) { - return Qfalse; - } - else -#endif return RBOOL(a == b); } else if (RBASIC_CLASS(recv) == rb_cString && EQ_UNREDEFINED_P(STRING)) { @@ -2624,37 +2615,27 @@ check_match(rb_execution_context_t *ec, VALUE pattern, VALUE target, enum vm_che } -#if MSC_VERSION_BEFORE(1300) -#define CHECK_CMP_NAN(a, b) if (isnan(a) || isnan(b)) return Qfalse; -#else -#define CHECK_CMP_NAN(a, b) /* do nothing */ -#endif - static inline VALUE double_cmp_lt(double a, double b) { - CHECK_CMP_NAN(a, b); return RBOOL(a < b); } static inline VALUE double_cmp_le(double a, double b) { - CHECK_CMP_NAN(a, b); return RBOOL(a <= b); } static inline VALUE double_cmp_gt(double a, double b) { - CHECK_CMP_NAN(a, b); return RBOOL(a > b); } static inline VALUE double_cmp_ge(double a, double b) { - CHECK_CMP_NAN(a, b); return RBOOL(a >= b); } @@ -6878,7 +6859,6 @@ vm_opt_lt(VALUE recv, VALUE obj) else if (RBASIC_CLASS(recv) == rb_cFloat && RBASIC_CLASS(obj) == rb_cFloat && BASIC_OP_UNREDEFINED_P(BOP_LT, FLOAT_REDEFINED_OP_FLAG)) { - CHECK_CMP_NAN(RFLOAT_VALUE(recv), RFLOAT_VALUE(obj)); return RBOOL(RFLOAT_VALUE(recv) < RFLOAT_VALUE(obj)); } else { @@ -6903,7 +6883,6 @@ vm_opt_le(VALUE recv, VALUE obj) else if (RBASIC_CLASS(recv) == rb_cFloat && RBASIC_CLASS(obj) == rb_cFloat && BASIC_OP_UNREDEFINED_P(BOP_LE, FLOAT_REDEFINED_OP_FLAG)) { - CHECK_CMP_NAN(RFLOAT_VALUE(recv), RFLOAT_VALUE(obj)); return RBOOL(RFLOAT_VALUE(recv) <= RFLOAT_VALUE(obj)); } else { @@ -6928,7 +6907,6 @@ vm_opt_gt(VALUE recv, VALUE obj) else if (RBASIC_CLASS(recv) == rb_cFloat && RBASIC_CLASS(obj) == rb_cFloat && BASIC_OP_UNREDEFINED_P(BOP_GT, FLOAT_REDEFINED_OP_FLAG)) { - CHECK_CMP_NAN(RFLOAT_VALUE(recv), RFLOAT_VALUE(obj)); return RBOOL(RFLOAT_VALUE(recv) > RFLOAT_VALUE(obj)); } else { @@ -6953,7 +6931,6 @@ vm_opt_ge(VALUE recv, VALUE obj) else if (RBASIC_CLASS(recv) == rb_cFloat && RBASIC_CLASS(obj) == rb_cFloat && BASIC_OP_UNREDEFINED_P(BOP_GE, FLOAT_REDEFINED_OP_FLAG)) { - CHECK_CMP_NAN(RFLOAT_VALUE(recv), RFLOAT_VALUE(obj)); return RBOOL(RFLOAT_VALUE(recv) >= RFLOAT_VALUE(obj)); } else { diff --git a/win32/Makefile.sub b/win32/Makefile.sub index 81a33277af..5bad1d3d75 100644 --- a/win32/Makefile.sub +++ b/win32/Makefile.sub @@ -130,6 +130,11 @@ TEST_RUNNABLE = yes CAT_DEPEND = type +!if !defined(MSC_VER) +! error MSC_VER not defined. Retry from configure pass. +!else if $(MSC_VER) < 1400 +! error MSVC $(MSC_VER) is not supported +!endif !if !defined(MACHINE) MACHINE = x86 !endif @@ -140,9 +145,6 @@ PROCESSOR_LEVEL = 5 !if 6 < $(PROCESSOR_LEVEL) PROCESSOR_LEVEL = 6 !endif -!if $(MSC_VER) < 1400 -PROCESSOR_FLAG = -G$(PROCESSOR_LEVEL) -!endif CPU = i$(PROCESSOR_LEVEL)86 ARCH = i386 !else @@ -159,12 +161,8 @@ XCFLAGS = $(XCFLAGS) -DRUBY_DEVEL=1 XCFLAGS = $(XCFLAGS) -Dmodular_gc_dir="$(modular_gc_dir)" !endif !if !defined(OPTFLAGS) -!if $(MSC_VER) < 1400 -OPTFLAGS = -O2b2xg- -!else OPTFLAGS = -O2sy- !endif -!endif !if $(MSC_VER) >= 1900 OPTFLAGS = $(OPTFLAGS) -Zc:inline !endif @@ -176,6 +174,8 @@ PLATFORM = mswin32 !endif !if !defined(RT) !error RT not defined. Retry from configure pass. +!else if $(RT_VER) < 80 +! error Runtime library $(RT_VER) is not supported !endif !ifndef NTVER NTVER = _WIN32_WINNT_WIN8 @@ -278,13 +278,9 @@ RUNTIMEFLAG = -MD COMPILERFLAG = -Zm600 !endif !if !defined(WARNFLAGS) -!if $(MSC_VER) >= 1400 WARNFLAGS = -W2 -wd4100 -wd4127 -wd4210 -wd4214 -wd4255 -wd4574 \ -wd4668 -wd4710 -wd4711 -wd4820 -wd4996 \ -we4028 -we4142 -we4047 -we4013 -!else -WARNFLAGS = -W2 -!endif !if $(MSC_VER) >= 1944 # https://developercommunity.visualstudio.com/t/warning-C5287:-operands-are-different-e/10877942 WARNFLAGS = $(WARNFLAGS) -wd5287 @@ -318,9 +314,7 @@ EXTSOLIBS = !endif !if !defined(LIBS) LIBS = user32.lib advapi32.lib shell32.lib ws2_32.lib -!if $(MSC_VER) >= 1400 LIBS = $(LIBS) iphlpapi.lib -!endif !if defined(USE_GMP) LIBS = $(LIBS) gmp.lib !endif @@ -697,11 +691,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub !if $(MSC_VER) >= 1920 #define HAVE_AFUNIX_H 1 !endif -!if $(MSC_VER) >= 1400 #define HAVE_LONG_LONG 1 -!else -#define ULL_TO_DOUBLE(n) ((double)(unsigned long)((n)>>32) * (1I64 << 32) + (unsigned long)(n)) -!endif #define HAVE_OFF_T 1 #define rb_off_t __int64 #define SIGNEDNESS_OF_OFF_T -1 @@ -710,11 +700,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub #define SIZEOF_INT 4 #define SIZEOF_SHORT 2 #define SIZEOF_LONG 4 -!if $(MSC_VER) >= 1400 #define SIZEOF_LONG_LONG 8 -!else -#define SIZEOF_LONG_LONG 0 -!endif #define SIZEOF___INT64 8 #ifndef _INTEGRAL_MAX_BITS #define _INTEGRAL_MAX_BITS 64 @@ -729,15 +715,9 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub #define SIZEOF_DOUBLE 8 #define SIGNEDNESS_OF_TIME_T -1 #define NEGATIVE_TIME_T 1 -!if $(RT_VER) >= 80 #define SIZEOF_TIME_T 8 #define TIMET2NUM(v) LL2NUM(v) #define NUM2TIMET(v) NUM2LL(v) -!else -#define SIZEOF_TIME_T 4 -#define TIMET2NUM(v) LONG2NUM(v) -#define NUM2TIMET(v) NUM2LONG(v) -!endif #define CLOCKID2NUM(v) INT2NUM(v) #define NUM2CLOCKID(v) NUM2INT(v) #define SIZEOF_CLOCK_T 4 @@ -753,22 +733,15 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub #define SIZEOF_INTPTR_T 4 #define SIZEOF_UINTPTR_T 4 !endif -!if $(MSC_VER) < 1400 -#define SIZE_MAX UINT_MAX -!endif !if $(MSC_VER) >= 1800 #define HAVE_VA_COPY 1 !else #define HAVE_VA_COPY_VIA_STRUCT_ASSIGNMENT 1 !endif -!if $(MSC_VER) > 1100 #define NORETURN(x) __declspec(noreturn) x -!endif -!if $(MSC_VER) >= 1300 #define DEPRECATED(x) __declspec(deprecated) x #define RUBY_CXX_DEPRECATED(mesg) __declspec(deprecated(mesg)) #define NOINLINE(x) __declspec(noinline) x -!endif #define ALWAYS_INLINE(x) __forceinline x #define WARN_UNUSED_RESULT(x) x #define MAYBE_UNUSED(x) x @@ -1119,7 +1092,7 @@ s,@LIBPATHFLAG@,-libpath:%s,;t t s,@RPATHFLAG@,,;t t s,@LIBARG@,%s.lib,;t t s,@LINK_SO@,$$(LDSHARED) -Fe$$(@) $$(OBJS) $$(LIBS) $$(LOCAL_LIBS) -link $$(DLDFLAGS) -implib:$$(*F:.so=)-$$(arch).lib -pdb:$$(*F:.so=)-$$(arch).pdb -def:$$(DEFFILE),;t t -!if $(MSC_VER) >= 1400 && $(MSC_VER) < 1800 +!if $(MSC_VER) < 1800 s,@LINK_SO@,@if exist $$(@).manifest $$(RUBY) -run -e wait_writable -- -n 10 $$(@),;t t s,@LINK_SO@,@if exist $$(@).manifest $(MANIFESTTOOL) -manifest $$(@).manifest -outputresource:$$(@);2,;t t s,@LINK_SO@,@if exist $$(@).manifest $$(RM) $$(@:/=\).manifest,;t t diff --git a/win32/file.c b/win32/file.c index f137f04c43..26b99715cd 100644 --- a/win32/file.c +++ b/win32/file.c @@ -629,14 +629,10 @@ rb_freopen(VALUE fname, const char *mode, FILE *file) len = MultiByteToWideChar(CP_UTF8, 0, name, n, wname, len); wname[len] = L'\0'; RB_GC_GUARD(fname); -#if RUBY_MSVCRT_VERSION < 80 && !defined(HAVE__WFREOPEN_S) - e = _wfreopen(wname, wmode, file) ? 0 : errno; -#else { FILE *newfp = 0; e = _wfreopen_s(&newfp, wname, wmode, file); } -#endif ALLOCV_END(wtmp); return e; } diff --git a/win32/win32.c b/win32/win32.c index e7dfe2b065..9cffd67597 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -21,6 +21,10 @@ #undef __STRICT_ANSI__ +/* Visual C++ 2005 (8.0): + * - _MSC_VER: 1400 + * - MSVCRT_VERSION: 80 + */ #include "ruby/ruby.h" #include "ruby/encoding.h" #include "ruby/io.h" @@ -42,7 +46,7 @@ #include #include #include -#if defined _MSC_VER && _MSC_VER >= 1400 +#if defined _MSC_VER #include #include #endif @@ -65,10 +69,6 @@ #include "encindex.h" #define isdirsep(x) ((x) == '/' || (x) == '\\') -#if defined _MSC_VER && _MSC_VER <= 1200 -# define CharNextExA(cp, p, flags) CharNextExA((WORD)(cp), (p), (flags)) -#endif - static int w32_wopen(const WCHAR *file, int oflag, int perm); static int w32_stati128(const char *path, struct stati128 *st, UINT cp, BOOL lstat); static char *w32_getenv(const char *name, UINT cp); @@ -503,11 +503,6 @@ rb_w32_special_folder(int type) return rb_w32_conv_from_wchar(path, rb_filesystem_encoding()); } -#if defined _MSC_VER && _MSC_VER <= 1200 -/* License: Ruby's */ -#define GetSystemWindowsDirectoryW GetWindowsDirectoryW -#endif - /* License: Ruby's */ UINT rb_w32_system_tmpdir(WCHAR *path, UINT len) @@ -629,7 +624,6 @@ init_env(void) static void init_stdhandle(void); -#if RUBY_MSVCRT_VERSION >= 80 /* License: Ruby's */ static void invalid_parameter(const wchar_t *expr, const wchar_t *func, const wchar_t *file, unsigned int line, uintptr_t dummy) @@ -639,7 +633,7 @@ invalid_parameter(const wchar_t *expr, const wchar_t *func, const wchar_t *file, int ruby_w32_rtc_error; -# ifndef __MINGW32__ +#ifndef __MINGW32__ /* License: Ruby's */ RBIMPL_ATTR_NONNULL((5)) RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 5, 6) @@ -658,7 +652,6 @@ rtc_error_handler(int e, const char *src, int line, const char *exe, const char rb_write_error2(RSTRING_PTR(str), RSTRING_LEN(str)); return 0; } -# endif #endif static CRITICAL_SECTION select_mutex; @@ -852,13 +845,11 @@ socklist_delete(SOCKET *sockp, int *flagp) return ret; } -#if RUBY_MSVCRT_VERSION >= 80 # ifdef __MINGW32__ # define _CrtSetReportMode(type,mode) ((void)0) # define _RTC_SetErrorFunc(func) ((void)0) # endif static void set_pioinfo_extra(void); -#endif static int w32_cmdvector(const WCHAR *, char ***, UINT, rb_encoding *); // // Initialization stuff @@ -867,13 +858,10 @@ static int w32_cmdvector(const WCHAR *, char ***, UINT, rb_encoding *); void rb_w32_sysinit(int *argc, char ***argv) { -#if RUBY_MSVCRT_VERSION >= 80 - _CrtSetReportMode(_CRT_ASSERT, 0); _set_invalid_parameter_handler(invalid_parameter); _RTC_SetErrorFunc(rtc_error_handler); set_pioinfo_extra(); -#endif SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOGPFAULTERRORBOX); get_version(); @@ -2464,10 +2452,8 @@ typedef struct { char pipech; /* one char buffer for handles opened on pipes */ int lockinitflag; CRITICAL_SECTION lock; -#if RUBY_MSVCRT_VERSION >= 80 char textmode; char pipech2[2]; -#endif } ioinfo; #endif @@ -2492,7 +2478,6 @@ static inline ioinfo* _pioinfo(int); #define rb_acrt_lowio_lock_fh(i) EnterCriticalSection(&_pioinfo(i)->lock) #define rb_acrt_lowio_unlock_fh(i) LeaveCriticalSection(&_pioinfo(i)->lock) -#if RUBY_MSVCRT_VERSION >= 80 static size_t pioinfo_extra = 0; /* workaround for VC++8 SP1 */ /* License: Ruby's */ @@ -2656,9 +2641,6 @@ set_pioinfo_extra(void) pioinfo_extra = 0; } } -#else -#define pioinfo_extra 0 -#endif static inline ioinfo* _pioinfo(int fd) @@ -4235,7 +4217,6 @@ socketpair(int af, int type, int protocol, int *sv) return 0; } -#if !defined(_MSC_VER) || _MSC_VER >= 1400 /* License: Ruby's */ static void str2guid(const char *str, GUID *guid) @@ -4361,7 +4342,6 @@ freeifaddrs(struct ifaddrs *ifp) ifp = next; } } -#endif #if 0 // Have never been used // @@ -7592,20 +7572,6 @@ rb_w32_write_console(uintptr_t strarg, int fd) return (long)reslen; } -#if RUBY_MSVCRT_VERSION < 80 && !defined(HAVE__GMTIME64_S) -/* License: Ruby's */ -static int -unixtime_to_filetime(time_t time, FILETIME *ft) -{ - ULARGE_INTEGER tmp; - - tmp.QuadPart = unix_to_filetime((ULONGLONG)time); - ft->dwLowDateTime = tmp.LowPart; - ft->dwHighDateTime = tmp.HighPart; - return 0; -} -#endif - /* License: Ruby's */ static int timespec_to_filetime(const struct timespec *ts, FILETIME *ft) @@ -7982,23 +7948,6 @@ rb_w32_isatty(int fd) return 1; } -#if defined(_MSC_VER) && RUBY_MSVCRT_VERSION <= 60 -extern long _ftol(double); -/* License: Ruby's */ -long -_ftol2(double d) -{ - return _ftol(d); -} - -/* License: Ruby's */ -long -_ftol2_sse(double d) -{ - return _ftol(d); -} -#endif - #ifndef signbit /* License: Ruby's */ int @@ -8030,68 +7979,6 @@ rb_w32_fd_is_text(int fd) return _osfile(fd) & FTEXT; } -#if RUBY_MSVCRT_VERSION < 80 && !defined(HAVE__GMTIME64_S) -/* License: Ruby's */ -static int -unixtime_to_systemtime(const time_t t, SYSTEMTIME *st) -{ - FILETIME ft; - if (unixtime_to_filetime(t, &ft)) return -1; - if (!FileTimeToSystemTime(&ft, st)) return -1; - return 0; -} - -/* License: Ruby's */ -static void -systemtime_to_tm(const SYSTEMTIME *st, struct tm *t) -{ - int y = st->wYear, m = st->wMonth, d = st->wDay; - t->tm_sec = st->wSecond; - t->tm_min = st->wMinute; - t->tm_hour = st->wHour; - t->tm_mday = st->wDay; - t->tm_mon = st->wMonth - 1; - t->tm_year = y - 1900; - t->tm_wday = st->wDayOfWeek; - switch (m) { - case 1: - break; - case 2: - d += 31; - break; - default: - d += 31 + 28 + (!(y % 4) && ((y % 100) || !(y % 400))); - d += ((m - 3) * 153 + 2) / 5; - break; - } - t->tm_yday = d - 1; -} - -/* License: Ruby's */ -static int -systemtime_to_localtime(TIME_ZONE_INFORMATION *tz, SYSTEMTIME *gst, SYSTEMTIME *lst) -{ - TIME_ZONE_INFORMATION stdtz; - SYSTEMTIME sst; - - if (!SystemTimeToTzSpecificLocalTime(tz, gst, lst)) return -1; - if (!tz) { - GetTimeZoneInformation(&stdtz); - tz = &stdtz; - } - if (tz->StandardBias == tz->DaylightBias) return 0; - if (!tz->StandardDate.wMonth) return 0; - if (!tz->DaylightDate.wMonth) return 0; - if (tz != &stdtz) stdtz = *tz; - - stdtz.StandardDate.wMonth = stdtz.DaylightDate.wMonth = 0; - if (!SystemTimeToTzSpecificLocalTime(&stdtz, gst, &sst)) return 0; - if (lst->wMinute == sst.wMinute && lst->wHour == sst.wHour) - return 0; - return 1; -} -#endif - #ifdef HAVE__GMTIME64_S # ifndef HAVE__LOCALTIME64_S /* assume same as _gmtime64_s() */ @@ -8115,17 +8002,8 @@ gmtime_r(const time_t *tp, struct tm *rp) errno = e; return NULL; } -#if RUBY_MSVCRT_VERSION >= 80 || defined(HAVE__GMTIME64_S) e = gmtime_s(rp, tp); if (e != 0) goto error; -#else - { - SYSTEMTIME st; - if (unixtime_to_systemtime(*tp, &st)) goto error; - rp->tm_isdst = 0; - systemtime_to_tm(&st, rp); - } -#endif return rp; } @@ -8139,17 +8017,8 @@ localtime_r(const time_t *tp, struct tm *rp) errno = e; return NULL; } -#if RUBY_MSVCRT_VERSION >= 80 || defined(HAVE__LOCALTIME64_S) e = localtime_s(rp, tp); if (e) goto error; -#else - { - SYSTEMTIME gst, lst; - if (unixtime_to_systemtime(*tp, &gst)) goto error; - rp->tm_isdst = systemtime_to_localtime(NULL, &gst, &lst); - systemtime_to_tm(&lst, rp); - } -#endif return rp; }