Improved compatibility with older versions of MSVC.
authorDavid Korth <gerbilsoft@gerbilsoft.com>
Sat, 5 Sep 2015 16:27:43 +0000 (12:27 -0400)
committerDavid Korth <gerbilsoft@gerbilsoft.com>
Sat, 5 Sep 2015 16:27:43 +0000 (12:27 -0400)
commit57a627e43d1c7efa0e2e51c0720b40a84ed442cd
tree777c28f969037507d98a47eff76cfcf58dc396fa
parentc088100e0200cc56025191a9eff3d9f80fb5ed80
Improved compatibility with older versions of MSVC.

Note that stdint.h was first added in MSVC 2010, so for older versions,
you'll need to add stdint.h to the MSVC include path first.

win32-msvc.cmake: Only add -Zc:wchar_t for MSVC 2002 and later.

c++11-compat.msvc.h:
- 'sealed' was added in MSVC 2005.
- Support for variadic macros was also added in MSVC 2005.
- (TODO: Verify MSVC 2002 and 2003.)

libcompat:
- Check for localtime_s(). This function seems to have been added
  in MSVC 2005, but since I'm not sure, we're better off doing a
  CMake check instead of version checks. This also works for MinGW,
  which provides inlined versions.
  - Sidenote: On MSVC 2005, localtime_s() is a macro that's defined
    to either _localtime32_s() or _localtime64_s(). The inline part
    of CHECK_FUNCTION_EXISTS_OR_INLINE() will handle that.

W32U_alloca.h:
- WtoA_filename(): Declare 'int cbMbs' at the top of the macro.
  I didn't catch this with MSVC 2010 because the ANSI code is
  disabled there, since 2010's minimum target is Windows 2000.

W32U_libc.h:
- Use #pragma message() instead of #warning. MSVC doesn't support
  this preprocessor directive at all, but it was never tripped
  until I tried compiling with MSVC 6.0, which doesn't support
  _fseeki64() and _ftelli64().

cpuflags_x86.h: Added an inline asm version for older MSVC that
doesn't support CPU intrinsics, e.g. __cpuid().
- TODO: Do MSVC 2002 or 2003 support __cpuid()?
cmake/platform/win32-msvc.cmake
src/c++11-compat.h
src/c++11-compat.msvc.h
src/libcompat/CMakeLists.txt
src/libcompat/W32U/W32U_alloca.h
src/libcompat/W32U/W32U_libc.h
src/libcompat/config.libcompat.h.in
src/libcompat/cpuflags_x86.h
src/libcompat/reentrant.h