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(['Source/WebKit/wx', 'Source/WebKit/wx/WebKitSupport'])
36 os.path.join(wk_root, 'Source', 'JavaScriptCore'),
37 os.path.join(wk_root, 'Source', 'JavaScriptCore', 'wtf', 'text'),
38 os.path.join(wk_root, 'Source', 'WebCore'),
39 os.path.join(wk_root, 'Source', 'WebCore', 'DerivedSources'),
40 os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'image-decoders'),
41 os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'win'),
42 os.path.join(wk_root, 'Source', 'WebCore', 'workers'),
43 os.path.join(output_dir),
46 if build_port == "wx":
47 wk_includes.append(os.path.join(wk_root, 'Source', 'WebKit', 'wx'))
48 wk_includes.append(os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'wx', 'wxcode'))
50 if sys.platform.startswith("win"):
51 wk_includes.append(os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'win'))
52 wk_includes.append(os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'graphics', 'win'))
56 'bin/icuuc40.dll', 'bin/icudt40.dll', 'bin/icuin40.dll',
57 'bin/libcurl.dll', 'bin/libeay32.dll', 'bin/ssleay32.dll', 'bin/zlib1.dll',
58 'lib/sqlite3.dll', 'bin/libxml2.dll', 'bin/libxslt.dll', 'bin/iconv.dll',
63 if build_port == "wx":
64 webcore_sources['wx'] = [
65 'Source/WebCore/bindings/cpp/WebDOMEventTarget.cpp',
66 'Source/WebCore/platform/KillRingNone.cpp',
67 'Source/WebCore/platform/text/LocalizedNumberNone.cpp'
71 # make sure platform/wx comes after this so we get the right
73 webcore_dirs.extend(['Source/WebCore/platform/wx/wxcode/win', 'Source/WebCore/plugins/win'])
74 webcore_sources['wx-win'] = [
75 'Source/WebCore/platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp',
76 'Source/WebCore/platform/graphics/win/TransformationMatrixWin.cpp',
77 'Source/WebCore/platform/ScrollAnimatorWin.cpp',
78 # wxTimer on Windows has a bug that causes it to eat crashes in callbacks
79 # so we need to use the Win port's implementation until the wx bug fix is
80 # widely available (it was fixed in 2.8.10).
81 'Source/WebCore/platform/win/SharedTimerWin.cpp',
82 'Source/WebCore/platform/win/WebCoreInstanceHandle.cpp',
83 # Use the Windows plugin architecture
84 #'Source/WebCore/plugins/win/PluginDataWin.cpp',
85 'Source/WebCore/plugins/win/PluginDatabaseWin.cpp',
86 'Source/WebCore/plugins/win/PluginMessageThrottlerWin.cpp',
87 'Source/WebCore/plugins/win/PluginPackageWin.cpp',
88 'Source/WebCore/plugins/win/PluginViewWin.cpp',
90 elif sys.platform.startswith('darwin'):
91 webcore_dirs.append('Source/WebCore/plugins/mac')
92 webcore_dirs.append('Source/WebCore/platform/wx/wxcode/mac/carbon')
93 webcore_dirs.append('Source/WebCore/platform/mac')
94 webcore_dirs.append('Source/WebCore/platform/text/mac')
95 webcore_sources['wx-mac'] = [
96 'Source/WebCore/platform/mac/PurgeableBufferMac.cpp',
97 'Source/WebCore/platform/mac/WebCoreNSStringExtras.mm',
98 'Source/WebCore/platform/mac/WebCoreSystemInterface.mm',
99 'Source/WebCore/platform/graphics/cg/FloatSizeCG.cpp',
100 'Source/WebCore/platform/graphics/mac/ComplexTextController.cpp',
101 'Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp',
102 'Source/WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp',
103 'Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp',
104 'Source/WebCore/platform/graphics/mac/SimpleFontDataATSUI.mm',
105 'Source/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp',
106 'Source/WebCore/platform/graphics/wx/FontPlatformDataWxMac.mm',
107 'Source/WebCore/platform/text/mac/ShapeArabic.c',
108 'Source/WebCore/platform/wx/wxcode/mac/carbon/fontprops.mm',
109 'Source/WebCore/plugins/mac/PluginPackageMac.cpp',
110 'Source/WebCore/plugins/mac/PluginViewMac.mm'
113 webcore_sources['wx-gtk'] = [
114 'Source/WebCore/plugins/PluginViewNone.cpp',
115 'Source/WebCore/plugins/PluginPackageNone.cpp'
117 webcore_dirs.append('Source/WebCore/platform/wx/wxcode/gtk')
120 from TaskGen import taskgen, feature, after
123 def generate_webcore_derived_sources():
124 # build the derived sources
125 derived_sources_dir = os.path.join(webcore_dir, 'DerivedSources')
127 if building_on_win32:
128 wc_dir = get_output('cygpath --unix "%s"' % wc_dir)
129 if not os.path.exists(derived_sources_dir):
130 os.mkdir(derived_sources_dir)
133 os.chdir(derived_sources_dir)
135 # DerivedSources.make expects Cygwin (i.e. Unix-style) python, so use that instead.
136 if building_on_win32:
137 oldpath = os.environ["PATH"]
138 os.environ["PATH"] = "/usr/bin" + os.pathsep + os.environ["PATH"]
139 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)))
140 if building_on_win32:
141 os.environ["PATH"] = oldpath
144 def generate_jscore_derived_sources():
145 # build the derived sources
147 if building_on_win32:
148 js_dir = get_output('cygpath --unix "%s"' % js_dir)
149 derived_sources_dir = os.path.join(jscore_dir, 'DerivedSources')
150 if not os.path.exists(derived_sources_dir):
151 os.mkdir(derived_sources_dir)
154 os.chdir(derived_sources_dir)
156 # DerivedSources.make expects Cygwin (i.e. Unix-style) python, so use that instead.
157 if building_on_win32:
158 oldpath = os.environ["PATH"]
159 os.environ["PATH"] = "/usr/bin" + os.pathsep + os.environ["PATH"]
160 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))
162 if building_on_win32:
163 os.environ["PATH"] = oldpath
166 def set_options(opt):
167 common_set_options(opt)
170 common_configure(conf)
171 generate_jscore_derived_sources()
172 generate_webcore_derived_sources()
173 if build_port == "wx" and sys.platform.startswith('win'):
174 graphics_dir = os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'graphics')
175 # HACK ALERT: MSVC automatically adds the source file's directory as the first entry in the
176 # path. Unfortunately, that means when compiling these files we will end up including
177 # win/FontPlatformData.h, which breaks wx compilation. So we copy the files to the wx dir.
178 for afile in ['UniscribeController.h', 'UniscribeController.cpp', 'GlyphPageTreeNodeCairoWin.cpp']:
179 shutil.copy(os.path.join(graphics_dir, 'win', afile), os.path.join(graphics_dir, 'wx'))
181 webcore_out_dir = os.path.join(output_dir, 'WebCore')
182 if not os.path.exists(webcore_out_dir):
183 os.makedirs(webcore_out_dir)
184 shutil.copy('Source/WebCore/platform/mac/WebCoreSystemInterface.h', os.path.join(output_dir, 'WebCore', 'WebCoreSystemInterface.h'))
185 jscore_out_dir = os.path.join(output_dir, 'JavaScriptCore')
186 if not os.path.exists(jscore_out_dir):
187 os.makedirs(jscore_out_dir)
188 for api_file in glob.glob(os.path.join(jscore_dir, 'API/*.h')):
189 shutil.copy(api_file, os.path.join(jscore_out_dir, os.path.basename(api_file)))
191 if build_port == "wx" and Options.options.wxpython:
192 common_configure(conf)
193 conf.check_tool('swig', tooldir='Source/WebKit/wx/bindings/python')
194 conf.check_swig_version('1.3.29')
200 # FIXME: Does this need to be Source/JavaScriptCore?
201 bld.add_subdirs('Source/JavaScriptCore')
203 if sys.platform.startswith('darwin'):
204 TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cxx']
205 TaskGen.task_gen.mappings['.m'] = TaskGen.task_gen.mappings['.cxx']
207 features = [build_port]
208 exclude_patterns = ['*AllInOne.cpp', '*Brew.cpp', '*CFNet.cpp', '*Chromium*.cpp',
209 '*Efl.cpp', '*Gtk.cpp', '*Haiku.cpp', '*Mac.cpp', '*None.cpp', '*Qt.cpp', '*Safari.cpp',
210 'test*bindings.*', '*WinCE.cpp', "WebDOMCanvas*.cpp", "WebDOMSVG*.cpp"]
211 if build_port == 'wx':
212 features.append('curl')
213 exclude_patterns.append('*Win.cpp')
215 if sys.platform.startswith('darwin'):
216 features.append('cf')
219 exclude_patterns.append('*CF.cpp')
221 full_dirs = get_dirs_for_features(wk_root, features=features, dirs=webcore_dirs)
223 jscore_dir = os.path.join(wk_root, 'Source', 'JavaScriptCore')
224 for item in os.listdir(jscore_dir):
225 fullpath = os.path.join(jscore_dir, item)
226 if os.path.isdir(fullpath) and not item == "os-win32" and not item == 'icu':
227 wk_includes.append(fullpath)
229 wk_includes.append('Source')
230 wk_includes.append(os.path.join(jscore_dir, 'wtf', 'unicode'))
231 wk_includes.append(os.path.join(jscore_dir, 'wtf', 'unicode', 'icu'))
232 wk_includes += common_includes + full_dirs
233 if sys.platform.startswith('darwin'):
234 wk_includes.append(os.path.join(webcore_dir, 'icu'))
237 if building_on_win32:
238 cxxflags.append('/FIWebCorePrefix.h')
240 cxxflags.extend(['-include', 'WebCorePrefix.h'])
242 webcore = bld.new_task_gen(
243 features = 'cc cxx cshlib',
244 includes = ' '.join(wk_includes),
245 source = ' '.join(flattenSources(webcore_sources.values())),
247 defines = ['WXMAKINGDLL_WEBKIT', 'BUILDING_WebCore'],
248 libpath = [output_dir],
250 uselib = 'WX ICU XML XSLT CURL SQLITE3 WKINTERFACE ' + get_config(),
251 uselib_local = 'jscore',
252 install_path = output_dir,
257 if build_port == 'wx':
258 excludes = get_excludes(webcore_dir, exclude_patterns)
259 excludes.extend(['UserStyleSheetLoader.cpp', 'RenderMediaControls.cpp'])
261 # intermediate sources
262 excludes.append('DocTypeStrings.cpp')
263 excludes.append('HTMLEntityNames.cpp')
264 excludes.append('tokenizer.cpp')
266 # Qt specific file in common sources
267 excludes.append('ContextShadow.cpp')
269 # FIXME: these three require headers that I can't seem to find in trunk.
270 # Investigate how to resolve these issues.
271 excludes.append('JSAbstractView.cpp')
272 excludes.append('JSPositionCallback.cpp')
273 excludes.append('JSInspectorController.cpp')
275 # The bindings generator seems to think these are ref-counted, while they aren't in trunk.
276 excludes.append('JSElementTimeControl.cpp')
277 excludes.append('JSSVGAnimatedPathData.cpp')
278 excludes.append('JSSVGAnimatedPoints.cpp')
279 excludes.append('JSSVGExternalResourcesRequired.cpp')
280 excludes.append('JSSVGFilterPrimitiveStandardAttributes.cpp')
281 excludes.append('JSSVGLocatable.cpp')
282 excludes.append('JSSVGStyleTable.cpp')
283 excludes.append('JSSVGTests.cpp')
284 excludes.append('JSSVGStylable.cpp')
285 excludes.append('JSSVGZoomAndPan.cpp')
287 # These are files that expect methods not in the base C++ class, usually XYZAnimated methods.
288 excludes.append('JSSVGFitToViewBox.cpp')
289 excludes.append('JSSVGLangSpace.cpp')
290 excludes.append('JSSVGTransformable.cpp')
291 excludes.append('JSSVGURIReference.cpp')
293 # These are C++ DOM Bindings that won't compile because they look for things not in trunk.
294 excludes.append('WebDOMEventTarget.cpp')
295 excludes.append('WebDOMAbstractView.cpp')
296 excludes.append('WebDOMBlobBuilder.cpp')
297 excludes.append('WebDOMEventListenerCustom.cpp')
298 excludes.append('WebDOMElementTimeControl.cpp')
299 excludes.append('WebDOMImageData.cpp')
300 excludes.append('WebDOMInspectorBackend.cpp')
301 excludes.append('WebDOMScriptProfile.cpp')
302 excludes.append('WebDOMScriptProfileNode.cpp')
303 excludes.append('WebNativeEventListener.cpp')
305 if building_on_win32:
306 excludes.append('SharedTimerWx.cpp')
307 excludes.append('RenderThemeWin.cpp')
308 excludes.append('KeyEventWin.cpp')
310 if building_on_win32 or sys.platform.startswith('darwin'):
311 excludes.append('GlyphMapWx.cpp')
312 excludes.append('AuthenticationCF.cpp')
313 excludes.append('LoaderRunLoopCF.cpp')
314 excludes.append('ResourceErrorCF.cpp')
316 if sys.platform.startswith('darwin'):
317 webcore.includes += ' Source/WebKit/mac/WebCoreSupport WebCore/platform/mac'
318 webcore.source += ' Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm'
320 if building_on_win32:
321 for wxlib in bld.env['LIB_WX']:
322 wxlibname = os.path.join(bld.env['LIBPATH_WX'][0], wxlib + '_vc.dll')
323 if os.path.exists(wxlibname):
324 bld.install_files(webcore.install_path, [wxlibname])
326 for dep in windows_deps:
327 bld.install_files(webcore.install_path, [os.path.join(msvclibs_dir, dep)])
329 webcore.find_sources_in_dirs(full_dirs, excludes = excludes, exts=['.c', '.cpp'])
333 if build_port == "wx":
334 bld.add_subdirs(['Tools/DumpRenderTree', 'Tools/wx/browser', 'Source/WebKit/wx/bindings/python'])