1# Include file for WebCore
2
3include(../common.pri)
4include(features.pri)
5
6# Uncomment this to enable Texture Mapper.
7# CONFIG += texmap
8
9QT *= network
10
11SOURCE_DIR = $$replace(PWD, /WebCore, "")
12
13contains(QT_CONFIG, qpa)|contains(QT_CONFIG, embedded): CONFIG += embedded
14
15# Use a config-specific target to prevent parallel builds file clashes on Mac
16mac: CONFIG(debug, debug|release): WEBCORE_TARGET = webcored
17else: WEBCORE_TARGET = webcore
18
19# Output in WebCore/<config>
20CONFIG(debug, debug|release) : WEBCORE_DESTDIR = debug
21else: WEBCORE_DESTDIR = release
22
23CONFIG(standalone_package) {
24    isEmpty(WC_GENERATED_SOURCES_DIR):WC_GENERATED_SOURCES_DIR = $$PWD/../WebCore/generated
25} else {
26    isEmpty(WC_GENERATED_SOURCES_DIR):WC_GENERATED_SOURCES_DIR = $$OUTPUT_DIR/WebCore/generated
27}
28
29V8_DIR = "$$[QT_INSTALL_PREFIX]/src/3rdparty/v8"
30
31v8:!exists($${V8_DIR}/include/v8.h) {
32    error("Cannot build with V8. Needed file $${V8_DIR}/include/v8.h does not exist.")
33}
34
35v8 {
36    message(Using V8 with QtScript)
37    QT += script
38    INCLUDEPATH += $${V8_DIR}/include
39    DEFINES *= V8_BINDING=1
40    DEFINES += WTF_CHANGES=1
41    DEFINES *= WTF_USE_V8=1
42    DEFINES += USING_V8_SHARED
43    linux-*:LIBS += -lv8
44}
45
46v8 {
47    WEBCORE_INCLUDEPATH = \
48        $$SOURCE_DIR/WebCore/bindings/v8 \
49        $$SOURCE_DIR/WebCore/bindings/v8/custom \
50        $$SOURCE_DIR/WebCore/bindings/v8/specialization \
51        $$SOURCE_DIR/WebCore/bridge/qt/v8 \
52        $$SOURCE_DIR/WebCore/testing/v8
53
54} else {
55    WEBCORE_INCLUDEPATH = \
56        $$SOURCE_DIR/WebCore/bridge/jsc \
57        $$SOURCE_DIR/WebCore/bindings/js \
58        $$SOURCE_DIR/WebCore/bindings/js/specialization \
59        $$SOURCE_DIR/WebCore/bridge/c \
60        $$SOURCE_DIR/WebCore/testing/js
61}
62
63WEBCORE_INCLUDEPATH = \
64    $$SOURCE_DIR/WebCore \
65    $$SOURCE_DIR/WebCore/accessibility \
66    $$SOURCE_DIR/WebCore/bindings \
67    $$SOURCE_DIR/WebCore/bindings/generic \
68    $$SOURCE_DIR/WebCore/bridge \
69    $$SOURCE_DIR/WebCore/css \
70    $$SOURCE_DIR/WebCore/dom \
71    $$SOURCE_DIR/WebCore/dom/default \
72    $$SOURCE_DIR/WebCore/editing \
73    $$SOURCE_DIR/WebCore/fileapi \
74    $$SOURCE_DIR/WebCore/history \
75    $$SOURCE_DIR/WebCore/html \
76    $$SOURCE_DIR/WebCore/html/canvas \
77    $$SOURCE_DIR/WebCore/html/parser \
78    $$SOURCE_DIR/WebCore/html/shadow \
79    $$SOURCE_DIR/WebCore/inspector \
80    $$SOURCE_DIR/WebCore/loader \
81    $$SOURCE_DIR/WebCore/loader/appcache \
82    $$SOURCE_DIR/WebCore/loader/archive \
83    $$SOURCE_DIR/WebCore/loader/cache \
84    $$SOURCE_DIR/WebCore/loader/icon \
85    $$SOURCE_DIR/WebCore/mathml \
86    $$SOURCE_DIR/WebCore/notifications \
87    $$SOURCE_DIR/WebCore/page \
88    $$SOURCE_DIR/WebCore/page/animation \
89    $$SOURCE_DIR/WebCore/platform \
90    $$SOURCE_DIR/WebCore/platform/animation \
91    $$SOURCE_DIR/WebCore/platform/audio \
92    $$SOURCE_DIR/WebCore/platform/graphics \
93    $$SOURCE_DIR/WebCore/platform/graphics/filters \
94    $$SOURCE_DIR/WebCore/platform/graphics/filters/arm \
95    $$SOURCE_DIR/WebCore/platform/graphics/texmap \
96    $$SOURCE_DIR/WebCore/platform/graphics/transforms \
97    $$SOURCE_DIR/WebCore/platform/image-decoders \
98    $$SOURCE_DIR/WebCore/platform/leveldb \
99    $$SOURCE_DIR/WebCore/platform/mock \
100    $$SOURCE_DIR/WebCore/platform/network \
101    $$SOURCE_DIR/WebCore/platform/sql \
102    $$SOURCE_DIR/WebCore/platform/text \
103    $$SOURCE_DIR/WebCore/platform/text/transcoder \
104    $$SOURCE_DIR/WebCore/plugins \
105    $$SOURCE_DIR/WebCore/rendering \
106    $$SOURCE_DIR/WebCore/rendering/mathml \
107    $$SOURCE_DIR/WebCore/rendering/style \
108    $$SOURCE_DIR/WebCore/rendering/svg \
109    $$SOURCE_DIR/WebCore/storage \
110    $$SOURCE_DIR/WebCore/svg \
111    $$SOURCE_DIR/WebCore/svg/animation \
112    $$SOURCE_DIR/WebCore/svg/graphics \
113    $$SOURCE_DIR/WebCore/svg/graphics/filters \
114    $$SOURCE_DIR/WebCore/svg/properties \
115    $$SOURCE_DIR/WebCore/testing \
116    $$SOURCE_DIR/WebCore/webaudio \
117    $$SOURCE_DIR/WebCore/websockets \
118    $$SOURCE_DIR/WebCore/wml \
119    $$SOURCE_DIR/WebCore/workers \
120    $$SOURCE_DIR/WebCore/xml \
121    $$WEBCORE_INCLUDEPATH
122
123WEBCORE_INCLUDEPATH = \
124    $$SOURCE_DIR/WebCore/bridge/qt \
125    $$SOURCE_DIR/WebCore/page/qt \
126    $$SOURCE_DIR/WebCore/platform/graphics/qt \
127    $$SOURCE_DIR/WebCore/platform/network/qt \
128    $$SOURCE_DIR/WebCore/platform/qt \
129    $$SOURCE_DIR/WebKit/qt/Api \
130    $$SOURCE_DIR/WebKit/qt/WebCoreSupport \
131    $$WEBCORE_INCLUDEPATH
132
133# On Symbian PREPEND_INCLUDEPATH is the best way to make sure that WebKit headers
134# are included before platform headers.
135symbian {
136    PREPEND_INCLUDEPATH = $$WEBCORE_INCLUDEPATH $$WC_GENERATED_SOURCES_DIR $$PREPEND_INCLUDEPATH
137} else {
138    INCLUDEPATH = $$WEBCORE_INCLUDEPATH $$WC_GENERATED_SOURCES_DIR $$INCLUDEPATH
139}
140
141symbian {
142    v8 {
143        QMAKE_CXXFLAGS.ARMCC += -OTime -O3
144        QMAKE_CXXFLAGS.ARMCC += --fpu softvfp+vfpv2 --fpmode fast
145        LIBS += -llibpthread
146    }
147
148    # RO text (code) section in qtwebkit.dll exceeds allocated space for gcce udeb target.
149    # Move RW-section base address to start from 0x1000000 instead of the toolchain default 0x400000.
150    QMAKE_LFLAGS.ARMCC += --rw-base 0x1000000
151    QMAKE_LFLAGS.GCCE += -Tdata 0x1000000
152
153    CONFIG += do_not_build_as_thumb
154
155    CONFIG(release, debug|release): QMAKE_CXXFLAGS.ARMCC += -OTime -O3
156    # Symbian plugin support
157    LIBS += -lefsrv
158
159    !CONFIG(QTDIR_build) {
160        # Test if symbian OS comes with sqlite
161        exists($${EPOCROOT}epoc32/release/armv5/lib/sqlite3.dso):CONFIG *= system-sqlite
162    } else:!symbian-abld:!symbian-sbsv2 {
163        # When bundled with Qt, all Symbian build systems extract their own sqlite files if
164        # necessary, but on non-mmp based ones we need to specify this ourselves.
165        include($$QT_SOURCE_TREE/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri)
166    }
167}
168
169contains(DEFINES, ENABLE_XSLT=1) {
170    QT *= xmlpatterns
171}
172
173contains(DEFINES, ENABLE_ZLIB=1) {
174    include($$QT_SOURCE_TREE/src/3rdparty/zlib_dependency.pri)
175}
176
177contains(DEFINES, ENABLE_SQLITE=1) {
178    !system-sqlite:exists( $${SQLITE3SRCDIR}/sqlite3.c ) {
179            INCLUDEPATH += $${SQLITE3SRCDIR}
180            DEFINES += SQLITE_CORE SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_COMPLETE
181            CONFIG(release, debug|release): DEFINES *= NDEBUG
182            contains(DEFINES, ENABLE_SINGLE_THREADED=1): DEFINES += SQLITE_THREADSAFE=0
183    } else {
184        # Use sqlite3 from the underlying OS
185        CONFIG(QTDIR_build) {
186            QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE
187            LIBS *= $$QT_LFLAGS_SQLITE
188        } else {
189            INCLUDEPATH += $${SQLITE3SRCDIR}
190            LIBS += -lsqlite3
191        }
192    }
193    wince*:DEFINES += HAVE_LOCALTIME_S=0
194}
195
196contains(DEFINES, ENABLE_NETSCAPE_PLUGIN_API=1) {
197    unix:!symbian {
198        mac {
199            INCLUDEPATH += platform/mac
200            # Note: XP_MACOSX is defined in npapi.h
201        } else {
202            !embedded {
203                CONFIG += x11
204                LIBS += -lXrender
205            }
206            maemo5 {
207                DEFINES += MOZ_PLATFORM_MAEMO=5
208            }
209            contains(DEFINES, Q_WS_MAEMO_6) {
210                DEFINES += MOZ_PLATFORM_MAEMO=6
211            }
212            DEFINES += XP_UNIX
213            DEFINES += ENABLE_NETSCAPE_PLUGIN_METADATA_CACHE=1
214        }
215    }
216    win32-* {
217        LIBS += \
218            -ladvapi32 \
219            -lgdi32 \
220            -lshell32 \
221            -lshlwapi \
222            -luser32 \
223            -lversion
224    }
225}
226
227contains(DEFINES, ENABLE_GEOLOCATION=1) {
228    CONFIG *= mobility
229    MOBILITY *= location
230}
231
232contains(DEFINES, ENABLE_DEVICE_ORIENTATION=1) {
233    CONFIG *= mobility
234    MOBILITY *= sensors
235}
236
237contains(DEFINES, WTF_USE_QT_MOBILITY_SYSTEMINFO=1) {
238     CONFIG *= mobility
239     MOBILITY *= systeminfo
240}
241
242contains(DEFINES, WTF_USE_QT_BEARER=1) {
243    # Bearer management is part of Qt 4.7, so don't accidentially
244    # pull in Qt Mobility when building against >= 4.7
245    !greaterThan(QT_MINOR_VERSION, 6) {
246        CONFIG *= mobility
247        MOBILITY *= bearer
248    }
249}
250
251contains(DEFINES, ENABLE_VIDEO=1) {
252    contains(DEFINES, WTF_USE_GSTREAMER=1) {
253        DEFINES += ENABLE_GLIB_SUPPORT=1
254
255        INCLUDEPATH += $$PWD/platform/graphics/gstreamer
256
257        PKGCONFIG += glib-2.0 gio-2.0 gstreamer-0.10 gstreamer-app-0.10 gstreamer-base-0.10 gstreamer-interfaces-0.10 gstreamer-pbutils-0.10 gstreamer-plugins-base-0.10 gstreamer-video-0.10
258    } else:contains(DEFINES, WTF_USE_QT_MULTIMEDIA=1) {
259        CONFIG   *= mobility
260        MOBILITY *= multimedia
261    }
262}
263
264contains(DEFINES, ENABLE_WEBGL=1)|contains(CONFIG, texmap) {
265    !contains(QT_CONFIG, opengl) {
266        error( "This configuration needs an OpenGL enabled Qt. Your Qt is missing OpenGL.")
267    }
268    QT *= opengl
269}
270
271!contains(QT_CONFIG, webkit-debug):CONFIG(QTDIR_build) {
272    # Remove the following 2 lines if you want debug information in WebCore
273    CONFIG -= separate_debug_info
274    CONFIG += no_debug_info
275}
276
277contains (CONFIG, text_breaking_with_icu) {
278    LIBS += -licuuc
279}
280
281!CONFIG(QTDIR_build) {
282    win32-*|wince* {
283        DLLDESTDIR = $$OUTPUT_DIR/bin
284        isEmpty(QT_SOURCE_TREE):build_pass: TARGET = $$qtLibraryTarget($$TARGET)
285
286        dlltarget.commands = $(COPY_FILE) $(DESTDIR_TARGET) $$[QT_INSTALL_BINS]
287        dlltarget.CONFIG = no_path
288        INSTALLS += dlltarget
289    }
290    mac {
291        LIBS += -framework Carbon -framework AppKit
292    }
293}
294
295win32-* {
296    INCLUDEPATH += $$SOURCE_DIR/WebCore/platform/win
297    LIBS += -lgdi32
298    LIBS += -lole32
299    LIBS += -luser32
300}
301
302# Remove whole program optimizations due to miscompilations
303win32-msvc2005|win32-msvc2008|win32-msvc2010|wince*:{
304    QMAKE_CFLAGS_LTCG -= -GL
305    QMAKE_CXXFLAGS_LTCG -= -GL
306
307    # Disable incremental linking for windows 32bit OS debug build as WebKit is so big
308    # that linker failes to link incrementally in debug mode.
309    ARCH = $$(PROCESSOR_ARCHITECTURE)
310    WOW64ARCH = $$(PROCESSOR_ARCHITEW6432)
311    equals(ARCH, x86):{
312        isEmpty(WOW64ARCH): QMAKE_LFLAGS_DEBUG += /INCREMENTAL:NO
313    }
314}
315
316wince* {
317    LIBS += -lmmtimer
318    LIBS += -lole32
319}
320
321mac {
322    LIBS_PRIVATE += -framework Carbon -framework AppKit
323}
324
325unix:!mac:*-g++*:QMAKE_CXXFLAGS += -ffunction-sections -fdata-sections
326unix:!mac:*-g++*:QMAKE_LFLAGS += -Wl,--gc-sections
327linux*-g++*:QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
328
329unix|win32-g++*:QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui QtNetwork
330unix:!mac:!symbian:CONFIG += link_pkgconfig
331
332# Disable C++0x mode in WebCore for those who enabled it in their Qt's mkspec
333*-g++*:QMAKE_CXXFLAGS -= -std=c++0x -std=gnu++0x
334
335enable_fast_mobile_scrolling: DEFINES += ENABLE_FAST_MOBILE_SCROLLING=1
336
337use_qt_mobile_theme: DEFINES += WTF_USE_QT_MOBILE_THEME=1
338
339defineTest(prependWebCoreLib) {
340    pathToWebCoreOutput = $$ARGS/$$WEBCORE_DESTDIR
341
342    win32-msvc*|wince*|win32-icc {
343        LIBS = -l$$WEBCORE_TARGET $$LIBS
344        LIBS = -L$$pathToWebCoreOutput $$LIBS
345        POST_TARGETDEPS += $${pathToWebCoreOutput}$${QMAKE_DIR_SEP}$${WEBCORE_TARGET}.lib
346    } else:symbian {
347        LIBS = -l$${WEBCORE_TARGET}.lib $$LIBS
348        QMAKE_LIBDIR += $$pathToWebCoreOutput
349        POST_TARGETDEPS += $${pathToWebCoreOutput}$${QMAKE_DIR_SEP}$${WEBCORE_TARGET}.lib
350    } else {
351        QMAKE_LIBDIR = $$pathToWebCoreOutput $$QMAKE_LIBDIR
352        LIBS = -l$$WEBCORE_TARGET $$LIBS
353        POST_TARGETDEPS += $${pathToWebCoreOutput}$${QMAKE_DIR_SEP}lib$${WEBCORE_TARGET}.a
354    }
355
356    CONFIG -= explicitlib
357    CONFIG -= staticlib
358    export(QMAKE_LIBDIR)
359    export(POST_TARGETDEPS)
360    export(CONFIG)
361    export(LIBS)
362
363    return(true)
364}
365