summaryrefslogtreecommitdiff
path: root/ACE/ace/config-linux.h
blob: 5808ee15ef53a6b9231120da4668d4a7953473af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
// -*- C++ -*-
// The following configuration file is designed to work for Linux
// platforms using GNU C++.

#ifndef ACE_CONFIG_LINUX_H
#define ACE_CONFIG_LINUX_H
#include /**/ "ace/pre.h"

#if !defined (ACE_LINUX)
#define ACE_LINUX
#endif /* ACE_LINUX */

#if !defined (__ACE_INLINE__)
#  define __ACE_INLINE__
#endif /* ! __ACE_INLINE__ */

#if !defined (ACE_PLATFORM_CONFIG)
#define ACE_PLATFORM_CONFIG config-linux.h
#endif

#include "ace/config-linux-common.h"

#define ACE_HAS_BYTESEX_H

#if (defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) >= 500)
#  define ACE_HAS_PTHREADS_UNIX98_EXT
#endif /* _XOPEN_SOURCE - 0 >= 500 */

#if !defined (ACE_LACKS_LINUX_NPTL)

  // Temporary fix because NPTL kernels do have shm_open but there is a problem
  // with shm_open/shm_unlink pairing in ACE which needs to be fixed when I have time.
# if defined (ACE_HAS_SHM_OPEN)
#   undef ACE_HAS_SHM_OPEN
# endif /* ACE_HAS_SHM_OPEN */

# if defined (ACE_USES_FIFO_SEM)
    // Don't use this for Linux NPTL since this has complete
    // POSIX semaphores which are more efficient
#   undef ACE_USES_FIFO_SEM
# endif /* ACE_USES_FIFO_SEM */

# if defined (ACE_HAS_POSIX_SEM)
    // Linux NPTL may not define the right POSIX macro
    // but they have the actual runtime support for this stuff
#   if !defined (ACE_HAS_POSIX_SEM_TIMEOUT) && (((_POSIX_C_SOURCE - 0) >= 200112L) || (_XOPEN_SOURCE >= 600))
#     define ACE_HAS_POSIX_SEM_TIMEOUT
#   endif /* !ACE_HAS_POSIX_SEM_TIMEOUT && (((_POSIX_C_SOURCE - 0) >= 200112L) || (_XOPEN_SOURCE >= 600)) */
# endif /* ACE_HAS_POSIX_SEM */
#endif /* !ACE_LACKS_LINUX_NPTL */

// AIO support pulls in the rt library, which pulls in the pthread
// library.  Disable AIO in single-threaded builds.
#if defined (ACE_HAS_THREADS)
#  define ACE_HAS_CLOCK_GETTIME
#  define ACE_HAS_CLOCK_SETTIME
#else
#  undef ACE_HAS_AIO_CALLS
#endif

// Then glibc/libc5 specific parts

#if defined(__GLIBC__) || defined (__INTEL_COMPILER)
# if !defined (__INTEL_COMPILER) && \
     (__GLIBC__  < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 3)
#   define ACE_HAS_RUSAGE_WHO_ENUM enum __rusage_who
#   define ACE_HAS_RLIMIT_RESOURCE_ENUM enum __rlimit_resource
#   define ACE_LACKS_ISCTYPE
# endif
# define ACE_HAS_SOCKLEN_T
# define ACE_HAS_4_4BSD_SENDMSG_RECVMSG

  // glibc defines both of these, used in OS_String.
# if defined (_GNU_SOURCE)
#   define ACE_HAS_STRNLEN
#   define ACE_HAS_WCSNLEN

  // This is probably not a 100%-sure-fire check... Red Hat Linux 9
  // and Enterprise Linux 3 and up have a new kernel that can send signals
  // across threads. This was not possible prior because there was no real
  // difference between a process and a thread. With this, the
  // ACE_POSIX_SIG_Proactor is the only chance of getting asynch I/O working.
  // There are restrictions, such as all socket operations being silently
  // converted to synchronous by the kernel, that make aio a non-starter
  // for most Linux platforms at this time. But we'll start to crawl...
#   define ACE_POSIX_SIG_PROACTOR
# endif

  // To avoid the strangeness with Linux's ::select (), which modifies
  // its timeout argument, use ::poll () instead.
# define ACE_HAS_POLL

# define ACE_HAS_SIGINFO_T
# define ACE_LACKS_SIGINFO_H
# define ACE_HAS_UCONTEXT_T
# define ACE_HAS_SIGTIMEDWAIT
# define ACE_HAS_STRERROR_R

#else  /* ! __GLIBC__ */
    // Fixes a problem with some non-glibc versions of Linux...
#   define ACE_LACKS_MADVISE
#   define ACE_LACKS_MSG_ACCRIGHTS
#endif /* ! __GLIBC__ */

// Completely common part :-)

#define ACE_HAS_UALARM

// A conflict appears when including both <ucontext.h> and
// <sys/procfs.h> with recent glibc headers.
//#define ACE_HAS_PROC_FS

// Platform supports System V IPC (most versions of UNIX, but not Win32)
#define ACE_HAS_SYSV_IPC

// Compiler/platform defines a union semun for SysV shared memory.
#define ACE_HAS_SEMUN

#if defined (__powerpc__) && !defined (ACE_SIZEOF_LONG_DOUBLE)
// 32bit PowerPC Linux uses 128bit long double
# define ACE_SIZEOF_LONG_DOUBLE 16
#endif

#define ACE_LACKS_GETIPNODEBYADDR
#define ACE_LACKS_GETIPNODEBYNAME

#define ACE_HAS_ICMP_SUPPORT 1

#if defined (ACE_LACKS_NETWORKING)
# include "ace/config-posix-nonetworking.h"
#else
# define ACE_HAS_NETLINK
# define ACE_HAS_GETIFADDRS
#endif

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,8))
# define ACE_HAS_SCHED_GETAFFINITY 1
# define ACE_HAS_SCHED_SETAFFINITY 1
#endif

// This is ghastly, but as long as there are platforms supported
// which define the right POSIX macros but lack actual support
// we have no choice.
// RHEL4 fails (2.6.9) while RHEL5 works (2.6.18)
#if !defined (ACE_LACKS_CONDATTR_SETCLOCK)
# if (LINUX_VERSION_CODE < KERNEL_VERSION (2,6,18))
#  define ACE_LACKS_CONDATTR_SETCLOCK
# endif
#endif

#define ACE_HAS_MNTENT

// To support UCLIBC
#if defined (__UCLIBC__)

#  define ACE_LACKS_STROPTS_H
#  define ACE_LACKS_GETLOADAVG
#  define ACE_LACKS_NETDB_REENTRANT_FUNCTIONS
#  define ACE_LACKS_PTHREAD_SETSTACK
#  define ACE_LACKS_STRRECVFD
#  define ACE_HAS_CPU_SET_T

#  if defined (ACE_HAS_STRBUF_T)
#    undef ACE_HAS_STRBUF_T
#  endif /* ACE_HAS_STRBUF_T */

#  if defined (ACE_HAS_PTHREAD_SETSTACK)
#    undef ACE_HAS_PTHREAD_SETSTACK
#  endif /* ACE_HAS_PTHREAD_SETSTACK */

#  if defined (ACE_HAS_AIO_CALLS)
#    undef ACE_HAS_AIO_CALLS
#  endif /* ACE_HAS_AIO_CALLS */

#  if defined (ACE_HAS_GETIFADDRS)
#    undef ACE_HAS_GETIFADDRS
#  endif /* ACE_HAS_GETIFADDRS */

#  if defined (ACE_SCANDIR_CMP_USES_VOIDPTR)
#    undef ACE_SCANDIR_CMP_USES_VOIDPTR
#  endif /* ACE_SCANDIR_CMP_USES_VOIDPTR */

#  if defined (ACE_SCANDIR_CMP_USES_CONST_VOIDPTR)
#    undef ACE_SCANDIR_CMP_USES_CONST_VOIDPTR
#  endif /* ACE_SCANDIR_CMP_USES_CONST_VOIDPTR */

#  if defined (ACE_HAS_EXECINFO_H)
#    undef ACE_HAS_EXECINFO_H
#  endif /* ACE_HAS_EXECINFO_H */

#  if defined(__GLIBC__)
#    undef __GLIBC__
#  endif /* __GLIBC__ */

#  if defined(ACE_HAS_SEMUN)
#    undef ACE_HAS_SEMUN
#  endif /* ACE_HAS_SEMUN */

#endif /* __UCLIBC__ */

#include /**/ "ace/post.h"

#endif /* ACE_CONFIG_LINUX_H */