2008-07-30 Gavin Barraclough <barraclough@apple.com>
[WebKit-https.git] / JavaScriptCore / wtf / Platform.h
1 /* -*- mode: c++; c-basic-offset: 4 -*- */
2 /*
3  * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
25  */
26
27 #ifndef WTF_Platform_h
28 #define WTF_Platform_h
29
30 /* PLATFORM handles OS, operating environment, graphics API, and CPU */
31 #define PLATFORM(WTF_FEATURE) (defined( WTF_PLATFORM_##WTF_FEATURE ) && WTF_PLATFORM_##WTF_FEATURE)
32 #define COMPILER(WTF_FEATURE) (defined( WTF_COMPILER_##WTF_FEATURE ) && WTF_COMPILER_##WTF_FEATURE)
33 #define HAVE(WTF_FEATURE) (defined( HAVE_##WTF_FEATURE ) && HAVE_##WTF_FEATURE)
34 #define USE(WTF_FEATURE) (defined( WTF_USE_##WTF_FEATURE ) && WTF_USE_##WTF_FEATURE)
35 #define ENABLE(WTF_FEATURE) (defined( ENABLE_##WTF_FEATURE ) && ENABLE_##WTF_FEATURE)
36
37 /* Operating systems - low-level dependencies */
38
39 /* PLATFORM(DARWIN) */
40 /* Operating system level dependencies for Mac OS X / Darwin that should */
41 /* be used regardless of operating environment */
42 #ifdef __APPLE__
43 #define WTF_PLATFORM_DARWIN 1
44 #endif
45
46 /* PLATFORM(WIN_OS) */
47 /* Operating system level dependencies for Windows that should be used */
48 /* regardless of operating environment */
49 #if defined(WIN32) || defined(_WIN32)
50 #define WTF_PLATFORM_WIN_OS 1
51 #endif
52
53 /* PLATFORM(FREEBSD) */
54 /* Operating system level dependencies for FreeBSD-like systems that */
55 /* should be used regardless of operating environment */
56 #ifdef __FreeBSD__
57 #define WTF_PLATFORM_FREEBSD 1
58 #endif
59
60 /* PLATFORM(OPENBSD) */
61 /* Operating system level dependencies for OpenBSD systems that */
62 /* should be used regardless of operating environment */
63 #ifdef __OpenBSD__
64 #define WTF_PLATFORM_OPENBSD 1
65 #endif
66
67 /* PLATFORM(SOLARIS) */
68 /* Operating system level dependencies for Solaris that should be used */
69 /* regardless of operating environment */
70 #if defined(sun) || defined(__sun)
71 #define WTF_PLATFORM_SOLARIS 1
72 #endif
73
74 /* PLATFORM(UNIX) */
75 /* Operating system level dependencies for Unix-like systems that */
76 /* should be used regardless of operating environment */
77 #if   PLATFORM(DARWIN)     \
78    || PLATFORM(FREEBSD)    \
79    || defined(unix)        \
80    || defined(__unix)      \
81    || defined(__unix__)    \
82    || defined (__NetBSD__) \
83    || defined(_AIX)
84 #define WTF_PLATFORM_UNIX 1
85 #endif
86
87 /* Operating environments */
88
89 /* PLATFORM(QT) */
90 /* PLATFORM(GTK) */
91 /* PLATFORM(MAC) */
92 /* PLATFORM(WIN) */
93 #if defined(BUILDING_QT__)
94 #define WTF_PLATFORM_QT 1
95
96 /* PLATFORM(KDE) */
97 #if defined(BUILDING_KDE__)
98 #define WTF_PLATFORM_KDE 1
99 #endif
100
101 #elif defined(BUILDING_WX__)
102 #define WTF_PLATFORM_WX 1
103 #elif defined(BUILDING_GTK__)
104 #define WTF_PLATFORM_GTK 1
105 #elif PLATFORM(DARWIN)
106 #define WTF_PLATFORM_MAC 1
107 #elif PLATFORM(WIN_OS)
108 #define WTF_PLATFORM_WIN 1
109 #endif
110
111 /* Graphics engines */
112
113 /* PLATFORM(CG) */
114 /* PLATFORM(CAIRO) */
115 #if PLATFORM(MAC)
116 #define WTF_PLATFORM_CG 1
117 #define WTF_PLATFORM_CI 1
118 #elif !PLATFORM(QT) && !PLATFORM(WX)
119 #define WTF_PLATFORM_CAIRO 1
120 #endif
121
122 #ifdef __S60__
123 // we are cross-compiling, it is not really windows
124 #undef WTF_PLATFORM_WIN_OS
125 #undef WTF_PLATFORM_WIN
126 #undef WTF_PLATFORM_CAIRO
127 #define WTF_PLATFORM_S60 1
128 #define WTF_PLATFORM_SYMBIAN 1
129 #endif
130
131 /* CPU */
132
133 /* PLATFORM(PPC) */
134 #if   defined(__ppc__)     \
135    || defined(__PPC__)     \
136    || defined(__powerpc__) \
137    || defined(__powerpc)   \
138    || defined(__POWERPC__) \
139    || defined(_M_PPC)      \
140    || defined(__PPC)
141 #define WTF_PLATFORM_PPC 1
142 #define WTF_PLATFORM_BIG_ENDIAN 1
143 #endif
144
145 /* PLATFORM(PPC64) */
146 #if   defined(__ppc64__) \
147    || defined(__PPC64__)
148 #define WTF_PLATFORM_PPC64 1
149 #define WTF_PLATFORM_BIG_ENDIAN 1
150 #endif
151
152 /* PLATFORM(ARM) */
153 #if   defined(arm) \
154    || defined(__arm__)
155 #define WTF_PLATFORM_ARM 1
156 #if defined(__ARMEB__)
157 #define WTF_PLATFORM_BIG_ENDIAN 1
158 #elif !defined(__ARM_EABI__) && !defined(__ARMEB__) && !defined(__VFP_FP__)
159 #define WTF_PLATFORM_MIDDLE_ENDIAN 1
160 #endif
161 #if !defined(__ARM_EABI__)
162 #define WTF_PLATFORM_FORCE_PACK 1
163 #endif
164 #endif
165
166 /* PLATFORM(X86) */
167 #if   defined(__i386__) \
168    || defined(i386)     \
169    || defined(_M_IX86)  \
170    || defined(_X86_)    \
171    || defined(__THW_INTEL)
172 #define WTF_PLATFORM_X86 1
173 #endif
174
175 /* PLATFORM(X86_64) */
176 #if   defined(__x86_64__) \
177    || defined(__ia64__) \
178    || defined(_M_X64)
179 #define WTF_PLATFORM_X86_64 1
180 #endif
181
182 /* PLATFORM(SPARC64) */
183 #if defined(__sparc64__)
184 #define WTF_PLATFORM_SPARC64 1
185 #define WTF_PLATFORM_BIG_ENDIAN 1
186 #endif
187
188 /* Compiler */
189
190 /* COMPILER(MSVC) */
191 #if defined(_MSC_VER)
192 #define WTF_COMPILER_MSVC 1
193 #if _MSC_VER < 1400
194 #define WTF_COMPILER_MSVC7 1
195 #endif
196 #endif
197
198 /* COMPILER(GCC) */
199 #if defined(__GNUC__)
200 #define WTF_COMPILER_GCC 1
201 #endif
202
203 /* COMPILER(MINGW) */
204 #if defined(MINGW) || defined(__MINGW32__)
205 #define WTF_COMPILER_MINGW 1
206 #endif
207
208 /* COMPILER(BORLAND) */
209 /* not really fully supported - is this relevant any more? */
210 #if defined(__BORLANDC__)
211 #define WTF_COMPILER_BORLAND 1
212 #endif
213
214 /* COMPILER(CYGWIN) */
215 /* not really fully supported - is this relevant any more? */
216 #if defined(__CYGWIN__)
217 #define WTF_COMPILER_CYGWIN 1
218 #endif
219
220 /* multiple threads only supported on Mac for now */
221 #if PLATFORM(MAC) || PLATFORM(WIN)
222 #define WTF_USE_MULTIPLE_THREADS 1
223 #endif
224
225 /* for Unicode, KDE uses Qt */
226 #if PLATFORM(KDE) || PLATFORM(QT)
227 #define WTF_USE_QT4_UNICODE 1
228 #elif PLATFORM(SYMBIAN)
229 #define WTF_USE_SYMBIAN_UNICODE 1
230 #elif PLATFORM(GTK)
231 /* The GTK+ Unicode backend is configurable */
232 #else
233 #define WTF_USE_ICU_UNICODE 1
234 #endif
235
236 #if PLATFORM(MAC)
237 #define WTF_PLATFORM_CF 1
238 #define WTF_USE_PTHREADS 1
239 #define ENABLE_MAC_JAVA_BRIDGE 1
240 #define HAVE_READLINE 1
241 #if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
242 #define HAVE_DTRACE 1
243 #endif
244 #endif
245
246 #if PLATFORM(MAC) || PLATFORM(GTK) || PLATFORM(SYMBIAN) || PLATFORM(WIN) || PLATFORM(WX)
247 #define ENABLE_NETSCAPE_PLUGIN_API 1
248 #endif
249
250 #if PLATFORM(WIN)
251 #define WTF_USE_WININET 1
252 #endif
253
254 #if PLATFORM(WX)
255 #define WTF_USE_CURL 1
256 #define WTF_USE_PTHREADS 1
257 #endif
258
259 #if PLATFORM(MAC) || PLATFORM(WIN)
260 #define ENABLE_DASHBOARD_SUPPORT 1
261 #endif
262
263 #if PLATFORM(MAC) || PLATFORM(WIN) || PLATFORM(GTK)
264 #define HAVE_ACCESSIBILITY 1
265 #endif
266
267 #if COMPILER(GCC)
268 #define HAVE_COMPUTED_GOTO 1
269 #endif
270
271 #if PLATFORM(DARWIN)
272
273 #define HAVE_ERRNO_H 1
274 #define HAVE_MMAP 1
275 #define HAVE_MERGESORT 1
276 #define HAVE_SBRK 1
277 #define HAVE_STRINGS_H 1
278 #define HAVE_SYS_PARAM_H 1
279 #define HAVE_SYS_TIME_H 1
280 #define HAVE_SYS_TIMEB_H 1
281
282 #elif PLATFORM(WIN_OS)
283
284 #define HAVE_FLOAT_H 1
285 #define HAVE_SYS_TIMEB_H 1
286 #define HAVE_VIRTUALALLOC 1
287
288 #else
289
290 /* FIXME: is this actually used or do other platforms generate their own config.h? */
291
292 #define HAVE_ERRNO_H 1
293 #define HAVE_MMAP 1
294 #define HAVE_SBRK 1
295 #define HAVE_STRINGS_H 1
296 #define HAVE_SYS_PARAM_H 1
297 #define HAVE_SYS_TIME_H 1
298
299 #endif
300
301 /* ENABLE macro defaults */
302
303 #if !defined(ENABLE_ICONDATABASE)
304 #define ENABLE_ICONDATABASE 1
305 #endif
306
307 #if !defined(ENABLE_DATABASE)
308 #define ENABLE_DATABASE 1
309 #endif
310
311 #if !defined(ENABLE_FTPDIR)
312 #define ENABLE_FTPDIR 1
313 #endif
314
315 #if !defined(ENABLE_MAC_JAVA_BRIDGE)
316 #define ENABLE_MAC_JAVA_BRIDGE 0
317 #endif
318
319 #if !defined(ENABLE_NETSCAPE_PLUGIN_API)
320 #define ENABLE_NETSCAPE_PLUGIN_API 0
321 #endif
322
323 #if !defined(ENABLE_DASHBOARD_SUPPORT)
324 #define ENABLE_DASHBOARD_SUPPORT 0
325 #endif
326
327 // Set to 1 to enable the sampler, SamplingTool.
328 #define ENABLE_SAMPLING_TOOL 0
329
330 #endif /* WTF_Platform_h */