3 # Copyright (C) 2009 Kevin Ollivier All rights reserved.
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
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.
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.
26 # WebCore build script for the waf build system
30 from settings import *
32 if build_port == "wx":
33 webcore_dirs.extend(['WebKit/wx', 'WebKit/wx/WebKitSupport'])
35 wk_includes = ['.', 'WebCore', 'WebCore/DerivedSources',
36 os.path.join(wk_root, 'JavaScriptCore'),
37 os.path.join(wk_root, 'JavaScriptCore', 'wtf', 'text'),
38 os.path.join(wk_root, 'WebCore'),
39 os.path.join(output_dir),
40 'WebCore/platform/image-decoders',
41 'WebCore/platform/win',
45 if build_port == "wx":
46 wk_includes.append(os.path.join(wk_root, 'WebKit/wx'))
47 wk_includes.append('WebCore/platform/wx/wxcode')
49 if sys.platform.startswith("win"):
50 wk_includes.append(os.path.join(wk_root, 'WebCore','platform','win'))
54 'bin/icuuc40.dll', 'bin/icudt40.dll', 'bin/icuin40.dll',
55 'bin/libcurl.dll', 'bin/libeay32.dll', 'bin/ssleay32.dll', 'bin/zlib1.dll',
56 'lib/sqlite3.dll', 'bin/libxml2.dll', 'bin/libxslt.dll', 'bin/iconv.dll',
61 if build_port == "wx":
62 webcore_sources['wx'] = ['WebCore/platform/KillRingNone.cpp', 'WebCore/bindings/cpp/WebDOMEventTarget.cpp']
65 # make sure platform/wx comes after this so we get the right
67 webcore_dirs.extend(['WebCore/platform/wx/wxcode/win', 'WebCore/plugins/win'])
68 webcore_sources['wx-win'] = [
69 'WebCore/platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp',
70 'WebCore/platform/graphics/win/TransformationMatrixWin.cpp',
71 # wxTimer on Windows has a bug that causes it to eat crashes in callbacks
72 # so we need to use the Win port's implementation until the wx bug fix is
73 # widely available (it was fixed in 2.8.10).
74 'WebCore/platform/win/SharedTimerWin.cpp',
75 'WebCore/platform/win/WebCoreInstanceHandle.cpp',
76 # Use the Windows plugin architecture
77 #'WebCore/plugins/win/PluginDataWin.cpp',
78 'WebCore/plugins/win/PluginDatabaseWin.cpp',
79 'WebCore/plugins/win/PluginMessageThrottlerWin.cpp',
80 'WebCore/plugins/win/PluginPackageWin.cpp',
81 'WebCore/plugins/win/PluginViewWin.cpp',
83 elif sys.platform.startswith('darwin'):
84 webcore_dirs.append('WebCore/plugins/mac')
85 webcore_dirs.append('WebCore/platform/wx/wxcode/mac/carbon')
86 webcore_dirs.append('WebCore/platform/mac')
87 webcore_dirs.append('WebCore/platform/text/mac')
88 webcore_sources['wx-mac'] = [
89 'WebCore/platform/mac/PurgeableBufferMac.cpp',
90 'WebCore/platform/mac/WebCoreNSStringExtras.mm',
91 'WebCore/platform/mac/WebCoreSystemInterface.mm',
92 'WebCore/platform/graphics/cg/FloatSizeCG.cpp',
93 'WebCore/platform/graphics/mac/ComplexTextController.cpp',
94 'WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp',
95 'WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp',
96 'WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp',
97 'WebCore/platform/graphics/mac/SimpleFontDataATSUI.mm',
98 'WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp',
99 'WebCore/platform/graphics/wx/FontPlatformDataWxMac.mm',
100 'WebCore/platform/text/mac/ShapeArabic.c',
101 'WebCore/platform/wx/wxcode/mac/carbon/fontprops.mm',
102 'WebCore/plugins/mac/PluginPackageMac.cpp',
103 'WebCore/plugins/mac/PluginViewMac.mm'
106 webcore_sources['wx-gtk'] = [
107 'WebCore/plugins/PluginViewNone.cpp',
108 'WebCore/plugins/PluginPackageNone.cpp'
110 webcore_dirs.append('WebCore/platform/wx/wxcode/gtk')
113 from TaskGen import taskgen, feature, after
116 def generate_webcore_derived_sources():
117 # build the derived sources
118 derived_sources_dir = os.path.join(webcore_dir, 'DerivedSources')
120 if building_on_win32:
121 wc_dir = get_output('cygpath --unix "%s"' % wc_dir)
122 if not os.path.exists(derived_sources_dir):
123 os.mkdir(derived_sources_dir)
126 os.chdir(derived_sources_dir)
128 # DerivedSources.make expects Cygwin (i.e. Unix-style) python, so use that instead.
129 if building_on_win32:
130 oldpath = os.environ["PATH"]
131 os.environ["PATH"] = "/usr/bin" + os.pathsep + os.environ["PATH"]
132 os.system('make -f %s/DerivedSources.make WebCore=%s SOURCE_ROOT=%s all FEATURE_DEFINES="%s"' % (wc_dir, wc_dir, wc_dir, ' '.join(feature_defines)))
133 if building_on_win32:
134 os.environ["PATH"] = oldpath
137 def generate_jscore_derived_sources():
138 # build the derived sources
140 if building_on_win32:
141 js_dir = get_output('cygpath --unix "%s"' % js_dir)
142 derived_sources_dir = os.path.join(jscore_dir, 'DerivedSources')
143 if not os.path.exists(derived_sources_dir):
144 os.mkdir(derived_sources_dir)
147 os.chdir(derived_sources_dir)
149 # DerivedSources.make expects Cygwin (i.e. Unix-style) python, so use that instead.
150 if building_on_win32:
151 oldpath = os.environ["PATH"]
152 os.environ["PATH"] = "/usr/bin" + os.pathsep + os.environ["PATH"]
153 command = 'make -f %s/DerivedSources.make JavaScriptCore=%s BUILT_PRODUCTS_DIR=%s all FEATURE_DEFINES="%s"' % (js_dir, js_dir, js_dir, ' '.join(feature_defines))
155 if building_on_win32:
156 os.environ["PATH"] = oldpath
159 def set_options(opt):
160 common_set_options(opt)
163 common_configure(conf)
164 generate_jscore_derived_sources()
165 generate_webcore_derived_sources()
166 if build_port == "wx" and sys.platform.startswith('win'):
167 graphics_dir = os.path.join(wk_root, 'WebCore', 'platform', 'graphics')
168 # HACK ALERT: MSVC automatically adds the source file's directory as the first entry in the
169 # path. Unfortunately, that means when compiling these files we will end up including
170 # win/FontPlatformData.h, which breaks wx compilation. So we copy the files to the wx dir.
171 for afile in ['UniscribeController.h', 'UniscribeController.cpp', 'GlyphPageTreeNodeCairoWin.cpp']:
172 shutil.copy(os.path.join(graphics_dir, 'win', afile), os.path.join(graphics_dir, 'wx'))
174 webcore_out_dir = os.path.join(output_dir, 'WebCore')
175 if not os.path.exists(webcore_out_dir):
176 os.makedirs(webcore_out_dir)
177 shutil.copy('WebCore/platform/mac/WebCoreSystemInterface.h', os.path.join(output_dir, 'WebCore', 'WebCoreSystemInterface.h'))
178 jscore_out_dir = os.path.join(output_dir, 'JavaScriptCore')
179 if not os.path.exists(jscore_out_dir):
180 os.makedirs(jscore_out_dir)
181 for api_file in glob.glob(os.path.join(jscore_dir, 'API/*.h')):
182 shutil.copy(api_file, os.path.join(jscore_out_dir, os.path.basename(api_file)))
184 if build_port == "wx" and Options.options.wxpython:
185 common_configure(conf)
186 conf.check_tool('swig', tooldir='WebKit/wx/bindings/python')
187 conf.check_swig_version('1.3.29')
193 bld.add_subdirs('JavaScriptCore')
195 if sys.platform.startswith('darwin'):
196 TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cxx']
197 TaskGen.task_gen.mappings['.m'] = TaskGen.task_gen.mappings['.cxx']
199 features = [build_port]
200 exclude_patterns = ['*AllInOne.cpp', '*Brew.cpp', '*CFNet.cpp', '*Chromium*.cpp',
201 '*Efl.cpp', '*Gtk.cpp', '*Haiku.cpp', '*Mac.cpp', '*None.cpp', '*Qt.cpp', '*Safari.cpp',
202 'test*bindings.*', '*Wince.cpp', "WebDOMCanvas*.cpp", "WebDOMSVG*.cpp"]
203 if build_port == 'wx':
204 features.append('curl')
205 exclude_patterns.append('*Win.cpp')
207 if sys.platform.startswith('darwin'):
208 features.append('cf')
211 exclude_patterns.append('*CF.cpp')
213 full_dirs = get_dirs_for_features(wk_root, features=features, dirs=webcore_dirs)
215 jscore_dir = os.path.join(wk_root, 'JavaScriptCore')
216 for item in os.listdir(jscore_dir):
217 fullpath = os.path.join(jscore_dir, item)
218 if os.path.isdir(fullpath) and not item == "os-win32" and not item == 'icu':
219 wk_includes.append(fullpath)
221 wk_includes.append(os.path.join(jscore_dir, 'wtf', 'unicode'))
222 wk_includes.append(os.path.join(jscore_dir, 'wtf', 'unicode', 'icu'))
223 wk_includes += common_includes + full_dirs
224 if sys.platform.startswith('darwin'):
225 wk_includes.append(os.path.join(webcore_dir, 'icu'))
228 if building_on_win32:
229 cxxflags.append('/FIWebCorePrefix.h')
231 cxxflags.extend(['-include', 'WebCorePrefix.h'])
233 webcore = bld.new_task_gen(
234 features = 'cc cxx cshlib',
235 includes = ' '.join(wk_includes),
236 source = ' '.join(flattenSources(webcore_sources.values())),
238 defines = ['WXMAKINGDLL_WEBKIT', 'BUILDING_WebCore'],
239 libpath = [output_dir],
241 uselib = 'WX ICU XML XSLT CURL SQLITE3 WKINTERFACE ' + get_config(),
242 uselib_local = 'jscore',
243 install_path = output_dir,
248 if build_port == 'wx':
249 excludes = get_excludes(webcore_dir, exclude_patterns)
250 excludes.extend(['UserStyleSheetLoader.cpp', 'RenderMediaControls.cpp'])
252 # intermediate sources
253 excludes.append('ColorData.cpp')
254 excludes.append('CSSValueKeywords.cpp')
255 excludes.append('CSSPropertyNames.cpp')
256 excludes.append('DocTypeStrings.cpp')
257 excludes.append('HTMLEntityNames.cpp')
258 excludes.append('tokenizer.cpp')
260 # FIXME: these three require headers that I can't seem to find in trunk.
261 # Investigate how to resolve these issues.
262 excludes.append('JSAbstractView.cpp')
263 excludes.append('JSPositionCallback.cpp')
264 excludes.append('JSInspectorController.cpp')
266 # The bindings generator seems to think these are ref-counted, while they aren't in trunk.
267 excludes.append('JSElementTimeControl.cpp')
268 excludes.append('JSSVGAnimatedPathData.cpp')
269 excludes.append('JSSVGAnimatedPoints.cpp')
270 excludes.append('JSSVGExternalResourcesRequired.cpp')
271 excludes.append('JSSVGFilterPrimitiveStandardAttributes.cpp')
272 excludes.append('JSSVGLocatable.cpp')
273 excludes.append('JSSVGStyleTable.cpp')
274 excludes.append('JSSVGTests.cpp')
275 excludes.append('JSSVGStylable.cpp')
276 excludes.append('JSSVGZoomAndPan.cpp')
278 # These are files that expect methods not in the base C++ class, usually XYZAnimated methods.
279 excludes.append('JSSVGFitToViewBox.cpp')
280 excludes.append('JSSVGLangSpace.cpp')
281 excludes.append('JSSVGTransformable.cpp')
282 excludes.append('JSSVGURIReference.cpp')
284 # These are C++ DOM Bindings that won't compile because they look for things not in trunk.
285 excludes.append('WebDOMEventTarget.cpp')
286 excludes.append('WebDOMAbstractView.cpp')
287 excludes.append('WebDOMBlobBuilder.cpp')
288 excludes.append('WebDOMEventListenerCustom.cpp')
289 excludes.append('WebDOMElementTimeControl.cpp')
290 excludes.append('WebDOMImageData.cpp')
291 excludes.append('WebDOMInspectorBackend.cpp')
292 excludes.append('WebDOMScriptProfile.cpp')
293 excludes.append('WebDOMScriptProfileNode.cpp')
294 excludes.append('WebNativeEventListener.cpp')
296 if building_on_win32:
297 excludes.append('SharedTimerWx.cpp')
298 excludes.append('RenderThemeWin.cpp')
299 excludes.append('KeyEventWin.cpp')
301 if building_on_win32 or sys.platform.startswith('darwin'):
302 excludes.append('GlyphMapWx.cpp')
303 excludes.append('AuthenticationCF.cpp')
304 excludes.append('LoaderRunLoopCF.cpp')
305 excludes.append('ResourceErrorCF.cpp')
307 if sys.platform.startswith('darwin'):
308 webcore.includes += ' WebKit/mac/WebCoreSupport WebCore/platform/mac'
309 webcore.source += " WebKit/mac/WebCoreSupport/WebSystemInterface.mm"
311 webcore.find_sources_in_dirs(full_dirs, excludes = excludes, exts=['.c', '.cpp'])
315 if build_port == "wx":
316 bld.add_subdirs(['WebKitTools/DumpRenderTree', 'WebKitTools/wx/browser', 'WebKit/wx/bindings/python'])