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, 'collector', 'handles'))
231 wk_includes.append(os.path.join(jscore_dir, 'wtf', 'unicode'))
232 wk_includes.append(os.path.join(jscore_dir, 'wtf', 'unicode', 'icu'))
233 wk_includes += common_includes + full_dirs
234 if sys.platform.startswith('darwin'):
235 wk_includes.append(os.path.join(webcore_dir, 'icu'))
238 if building_on_win32:
239 cxxflags.append('/FIWebCorePrefix.h')
241 cxxflags.extend(['-include', 'WebCorePrefix.h'])
243 webcore = bld.new_task_gen(
244 features = 'cc cxx cshlib',
245 includes = ' '.join(wk_includes),
246 source = ' '.join(flattenSources(webcore_sources.values())),
248 defines = ['WXMAKINGDLL_WEBKIT', 'BUILDING_WebCore'],
249 libpath = [output_dir],
251 uselib = 'WX ICU XML XSLT CURL SQLITE3 WKINTERFACE ' + get_config(),
252 uselib_local = 'jscore',
253 install_path = output_dir,
258 if build_port == 'wx':
259 excludes = get_excludes(webcore_dir, exclude_patterns)
260 excludes.extend(['UserStyleSheetLoader.cpp', 'RenderMediaControls.cpp'])
262 # intermediate sources
263 excludes.append('DocTypeStrings.cpp')
264 excludes.append('HTMLEntityNames.cpp')
265 excludes.append('tokenizer.cpp')
267 # Qt specific file in common sources
268 excludes.append('ContextShadow.cpp')
270 # FIXME: these three require headers that I can't seem to find in trunk.
271 # Investigate how to resolve these issues.
272 excludes.append('JSAbstractView.cpp')
273 excludes.append('JSPositionCallback.cpp')
274 excludes.append('JSInspectorController.cpp')
276 # The bindings generator seems to think these are ref-counted, while they aren't in trunk.
277 excludes.append('JSElementTimeControl.cpp')
278 excludes.append('JSSVGAnimatedPathData.cpp')
279 excludes.append('JSSVGAnimatedPoints.cpp')
280 excludes.append('JSSVGExternalResourcesRequired.cpp')
281 excludes.append('JSSVGFilterPrimitiveStandardAttributes.cpp')
282 excludes.append('JSSVGLocatable.cpp')
283 excludes.append('JSSVGStyleTable.cpp')
284 excludes.append('JSSVGTests.cpp')
285 excludes.append('JSSVGStylable.cpp')
286 excludes.append('JSSVGZoomAndPan.cpp')
288 # These are files that expect methods not in the base C++ class, usually XYZAnimated methods.
289 excludes.append('JSSVGFitToViewBox.cpp')
290 excludes.append('JSSVGLangSpace.cpp')
291 excludes.append('JSSVGTransformable.cpp')
292 excludes.append('JSSVGURIReference.cpp')
294 # These are C++ DOM Bindings that won't compile because they look for things not in trunk.
295 excludes.append('WebDOMEventTarget.cpp')
296 excludes.append('WebDOMAbstractView.cpp')
297 excludes.append('WebDOMBlobBuilder.cpp')
298 excludes.append('WebDOMEventListenerCustom.cpp')
299 excludes.append('WebDOMElementTimeControl.cpp')
300 excludes.append('WebDOMImageData.cpp')
301 excludes.append('WebDOMInspectorBackend.cpp')
302 excludes.append('WebDOMScriptProfile.cpp')
303 excludes.append('WebDOMScriptProfileNode.cpp')
304 excludes.append('WebNativeEventListener.cpp')
306 if building_on_win32:
307 excludes.append('SharedTimerWx.cpp')
308 excludes.append('RenderThemeWin.cpp')
309 excludes.append('KeyEventWin.cpp')
311 if building_on_win32 or sys.platform.startswith('darwin'):
312 excludes.append('GlyphMapWx.cpp')
313 excludes.append('AuthenticationCF.cpp')
314 excludes.append('LoaderRunLoopCF.cpp')
315 excludes.append('ResourceErrorCF.cpp')
317 if sys.platform.startswith('darwin'):
318 webcore.includes += ' Source/WebKit/mac/WebCoreSupport WebCore/platform/mac'
319 webcore.source += ' Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm'
321 if building_on_win32:
322 for wxlib in bld.env['LIB_WX']:
323 wxlibname = os.path.join(bld.env['LIBPATH_WX'][0], wxlib + '_vc.dll')
324 if os.path.exists(wxlibname):
325 bld.install_files(webcore.install_path, [wxlibname])
327 for dep in windows_deps:
328 bld.install_files(webcore.install_path, [os.path.join(msvclibs_dir, dep)])
330 webcore.find_sources_in_dirs(full_dirs, excludes = excludes, exts=['.c', '.cpp'])
334 if build_port == "wx":
335 bld.add_subdirs(['Tools/DumpRenderTree', 'Tools/wx/browser', 'Source/WebKit/wx/bindings/python'])