New preprocessor macroses for compiler verstion tests: __GNUC_LESS(maj,min), __GNUC_NOT_LESS(maj, min), __VISUAL_STUDIO_LESS(maj, min), __VISUAL_STUDIO_NOT_LESS(maj, min), __VISUAL_C_LESS(maj, min) and __VISUAL_C_NOT_LESS(maj, min)
This commit is contained in:
parent
a1c4eeeeb1
commit
5e98926932
@ -30,6 +30,59 @@
|
||||
#ifndef __gdefs_h
|
||||
#define __gdefs_h
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* Convenience macros to test the version of GNU C and C++ compiler
|
||||
* Use them like this:
|
||||
* #if __GNUC_NOT_LESS (4,0)
|
||||
* ... code requiring gcc 4.0 or later ...
|
||||
* #endif
|
||||
* Note - they won't work for gcc1 or glibc1, since the _MINOR macros
|
||||
* were not defined then.
|
||||
*/
|
||||
#if defined __GNUC__ && defined __GNUC_MINOR__
|
||||
# define __GNUC_NOT_LESS(maj, min) \
|
||||
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
|
||||
# define __GNUC_LESS(maj, min) (! __GNUC_NOT_LESS(maj, min) )
|
||||
#else
|
||||
# define __GNUC_NOT_LESS(maj, min) 0
|
||||
# define __GNUC_LESS(maj, min) 0
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* Convenience macros to test the version of Visua Studio and
|
||||
* macros to test the version of Visual C (cl.exe /? show it).
|
||||
* Use them like this:
|
||||
* #if __VISUAL_STUDIO_NOT_LESS (6,0)
|
||||
* ... code requiring MS VS 6.0 or later ...
|
||||
* #endif
|
||||
*/
|
||||
#if defined _MSC_VER
|
||||
/* FIXME: This condition not tested anywhere, it is true for VS 6.0 and VS 4.2 and VS 5.0 */
|
||||
/*
|
||||
# define __VISUAL_STUDIO_NOT_LESS (maj, min) \
|
||||
( (1000+ ((maj)-4)*100 + (min)*10) >= _MSC_VER )
|
||||
*/
|
||||
/* FIXME: This condition not tested anywhere, it is true for VS 4.2, 5.0, 6.0 and VS2005 (VC++ 8.0) */
|
||||
# define __VISUAL_STUDIO_NOT_LESS(maj, min) \
|
||||
( (maj==4)? ((1000+(min)*10)>=_MSC_VER) : \
|
||||
( (maj==5)? ((1100+(min)*10)>=_MSC_VER) : \
|
||||
( (maj==6)? ((1200+(min)*10)>=_MSC_VER) : \
|
||||
( (maj==7)? ((1300+(min)*10)>=_MSC_VER) : \
|
||||
( (maj==8)? ((1400+(min)*10)>=_MSC_VER) : \
|
||||
( (maj==9)? ((1500+(min)*10)>=_MSC_VER) : \
|
||||
0 \
|
||||
) ) ) ) ) )
|
||||
# define __VISUAL_C_NOT_LESS(maj, min) \
|
||||
( _MSC_VER >= ((maj*100) + (min)) )
|
||||
# define __VISUAL_STUDIO_LESS(maj, min) (! __VISUAL_STUDIO_NOT_LESS(maj, min) )
|
||||
# define __VISUAL_C_LESS(maj, min) (! __VISUAL_C_NOT_LESS(maj, min) )
|
||||
#else
|
||||
# define __VISUAL_STUDIO_NOT_LESS(maj, min) 0
|
||||
# define __VISUAL_STUDIO_LESS(maj, min) 0
|
||||
# define __VISUAL_C_NOT_LESS(maj, min) 0
|
||||
# define __VISUAL_C_LESS(maj, min) 0
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
#include <stdlib.h>
|
||||
#ifdef HAVE_MALLOC_H
|
||||
|
@ -45,7 +45,8 @@
|
||||
#ifdef __WIN32__
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
#if __VISUAL_C_NOT_LESS(14,0)
|
||||
//#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
#include <time.h>
|
||||
#endif
|
||||
|
||||
@ -130,7 +131,8 @@ extern const char* gmonths[];
|
||||
inline void ggmtime(struct tm *_tm, const time32_t *timep)
|
||||
{
|
||||
const time_t temp(*timep);
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
#if __VISUAL_C_NOT_LESS(14,0)
|
||||
//#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
if (0 != gmtime_s(_tm, &temp))
|
||||
{
|
||||
const time_t zero(0);
|
||||
@ -152,7 +154,8 @@ inline void ggmtime(struct tm *_tm, const time32_t *timep)
|
||||
inline void glocaltime(struct tm *_tm, const time32_t *timep)
|
||||
{
|
||||
const time_t temp(*timep);
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
#if __VISUAL_C_NOT_LESS(14,0)
|
||||
//#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
if (0 != localtime_s(_tm, &temp))
|
||||
{
|
||||
const time_t zero(0);
|
||||
@ -174,7 +177,8 @@ inline void glocaltime(struct tm *_tm, const time32_t *timep)
|
||||
inline void gctime(TCHAR *buffer, size_t sizeInChars, const time32_t *timep)
|
||||
{
|
||||
const time_t temp(*timep);
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
#if __VISUAL_C_NOT_LESS(14,0)
|
||||
//#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
if (0 != _tctime_s(buffer, sizeInChars, &temp))
|
||||
{
|
||||
const time_t zero(0);
|
||||
@ -207,7 +211,8 @@ inline time32_t gmktime(struct tm *timep)
|
||||
|
||||
#if defined(__OS2__)
|
||||
inline void usleep(int duration) { DosSleep(duration); }
|
||||
#elif (defined(__MINGW32__) && __GNUC__*100+__GNUC_MINOR__ < 304) || defined(_MSC_VER)
|
||||
#elif (defined(__MINGW32__) && __GNUC_LESS(3,4)) || defined(_MSC_VER)
|
||||
//#elif (defined(__MINGW32__) && __GNUC__*100+__GNUC_MINOR__ < 304) || defined(_MSC_VER)
|
||||
inline void usleep(long duration) { Sleep(duration); }
|
||||
#endif
|
||||
|
||||
|
@ -31,7 +31,8 @@
|
||||
|
||||
#if defined(__WIN32__)
|
||||
#include <windows.h>
|
||||
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
#if __VISUAL_C_NOT_LESS(14,0)
|
||||
//#if defined(_MSC_VER) && (_MSC_VER >= 1400)
|
||||
#include <intrin.h>
|
||||
#endif
|
||||
#elif defined(__GNUC__)
|
||||
@ -55,7 +56,8 @@
|
||||
#else
|
||||
// ------------------------------------------------------------------
|
||||
|
||||
#if defined(_MSC_VER) && (_MSC_VER < 1400)
|
||||
#if __VISUAL_C_LESS(14,0)
|
||||
//#if defined(_MSC_VER) && (_MSC_VER < 1400)
|
||||
static void __cpuid(int CPUInfo[4], int cpuidfun)
|
||||
{
|
||||
__asm
|
||||
|
Reference in New Issue
Block a user