From 0ac369da08268513bd59ff640a4effd77027a012 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 10 Jul 2019 21:02:58 +0000 Subject: little tweaks, makeing it possible to use either _USE_64BIT_TIME_T or __MINGW_USE_VC2005_COMPAT interchangably. Put some more remarks, making it more clear what the effect of this is. --- generic/tclBasic.c | 27 +++++++++++++++------------ win/tclWinPort.h | 17 +++++++---------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/generic/tclBasic.c b/generic/tclBasic.c index 5ca4b82..f59c161 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -413,21 +413,24 @@ Tcl_CreateInterp(void) Tcl_Panic("Tcl_CallFrame must not be smaller than CallFrame"); } -#if defined(_WIN32) && !defined(_WIN64) - if (sizeof(time_t) == 4 || sizeof(time_t) == 8) { - Tcl_StatBuf buf; - if ( - sizeof(buf.st_atime) != sizeof(time_t) || - sizeof(buf.st_mtime) != sizeof(time_t) || - sizeof(buf.st_ctime) != sizeof(time_t) - ) { - /*NOTREACHED*/ - Tcl_Panic(" is not compatible with MSVC"); - } - } else { +#if defined(_WIN32) && !defined(_WIN64) && !defined(_USE_64BIT_TIME_T) \ + && !defined(__MINGW_USE_VC2005_COMPAT) + /* If Tcl is compiled on Win32 using -D_USE_64BIT_TIME_T or + * -D__MINGW_USE_VC2005_COMPAT, the result is a binary incompatible + * with the 'standard' build of Tcl: All extensions using Tcl_StatBuf + * or interal functions like TclpGetDate() need to be recompiled in + * the same way. Therefore, this is not officially supported. + * In stead, it is recommended to use Win64 or Tcl 9.0 (not released yet) + */ + if (sizeof(time_t) != 4) { /*NOTREACHED*/ Tcl_Panic(" is not compatible with MSVC"); } + if ((TclOffset(Tcl_StatBuf,st_atime) != 32) + || (TclOffset(Tcl_StatBuf,st_ctime) != 40)) { + /*NOTREACHED*/ + Tcl_Panic(" is not compatible with MSVC"); + } #endif /* diff --git a/win/tclWinPort.h b/win/tclWinPort.h index dce5557..b14aa6b 100644 --- a/win/tclWinPort.h +++ b/win/tclWinPort.h @@ -14,16 +14,13 @@ #ifndef _TCLWINPORT #define _TCLWINPORT -#if !defined(_WIN64) && !defined(_USE_32BIT_TIME_T) && !defined(__MINGW_USE_VC2005_COMPAT) - /* define _USE_64BIT_TIME_T (or make/configure option time64bit) to force 64-bit time_t */ -# if defined(_USE_64BIT_TIME_T) -# if defined(__MINGW32__) -# define __MINGW_USE_VC2005_COMPAT -# endif -# else - /* See [Bug 3354324]: file mtime sets wrong time */ -# define _USE_32BIT_TIME_T -# endif +/* define _USE_64BIT_TIME_T (or make/configure option time64bit) to force 64-bit time_t */ +#if defined(_USE_64BIT_TIME_T) +#define __MINGW_USE_VC2005_COMPAT +#endif +#if !defined(_WIN64) && !defined(__MINGW_USE_VC2005_COMPAT) +/* See [Bug 3354324]: file mtime sets wrong time */ +# define _USE_32BIT_TIME_T #endif #define WIN32_LEAN_AND_MEAN -- cgit v0.12