/* -*- C++ -*- */ #ifndef ACE_CONFIG_WIN32_COMMON_H #define ACE_CONFIG_WIN32_COMMON_H #include /**/ "ace/pre.h" #ifndef ACE_CONFIG_WIN32_H #error Use config-win32.h in config.h instead of this header #endif /* ACE_CONFIG_WIN32_H */ #if defined(__MINGW32__) // When using the --std=c++0x option with MinGW the compiler omits defining // the following required macros (at least with the GCC 4.6.2 version) // So we define them ourselves here. # if !defined(WIN32) # define _stdcall __attribute__((__stdcall__)) # define _cdecl __attribute__((__cdecl__)) # define _thiscall __attribute__((__thiscall__)) # define _fastcall __attribute__((__fastcall__)) # define WIN32 1 # define WINNT 1 # define i386 1 # endif #endif // Complain if WIN32 is not already defined. #if !defined (WIN32) # error Please define WIN32 in your project settings. #endif #define ACE_WIN32 #if defined (_WIN64) || defined (WIN64) # define ACE_WIN64 // MPC template adds _AMD64_ but user projects not generated using MPC // may want to use _AMD64_ as well. Ensure it's there in all non ARM cases # if !defined (_AMD64_) && !defined(_ARM_) && !defined(_ARM64_) # define _AMD64_ # endif // Use 64-bit file offsets by default in the WIN64 case, similar to // what 64-bit UNIX systems do. // // Note that _FILE_OFFSET_BITS is not recognized by Windows. It is, // however, recognized by ACE. # ifndef _FILE_OFFSET_BITS # define _FILE_OFFSET_BITS 64 # endif /* !_FILE_OFFSET_BITS */ #endif /* _WIN64 || WIN64 */ // If the invoking procedure turned off debugging by setting NDEBUG, then // also set ACE_NDEBUG, unless the user has already set it. #if defined (NDEBUG) # if !defined (ACE_NDEBUG) # define ACE_NDEBUG # endif /* ACE_NDEBUG */ #endif /* NDEBUG */ // Define ACE_HAS_MFC to 1, if you want ACE to use CWinThread. This should // be defined, if your application uses MFC. // Setting applies to : building ACE // Runtime restrictions: MFC DLLs must be installed // Additional notes : If both ACE_HAS_MFC and ACE_MT_SAFE are // defined, the MFC DLL (not the static lib) // will be used from ACE. #if !defined (ACE_HAS_MFC) # define ACE_HAS_MFC 0 #endif // ACE_USES_STATIC_MFC always implies ACE_HAS_MFC #if defined (ACE_USES_STATIC_MFC) # if defined (ACE_HAS_MFC) # undef ACE_HAS_MFC # endif # define ACE_HAS_MFC 1 #endif /* ACE_USES_STATIC_MFC */ // Define ACE_HAS_STRICT to 1 in your config.h file if you want to use // STRICT type checking. It is disabled by default because it will // break existing application code. However, if ACE_HAS_MFC is turned on, // ACE_HAS_STRICT is required by MFC. // Setting applies to : building ACE, linking with ACE // Runtime restrictions: - #if !defined (ACE_HAS_STRICT) # define ACE_HAS_STRICT 0 #endif // MFC itself defines STRICT. #if defined (ACE_HAS_MFC) && (ACE_HAS_MFC != 0) # undef ACE_HAS_STRICT # define ACE_HAS_STRICT 1 #endif // Turn off the following define if you want to disable threading. // Compile using multi-thread libraries. // Setting applies to : building ACE, linking with ACE // Runtime restrictions: multithreaded runtime DLL must be installed #if !defined (ACE_MT_SAFE) # define ACE_MT_SAFE 1 #endif #if defined (ABOVE_NORMAL_PRIORITY_CLASS) && \ defined (BELOW_NORMAL_PRIORITY_CLASS) && \ defined (HIGH_PRIORITY_CLASS) && \ defined (IDLE_PRIORITY_CLASS) && \ defined (NORMAL_PRIORITY_CLASS) && \ defined (REALTIME_PRIORITY_CLASS) #define ACE_HAS_WIN32_PRIORITY_CLASS #endif // Build ACE services as DLLs. If you write a library and want it to // use ACE_Svc_Export, this will cause those macros to build dlls. If // you want your ACE service to be a static library, comment out this // line. As far as I know, the only reason to have a library be an // ACE "service" is to leverage the ACE_Svc_Export macros. It's just // as easy to define your own export macros. // #if !defined (ACE_SVC_HAS_DLL) // # define ACE_SVC_HAS_DLL 1 // #endif // Define the special export macros needed to export symbols outside a dll #if !defined (ACE_HAS_CUSTOM_EXPORT_MACROS) || (ACE_HAS_CUSTOM_EXPORT_MACROS == 0) #if defined (ACE_HAS_CUSTOM_EXPORT_MACROS) #undef ACE_HAS_CUSTOM_EXPORT_MACROS #endif #define ACE_HAS_CUSTOM_EXPORT_MACROS 1 #define ACE_Proper_Export_Flag __declspec (dllexport) #define ACE_Proper_Import_Flag __declspec (dllimport) #define ACE_EXPORT_SINGLETON_DECLARATION(T) template class __declspec (dllexport) T #define ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) template class __declspec (dllexport) SINGLETON_TYPE; #define ACE_IMPORT_SINGLETON_DECLARATION(T) extern template class T #define ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) extern template class SINGLETON_TYPE ; #endif /* !ACE_HAS_CUSTOM_EXPORT_MACROS || ACE_HAS_CUSTOM_EXPORT_MACROS==0 */ // Define ACE_HAS_WINSOCK2 to 0 in your config.h file if you do *not* // want to compile with WinSock 2.0. // Setting applies to : building ACE // Runtime restrictions: winsock2 must be installed. // #define ACE_HAS_WINSOCK2 0 // By default, we use non-static object manager on Win32. That is, // the object manager is allocated in main's stack memory. If this // does not suit your need, i.e., if your programs depend on the use // of static object manager, you need to disable the behavior by adding // // #undef ACE_HAS_NONSTATIC_OBJECT_MANAGER // // in the config.h after including config-win32.h // // MFC users: the main function is defined within a MFC library and // therefore, ACE won't be able to meddle with main function and // instantiate the non-static object manager for you. To solve the // problem, you'll need to instantiate the ACE_Object_Manager by // either: // // 1. Using static object manager (as described above), however, using // the non-static object manager is preferred, therefore, // 2. Instantiate the non-static object manager yourself by either 1) // call ACE::init () at the beginning and ACE::fini () at the end, // _or_ 2) instantiate the ACE_Object_Manager in your CWinApp // derived class. // // Optionally, you can #define // ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER in your // ace/config.h and always take care of the business by yourself. // ACE_DOESNT_INSTANTIATE_NONSTATIC_OBJECT_MANAGER has no effect when // using static object managers. #if !defined (ACE_HAS_NONSTATIC_OBJECT_MANAGER) # define ACE_HAS_NONSTATIC_OBJECT_MANAGER #endif /* ACE_HAS_NONSTATIC_OBJECT_MANAGER */ #define ACE_HAS_GPERF // ---------------- platform features or lack of them ------------- // By default WIN32 has FD_SETSIZE of 64, which places the limit // between 61 and 64 on the number of clients a server using the // Select Reactor can support at the same time (i.e., 64 - standard in, // out, error). Here we raise the limit to 1024. Adjust the definition // below if you need to raise or lower it. #if !defined (FD_SETSIZE) #define FD_SETSIZE 1024 #endif /* FD_SETSIZE */ // Windows doesn't like 65536 ;-) If 65536 is specified, it is // silently ignored by the OS, i.e., setsockopt does not fail, and you // get stuck with the default size of 8k. #define ACE_DEFAULT_MAX_SOCKET_BUFSIZ 65535 // It seems like Win32 does not have a limit on the number of buffers // that can be transferred by the scatter/gather type of I/O // functions, e.g., WSASend and WSARecv. We are setting this to be 64 // for now. The typically use case is to create an I/O vector array // of size ACE_IOV_MAX on the stack and then filled in. Note that we // probably don't want too big a value for ACE_IOV_MAX since it may // mostly go to waste or the size of the activation record may become // excessively large. #if !defined (ACE_IOV_MAX) # define ACE_IOV_MAX 64 #endif /* ACE_IOV_MAX */ // Platform supports pread() and pwrite() #define ACE_HAS_WTOF #define ACE_HAS_P_READ_WRITE #define ACE_HAS_DIRECT_H #define ACE_HAS_PROCESS_H #define ACE_HAS_IO_H #define ACE_DEFAULT_THREAD_PRIORITY 0 #define ACE_HAS_DIRENT #define ACE_HAS_MSG #define ACE_HAS_NONCONST_INET_NTOP #define ACE_HAS_RECURSIVE_MUTEXES #define ACE_HAS_SOCKADDR_MSG_NAME #define ACE_HAS_THREAD_SAFE_ACCEPT /* MS is phasing out the GetVersion API so let's prepare */ /* For now all releases still provide it. */ #define ACE_HAS_WIN32_GETVERSION /* LACKS dir-related facilities */ #define ACE_LACKS_REWINDDIR #define ACE_LACKS_SEEKDIR #define ACE_LACKS_TELLDIR #define ACE_LACKS_CLOCKID_T #define ACE_LACKS_CLOCK_REALTIME #define ACE_LACKS_CLOCK_MONOTONIC #define ACE_HAS_MONOTONIC_TIME_POLICY #define ACE_HAS_MONOTONIC_CONDITIONS /* LACKS gid/pid/sid/uid facilities */ #define ACE_LACKS_GETPGID #define ACE_LACKS_GETPPID #define ACE_LACKS_SETPGID #define ACE_LACKS_SETREGID #define ACE_LACKS_SETREUID #define ACE_LACKS_SETSID #define ACE_LACKS_SETEGID #define ACE_LACKS_SETUID #define ACE_LACKS_SETEUID #define ACE_LACKS_GETGID #define ACE_LACKS_GETEGID #define ACE_LACKS_GETUID #define ACE_LACKS_GETEUID #define ACE_LACKS_SETGID /* LACKS miscellaneous */ #define ACE_LACKS_ALARM #define ACE_LACKS_ARPA_INET_H #define ACE_LACKS_DUP2 #define ACE_LACKS_FORK #define ACE_LACKS_GETHOSTENT #define ACE_LACKS_GETOPT #define ACE_LACKS_GETIPNODEBYNAME_IPV6 #define ACE_LACKS_KILL #define ACE_LACKS_INET_ATON #define ACE_LACKS_MADVISE #define ACE_LACKS_MKFIFO #define ACE_LACKS_MODE_MASKS #define ACE_LACKS_MSGHDR #define ACE_LACKS_PTHREAD_H #define ACE_LACKS_PWD_FUNCTIONS #define ACE_LACKS_RAND_R #define ACE_LACKS_READLINK #define ACE_LACKS_RLIMIT #define ACE_LACKS_SBRK #define ACE_LACKS_SCHED_H #define ACE_LACKS_SEMBUF_T #define ACE_LACKS_SIGACTION #define ACE_LACKS_SIGSET #define ACE_LACKS_SIGSET_T #define ACE_LACKS_SOCKETPAIR #define ACE_LACKS_SUSECONDS_T #define ACE_LACKS_USECONDS_T #define ACE_LACKS_SYS_PARAM_H #define ACE_LACKS_SYS_SYSCTL_H #define ACE_LACKS_SYSCONF #define ACE_LACKS_SYSV_SHMEM #define ACE_LACKS_UNISTD_H #define ACE_LACKS_UNIX_SIGNALS #define ACE_LACKS_UNIX_SYSLOG #define ACE_LACKS_UTSNAME_T #define ACE_LACKS_UNAME #define ACE_LACKS_WAIT #define ACE_LACKS_IOVEC #define ACE_LACKS_LOG2 #define ACE_LACKS_CADDR_T #define ACE_LACKS_SETENV #define ACE_LACKS_UNSETENV #define ACE_HAS_PDH_H #define ACE_HAS_PDHMSG_H #define ACE_HAS_VFWPRINTF #define ACE_MKDIR_LACKS_MODE #define ACE_SIZEOF_LONG_LONG 8 // Optimize ACE_Handle_Set for select(). #define ACE_HAS_HANDLE_SET_OPTIMIZED_FOR_SELECT // Win32 has wide-char support. Use of the compiler-defined wchar_t type // is controlled in compiler configs since it's a compiler switch. #define ACE_HAS_WCHAR #define ACE_HAS_WTOI #define ACE_HAS_WTOL // Platform supports the rusage struct. #define ACE_HAS_GETRUSAGE // Platform provides ACE_TLI function prototypes. // For Win32, this is not really true, but saves a lot of hassle! #define ACE_HAS_TLI_PROTOTYPES // I'm pretty sure NT lacks these #define ACE_LACKS_UNIX_DOMAIN_SOCKETS // Windows NT needs readv() and writev() #define ACE_LACKS_WRITEV #define ACE_LACKS_READV #if !defined (ACE_HAS_WTHREADS_CONDITION_VARIABLE) # define ACE_LACKS_COND_T #endif #define ACE_LACKS_RWLOCK_T #define ACE_LACKS_KEY_T // No system support for replacing any previous mappings. #define ACE_LACKS_AUTO_MMAP_REPLACEMENT // ACE_HAS_PENTIUM is used to optimize some CDR operations; it's used for // some other time-related things using g++, but not for VC. Current VC // compilers set _M_IX86 > 400 by default so if you're not using a Pentium // class CPU, set the project code generation options appropriately. #if !defined(ACE_HAS_PENTIUM) && (_M_IX86 > 400) # define ACE_HAS_PENTIUM #endif #if defined(ACE_MT_SAFE) && (ACE_MT_SAFE != 0) // Platform supports threads. # define ACE_HAS_THREADS // Platform supports Windows32 threads. # define ACE_HAS_WTHREADS // Compiler/platform has thread-specific storage # define ACE_HAS_THREAD_SPECIFIC_STORAGE // Win32 doesn't have fcntl #define ACE_LACKS_FCNTL #endif /* ACE_MT_SAFE && ACE_MT_SAFE != 0 */ #if !defined(_DEBUG) // If we are making a release, and the user has not specified // inline directives, we will default to inline # if ! defined (__ACE_INLINE__) # define __ACE_INLINE__ 1 # endif /* __ACE_INLINE__ */ #endif // If __ACE_INLINE__ is defined to be 0, we will undefine it #if defined (__ACE_INLINE__) && (__ACE_INLINE__ == 0) # undef __ACE_INLINE__ #endif /* __ACE_INLINE__ */ // We are build ACE and want to use MFC (multithreaded) #if defined(ACE_HAS_MFC) && (ACE_HAS_MFC != 0) && defined (_MT) # if (ACE_HAS_DLL != 0) && defined(ACE_BUILD_DLL) && !defined (_WINDLL) // force multithreaded MFC DLL # define _WINDLL # endif /* _AFXDLL */ # if !defined (_AFXDLL) && !defined (ACE_USES_STATIC_MFC) # define _AFXDLL # endif /* _AFXDLL */ #endif // and MFC's are mutually // incompatible. is brain-dead about MFC; it doesn't check // to see whether MFC stuff is anticipated or already in progress // before doing its thing. ACE needs (practically always) , // and winsock in turn needs support either from windows.h or from // afxwin.h. One or the other, not both. // // The MSVC++ V4.0 environment defines preprocessor macros that // indicate the programmer has chosen something from the // Build-->Settings-->General-->MFC combo-box. defines a // macro itself to protect against double inclusion. We'll take // advantage of all this to select the proper support for winsock. - // trl 26-July-1996 // This is necessary since MFC users apparently can't #include // directly. #if defined (ACE_HAS_MFC) && (ACE_HAS_MFC != 0) # include /**/ /* He is doing MFC */ // Windows.h will be included via afxwin.h->afx.h->afx_ver_.h->afxv_w32.h // #define _INC_WINDOWS // Prevent winsock.h from including windows.h #endif #if !defined (_INC_WINDOWS) /* Already include windows.h ? */ // Must define strict before including windows.h ! # if defined (ACE_HAS_STRICT) && (ACE_HAS_STRICT != 0) && !defined (STRICT) # define STRICT 1 # endif /* ACE_HAS_STRICT */ # if !defined (WIN32_LEAN_AND_MEAN) && !defined (ACE_NO_WIN32_LEAN_AND_MEAN) # define WIN32_LEAN_AND_MEAN # endif /* WIN32_LEAN_AND_MEAN */ #endif /* !defined (_INC_WINDOWS) */ // Always use WS2 when available #if !defined(ACE_HAS_WINSOCK2) # define ACE_HAS_WINSOCK2 1 #endif /* !defined(ACE_HAS_WINSOCK2) */ // Not use WS1 by default #if !defined(ACE_HAS_WINSOCK1) # define ACE_HAS_WINSOCK1 0 #endif /* !defined(ACE_HAS_WINSOCK1) */ #if defined (ACE_HAS_WINSOCK2) && (ACE_HAS_WINSOCK2 != 0) # define ACE_HAS_ICMP_SUPPORT 1 # if !defined (_WINSOCK2API_) // will also include windows.h, if not present # include /**/ # endif /* _WINSOCK2API */ # if defined (ACE_HAS_FORE_ATM_WS2) # include /**/ # endif /*ACE_HAS_FORE_ATM_WS2 */ # if !defined _MSWSOCK_ # include /**/ # endif /* _MSWSOCK_ */ # if defined (_MSC_VER) # pragma comment(lib, "ws2_32.lib") # pragma comment(lib, "mswsock.lib") # if defined (ACE_HAS_IPV6) # pragma comment(lib, "iphlpapi.lib") # endif # endif /* _MSC_VER */ # define ACE_WSOCK_VERSION 2, 0 #else # if !defined (_WINSOCKAPI_) // will also include windows.h, if not present # include /**/ # endif /* _WINSOCKAPI */ // PharLap ETS has its own winsock lib, so don't grab the one // supplied with the OS. # if defined (_MSC_VER) # pragma comment(lib, "wsock32.lib") # endif /* _MSC_VER */ // We can't use recvmsg and sendmsg unless WinSock 2 is available # define ACE_LACKS_RECVMSG # define ACE_LACKS_SENDMSG // Version 1.1 of WinSock # define ACE_WSOCK_VERSION 1, 1 #endif /* ACE_HAS_WINSOCK2 */ #if _WIN32_WINNT >= 0x400 # define ACE_HAS_WIN32_TRYLOCK #endif #if _WIN32_WINNT < 0x600 # define ACE_LACKS_INET_NTOP # define ACE_LACKS_INET_PTON # define ACE_LACKS_IF_NAMETOINDEX #endif #define ACE_LACKS_IF_NAMEINDEX #define ACE_LACKS_STRUCT_IF_NAMEINDEX // Platform supports IP multicast on Winsock 2 #if defined (ACE_HAS_WINSOCK2) && (ACE_HAS_WINSOCK2 != 0) # define ACE_HAS_IP_MULTICAST #endif /* ACE_HAS_WINSOCK2 */ #define ACE_HAS_INTERLOCKED_EXCHANGEADD #if _WIN32_WINNT >= 0x400 # define ACE_HAS_SIGNAL_OBJECT_AND_WAIT #endif // If CancelIO is undefined get the updated sp2-sdk from MS #define ACE_HAS_CANCEL_IO #define ACE_HAS_WIN32_OVERLAPPED_IO #define ACE_HAS_WIN32_NAMED_PIPES #if !defined (ACE_SEH_DEFAULT_EXCEPTION_HANDLING_ACTION) # define ACE_SEH_DEFAULT_EXCEPTION_HANDLING_ACTION EXCEPTION_CONTINUE_SEARCH #endif /* ACE_SEH_DEFAULT_EXCEPTION_HANDLING_ACTION */ // ACE_HAS_QOS is defined in the qos.mpb base project. // If qos=1 in default.features, then this macro will be defined. #if defined (ACE_HAS_QOS) && !defined (ACE_HAS_WINSOCK2_GQOS) # if defined (WINSOCK_VERSION) # define ACE_HAS_WINSOCK2_GQOS 1 # endif /* WINSOCK_VERSION */ #endif /* ACE_HAS_WINSOCK2_GQOS */ // These are the defaults and can be overridden by a user's config.h #if !defined (ACE_DEFAULT_FILE_PERMS) # define ACE_DEFAULT_FILE_PERMS (FILE_SHARE_READ | FILE_SHARE_WRITE | \ FILE_SHARE_DELETE) // This alternate used to be used for pre-NT4 systems; may still be needed // by knock-offs such as CE and Pharlap. //# define ACE_DEFAULT_FILE_PERMS (FILE_SHARE_READ | FILE_SHARE_WRITE) #endif /* !defined (ACE_DEFAULT_FILE_PERMS) */ #define ACE_SIZEOF_WCHAR 2 #define ACE_HAS_MUTEX_TIMEOUTS #define ACE_LACKS_ALPHASORT #define ACE_LACKS_MKSTEMP #define ACE_LACKS_LSTAT // Looks like Win32 has a non-const swab function, and it takes the // non-standard int len (rather than ssize_t). #define ACE_HAS_NONCONST_SWAB #define ACE_HAS_INT_SWAB #if defined (ACE_WIN64) // Data must be aligned on 8-byte boundaries, at a minimum. # define ACE_MALLOC_ALIGN 8 // Void pointers are 8 bytes # define ACE_SIZEOF_VOID_P 8 #endif /* ACE_WIN64 */ #if !defined (ACE_DISABLES_THREAD_LIBRARY_CALLS) # define ACE_DISABLES_THREAD_LIBRARY_CALLS 0 #endif /* ACE_DISABLES_THREAD_LIBRARY_CALLS */ #define ACE_HAS_LOG_MSG_NT_EVENT_LOG #define ACE_HAS_LLSEEK // Needed for obtaining the MAC address #include #if defined (_MSC_VER) # pragma comment(lib, "netapi32.lib") // needed for obtaing MACaddress #endif #if !defined (WINVER) # define WINVER 0x0400 // pretend it's at least WinNT 4.0 #endif /////////////////////////////////////// // windows version-specific definitions // see: http://msdn2.microsoft.com/en-us/library/aa383745.aspx // // For TSS information // see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/thread_local_storage.asp #if (WINVER>=0x0600) // Windows Server 2008 definitions go here // Windows Vista definitions go here # if ! defined(ACE_DEFAULT_THREAD_KEYS) # define ACE_DEFAULT_THREAD_KEYS 1088 # endif // ! defined(ACE_DEFAULT_THREAD_KEYS) #elif (WINVER>=0x0502) // Windows Server 2003 SP1 definitions go here # if ! defined(ACE_DEFAULT_THREAD_KEYS) # define ACE_DEFAULT_THREAD_KEYS 1088 # endif // ! defined(ACE_DEFAULT_THREAD_KEYS) #elif (WINVER>=0x0501) // Windows XP definitions go here # if ! defined(ACE_DEFAULT_THREAD_KEYS) # define ACE_DEFAULT_THREAD_KEYS 1088 # endif // ! defined(ACE_DEFAULT_THREAD_KEYS) #elif (WINVER>=0x0500) // Windows 2000 definitions go here # if ! defined(ACE_DEFAULT_THREAD_KEYS) # define ACE_DEFAULT_THREAD_KEYS 1088 # endif // ! defined(ACE_DEFAULT_THREAD_KEYS) #elif (WINVER>=0x0410) // Windows 98 definitions go here # if ! defined(ACE_DEFAULT_THREAD_KEYS) # define ACE_DEFAULT_THREAD_KEYS 80 # endif // ! defined(ACE_DEFAULT_THREAD_KEYS) #else // antique windows # if ! defined(ACE_DEFAULT_THREAD_KEYS) # define ACE_DEFAULT_THREAD_KEYS 64 # endif // ! defined(ACE_DEFAULT_THREAD_KEYS) #endif #if !defined (ACE_DEFAULT_BACKLOG) # define ACE_DEFAULT_BACKLOG SOMAXCONN #endif /* ACE_DEFAULT_BACKLOG */ #include /**/ "ace/post.h" #endif /* ACE_CONFIG_WIN32_COMMON_H */