/*+ −
* _mingw.h+ −
*+ −
* Mingw specific macros included by ALL include files.+ −
*+ −
* This file is part of the Mingw32 package.+ −
*+ −
* Contributors:+ −
* Created by Mumit Khan <khan@xraylith.wisc.edu>+ −
*+ −
* THIS SOFTWARE IS NOT COPYRIGHTED+ −
*+ −
* This source code is offered for use in the public domain. You may+ −
* use, modify or distribute it freely.+ −
*+ −
* This code is distributed in the hope that it will be useful but+ −
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY+ −
* DISCLAIMED. This includes but is not limited to warranties of+ −
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.+ −
*+ −
*/+ −
+ −
#ifndef __MINGW_H+ −
#define __MINGW_H+ −
+ −
#if __GNUC__ >= 3+ −
#pragma GCC system_header+ −
#endif+ −
+ −
/* These are defined by the user (or the compiler)+ −
to specify how identifiers are imported from a DLL.+ −
+ −
__DECLSPEC_SUPPORTED Defined if dllimport attribute is supported.+ −
__MINGW_IMPORT The attribute definition to specify imported+ −
variables/functions.+ −
_CRTIMP As above. For MS compatibility.+ −
__MINGW32_VERSION Runtime version.+ −
__MINGW32_MAJOR_VERSION Runtime major version.+ −
__MINGW32_MINOR_VERSION Runtime minor version.+ −
__MINGW32_BUILD_DATE Runtime build date.+ −
+ −
Other macros:+ −
+ −
__int64 define to be long long. Using a typedef doesn't+ −
work for "unsigned __int64"+ −
+ −
All headers should include this first, and then use __DECLSPEC_SUPPORTED+ −
to choose between the old ``__imp__name'' style or __MINGW_IMPORT+ −
style declarations. */+ −
+ −
/* Try to avoid problems with outdated checks for GCC __attribute__ support. */+ −
#undef __attribute__+ −
+ −
#ifndef __GNUC__+ −
# ifndef __MINGW_IMPORT+ −
# define __MINGW_IMPORT __declspec(dllimport)+ −
# endif+ −
# ifndef _CRTIMP+ −
# define _CRTIMP __declspec(dllimport)+ −
# endif+ −
# define __DECLSPEC_SUPPORTED+ −
# define __attribute__(x) /* nothing */+ −
#else /* __GNUC__ */+ −
# ifdef __declspec+ −
# ifndef __MINGW_IMPORT+ −
/* Note the extern. This is needed to work around GCC's+ −
limitations in handling dllimport attribute. */+ −
# define __MINGW_IMPORT extern __attribute__ ((__dllimport__))+ −
# endif+ −
# ifndef _CRTIMP+ −
# ifdef __USE_CRTIMP+ −
# define _CRTIMP __attribute__ ((dllimport))+ −
# else+ −
# define _CRTIMP+ −
# endif+ −
# endif+ −
# define __DECLSPEC_SUPPORTED+ −
# else /* __declspec */+ −
# undef __DECLSPEC_SUPPORTED+ −
# undef __MINGW_IMPORT+ −
# ifndef _CRTIMP+ −
# define _CRTIMP+ −
# endif+ −
# endif /* __declspec */+ −
+ −
/*+ −
The next two defines can cause problems if user code adds the __cdecl attribute+ −
like so:+ −
void __attribute__ ((__cdecl)) foo(void); + −
*/+ −
# ifndef __cdecl + −
# define __cdecl __attribute__ ((__cdecl__))+ −
# endif+ −
# ifndef __stdcall+ −
# define __stdcall __attribute__ ((__stdcall__))+ −
# endif+ −
# ifndef __int64+ −
# define __int64 long long+ −
# endif+ −
# ifndef __int32+ −
# define __int32 long+ −
# endif+ −
# ifndef __int16+ −
# define __int16 short+ −
# endif+ −
# ifndef __int8+ −
# define __int8 char+ −
# endif+ −
# ifndef __small+ −
# define __small char+ −
# endif+ −
# ifndef __hyper+ −
# define __hyper long long+ −
# endif+ −
#endif /* __GNUC__ */+ −
+ −
#if defined (__GNUC__) && defined (__GNUC_MINOR__)+ −
#define __MINGW_GNUC_PREREQ(major, minor) \+ −
(__GNUC__ > (major) \+ −
|| (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))+ −
#else+ −
#define __MINGW_GNUC_PREREQ(major, minor) 0+ −
#endif+ −
+ −
#ifdef __cplusplus+ −
# define __CRT_INLINE inline+ −
#else+ −
# if __GNUC_STDC_INLINE__+ −
# define __CRT_INLINE extern inline __attribute__((__gnu_inline__))+ −
# else+ −
# define __CRT_INLINE extern __inline__+ −
# endif+ −
#endif+ −
+ −
#ifdef __cplusplus+ −
# define __UNUSED_PARAM(x)+ −
#else+ −
# ifdef __GNUC__+ −
# define __UNUSED_PARAM(x) x __attribute__ ((__unused__))+ −
# else+ −
# define __UNUSED_PARAM(x) x+ −
# endif+ −
#endif+ −
+ −
#ifdef __GNUC__+ −
#define __MINGW_ATTRIB_NORETURN __attribute__ ((__noreturn__))+ −
#define __MINGW_ATTRIB_CONST __attribute__ ((__const__))+ −
#else+ −
#define __MINGW_ATTRIB_NORETURN+ −
#define __MINGW_ATTRIB_CONST+ −
#endif+ −
+ −
#if __MINGW_GNUC_PREREQ (3, 0)+ −
#define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__))+ −
#define __MINGW_ATTRIB_PURE __attribute__ ((__pure__))+ −
#else+ −
#define __MINGW_ATTRIB_MALLOC+ −
#define __MINGW_ATTRIB_PURE+ −
#endif+ −
+ −
/* Attribute `nonnull' was valid as of gcc 3.3. We don't use GCC's+ −
variadiac macro facility, because variadic macros cause syntax+ −
errors with --traditional-cpp. */+ −
#if __MINGW_GNUC_PREREQ (3, 3)+ −
#define __MINGW_ATTRIB_NONNULL(arg) __attribute__ ((__nonnull__ (arg)))+ −
#else+ −
#define __MINGW_ATTRIB_NONNULL(arg)+ −
#endif /* GNUC >= 3.3 */+ −
+ −
#if __MINGW_GNUC_PREREQ (3, 1)+ −
#define __MINGW_ATTRIB_DEPRECATED __attribute__ ((__deprecated__))+ −
#else+ −
#define __MINGW_ATTRIB_DEPRECATED+ −
#endif /* GNUC >= 3.1 */+ −
+ −
#if __MINGW_GNUC_PREREQ (3, 3)+ −
#define __MINGW_NOTHROW __attribute__ ((__nothrow__))+ −
#else+ −
#define __MINGW_NOTHROW+ −
#endif /* GNUC >= 3.3 */+ −
+ −
+ −
/* TODO: Mark (almost) all CRT functions as __MINGW_NOTHROW. This will+ −
allow GCC to optimize away some EH unwind code, at least in DW2 case. */+ −
+ −
#ifndef __MSVCRT_VERSION__+ −
/* High byte is the major version, low byte is the minor. */+ −
# define __MSVCRT_VERSION__ 0x0600+ −
#endif+ −
+ −
#define __MINGW32_VERSION 3.14+ −
#define __MINGW32_MAJOR_VERSION 3+ −
#define __MINGW32_MINOR_VERSION 14+ −
+ −
#endif /* __MINGW_H */+ −