2009-11-19 Steve Block <steveblock@google.com>
[WebKit-https.git] / JavaScriptCore / wtf / Platform.h
1 /*
2  * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc.  All rights reserved.
3  * Copyright (C) 2007-2009 Torch Mobile, Inc.
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 #include <AvailabilityMacros.h>
45 #if !defined(MAC_OS_X_VERSION_10_5) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
46 #define BUILDING_ON_TIGER 1
47 #elif !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
48 #define BUILDING_ON_LEOPARD 1
49 #endif
50 #if !defined(MAC_OS_X_VERSION_10_5) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
51 #define TARGETING_TIGER 1
52 #elif !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6
53 #define TARGETING_LEOPARD 1
54 #endif
55 #include <TargetConditionals.h>
56 #endif
57
58 /* PLATFORM(WIN_OS) */
59 /* Operating system level dependencies for Windows that should be used */
60 /* regardless of operating environment */
61 #if defined(WIN32) || defined(_WIN32)
62 #define WTF_PLATFORM_WIN_OS 1
63 #endif
64
65 /* PLATFORM(WINCE) */
66 /* Operating system level dependencies for Windows CE that should be used */
67 /* regardless of operating environment */
68 /* Note that for this platform PLATFORM(WIN_OS) is also defined. */
69 #if defined(_WIN32_WCE)
70 #define WTF_PLATFORM_WINCE 1
71 #endif
72
73 /* PLATFORM(LINUX) */
74 /* Operating system level dependencies for Linux-like systems that */
75 /* should be used regardless of operating environment */
76 #ifdef __linux__
77 #define WTF_PLATFORM_LINUX 1
78 #endif
79
80 /* PLATFORM(FREEBSD) */
81 /* Operating system level dependencies for FreeBSD-like systems that */
82 /* should be used regardless of operating environment */
83 #ifdef __FreeBSD__
84 #define WTF_PLATFORM_FREEBSD 1
85 #endif
86
87 /* PLATFORM(OPENBSD) */
88 /* Operating system level dependencies for OpenBSD systems that */
89 /* should be used regardless of operating environment */
90 #ifdef __OpenBSD__
91 #define WTF_PLATFORM_OPENBSD 1
92 #endif
93
94 /* PLATFORM(SOLARIS) */
95 /* Operating system level dependencies for Solaris that should be used */
96 /* regardless of operating environment */
97 #if defined(sun) || defined(__sun)
98 #define WTF_PLATFORM_SOLARIS 1
99 #endif
100
101 #if defined (__SYMBIAN32__)
102 /* we are cross-compiling, it is not really windows */
103 #undef WTF_PLATFORM_WIN_OS
104 #undef WTF_PLATFORM_WIN
105 #define WTF_PLATFORM_SYMBIAN 1
106 #endif
107
108
109 /* PLATFORM(NETBSD) */
110 /* Operating system level dependencies for NetBSD that should be used */
111 /* regardless of operating environment */
112 #if defined(__NetBSD__)
113 #define WTF_PLATFORM_NETBSD 1
114 #endif
115
116 /* PLATFORM(QNX) */
117 /* Operating system level dependencies for QNX that should be used */
118 /* regardless of operating environment */
119 #if defined(__QNXNTO__)
120 #define WTF_PLATFORM_QNX 1
121 #endif
122
123 /* PLATFORM(UNIX) */
124 /* Operating system level dependencies for Unix-like systems that */
125 /* should be used regardless of operating environment */
126 #if   PLATFORM(DARWIN)     \
127    || PLATFORM(FREEBSD)    \
128    || PLATFORM(SYMBIAN)    \
129    || PLATFORM(NETBSD)     \
130    || defined(unix)        \
131    || defined(__unix)      \
132    || defined(__unix__)    \
133    || defined(_AIX)        \
134    || defined(__HAIKU__)   \
135    || defined(__QNXNTO__)  \
136    || defined(ANDROID)
137 #define WTF_PLATFORM_UNIX 1
138 #endif
139
140 /* Operating environments */
141
142 /* PLATFORM(CHROMIUM) */
143 /* PLATFORM(QT) */
144 /* PLATFORM(GTK) */
145 /* PLATFORM(MAC) */
146 /* PLATFORM(WIN) */
147 #if defined(BUILDING_CHROMIUM__)
148 #define WTF_PLATFORM_CHROMIUM 1
149 #elif defined(BUILDING_QT__)
150 #define WTF_PLATFORM_QT 1
151
152 /* PLATFORM(KDE) */
153 #if defined(BUILDING_KDE__)
154 #define WTF_PLATFORM_KDE 1
155 #endif
156
157 #elif defined(BUILDING_WX__)
158 #define WTF_PLATFORM_WX 1
159 #elif defined(BUILDING_GTK__)
160 #define WTF_PLATFORM_GTK 1
161 #elif defined(BUILDING_HAIKU__)
162 #define WTF_PLATFORM_HAIKU 1
163 #elif PLATFORM(DARWIN)
164 #define WTF_PLATFORM_MAC 1
165 #elif PLATFORM(WIN_OS)
166 #define WTF_PLATFORM_WIN 1
167 #endif
168
169 /* PLATFORM(IPHONE) */
170 #if (defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
171 #define WTF_PLATFORM_IPHONE 1
172 #endif
173
174 /* PLATFORM(IPHONE_SIMULATOR) */
175 #if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR
176 #define WTF_PLATFORM_IPHONE 1
177 #define WTF_PLATFORM_IPHONE_SIMULATOR 1
178 #else
179 #define WTF_PLATFORM_IPHONE_SIMULATOR 0
180 #endif
181
182 #if !defined(WTF_PLATFORM_IPHONE)
183 #define WTF_PLATFORM_IPHONE 0
184 #endif
185
186 /* PLATFORM(ANDROID) */
187 #if defined(ANDROID)
188 #define WTF_PLATFORM_ANDROID 1
189 #endif
190
191 /* Graphics engines */
192
193 /* PLATFORM(CG) and PLATFORM(CI) */
194 #if PLATFORM(MAC) || PLATFORM(IPHONE)
195 #define WTF_PLATFORM_CG 1
196 #endif
197 #if PLATFORM(MAC) && !PLATFORM(IPHONE)
198 #define WTF_PLATFORM_CI 1
199 #endif
200
201 /* PLATFORM(SKIA) for Win/Linux, CG/CI for Mac */
202 #if PLATFORM(CHROMIUM)
203 #if PLATFORM(DARWIN)
204 #define WTF_PLATFORM_CG 1
205 #define WTF_PLATFORM_CI 1
206 #define WTF_USE_ATSUI 1
207 #else
208 #define WTF_PLATFORM_SKIA 1
209 #endif
210 #endif
211
212 /* Makes PLATFORM(WIN) default to PLATFORM(CAIRO) */
213 /* FIXME: This should be changed from a blacklist to a whitelist */
214 #if !PLATFORM(MAC) && !PLATFORM(QT) && !PLATFORM(WX) && !PLATFORM(CHROMIUM) && !PLATFORM(WINCE) && !PLATFORM(HAIKU) && !PLATFORM(ANDROID)
215 #define WTF_PLATFORM_CAIRO 1
216 #endif
217
218 /* CPU */
219
220 /* PLATFORM(PPC) */
221 #if   defined(__ppc__)     \
222    || defined(__PPC__)     \
223    || defined(__powerpc__) \
224    || defined(__powerpc)   \
225    || defined(__POWERPC__) \
226    || defined(_M_PPC)      \
227    || defined(__PPC)
228 #define WTF_PLATFORM_PPC 1
229 #define WTF_PLATFORM_BIG_ENDIAN 1
230 #endif
231
232 /* PLATFORM(SPARC32) */
233 #if defined(__sparc) && !defined(__arch64__) || defined(__sparcv8)
234 #define WTF_PLATFORM_SPARC32 1
235 #define WTF_PLATFORM_BIG_ENDIAN 1
236 #endif
237
238 #if PLATFORM(SPARC32) || PLATFORM(SPARC64)
239 #define WTF_PLATFORM_SPARC
240 #endif
241
242 /* PLATFORM(PPC64) */
243 #if   defined(__ppc64__) \
244    || defined(__PPC64__)
245 #define WTF_PLATFORM_PPC64 1
246 #define WTF_PLATFORM_BIG_ENDIAN 1
247 #endif
248
249 /* PLATFORM(ARM) */
250 #define PLATFORM_ARM_ARCH(N) (PLATFORM(ARM) && ARM_ARCH_VERSION >= N)
251
252 #if   defined(arm) \
253    || defined(__arm__)
254 #define WTF_PLATFORM_ARM 1
255
256 #if defined(__ARMEB__)
257 #define WTF_PLATFORM_BIG_ENDIAN 1
258
259 #elif !defined(__ARM_EABI__) \
260    && !defined(__EABI__) \
261    && !defined(__VFP_FP__) \
262    && !defined(ANDROID)
263 #define WTF_PLATFORM_MIDDLE_ENDIAN 1
264
265 #endif
266
267 /* Set ARM_ARCH_VERSION */
268 #if   defined(__ARM_ARCH_4__) \
269    || defined(__ARM_ARCH_4T__) \
270    || defined(__MARM_ARMV4__) \
271    || defined(_ARMV4I_)
272 #define ARM_ARCH_VERSION 4
273
274 #elif defined(__ARM_ARCH_5__) \
275    || defined(__ARM_ARCH_5T__) \
276    || defined(__ARM_ARCH_5E__) \
277    || defined(__ARM_ARCH_5TE__) \
278    || defined(__ARM_ARCH_5TEJ__) \
279    || defined(__MARM_ARMV5__)
280 #define ARM_ARCH_VERSION 5
281
282 #elif defined(__ARM_ARCH_6__) \
283    || defined(__ARM_ARCH_6J__) \
284    || defined(__ARM_ARCH_6K__) \
285    || defined(__ARM_ARCH_6Z__) \
286    || defined(__ARM_ARCH_6ZK__) \
287    || defined(__ARM_ARCH_6T2__) \
288    || defined(__ARMV6__)
289 #define ARM_ARCH_VERSION 6
290
291 #elif defined(__ARM_ARCH_7A__) \
292    || defined(__ARM_ARCH_7R__)
293 #define ARM_ARCH_VERSION 7
294
295 /* RVCT sets _TARGET_ARCH_ARM */
296 #elif defined(__TARGET_ARCH_ARM)
297 #define ARM_ARCH_VERSION __TARGET_ARCH_ARM
298
299 #else
300 #define ARM_ARCH_VERSION 0
301
302 #endif
303
304 /* Set THUMB_ARM_VERSION */
305 #if   defined(__ARM_ARCH_4T__)
306 #define THUMB_ARCH_VERSION 1
307
308 #elif defined(__ARM_ARCH_5T__) \
309    || defined(__ARM_ARCH_5TE__) \
310    || defined(__ARM_ARCH_5TEJ__)
311 #define THUMB_ARCH_VERSION 2
312
313 #elif defined(__ARM_ARCH_6J__) \
314    || defined(__ARM_ARCH_6K__) \
315    || defined(__ARM_ARCH_6Z__) \
316    || defined(__ARM_ARCH_6ZK__) \
317    || defined(__ARM_ARCH_6M__)
318 #define THUMB_ARCH_VERSION 3
319
320 #elif defined(__ARM_ARCH_6T2__) \
321    || defined(__ARM_ARCH_7__) \
322    || defined(__ARM_ARCH_7A__) \
323    || defined(__ARM_ARCH_7R__) \
324    || defined(__ARM_ARCH_7M__)
325 #define THUMB_ARCH_VERSION 4
326
327 /* RVCT sets __TARGET_ARCH_THUMB */
328 #elif defined(__TARGET_ARCH_THUMB)
329 #define THUMB_ARCH_VERSION __TARGET_ARCH_THUMB
330
331 #else
332 #define THUMB_ARCH_VERSION 0
333 #endif
334
335 /* On ARMv5 and below the natural alignment is required. */
336 #if !defined(ARM_REQUIRE_NATURAL_ALIGNMENT) && ARM_ARCH_VERSION <= 5
337 #define ARM_REQUIRE_NATURAL_ALIGNMENT 1
338 #endif
339
340 /* Defines two pseudo-platforms for ARM and Thumb-2 instruction set. */
341 #if !defined(WTF_PLATFORM_ARM_TRADITIONAL) && !defined(WTF_PLATFORM_ARM_THUMB2)
342 #  if defined(thumb2) || defined(__thumb2__) \
343   || ((defined(__thumb) || defined(__thumb__)) && THUMB_ARCH_VERSION == 4)
344 #    define WTF_PLATFORM_ARM_TRADITIONAL 0
345 #    define WTF_PLATFORM_ARM_THUMB2 1
346 #  elif PLATFORM_ARM_ARCH(4)
347 #    define WTF_PLATFORM_ARM_TRADITIONAL 1
348 #    define WTF_PLATFORM_ARM_THUMB2 0
349 #  else
350 #    error "Not supported ARM architecture"
351 #  endif
352 #elif PLATFORM(ARM_TRADITIONAL) && PLATFORM(ARM_THUMB2) /* Sanity Check */
353 #  error "Cannot use both of WTF_PLATFORM_ARM_TRADITIONAL and WTF_PLATFORM_ARM_THUMB2 platforms"
354 #endif // !defined(ARM_TRADITIONAL) && !defined(ARM_THUMB2)
355 #endif /* ARM */
356
357 /* PLATFORM(X86) */
358 #if   defined(__i386__) \
359    || defined(i386)     \
360    || defined(_M_IX86)  \
361    || defined(_X86_)    \
362    || defined(__THW_INTEL)
363 #define WTF_PLATFORM_X86 1
364 #endif
365
366 /* PLATFORM(X86_64) */
367 #if   defined(__x86_64__) \
368    || defined(_M_X64)
369 #define WTF_PLATFORM_X86_64 1
370 #endif
371
372 /* PLATFORM(SH4) */
373 #if defined(__SH4__)
374 #define WTF_PLATFORM_SH4 1
375 #endif
376
377 /* PLATFORM(SPARC64) */
378 #if defined(__sparc__) && defined(__arch64__) || defined (__sparcv9)
379 #define WTF_PLATFORM_SPARC64 1
380 #define WTF_PLATFORM_BIG_ENDIAN 1
381 #endif
382
383 /* PLATFORM(WINCE) && PLATFORM(QT)
384    We can not determine the endianess at compile time. For
385    Qt for Windows CE the endianess is specified in the
386    device specific makespec
387 */
388 #if PLATFORM(WINCE) && PLATFORM(QT)
389 #   include <QtGlobal>
390 #   undef WTF_PLATFORM_BIG_ENDIAN
391 #   undef WTF_PLATFORM_MIDDLE_ENDIAN
392 #   if Q_BYTE_ORDER == Q_BIG_EDIAN
393 #       define WTF_PLATFORM_BIG_ENDIAN 1
394 #   endif
395
396 #   include <ce_time.h>
397 #endif
398
399 /* Compiler */
400
401 /* COMPILER(MSVC) */
402 #if defined(_MSC_VER)
403 #define WTF_COMPILER_MSVC 1
404 #if _MSC_VER < 1400
405 #define WTF_COMPILER_MSVC7 1
406 #endif
407 #endif
408
409 /* COMPILER(RVCT) */
410 #if defined(__CC_ARM) || defined(__ARMCC__)
411 #define WTF_COMPILER_RVCT 1
412 #endif
413
414 /* COMPILER(GCC) */
415 /* --gnu option of the RVCT compiler also defines __GNUC__ */
416 #if defined(__GNUC__) && !COMPILER(RVCT)
417 #define WTF_COMPILER_GCC 1
418 #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
419 #endif
420
421 /* COMPILER(MINGW) */
422 #if defined(MINGW) || defined(__MINGW32__)
423 #define WTF_COMPILER_MINGW 1
424 #endif
425
426 /* COMPILER(BORLAND) */
427 /* not really fully supported - is this relevant any more? */
428 #if defined(__BORLANDC__)
429 #define WTF_COMPILER_BORLAND 1
430 #endif
431
432 /* COMPILER(CYGWIN) */
433 /* not really fully supported - is this relevant any more? */
434 #if defined(__CYGWIN__)
435 #define WTF_COMPILER_CYGWIN 1
436 #endif
437
438 /* COMPILER(WINSCW) */
439 #if defined(__WINSCW__)
440 #define WTF_COMPILER_WINSCW 1
441 #endif
442
443 #if (PLATFORM(IPHONE) || PLATFORM(MAC) || PLATFORM(WIN)) && !defined(ENABLE_JSC_MULTIPLE_THREADS)
444 #define ENABLE_JSC_MULTIPLE_THREADS 1
445 #endif
446
447 /* On Windows, use QueryPerformanceCounter by default */
448 #if PLATFORM(WIN_OS)
449 #define WTF_USE_QUERY_PERFORMANCE_COUNTER  1
450 #endif
451
452 #if PLATFORM(WINCE) && !PLATFORM(QT)
453 #undef ENABLE_JSC_MULTIPLE_THREADS
454 #define ENABLE_JSC_MULTIPLE_THREADS        0
455 #define USE_SYSTEM_MALLOC                  0
456 #define ENABLE_ICONDATABASE                0
457 #define ENABLE_JAVASCRIPT_DEBUGGER         0
458 #define ENABLE_FTPDIR                      0
459 #define ENABLE_PAN_SCROLLING               0
460 #define ENABLE_WML                         1
461 #define HAVE_ACCESSIBILITY                 0
462
463 #define NOMINMAX       // Windows min and max conflict with standard macros
464 #define NOSHLWAPI      // shlwapi.h not available on WinCe
465
466 // MSDN documentation says these functions are provided with uspce.lib.  But we cannot find this file.
467 #define __usp10__      // disable "usp10.h"
468
469 #define _INC_ASSERT    // disable "assert.h"
470 #define assert(x)
471
472 // _countof is only included in CE6; for CE5 we need to define it ourself
473 #ifndef _countof
474 #define _countof(x) (sizeof(x) / sizeof((x)[0]))
475 #endif
476
477 #endif  /* PLATFORM(WINCE) && !PLATFORM(QT) */
478
479 /* for Unicode, KDE uses Qt */
480 #if PLATFORM(KDE) || PLATFORM(QT)
481 #define WTF_USE_QT4_UNICODE 1
482 #elif PLATFORM(WINCE)
483 #define WTF_USE_WINCE_UNICODE 1
484 #elif PLATFORM(GTK)
485 /* The GTK+ Unicode backend is configurable */
486 #else
487 #define WTF_USE_ICU_UNICODE 1
488 #endif
489
490 #if PLATFORM(MAC) && !PLATFORM(IPHONE)
491 #define WTF_PLATFORM_CF 1
492 #define WTF_USE_PTHREADS 1
493 #define HAVE_PTHREAD_RWLOCK 1
494 #if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_TIGER) && defined(__x86_64__)
495 #define WTF_USE_PLUGIN_HOST_PROCESS 1
496 #endif
497 #if !defined(ENABLE_MAC_JAVA_BRIDGE)
498 #define ENABLE_MAC_JAVA_BRIDGE 1
499 #endif
500 #if !defined(ENABLE_DASHBOARD_SUPPORT)
501 #define ENABLE_DASHBOARD_SUPPORT 1
502 #endif
503 #define HAVE_READLINE 1
504 #define HAVE_RUNLOOP_TIMER 1
505 #endif /* PLATFORM(MAC) && !PLATFORM(IPHONE) */
506
507 #if PLATFORM(CHROMIUM) && PLATFORM(DARWIN)
508 #define WTF_PLATFORM_CF 1
509 #define WTF_USE_PTHREADS 1
510 #define HAVE_PTHREAD_RWLOCK 1
511 #endif
512
513 #if PLATFORM(QT) && PLATFORM(DARWIN)
514 #define WTF_PLATFORM_CF 1
515 #endif
516
517 #if PLATFORM(IPHONE)
518 #define ENABLE_CONTEXT_MENUS 0
519 #define ENABLE_DRAG_SUPPORT 0
520 #define ENABLE_FTPDIR 1
521 #define ENABLE_GEOLOCATION 1
522 #define ENABLE_ICONDATABASE 0
523 #define ENABLE_INSPECTOR 0
524 #define ENABLE_MAC_JAVA_BRIDGE 0
525 #define ENABLE_NETSCAPE_PLUGIN_API 0
526 #define ENABLE_ORIENTATION_EVENTS 1
527 #define ENABLE_REPAINT_THROTTLING 1
528 #define HAVE_READLINE 1
529 #define WTF_PLATFORM_CF 1
530 #define WTF_USE_PTHREADS 1
531 #define HAVE_PTHREAD_RWLOCK 1
532 #endif
533
534 #if PLATFORM(ANDROID)
535 #define WTF_USE_PTHREADS 1
536 #define WTF_PLATFORM_SGL 1
537 #define USE_SYSTEM_MALLOC 1
538 #define ENABLE_MAC_JAVA_BRIDGE 1
539 #define LOG_DISABLED 1
540 // Prevents Webkit from drawing the caret in textfields and textareas
541 // This prevents unnecessary invals.
542 #define ENABLE_TEXT_CARET 1
543 #define ENABLE_JAVASCRIPT_DEBUGGER 0
544 #endif
545
546 #if PLATFORM(WIN)
547 #define WTF_USE_WININET 1
548 #endif
549
550 #if PLATFORM(WX)
551 #define ENABLE_ASSEMBLER 1
552 #endif
553
554 #if PLATFORM(GTK)
555 #if HAVE(PTHREAD_H)
556 #define WTF_USE_PTHREADS 1
557 #define HAVE_PTHREAD_RWLOCK 1
558 #endif
559 #endif
560
561 #if PLATFORM(HAIKU)
562 #define HAVE_POSIX_MEMALIGN 1
563 #define WTF_USE_CURL 1
564 #define WTF_USE_PTHREADS 1
565 #define HAVE_PTHREAD_RWLOCK 1
566 #define USE_SYSTEM_MALLOC 1
567 #define ENABLE_NETSCAPE_PLUGIN_API 0
568 #endif
569
570 #if !defined(HAVE_ACCESSIBILITY)
571 #if PLATFORM(IPHONE) || PLATFORM(MAC) || PLATFORM(WIN) || PLATFORM(GTK) || PLATFORM(CHROMIUM)
572 #define HAVE_ACCESSIBILITY 1
573 #endif
574 #endif /* !defined(HAVE_ACCESSIBILITY) */
575
576 #if PLATFORM(UNIX) && !PLATFORM(SYMBIAN)
577 #define HAVE_SIGNAL_H 1
578 #endif
579
580 #if !PLATFORM(WIN_OS) && !PLATFORM(SOLARIS) && !PLATFORM(QNX) \
581     && !PLATFORM(SYMBIAN) && !PLATFORM(HAIKU) && !COMPILER(RVCT) \
582     && !PLATFORM(ANDROID)
583 #define HAVE_TM_GMTOFF 1
584 #define HAVE_TM_ZONE 1
585 #define HAVE_TIMEGM 1
586 #endif     
587
588 #if PLATFORM(DARWIN)
589
590 #define HAVE_ERRNO_H 1
591 #define HAVE_LANGINFO_H 1
592 #define HAVE_MMAP 1
593 #define HAVE_MERGESORT 1
594 #define HAVE_SBRK 1
595 #define HAVE_STRINGS_H 1
596 #define HAVE_SYS_PARAM_H 1
597 #define HAVE_SYS_TIME_H 1
598 #define HAVE_SYS_TIMEB_H 1
599
600 #if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !PLATFORM(IPHONE) && !PLATFORM(QT)
601 #define HAVE_MADV_FREE_REUSE 1
602 #define HAVE_MADV_FREE 1
603 #define HAVE_PTHREAD_SETNAME_NP 1
604 #endif
605
606 #if PLATFORM(IPHONE)
607 #define HAVE_MADV_FREE 1
608 #endif
609
610 #elif PLATFORM(WIN_OS)
611
612 #if PLATFORM(WINCE)
613 #define HAVE_ERRNO_H 0
614 #else
615 #define HAVE_SYS_TIMEB_H 1
616 #endif
617 #define HAVE_VIRTUALALLOC 1
618
619 #elif PLATFORM(SYMBIAN)
620
621 #define HAVE_ERRNO_H 1
622 #define HAVE_MMAP 0
623 #define HAVE_SBRK 1
624
625 #define HAVE_SYS_TIME_H 1
626 #define HAVE_STRINGS_H 1
627
628 #if !COMPILER(RVCT)
629 #define HAVE_SYS_PARAM_H 1
630 #endif
631
632 #elif PLATFORM(QNX)
633
634 #define HAVE_ERRNO_H 1
635 #define HAVE_MMAP 1
636 #define HAVE_SBRK 1
637 #define HAVE_STRINGS_H 1
638 #define HAVE_SYS_PARAM_H 1
639 #define HAVE_SYS_TIME_H 1
640
641 #elif PLATFORM(ANDROID)
642
643 #define HAVE_ERRNO_H 1
644 #define HAVE_LANGINFO_H 0
645 #define HAVE_MMAP 1
646 #define HAVE_SBRK 1
647 #define HAVE_STRINGS_H 1
648 #define HAVE_SYS_PARAM_H 1
649 #define HAVE_SYS_TIME_H 1
650
651 #else
652
653 /* FIXME: is this actually used or do other platforms generate their own config.h? */
654
655 #define HAVE_ERRNO_H 1
656 /* As long as Haiku doesn't have a complete support of locale this will be disabled. */
657 #if !PLATFORM(HAIKU)
658 #define HAVE_LANGINFO_H 1
659 #endif
660 #define HAVE_MMAP 1
661 #define HAVE_SBRK 1
662 #define HAVE_STRINGS_H 1
663 #define HAVE_SYS_PARAM_H 1
664 #define HAVE_SYS_TIME_H 1
665
666 #endif
667
668 /* ENABLE macro defaults */
669
670 /* fastMalloc match validation allows for runtime verification that
671    new is matched by delete, fastMalloc is matched by fastFree, etc. */
672 #if !defined(ENABLE_FAST_MALLOC_MATCH_VALIDATION)
673 #define ENABLE_FAST_MALLOC_MATCH_VALIDATION 0
674 #endif
675
676 #if !defined(ENABLE_ICONDATABASE)
677 #define ENABLE_ICONDATABASE 1
678 #endif
679
680 #if !defined(ENABLE_DATABASE)
681 #define ENABLE_DATABASE 1
682 #endif
683
684 #if !defined(ENABLE_JAVASCRIPT_DEBUGGER)
685 #define ENABLE_JAVASCRIPT_DEBUGGER 1
686 #endif
687
688 #if !defined(ENABLE_FTPDIR)
689 #define ENABLE_FTPDIR 1
690 #endif
691
692 #if !defined(ENABLE_CONTEXT_MENUS)
693 #define ENABLE_CONTEXT_MENUS 1
694 #endif
695
696 #if !defined(ENABLE_DRAG_SUPPORT)
697 #define ENABLE_DRAG_SUPPORT 1
698 #endif
699
700 #if !defined(ENABLE_DASHBOARD_SUPPORT)
701 #define ENABLE_DASHBOARD_SUPPORT 0
702 #endif
703
704 #if !defined(ENABLE_INSPECTOR)
705 #define ENABLE_INSPECTOR 1
706 #endif
707
708 #if !defined(ENABLE_MAC_JAVA_BRIDGE)
709 #define ENABLE_MAC_JAVA_BRIDGE 0
710 #endif
711
712 #if !defined(ENABLE_NETSCAPE_PLUGIN_API)
713 #define ENABLE_NETSCAPE_PLUGIN_API 1
714 #endif
715
716 #if !defined(WTF_USE_PLUGIN_HOST_PROCESS)
717 #define WTF_USE_PLUGIN_HOST_PROCESS 0
718 #endif
719
720 #if !defined(ENABLE_ORIENTATION_EVENTS)
721 #define ENABLE_ORIENTATION_EVENTS 0
722 #endif
723
724 #if !defined(ENABLE_OPCODE_STATS)
725 #define ENABLE_OPCODE_STATS 0
726 #endif
727
728 #define ENABLE_SAMPLING_COUNTERS 0
729 #define ENABLE_SAMPLING_FLAGS 0
730 #define ENABLE_OPCODE_SAMPLING 0
731 #define ENABLE_CODEBLOCK_SAMPLING 0
732 #if ENABLE(CODEBLOCK_SAMPLING) && !ENABLE(OPCODE_SAMPLING)
733 #error "CODEBLOCK_SAMPLING requires OPCODE_SAMPLING"
734 #endif
735 #if ENABLE(OPCODE_SAMPLING) || ENABLE(SAMPLING_FLAGS)
736 #define ENABLE_SAMPLING_THREAD 1
737 #endif
738
739 #if !defined(ENABLE_GEOLOCATION)
740 #define ENABLE_GEOLOCATION 0
741 #endif
742
743 #if !defined(ENABLE_NOTIFICATIONS)
744 #define ENABLE_NOTIFICATIONS 0
745 #endif
746
747 #if !defined(ENABLE_TEXT_CARET)
748 #define ENABLE_TEXT_CARET 1
749 #endif
750
751 #if !defined(ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL)
752 #define ENABLE_ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL 0
753 #endif
754
755 #if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64)
756 #if PLATFORM(X86_64) && (PLATFORM(DARWIN) || PLATFORM(LINUX) || PLATFORM(WIN_OS))
757 #define WTF_USE_JSVALUE64 1
758 #elif PLATFORM(ARM) || PLATFORM(PPC64)
759 #define WTF_USE_JSVALUE32 1
760 #elif PLATFORM(WIN_OS) && COMPILER(MINGW)
761 /* Using JSVALUE32_64 causes padding/alignement issues for JITStubArg
762 on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
763 #define WTF_USE_JSVALUE32 1
764 #else
765 #define WTF_USE_JSVALUE32_64 1
766 #endif
767 #endif /* !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64) */
768
769 #if !defined(ENABLE_REPAINT_THROTTLING)
770 #define ENABLE_REPAINT_THROTTLING 0
771 #endif
772
773 #if !defined(ENABLE_JIT)
774
775 /* The JIT is tested & working on x86_64 Mac */
776 #if PLATFORM(X86_64) && PLATFORM(MAC)
777     #define ENABLE_JIT 1
778 /* The JIT is tested & working on x86 Mac */
779 #elif PLATFORM(X86) && PLATFORM(MAC)
780     #define ENABLE_JIT 1
781     #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
782 #elif PLATFORM(ARM_THUMB2) && PLATFORM(IPHONE)
783     #define ENABLE_JIT 1
784 /* The JIT is tested & working on x86 Windows */
785 #elif PLATFORM(X86) && PLATFORM(WIN)
786     #define ENABLE_JIT 1
787 #endif
788
789 #if PLATFORM(QT)
790 #if PLATFORM(X86) && PLATFORM(WIN_OS) && COMPILER(MINGW) && GCC_VERSION >= 40100
791     #define ENABLE_JIT 1
792     #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
793 #elif PLATFORM(X86) && PLATFORM(WIN_OS) && COMPILER(MSVC)
794     #define ENABLE_JIT 1
795     #define WTF_USE_JIT_STUB_ARGUMENT_REGISTER 1
796 #elif PLATFORM(X86) && PLATFORM(LINUX) && GCC_VERSION >= 40100
797     #define ENABLE_JIT 1
798     #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
799 #elif PLATFORM(ARM_TRADITIONAL) && PLATFORM(LINUX)
800     #define ENABLE_JIT 1
801 #endif
802 #endif /* PLATFORM(QT) */
803
804 #endif /* !defined(ENABLE_JIT) */
805
806 #if ENABLE(JIT)
807 #ifndef ENABLE_JIT_OPTIMIZE_CALL
808 #define ENABLE_JIT_OPTIMIZE_CALL 1
809 #endif
810 #ifndef ENABLE_JIT_OPTIMIZE_NATIVE_CALL
811 #define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1
812 #endif
813 #ifndef ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
814 #define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1
815 #endif
816 #ifndef ENABLE_JIT_OPTIMIZE_METHOD_CALLS
817 #define ENABLE_JIT_OPTIMIZE_METHOD_CALLS 1
818 #endif
819 #endif
820
821 #if PLATFORM(X86) && COMPILER(MSVC)
822 #define JSC_HOST_CALL __fastcall
823 #elif PLATFORM(X86) && COMPILER(GCC)
824 #define JSC_HOST_CALL __attribute__ ((fastcall))
825 #else
826 #define JSC_HOST_CALL
827 #endif
828
829 #if COMPILER(GCC) && !ENABLE(JIT)
830 #define HAVE_COMPUTED_GOTO 1
831 #endif
832
833 #if ENABLE(JIT) && defined(COVERAGE)
834     #define WTF_USE_INTERPRETER 0
835 #else
836     #define WTF_USE_INTERPRETER 1
837 #endif
838
839 /* Yet Another Regex Runtime. */
840 #if !defined(ENABLE_YARR_JIT)
841
842 /* YARR supports x86 & x86-64, and has been tested on Mac and Windows. */
843 #if (PLATFORM(X86) && PLATFORM(MAC)) \
844  || (PLATFORM(X86_64) && PLATFORM(MAC)) \
845  || (PLATFORM(ARM_THUMB2) && PLATFORM(IPHONE)) \
846  || (PLATFORM(X86) && PLATFORM(WIN))
847 #define ENABLE_YARR 1
848 #define ENABLE_YARR_JIT 1
849 #endif
850
851 #if PLATFORM(QT)
852 #if (PLATFORM(X86) && PLATFORM(WIN_OS) && COMPILER(MINGW) && GCC_VERSION >= 40100) \
853  || (PLATFORM(X86) && PLATFORM(WIN_OS) && COMPILER(MSVC)) \
854  || (PLATFORM(X86) && PLATFORM(LINUX) && GCC_VERSION >= 40100) \
855  || (PLATFORM(ARM_TRADITIONAL) && PLATFORM(LINUX))
856 #define ENABLE_YARR 1
857 #define ENABLE_YARR_JIT 1
858 #endif
859 #endif
860
861 #endif /* !defined(ENABLE_YARR_JIT) */
862
863 /* Sanity Check */
864 #if ENABLE(YARR_JIT) && !ENABLE(YARR)
865 #error "YARR_JIT requires YARR"
866 #endif
867
868 #if ENABLE(JIT) || ENABLE(YARR_JIT)
869 #define ENABLE_ASSEMBLER 1
870 #endif
871 /* Setting this flag prevents the assembler from using RWX memory; this may improve
872    security but currectly comes at a significant performance cost. */
873 #if PLATFORM(IPHONE)
874 #define ENABLE_ASSEMBLER_WX_EXCLUSIVE 1
875 #else
876 #define ENABLE_ASSEMBLER_WX_EXCLUSIVE 0
877 #endif
878
879 #if !defined(ENABLE_PAN_SCROLLING) && PLATFORM(WIN_OS)
880 #define ENABLE_PAN_SCROLLING 1
881 #endif
882
883 /* Use the QXmlStreamReader implementation for XMLTokenizer */
884 /* Use the QXmlQuery implementation for XSLTProcessor */
885 #if PLATFORM(QT)
886 #define WTF_USE_QXMLSTREAM 1
887 #define WTF_USE_QXMLQUERY 1
888 #endif
889
890 #if !PLATFORM(QT)
891 #define WTF_USE_FONT_FAST_PATH 1
892 #endif
893
894 /* Accelerated compositing */
895 #if PLATFORM(MAC)
896 #if !defined(BUILDING_ON_TIGER)
897 #define WTF_USE_ACCELERATED_COMPOSITING 1
898 #endif
899 #endif
900
901 #if PLATFORM(IPHONE)
902 #define WTF_USE_ACCELERATED_COMPOSITING 1
903 #endif
904
905 #if COMPILER(GCC)
906 #define WARN_UNUSED_RETURN __attribute__ ((warn_unused_result))
907 #else
908 #define WARN_UNUSED_RETURN
909 #endif
910
911 #if !ENABLE(NETSCAPE_PLUGIN_API) || (ENABLE(NETSCAPE_PLUGIN_API) && ((PLATFORM(UNIX) && (PLATFORM(QT) || PLATFORM(WX))) || PLATFORM(GTK)))
912 #define ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH 1
913 #endif
914
915 /* Set up a define for a common error that is intended to cause a build error -- thus the space after Error. */
916 #define WTF_PLATFORM_CFNETWORK Error USE_macro_should_be_used_with_CFNETWORK
917
918 #endif /* WTF_Platform_h */