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