10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# Copyright (C) 2009 Kevin Ollivier  All rights reserved.
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# Redistribution and use in source and binary forms, with or without
40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# modification, are permitted provided that the following conditions
50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# are met:
60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# 1. Redistributions of source code must retain the above copyright
70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#    notice, this list of conditions and the following disclaimer.
80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# 2. Redistributions in binary form must reproduce the above copyright
90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#    notice, this list of conditions and the following disclaimer in the
100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#    documentation and/or other materials provided with the distribution.
110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#
120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22cad810f21b803229eb11403f9209855525a25d57Steve Block# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#
240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# Common elements of the waf build system shared by all projects.
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochimport commands
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochimport os
280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochimport platform
29231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockimport re
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochimport sys
310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockimport Options
33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfrom build_utils import *
350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfrom waf_extensions import *
360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch# to be moved to wx when it supports more configs
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochfrom wxpresets import *
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochwk_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../..'))
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochif sys.platform.startswith('win'):
430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if not 'WXWIN' in os.environ:
440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        print "Please set WXWIN to the directory containing wxWidgets."
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        sys.exit(1)
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    wx_root = os.environ['WXWIN']
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochelse:
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    wx_root = commands.getoutput('wx-config --prefix')
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
51cad810f21b803229eb11403f9209855525a25d57Steve Blockjscore_dir = os.path.join(wk_root, 'Source', 'JavaScriptCore')
52cad810f21b803229eb11403f9209855525a25d57Steve Blockwebcore_dir = os.path.join(wk_root, 'Source', 'WebCore')
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochwklibs_dir = os.path.join(wk_root, 'WebKitLibraries')
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochcommon_defines = []
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochcommon_cxxflags = []
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochcommon_includes = []
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochcommon_libs = []
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochcommon_libpaths = []
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochcommon_frameworks = []
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
62231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockports = [
63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    'Brew',
64231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    'Chromium',
65cad810f21b803229eb11403f9209855525a25d57Steve Block    'Gtk',
66231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    'Haiku',
67cad810f21b803229eb11403f9209855525a25d57Steve Block    'Mac',
68231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    'None',
69231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    'Qt',
70231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    'Safari',
71cad810f21b803229eb11403f9209855525a25d57Steve Block    'Win',
72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    'Wince',
73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    'wx',
74231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block]
75231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
76231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockport_uses = {
77d0825bca7fe65beaee391d30da42e937db621564Steve Block    'wx': ['CURL', 'WXGC'],
78231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
79231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochjscore_dirs = [
810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'API',
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'bytecode',
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'bytecompiler',
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'debugger',
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'DerivedSources',
862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    'heap',
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'interpreter',
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'jit',
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'parser',
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'profiler',
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'runtime',
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'wtf',
93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    'wtf/text',
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'wtf/unicode',
950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    'wtf/unicode/icu',
965e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block    'yarr',
970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch]
980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochwebcore_dirs = [
100cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/accessibility',
101cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/bindings',
102cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/bindings/cpp',
103cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/bindings/generic',
104cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/bindings/js',
105cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/bridge',
106cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/bridge/c',
107cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/bridge/jsc',
108cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/css',
109cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/DerivedSources',
110cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/dom',
111cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/dom/default',
112cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/editing',
113cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/fileapi',
114cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/history',
115cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/html',
116cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/html/canvas',
117cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/html/parser',
1182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    'Source/WebCore/html/shadow',
119cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/inspector',
120cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/loader',
121cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/loader/appcache',
122cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/loader/archive',
123cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/loader/cache',
124cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/loader/icon',
125cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/notifications',
126cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/page',
127cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/page/animation',
128cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform',
129cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/animation',
130cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/graphics',
131cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/graphics/filters',
132cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/graphics/transforms',
133cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/image-decoders',
134cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/image-decoders/bmp',
135cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/image-decoders/gif',
136cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/image-decoders/ico',
137cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/image-decoders/jpeg',
138cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/image-decoders/png',
139cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/image-decoders/webp',
140cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/mock',
141cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/network',
142cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/sql',
143cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/text',
144cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/platform/text/transcoder',
145cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/plugins',
146cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/rendering',
147cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/rendering/style',
148cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/rendering/svg',
149cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/storage',
150cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/svg',
151cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/svg/animation',
152cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/svg/graphics',
153cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/svg/graphics/filters',
154cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/svg/properties',
155cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/websockets',
156cad810f21b803229eb11403f9209855525a25d57Steve Block    'Source/WebCore/xml',
1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch]
1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
159cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockconfig = get_config(wk_root)
160cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockconfig_dir = config + git_branch_name()
161231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
162231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockoutput_dir = os.path.join(wk_root, 'WebKitBuild', config_dir)
1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbuild_port = "wx"
1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbuilding_on_win32 = sys.platform.startswith('win')
1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
167231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockdef get_config():
168231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    waf_configname = config.upper().strip()
169231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if building_on_win32:
170231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        isReleaseCRT = (config == 'Release')
171231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if build_port == 'wx':
172231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            if Options.options.wxpython:
173231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                isReleaseCRT = True
174cad810f21b803229eb11403f9209855525a25d57Steve Block
175231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        if isReleaseCRT:
176231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            waf_configname = waf_configname + ' CRT_MULTITHREADED_DLL'
177231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        else:
178231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            waf_configname = waf_configname + ' CRT_MULTITHREADED_DLL_DBG'
1790617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen
180231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return waf_configname
1810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
182cad810f21b803229eb11403f9209855525a25d57Steve Blockcreate_hash_table = wk_root + "/Source/JavaScriptCore/create_hash_table"
1830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochif building_on_win32:
1840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    create_hash_table = get_output('cygpath --unix "%s"' % create_hash_table)
1850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochos.environ['CREATE_HASH_TABLE'] = create_hash_table
1860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1870617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenfeature_defines = ['ENABLE_DATABASE', 'ENABLE_XSLT', 'ENABLE_JAVASCRIPT_DEBUGGER',
1880617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                    'ENABLE_SVG', 'ENABLE_SVG_USE', 'ENABLE_FILTERS', 'ENABLE_SVG_FONTS',
1890617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen                    'ENABLE_SVG_ANIMATION', 'ENABLE_SVG_AS_IMAGE', 'ENABLE_SVG_FOREIGN_OBJECT',
1902bde8e466a4451c7319e3a072d118917957d6554Steve Block                    'ENABLE_DOM_STORAGE', 'BUILDING_%s' % build_port.upper()]
1910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
192231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockmsvc_version = 'msvc2008'
193231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
194231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockmsvclibs_dir = os.path.join(wklibs_dir, msvc_version, 'win')
195231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
196231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockdef get_path_to_wxconfig():
197231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if 'WX_CONFIG' in os.environ:
198231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return os.environ['WX_CONFIG']
199231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    else:
200231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        return 'wx-config'
201231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
2020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochdef common_set_options(opt):
2030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    """
2040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Initialize common options provided to the user.
2050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    """
2060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    opt.tool_options('compiler_cxx')
2070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    opt.tool_options('compiler_cc')
2080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    opt.tool_options('python')
209cad810f21b803229eb11403f9209855525a25d57Steve Block
2100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    opt.add_option('--wxpython', action='store_true', default=False, help='Create the wxPython bindings.')
211231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    opt.add_option('--wx-compiler-prefix', action='store', default='vc',
212231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                   help='Specify a different compiler prefix (do this if you used COMPILER_PREFIX when building wx itself)')
213cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block    opt.add_option('--macosx-version', action='store', default='', help="Version of OS X to build for.")
214e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    opt.add_option('--msvc-version', action='store', default='', help="MSVC version to use to build. Use 8 for 2005, 9 for 2008")
2150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochdef common_configure(conf):
2170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    """
2180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    Configuration used by all targets, called from the target's configure() step.
2190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    """
220cad810f21b803229eb11403f9209855525a25d57Steve Block
221231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    conf.env['MSVC_TARGETS'] = ['x86']
222cad810f21b803229eb11403f9209855525a25d57Steve Block
223e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    if Options.options.msvc_version and Options.options.msvc_version != '':
224e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        print "msvc version = %s" % Options.options.msvc_version
225e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        conf.env['MSVC_VERSIONS'] = ['msvc %s.0' % Options.options.msvc_version]
226e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    else:
227e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        print "msvc not set!"
228e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        conf.env['MSVC_VERSIONS'] = ['msvc 9.0', 'msvc 8.0']
229cad810f21b803229eb11403f9209855525a25d57Steve Block
230231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if sys.platform.startswith('cygwin'):
231231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        print "ERROR: You must use the Win32 Python from python.org, not Cygwin Python, when building on Windows."
232231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        sys.exit(1)
233cad810f21b803229eb11403f9209855525a25d57Steve Block
2340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    conf.check_tool('compiler_cxx')
2350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    conf.check_tool('compiler_cc')
236cad810f21b803229eb11403f9209855525a25d57Steve Block
2370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if sys.platform.startswith('darwin'):
2380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.check_tool('osx')
239cad810f21b803229eb11403f9209855525a25d57Steve Block
240231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    global msvc_version
241231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    global msvclibs_dir
242cad810f21b803229eb11403f9209855525a25d57Steve Block
24321939df44de1705786c545cd1bf519d47250322dBen Murdoch    libprefix = ''
24421939df44de1705786c545cd1bf519d47250322dBen Murdoch
2450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if building_on_win32:
24621939df44de1705786c545cd1bf519d47250322dBen Murdoch        libprefix = 'lib'
24721939df44de1705786c545cd1bf519d47250322dBen Murdoch
248e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        found = conf.get_msvc_versions()
249e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        found_versions = []
250e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        for version in found:
251e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke            found_versions.append(version[0])
252cad810f21b803229eb11403f9209855525a25d57Steve Block
253e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        if 'msvc 9.0' in conf.env['MSVC_VERSIONS'] and 'msvc 9.0' in found_versions:
2540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            msvc_version = 'msvc2008'
255e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        elif 'msvc 8.0' in conf.env['MSVC_VERSIONS'] and 'msvc 8.0' in found_versions:
2560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            msvc_version = 'msvc2005'
257cad810f21b803229eb11403f9209855525a25d57Steve Block
2580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        msvclibs_dir = os.path.join(wklibs_dir, msvc_version, 'win')
259cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
260cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        # Disable several warnings which occur many times during the build.
261cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        # Some of them are harmless (4099, 4344, 4396, 4800) and working around
262cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        # them in WebKit code is probably just not worth it. We can simply do
263cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        # nothing about the others (4503). A couple are possibly valid but
264cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        # there are just too many of them in the code so fixing them is
265cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        # impossible in practice and just results in tons of distracting output
266cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        # (4244, 4291). Finally 4996 is actively harmful as it is given for
267cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        # just about any use of standard C/C++ library facilities.
268cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        conf.env.append_value('CXXFLAGS', [
269cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            '/wd4099',  # type name first seen using 'struct' now seen using 'class'
270cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            '/wd4244',  # conversion from 'xxx' to 'yyy', possible loss of data:
271cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            '/wd4291',  # no matching operator delete found (for placement new)
272cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            '/wd4344',  # behaviour change in template deduction
273cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            '/wd4396',  # inline can't be used in friend declaration
274cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            '/wd4503',  # decorated name length exceeded, name was truncated
275cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            '/wd4800',  # forcing value to bool 'true' or 'false'
276cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            '/wd4996',  # deprecated function
277cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        ])
278cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
279cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        # This one also occurs in C code, so disable it there as well.
280cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        conf.env.append_value('CCFLAGS', ['/wd4996'])
281cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
282231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if build_port == "wx":
283231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        update_wx_deps(conf, wk_root, msvc_version)
284cad810f21b803229eb11403f9209855525a25d57Steve Block
285d0825bca7fe65beaee391d30da42e937db621564Steve Block        conf.env.append_value('CXXDEFINES', ['BUILDING_WX__=1', 'JS_NO_EXPORT'])
2860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if building_on_win32:
2880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            conf.env.append_value('LIBPATH', os.path.join(msvclibs_dir, 'lib'))
2890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            # wx settings
290231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            global config
291231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            is_debug = (config == 'Debug')
292231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            wxdefines, wxincludes, wxlibs, wxlibpaths = get_wxmsw_settings(wx_root, shared=True, unicode=True, debug=is_debug, wxPython=Options.options.wxpython)
2930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            conf.env['CXXDEFINES_WX'] = wxdefines
2940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            conf.env['CPPPATH_WX'] = wxincludes
2950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            conf.env['LIB_WX'] = wxlibs
2960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            conf.env['LIBPATH_WX'] = wxlibpaths
297cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
2980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if sys.platform.startswith('darwin'):
2990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env['LIB_ICU'] = ['icucore']
300cad810f21b803229eb11403f9209855525a25d57Steve Block
3010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env.append_value('CPPPATH', wklibs_dir)
3020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env.append_value('LIBPATH', wklibs_dir)
303cad810f21b803229eb11403f9209855525a25d57Steve Block
304cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        min_version = None
305cad810f21b803229eb11403f9209855525a25d57Steve Block
306231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        mac_target = 'MACOSX_DEPLOYMENT_TARGET'
307cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        if Options.options.macosx_version != '':
308cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            min_version = Options.options.macosx_version
309cad810f21b803229eb11403f9209855525a25d57Steve Block
310cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        # WebKit only supports 10.4+, but ppc systems often set this to earlier systems
311cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        if not min_version:
312cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            min_version = commands.getoutput('sw_vers -productVersion')[:4]
313cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            if min_version in ['10.1','10.2','10.3']:
314cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block                min_version = '10.4'
315cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block
316cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        sdk_version = min_version
317cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        if min_version == "10.4":
318cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            sdk_version += "u"
319f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick            conf.env.append_value('LIB_WKINTERFACE', ['WebKitSystemInterfaceTiger'])
32021939df44de1705786c545cd1bf519d47250322dBen Murdoch        else:
32121939df44de1705786c545cd1bf519d47250322dBen Murdoch            # NOTE: There is a WebKitSystemInterfaceSnowLeopard, but when we use that
32221939df44de1705786c545cd1bf519d47250322dBen Murdoch            # on 10.6, we get a strange missing symbol error, and this library seems to
32321939df44de1705786c545cd1bf519d47250322dBen Murdoch            # work fine for wx's purposes.
324f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick            conf.env.append_value('LIB_WKINTERFACE', ['WebKitSystemInterfaceLeopard'])
325cad810f21b803229eb11403f9209855525a25d57Steve Block
326cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        sdkroot = '/Developer/SDKs/MacOSX%s.sdk' % sdk_version
327cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        sdkflags = ['-arch', 'i386', '-isysroot', sdkroot]
328cad810f21b803229eb11403f9209855525a25d57Steve Block
329cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        conf.env.append_value('CPPFLAGS', sdkflags)
330cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        conf.env.append_value('LINKFLAGS', sdkflags)
3312bde8e466a4451c7319e3a072d118917957d6554Steve Block
3322bde8e466a4451c7319e3a072d118917957d6554Steve Block        conf.env.append_value('LINKFLAGS', ['-framework', 'Security'])
3332bde8e466a4451c7319e3a072d118917957d6554Steve Block
334cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        conf.env.append_value('CPPPATH_SQLITE3', [os.path.join(wklibs_dir, 'WebCoreSQLite3')])
335cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        conf.env.append_value('LIB_SQLITE3', ['WebCoreSQLite3'])
336cad810f21b803229eb11403f9209855525a25d57Steve Block
3372bde8e466a4451c7319e3a072d118917957d6554Steve Block    # NOTE: The order here is important, because python sets the MACOSX_DEPLOYMENT_TARGET to
3382bde8e466a4451c7319e3a072d118917957d6554Steve Block    # 10.3 even on intel. So we must first set the SDK and arch flags, then load Python's config,
3392bde8e466a4451c7319e3a072d118917957d6554Steve Block    # and finally override the value Python set for MACOSX_DEPLOYMENT_TARGET
3402bde8e466a4451c7319e3a072d118917957d6554Steve Block    if Options.options.wxpython:
3412bde8e466a4451c7319e3a072d118917957d6554Steve Block        conf.check_tool('python')
3422bde8e466a4451c7319e3a072d118917957d6554Steve Block        conf.check_python_headers()
3432bde8e466a4451c7319e3a072d118917957d6554Steve Block
3442bde8e466a4451c7319e3a072d118917957d6554Steve Block    if sys.platform.startswith('darwin'):
3452bde8e466a4451c7319e3a072d118917957d6554Steve Block        os.environ[mac_target] = conf.env[mac_target] = min_version
3462bde8e466a4451c7319e3a072d118917957d6554Steve Block
3470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    conf.env.append_value('CXXDEFINES', feature_defines)
3480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if config == 'Release':
3490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env.append_value('CPPDEFINES', 'NDEBUG')
350cad810f21b803229eb11403f9209855525a25d57Steve Block
3510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    if building_on_win32:
3520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env.append_value('CPPPATH', [
3530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            os.path.join(jscore_dir, 'os-win32'),
3540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            os.path.join(msvclibs_dir, 'include'),
3550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            os.path.join(msvclibs_dir, 'include', 'pthreads'),
3560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            os.path.join(msvclibs_dir, 'lib'),
3570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            ])
358cad810f21b803229eb11403f9209855525a25d57Steve Block
3590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env.append_value('LIB', ['libpng', 'libjpeg', 'pthreadVC2'])
3600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        # common win libs
3610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env.append_value('LIB', [
3620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            'kernel32', 'user32','gdi32','comdlg32','winspool','winmm',
363cad810f21b803229eb11403f9209855525a25d57Steve Block            'shell32', 'shlwapi', 'comctl32', 'ole32', 'oleaut32', 'uuid', 'advapi32',
3648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block            'wsock32', 'gdiplus', 'usp10','version'])
3650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env['LIB_ICU'] = ['icudt', 'icule', 'iculx', 'icuuc', 'icuin', 'icuio', 'icutu']
367cad810f21b803229eb11403f9209855525a25d57Steve Block
3680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        #curl
3690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env['LIB_CURL'] = ['libcurl']
370cad810f21b803229eb11403f9209855525a25d57Steve Block
3710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        #sqlite3
3720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env['CPPPATH_SQLITE3'] = [os.path.join(msvclibs_dir, 'include', 'SQLite')]
3730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env['LIB_SQLITE3'] = ['sqlite3']
374cad810f21b803229eb11403f9209855525a25d57Steve Block
3750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        #libxml2
3760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env['LIB_XML'] = ['libxml2']
377cad810f21b803229eb11403f9209855525a25d57Steve Block
3780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        #libxslt
3790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        conf.env['LIB_XSLT'] = ['libxslt']
380cad810f21b803229eb11403f9209855525a25d57Steve Block    else:
3810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if build_port == 'wx':
382d0825bca7fe65beaee391d30da42e937db621564Steve Block            port_uses['wx'].append('PTHREADS')
383231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            conf.env.append_value('LIB', ['jpeg', 'png', 'pthread'])
3840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            conf.env.append_value('LIBPATH', os.path.join(wklibs_dir, 'unix', 'lib'))
3850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            conf.env.append_value('CPPPATH', os.path.join(wklibs_dir, 'unix', 'include'))
3860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            conf.env.append_value('CXXFLAGS', ['-fPIC', '-DPIC'])
387cad810f21b803229eb11403f9209855525a25d57Steve Block
388231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            conf.check_cfg(path=get_path_to_wxconfig(), args='--cxxflags --libs', package='', uselib_store='WX', mandatory=True)
389cad810f21b803229eb11403f9209855525a25d57Steve Block
390231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        conf.check_cfg(msg='Checking for libxslt', path='xslt-config', args='--cflags --libs', package='', uselib_store='XSLT', mandatory=True)
391231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        conf.check_cfg(path='xml2-config', args='--cflags --libs', package='', uselib_store='XML', mandatory=True)
392cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        if sys.platform.startswith('darwin') and min_version and min_version == '10.4':
393cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            conf.check_cfg(path=os.path.join(wklibs_dir, 'unix', 'bin', 'curl-config'), args='--cflags --libs', package='', uselib_store='CURL', mandatory=True)
394cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block        else:
395cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            conf.check_cfg(path='curl-config', args='--cflags --libs', package='', uselib_store='CURL', mandatory=True)
396cad810f21b803229eb11403f9209855525a25d57Steve Block
3970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if not sys.platform.startswith('darwin'):
398231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            conf.check_cfg(package='cairo', args='--cflags --libs', uselib_store='WX', mandatory=True)
399231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            conf.check_cfg(package='pango', args='--cflags --libs', uselib_store='WX', mandatory=True)
400231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            conf.check_cfg(package='gtk+-2.0', args='--cflags --libs', uselib_store='WX', mandatory=True)
401231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            conf.check_cfg(package='sqlite3', args='--cflags --libs', uselib_store='SQLITE3', mandatory=True)
402231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            conf.check_cfg(path='icu-config', args='--cflags --ldflags', package='', uselib_store='ICU', mandatory=True)
403d0825bca7fe65beaee391d30da42e937db621564Steve Block
404d0825bca7fe65beaee391d30da42e937db621564Steve Block    for use in port_uses[build_port]:
405d0825bca7fe65beaee391d30da42e937db621564Steve Block       conf.env.append_value('CXXDEFINES', ['WTF_USE_%s' % use])
406