Rubberstamped by Eric Seidel.
Enable waf to be used to build other ports
https://bugs.webkit.org/show_bug.cgi?id=58213
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@84994 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/ChangeLog b/ChangeLog
index 24ceb0d..9364bc4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2011-04-26 Kevin Ollivier <kevino@theolliviers.com>
+
+ Rubberstamped by Eric Seidel.
+
+ Enable waf to be used to build other ports
+ https://bugs.webkit.org/show_bug.cgi?id=58213
+
+ * wscript:
+
2011-04-22 Sheriff Bot <webkit.review.bot@gmail.com>
Unreviewed, rolling out r84627.
diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog
index 9203ccd..73569c8 100644
--- a/Source/JavaScriptCore/ChangeLog
+++ b/Source/JavaScriptCore/ChangeLog
@@ -1,3 +1,12 @@
+2011-04-26 Kevin Ollivier <kevino@theolliviers.com>
+
+ Rubberstamped by Eric Seidel.
+
+ Enable waf to be used to build other ports
+ https://bugs.webkit.org/show_bug.cgi?id=58213
+
+ * wscript:
+
2011-04-26 Sam Weinig <sam@webkit.org>
Reviewed by David Hyatt.
diff --git a/Source/JavaScriptCore/wscript b/Source/JavaScriptCore/wscript
index 88d3b68..3df3ded 100644
--- a/Source/JavaScriptCore/wscript
+++ b/Source/JavaScriptCore/wscript
@@ -29,25 +29,26 @@
from settings import *
-jscore_excludes = ['jsc.cpp', 'ProfilerServer.mm', 'ExecutableAllocatorPosix.cpp']
-jscore_excludes.extend(get_excludes(jscore_dir, ['*Brew.cpp', '*CF.cpp', '*Symbian.cpp']))
-
-sources = []
-
-jscore_excludes.extend(get_excludes(jscore_dir, ['*None.cpp']))
-
-if build_port == "wx":
- if building_on_win32:
- jscore_excludes += ['MarkStackPosix.cpp', 'OSAllocatorPosix.cpp', 'ThreadingPthreads.cpp']
- sources += ['heap/MarkStackWin.cpp']
- else:
- jscore_excludes.append('JSStringRefBSTR.cpp')
- jscore_excludes.extend(get_excludes(jscore_dir, ['*Win.cpp']))
-
def build(bld):
+
import Options
- full_dirs = get_dirs_for_features(jscore_dir, features=[build_port], dirs=jscore_dirs)
+ jscore_excludes = ['jsc.cpp', 'ProfilerServer.mm', 'ExecutableAllocatorPosix.cpp']
+ jscore_excludes.extend(get_excludes(jscore_dir, ['*Brew.cpp', '*CF.cpp', '*Symbian.cpp']))
+
+ jscore_excludes.extend(get_excludes(jscore_dir, ['*None.cpp']))
+
+ sources = []
+
+ if Options.options.port == "wx":
+ if building_on_win32:
+ jscore_excludes += ['MarkStackPosix.cpp', 'OSAllocatorPosix.cpp', 'ThreadingPthreads.cpp']
+ sources += ['heap/MarkStackWin.cpp']
+ else:
+ jscore_excludes.append('JSStringRefBSTR.cpp')
+ jscore_excludes.extend(get_excludes(jscore_dir, ['*Win.cpp']))
+
+ full_dirs = get_dirs_for_features(jscore_dir, features=[Options.options.port.lower()], dirs=jscore_dirs)
includes = common_includes + full_dirs
if sys.platform.startswith('darwin'):
diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index b8f86a0..a2ca7d2 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,19 @@
+2011-04-26 Kevin Ollivier <kevino@theolliviers.com>
+
+ Rubberstamped by Eric Seidel.
+
+ Enable waf to be used to build other ports
+ https://bugs.webkit.org/show_bug.cgi?id=58213
+
+ * Scripts/build-webkit:
+ * Scripts/webkitdirs.pm:
+ * waf: Added.
+ * waf/build: Added.
+ * waf/build/build_utils.py: Added.
+ * waf/build/settings.py: Added.
+ * waf/build/waf_extensions.py: Added.
+ * waf/build/wxpresets.py: Added.
+
2011-04-26 Sam Weinig <sam@webkit.org>
Reviewed by David Hyatt.
diff --git a/Tools/Scripts/build-webkit b/Tools/Scripts/build-webkit
index 58d15a8..fcbff21a 100755
--- a/Tools/Scripts/build-webkit
+++ b/Tools/Scripts/build-webkit
@@ -542,6 +542,8 @@
}
if (isWx()) {
+ $makeArgs .= " --port=wx";
+
downloadWafIfNeeded();
@options = split(/ /, $makeArgs);
@projects = ();
diff --git a/Tools/Scripts/webkitdirs.pm b/Tools/Scripts/webkitdirs.pm
index 64d3404..b9b828d 100644
--- a/Tools/Scripts/webkitdirs.pm
+++ b/Tools/Scripts/webkitdirs.pm
@@ -1317,7 +1317,7 @@
sub downloadWafIfNeeded
{
# get / update waf if needed
- my $waf = "$sourceDir/Tools/wx/waf";
+ my $waf = "$sourceDir/Tools/waf/waf";
my $wafURL = 'http://wxwebkit.kosoftworks.com/downloads/deps/waf';
if (!-f $waf) {
my $result = system "curl -o $waf $wafURL";
@@ -1335,7 +1335,7 @@
$pythonPath = '';
}
my $sourceDir = sourceDir();
- my $newPythonPath = "$sourceDir/Tools/wx/build:$pythonPath";
+ my $newPythonPath = "$sourceDir/Tools/waf/build:$pythonPath";
if (isCygwin()) {
$newPythonPath = `cygpath --mixed --path $newPythonPath`;
}
@@ -1343,7 +1343,7 @@
print "Building $project\n";
- my $wafCommand = "$sourceDir/Tools/wx/waf";
+ my $wafCommand = "$sourceDir/Tools/waf/waf";
if ($ENV{'WXWEBKIT_WAF'}) {
$wafCommand = $ENV{'WXWEBKIT_WAF'};
}
diff --git a/Tools/waf/build/build_utils.py b/Tools/waf/build/build_utils.py
new file mode 100644
index 0000000..aa606b7
--- /dev/null
+++ b/Tools/waf/build/build_utils.py
@@ -0,0 +1,208 @@
+# Copyright (C) 2009 Kevin Ollivier All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Helper functions for the WebKit build.
+
+import commands
+import glob
+import os
+import platform
+import re
+import shutil
+import sys
+import urllib
+import urlparse
+
+
+def get_output(command):
+ """
+ Windows-compatible function for getting output from a command.
+ """
+ if sys.platform.startswith('win'):
+ f = os.popen(command)
+ return f.read().strip()
+ else:
+ return commands.getoutput(command)
+
+
+def get_excludes(root, patterns):
+ """
+ Get a list of exclude patterns going down several dirs.
+ TODO: Make this fully recursive.
+ """
+ excludes = []
+
+ for pattern in patterns:
+ subdir_pattern = os.sep + '*'
+ for subdir in [subdir_pattern, subdir_pattern * 2, subdir_pattern * 3]:
+ adir = root + subdir + os.sep + pattern
+ files = glob.glob(adir)
+ for afile in files:
+ excludes.append(os.path.basename(afile))
+
+ return excludes
+
+
+def get_dirs_for_features(root, features, dirs):
+ """
+ Find which directories to include in the list of build dirs based upon the
+ enabled port(s) and features.
+ """
+ outdirs = dirs
+ for adir in dirs:
+ for feature in features:
+ relpath = os.path.join(adir, feature)
+ featuredir = os.path.join(root, relpath)
+ if os.path.exists(featuredir) and not relpath in outdirs:
+ outdirs.append(relpath)
+
+ return outdirs
+
+
+def download_if_newer(url, destdir):
+ """
+ Checks if the file on the server is newer than the one in the user's tree,
+ and if so, downloads it.
+
+ Returns the filename of the downloaded file if downloaded, or None if
+ the existing file matches the one on the server.
+ """
+ obj = urlparse.urlparse(url)
+ filename = os.path.basename(obj.path)
+ destfile = os.path.join(destdir, filename)
+
+ urlobj = urllib.urlopen(url)
+ size = long(urlobj.info().getheader('Content-Length'))
+
+ def download_callback(downloaded, block_size, total_size):
+ downloaded = block_size * downloaded
+ if downloaded > total_size:
+ downloaded = total_size
+ sys.stdout.write('%s %d of %d bytes downloaded\r' % (filename, downloaded, total_size))
+
+ # NB: We don't check modified time as Python doesn't yet handle timezone conversion
+ # properly when converting strings to time objects.
+ if not os.path.exists(destfile) or os.path.getsize(destfile) != size:
+ urllib.urlretrieve(url, destfile, download_callback)
+ print ''
+ return destfile
+
+ return None
+
+
+def update_wx_deps(conf, wk_root, msvc_version='msvc2008'):
+ """
+ Download and update tools needed to build the wx port.
+ """
+ import Logs
+ Logs.info('Ensuring wxWebKit dependencies are up-to-date.')
+
+ wklibs_dir = os.path.join(wk_root, 'WebKitLibraries')
+ waf = download_if_newer('http://wxwebkit.wxcommunity.com/downloads/deps/waf', os.path.join(wk_root, 'Tools', 'wx'))
+ if waf:
+ # TODO: Make the build restart itself after an update.
+ Logs.warn('Build system updated, please restart build.')
+ sys.exit(1)
+
+ # since this module is still experimental
+ wxpy_dir = os.path.join(wk_root, 'Source', 'WebKit', 'wx', 'bindings', 'python')
+ swig_module = download_if_newer('http://wxwebkit.wxcommunity.com/downloads/deps/swig.py.txt', wxpy_dir)
+ if swig_module:
+ shutil.copy(os.path.join(wxpy_dir, 'swig.py.txt'), os.path.join(wxpy_dir, 'swig.py'))
+
+ if sys.platform.startswith('win'):
+ Logs.info('downloading deps package')
+ archive = download_if_newer('http://wxwebkit.wxcommunity.com/downloads/deps/wxWebKitDeps-%s.zip' % msvc_version, wklibs_dir)
+ if archive and os.path.exists(archive):
+ os.system('unzip -o %s -d %s' % (archive, os.path.join(wklibs_dir, msvc_version)))
+
+ elif sys.platform.startswith('darwin'):
+ # export the right compiler for building the dependencies
+ if platform.release().startswith('10'): # Snow Leopard
+ os.environ['CC'] = conf.env['CC'][0]
+ os.environ['CXX'] = conf.env['CXX'][0]
+ os.system('%s/Tools/wx/install-unix-extras' % wk_root)
+
+
+def includeDirsForSources(sources):
+ include_dirs = []
+ for group in sources:
+ for source in group:
+ dirname = os.path.dirname(source)
+ if not dirname in include_dirs:
+ include_dirs.append(dirname)
+
+ return include_dirs
+
+
+def flattenSources(sources):
+ flat_sources = []
+ for group in sources:
+ flat_sources.extend(group)
+
+ return flat_sources
+
+
+def git_branch_name():
+ try:
+ branches = commands.getoutput("git branch --no-color")
+ match = re.search('^\* (.*)', branches, re.MULTILINE)
+ if match:
+ return ".%s" % match.group(1)
+ except:
+ pass
+
+ return ""
+
+
+def get_config(wk_root):
+ config_file = os.path.join(wk_root, 'WebKitBuild', 'Configuration')
+ config = 'Debug'
+
+ if os.path.exists(config_file):
+ config = open(config_file).read()
+
+ return config
+
+
+def get_arch(wk_root):
+ arch_file = os.path.join(wk_root, 'WebKitBuild', 'Architecture')
+ arch = 'x86_64'
+
+ if os.path.exists(arch_file):
+ arch = open(arch_file).read()
+
+ return arch
+
+
+def svn_revision():
+ if os.system("git-svn info") == 0:
+ info = commands.getoutput("git-svn info ../..")
+ else:
+ info = commands.getoutput("svn info")
+
+ for line in info.split("\n"):
+ if line.startswith("Revision: "):
+ return line.replace("Revision: ", "").strip()
+
+ return ""
diff --git a/Tools/waf/build/settings.py b/Tools/waf/build/settings.py
new file mode 100644
index 0000000..bf84b76
--- /dev/null
+++ b/Tools/waf/build/settings.py
@@ -0,0 +1,429 @@
+# Copyright (C) 2009 Kevin Ollivier All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Common elements of the waf build system shared by all projects.
+
+import commands
+import os
+import platform
+import re
+import sys
+
+import Options
+
+from build_utils import *
+from waf_extensions import *
+
+# to be moved to wx when it supports more configs
+from wxpresets import *
+
+wk_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../..'))
+
+if sys.platform.startswith('win'):
+ if not 'WXWIN' in os.environ:
+ print "Please set WXWIN to the directory containing wxWidgets."
+ sys.exit(1)
+
+ wx_root = os.environ['WXWIN']
+else:
+ wx_root = commands.getoutput('wx-config --prefix')
+
+jscore_dir = os.path.join(wk_root, 'Source', 'JavaScriptCore')
+webcore_dir = os.path.join(wk_root, 'Source', 'WebCore')
+wklibs_dir = os.path.join(wk_root, 'WebKitLibraries')
+
+common_defines = []
+common_cxxflags = []
+common_includes = []
+common_libs = []
+common_libpaths = []
+common_frameworks = []
+
+ports = [
+ 'Brew',
+ 'Chromium',
+ 'Gtk',
+ 'Haiku',
+ 'Mac',
+ 'None',
+ 'Qt',
+ 'Safari',
+ 'Win',
+ 'Wince',
+ 'wx',
+]
+
+port_uses = {
+ 'wx': ['CURL', 'WXGC'],
+}
+
+jscore_dirs = [
+ 'API',
+ 'bytecode',
+ 'bytecompiler',
+ 'debugger',
+ 'DerivedSources',
+ 'heap',
+ 'interpreter',
+ 'jit',
+ 'parser',
+ 'profiler',
+ 'runtime',
+ 'wtf',
+ 'wtf/text',
+ 'wtf/unicode',
+ 'wtf/unicode/icu',
+ 'yarr',
+]
+
+webcore_dirs_common = [
+ 'Source/WebCore/accessibility',
+ 'Source/WebCore/bindings',
+ 'Source/WebCore/bindings/cpp',
+ 'Source/WebCore/bindings/generic',
+ 'Source/WebCore/bindings/js',
+ 'Source/WebCore/bridge',
+ 'Source/WebCore/bridge/c',
+ 'Source/WebCore/bridge/jsc',
+ 'Source/WebCore/css',
+ 'Source/WebCore/DerivedSources',
+ 'Source/WebCore/dom',
+ 'Source/WebCore/dom/default',
+ 'Source/WebCore/editing',
+ 'Source/WebCore/fileapi',
+ 'Source/WebCore/history',
+ 'Source/WebCore/html',
+ 'Source/WebCore/html/canvas',
+ 'Source/WebCore/html/parser',
+ 'Source/WebCore/html/shadow',
+ 'Source/WebCore/inspector',
+ 'Source/WebCore/loader',
+ 'Source/WebCore/loader/appcache',
+ 'Source/WebCore/loader/archive',
+ 'Source/WebCore/loader/cache',
+ 'Source/WebCore/loader/icon',
+ 'Source/WebCore/notifications',
+ 'Source/WebCore/page',
+ 'Source/WebCore/page/animation',
+ 'Source/WebCore/platform',
+ 'Source/WebCore/platform/animation',
+ 'Source/WebCore/platform/graphics',
+ 'Source/WebCore/platform/graphics/filters',
+ 'Source/WebCore/platform/graphics/transforms',
+ 'Source/WebCore/platform/image-decoders',
+ 'Source/WebCore/platform/image-decoders/bmp',
+ 'Source/WebCore/platform/image-decoders/gif',
+ 'Source/WebCore/platform/image-decoders/ico',
+ 'Source/WebCore/platform/image-decoders/jpeg',
+ 'Source/WebCore/platform/image-decoders/png',
+ 'Source/WebCore/platform/image-decoders/webp',
+ 'Source/WebCore/platform/mock',
+ 'Source/WebCore/platform/network',
+ 'Source/WebCore/platform/sql',
+ 'Source/WebCore/platform/text',
+ 'Source/WebCore/platform/text/transcoder',
+ 'Source/WebCore/plugins',
+ 'Source/WebCore/rendering',
+ 'Source/WebCore/rendering/style',
+ 'Source/WebCore/rendering/svg',
+ 'Source/WebCore/storage',
+ 'Source/WebCore/svg',
+ 'Source/WebCore/svg/animation',
+ 'Source/WebCore/svg/graphics',
+ 'Source/WebCore/svg/graphics/filters',
+ 'Source/WebCore/svg/properties',
+ 'Source/WebCore/websockets',
+ 'Source/WebCore/xml',
+]
+
+config = get_config(wk_root)
+arch = get_arch(wk_root)
+config_dir = config + git_branch_name()
+
+output_dir = os.path.join(wk_root, 'WebKitBuild', config_dir)
+
+building_on_win32 = sys.platform.startswith('win')
+
+default_port = 'Mac'
+if building_on_win32:
+ deafult_port = "Win"
+
+build_port = default_port
+
+
+def get_config():
+ waf_configname = config.upper().strip()
+ if building_on_win32:
+ isReleaseCRT = (config == 'Release')
+ if build_port == 'wx':
+ if Options.options.wxpython:
+ isReleaseCRT = True
+
+ if isReleaseCRT:
+ waf_configname = waf_configname + ' CRT_MULTITHREADED_DLL'
+ else:
+ waf_configname = waf_configname + ' CRT_MULTITHREADED_DLL_DBG'
+
+ return waf_configname
+
+create_hash_table = wk_root + "/Source/JavaScriptCore/create_hash_table"
+if building_on_win32:
+ create_hash_table = get_output('cygpath --unix "%s"' % create_hash_table)
+os.environ['CREATE_HASH_TABLE'] = create_hash_table
+
+feature_defines = []
+
+msvc_version = 'msvc2008'
+
+msvclibs_dir = os.path.join(wklibs_dir, msvc_version, 'win')
+
+
+def get_path_to_wxconfig():
+ if 'WX_CONFIG' in os.environ:
+ return os.environ['WX_CONFIG']
+ else:
+ return 'wx-config'
+
+
+def common_set_options(opt):
+ """
+ Initialize common options provided to the user.
+ """
+ opt.tool_options('compiler_cxx')
+ opt.tool_options('compiler_cc')
+ opt.tool_options('python')
+
+ opt.add_option('--port', action='store', default=default_port, help='Which WebKit port to build.')
+ opt.add_option('--wxpython', action='store_true', default=False, help='Create the wxPython bindings.')
+ opt.add_option('--wx-compiler-prefix', action='store', default='vc',
+ help='Specify a different compiler prefix (do this if you used COMPILER_PREFIX when building wx itself)')
+ opt.add_option('--macosx-version', action='store', default='', help="Version of OS X to build for.")
+ opt.add_option('--msvc-version', action='store', default='', help="MSVC version to use to build. Use 8 for 2005, 9 for 2008")
+
+
+def common_configure(conf):
+ """
+ Configuration used by all targets, called from the target's configure() step.
+ """
+
+ conf.env['MSVC_TARGETS'] = ['x86']
+
+ build_port = Options.options.port
+
+ feature_defines = ['ENABLE_DATABASE', 'ENABLE_XSLT', 'ENABLE_JAVASCRIPT_DEBUGGER',
+ 'ENABLE_SVG', 'ENABLE_SVG_USE', 'ENABLE_FILTERS', 'ENABLE_SVG_FONTS',
+ 'ENABLE_SVG_ANIMATION', 'ENABLE_SVG_AS_IMAGE', 'ENABLE_SVG_FOREIGN_OBJECT',
+ 'ENABLE_JIT', 'ENABLE_DOM_STORAGE', 'BUILDING_%s' % build_port.upper()]
+
+ conf.env["FEATURE_DEFINES"] = ' '.join(feature_defines)
+
+ if Options.options.msvc_version and Options.options.msvc_version != '':
+ print "msvc version = %s" % Options.options.msvc_version
+ conf.env['MSVC_VERSIONS'] = ['msvc %s.0' % Options.options.msvc_version]
+ else:
+ print "msvc not set!"
+ conf.env['MSVC_VERSIONS'] = ['msvc 9.0', 'msvc 8.0']
+
+ if sys.platform.startswith('cygwin'):
+ print "ERROR: You must use the Win32 Python from python.org, not Cygwin Python, when building on Windows."
+ sys.exit(1)
+
+ conf.check_tool('compiler_cxx')
+ conf.check_tool('compiler_cc')
+
+ if sys.platform.startswith('darwin'):
+ conf.check_tool('osx')
+
+ global msvc_version
+ global msvclibs_dir
+
+ libprefix = ''
+
+ if building_on_win32:
+ libprefix = 'lib'
+
+ found = conf.get_msvc_versions()
+ found_versions = []
+ for version in found:
+ found_versions.append(version[0])
+
+ if 'msvc 9.0' in conf.env['MSVC_VERSIONS'] and 'msvc 9.0' in found_versions:
+ msvc_version = 'msvc2008'
+ elif 'msvc 8.0' in conf.env['MSVC_VERSIONS'] and 'msvc 8.0' in found_versions:
+ msvc_version = 'msvc2005'
+
+ msvclibs_dir = os.path.join(wklibs_dir, msvc_version, 'win')
+
+ # Disable several warnings which occur many times during the build.
+ # Some of them are harmless (4099, 4344, 4396, 4800) and working around
+ # them in WebKit code is probably just not worth it. We can simply do
+ # nothing about the others (4503). A couple are possibly valid but
+ # there are just too many of them in the code so fixing them is
+ # impossible in practice and just results in tons of distracting output
+ # (4244, 4291). Finally 4996 is actively harmful as it is given for
+ # just about any use of standard C/C++ library facilities.
+ conf.env.append_value('CXXFLAGS', [
+ '/wd4099', # type name first seen using 'struct' now seen using 'class'
+ '/wd4244', # conversion from 'xxx' to 'yyy', possible loss of data:
+ '/wd4291', # no matching operator delete found (for placement new)
+ '/wd4344', # behaviour change in template deduction
+ '/wd4396', # inline can't be used in friend declaration
+ '/wd4503', # decorated name length exceeded, name was truncated
+ '/wd4800', # forcing value to bool 'true' or 'false'
+ '/wd4996', # deprecated function
+ ])
+
+ # This one also occurs in C code, so disable it there as well.
+ conf.env.append_value('CCFLAGS', ['/wd4996'])
+
+ if build_port == "wx":
+ update_wx_deps(conf, wk_root, msvc_version)
+
+ conf.env.append_value('CXXDEFINES', ['BUILDING_WX__=1', 'JS_NO_EXPORT'])
+
+ if building_on_win32:
+ conf.env.append_value('LIBPATH', os.path.join(msvclibs_dir, 'lib'))
+ # wx settings
+ global config
+ is_debug = (config == 'Debug')
+ wxdefines, wxincludes, wxlibs, wxlibpaths = get_wxmsw_settings(wx_root, shared=True, unicode=True, debug=is_debug, wxPython=Options.options.wxpython)
+ conf.env['CXXDEFINES_WX'] = wxdefines
+ conf.env['CPPPATH_WX'] = wxincludes
+ conf.env['LIB_WX'] = wxlibs
+ conf.env['LIBPATH_WX'] = wxlibpaths
+ else:
+ conf.check_cfg(path=get_path_to_wxconfig(), args='--cxxflags --libs', package='', uselib_store='WX', mandatory=True)
+
+ if sys.platform.startswith('darwin'):
+ conf.env['LIB_ICU'] = ['icucore']
+
+ conf.env.append_value('CPPPATH', wklibs_dir)
+ conf.env.append_value('LIBPATH', wklibs_dir)
+
+ min_version = None
+
+ mac_target = 'MACOSX_DEPLOYMENT_TARGET'
+ if Options.options.macosx_version != '':
+ min_version = Options.options.macosx_version
+
+ # WebKit only supports 10.4+, but ppc systems often set this to earlier systems
+ if not min_version:
+ min_version = commands.getoutput('sw_vers -productVersion')[:4]
+ if min_version in ['10.1', '10.2', '10.3']:
+ min_version = '10.4'
+
+ sdk_version = min_version
+ if min_version == "10.4":
+ sdk_version += "u"
+ conf.env.append_value('LIB_WKINTERFACE', ['WebKitSystemInterfaceTiger'])
+ else:
+ # NOTE: There is a WebKitSystemInterfaceSnowLeopard, but when we use that
+ # on 10.6, we get a strange missing symbol error, and this library seems to
+ # work fine for wx's purposes.
+ conf.env.append_value('LIB_WKINTERFACE', ['WebKitSystemInterfaceLeopard'])
+
+ # match WebKit Mac's default here unless we're building on platforms that won't support 64-bit.
+ global arch
+ is_cocoa = "__WXOSX_COCOA__" in conf.env["CXXDEFINES_WX"]
+ if min_version == "10.4" or not is_cocoa:
+ arch = "i386"
+
+ sdkroot = '/Developer/SDKs/MacOSX%s.sdk' % sdk_version
+ sdkflags = ['-arch', arch, '-isysroot', sdkroot]
+
+ conf.env.append_value('CPPFLAGS', sdkflags)
+ conf.env.append_value('LINKFLAGS', sdkflags)
+
+ conf.env.append_value('LINKFLAGS', ['-framework', 'Security'])
+
+ conf.env.append_value('CPPPATH_SQLITE3', [os.path.join(wklibs_dir, 'WebCoreSQLite3')])
+ conf.env.append_value('LIB_SQLITE3', ['WebCoreSQLite3'])
+
+ # NOTE: The order here is important, because python sets the MACOSX_DEPLOYMENT_TARGET to
+ # 10.3 even on intel. So we must first set the SDK and arch flags, then load Python's config,
+ # and finally override the value Python set for MACOSX_DEPLOYMENT_TARGET
+ if Options.options.wxpython:
+ conf.check_tool('python')
+ conf.check_python_headers()
+
+ if sys.platform.startswith('darwin'):
+ os.environ[mac_target] = conf.env[mac_target] = min_version
+
+ conf.env.append_value('CXXDEFINES', feature_defines)
+ if config == 'Release':
+ conf.env.append_value('CPPDEFINES', 'NDEBUG')
+
+ if building_on_win32:
+ conf.env.append_value('CPPPATH', [
+ os.path.join(jscore_dir, 'os-win32'),
+ os.path.join(msvclibs_dir, 'include'),
+ os.path.join(msvclibs_dir, 'include', 'pthreads'),
+ os.path.join(msvclibs_dir, 'lib'),
+ ])
+
+ conf.env.append_value('LIB', ['libpng', 'libjpeg', 'pthreadVC2'])
+ # common win libs
+ conf.env.append_value('LIB', [
+ 'kernel32', 'user32', 'gdi32', 'comdlg32', 'winspool', 'winmm',
+ 'shell32', 'shlwapi', 'comctl32', 'ole32', 'oleaut32', 'uuid', 'advapi32',
+ 'wsock32', 'gdiplus', 'usp10', 'version'])
+
+ conf.env['LIB_ICU'] = ['icudt', 'icule', 'iculx', 'icuuc', 'icuin', 'icuio', 'icutu']
+
+ #curl
+ conf.env['LIB_CURL'] = ['libcurl']
+
+ #sqlite3
+ conf.env['CPPPATH_SQLITE3'] = [os.path.join(msvclibs_dir, 'include', 'SQLite')]
+ conf.env['LIB_SQLITE3'] = ['sqlite3']
+
+ #libxml2
+ conf.env['LIB_XML'] = ['libxml2']
+
+ #libxslt
+ conf.env['LIB_XSLT'] = ['libxslt']
+ else:
+ if build_port == 'wx':
+ port_uses['wx'].append('PTHREADS')
+ conf.env.append_value('LIB', ['jpeg', 'png', 'pthread'])
+ conf.env.append_value('LIBPATH', os.path.join(wklibs_dir, 'unix', 'lib'))
+ conf.env.append_value('CPPPATH', os.path.join(wklibs_dir, 'unix', 'include'))
+ conf.env.append_value('CXXFLAGS', ['-fPIC', '-DPIC'])
+
+ conf.check_cfg(msg='Checking for libxslt', path='xslt-config', args='--cflags --libs', package='', uselib_store='XSLT', mandatory=True)
+ conf.check_cfg(path='xml2-config', args='--cflags --libs', package='', uselib_store='XML', mandatory=True)
+ if sys.platform.startswith('darwin') and min_version and min_version == '10.4':
+ conf.check_cfg(path=os.path.join(wklibs_dir, 'unix', 'bin', 'curl-config'), args='--cflags --libs', package='', uselib_store='CURL', mandatory=True)
+ else:
+ conf.check_cfg(path='curl-config', args='--cflags --libs', package='', uselib_store='CURL', mandatory=True)
+
+ if not sys.platform.startswith('darwin'):
+ conf.check_cfg(package='cairo', args='--cflags --libs', uselib_store='WX', mandatory=True)
+ conf.check_cfg(package='pango', args='--cflags --libs', uselib_store='WX', mandatory=True)
+ conf.check_cfg(package='gtk+-2.0', args='--cflags --libs', uselib_store='WX', mandatory=True)
+ conf.check_cfg(package='sqlite3', args='--cflags --libs', uselib_store='SQLITE3', mandatory=True)
+ conf.check_cfg(path='icu-config', args='--cflags --ldflags', package='', uselib_store='ICU', mandatory=True)
+
+ if build_port in port_uses:
+ for use in port_uses[build_port]:
+ conf.env.append_value('CXXDEFINES', ['WTF_USE_%s' % use])
diff --git a/Tools/waf/build/waf_extensions.py b/Tools/waf/build/waf_extensions.py
new file mode 100644
index 0000000..e8c35f9
--- /dev/null
+++ b/Tools/waf/build/waf_extensions.py
@@ -0,0 +1,102 @@
+# Copyright (C) 2009 Kevin Ollivier All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# This module is for code where we override waf's default behavior or extend waf
+
+import os
+import subprocess
+import sys
+
+import Utils
+
+
+# version of exec_command that handles Windows command lines longer than 32000 chars
+def exec_command(s, **kw):
+ filename = ''
+ if sys.platform.startswith('win') and len(' '.join(s)) > 32000:
+ import tempfile
+ (fd, filename) = tempfile.mkstemp()
+ t = []
+ for i in s:
+ if i.find(" ") != -1:
+ i = '"%s"' % i
+ t.append(i)
+
+ t1 = t[1:]
+ # Fix for LNK1170 error
+ filename_str = '@' + filename
+ filename2_str = None
+ if len(' '.join(s)) > 131070:
+ t2 = t[len(t) / 2:]
+ t1 = t[1:len(t) / 2]
+ (fd2, filename2) = tempfile.mkstemp()
+ os.write(fd2, ' '.join(t2))
+ os.close(fd2)
+ filename2_str = '@' + filename2
+ os.write(fd, ' '.join(t1))
+ os.close(fd)
+
+ s = [s[0]]
+ s.append(filename_str)
+ if filename2_str:
+ s.append(filename2_str)
+
+ if 'log' in kw:
+ kw['stdout'] = kw['stderr'] = kw['log']
+ del(kw['log'])
+ kw['shell'] = isinstance(s, str)
+
+ def cleanup():
+ try:
+ if os.path.exists(filename):
+ os.remove(filename)
+ except:
+ pass
+
+ try:
+ proc = subprocess.Popen(s, **kw)
+ result = proc.wait()
+ cleanup()
+ return result
+
+ except OSError:
+ cleanup()
+ raise
+
+Utils.exec_command = exec_command
+
+# Better performing h_file to keep hashing from consuming lots of time
+import stat
+
+
+def h_file(filename):
+ st = os.stat(filename)
+ if stat.S_ISDIR(st[stat.ST_MODE]):
+ raise IOError('not a file')
+ m = Utils.md5()
+ m.update(str(st.st_mtime))
+ m.update(str(st.st_size))
+ m.update(filename)
+ return m.digest()
+
+Utils.h_file = h_file
diff --git a/Tools/waf/build/wxpresets.py b/Tools/waf/build/wxpresets.py
new file mode 100644
index 0000000..f8a49c3
--- /dev/null
+++ b/Tools/waf/build/wxpresets.py
@@ -0,0 +1,127 @@
+# Copyright (C) 2009 Kevin Ollivier All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Library for functions to determine wx settings based on configuration
+
+import os
+import re
+
+import Options
+
+
+def parse_build_cfg(filename):
+ cfg_file = open(filename, 'r')
+ cfg = {}
+ for cfg_line in cfg_file.readlines():
+ key = None
+ value = None
+ parts = cfg_line.split('=')
+ if len(parts) >= 1:
+ key = parts[0].strip()
+
+ if len(parts) >= 2:
+ value = parts[1].strip()
+ if value.isdigit():
+ value = int(value)
+
+ if key:
+ cfg[key] = value
+
+ return cfg
+
+
+def get_wx_version(wx_root):
+ versionText = open(os.path.join(wx_root, "include", "wx", "version.h"), "r").read()
+
+ majorVersion = re.search("#define\swxMAJOR_VERSION\s+(\d+)", versionText).group(1)
+ minorVersion = re.search("#define\swxMINOR_VERSION\s+(\d+)", versionText).group(1)
+ releaseVersion = re.search("#define\swxRELEASE_NUMBER\s+(\d+)", versionText).group(1)
+
+ release = [majorVersion, minorVersion]
+ if int(minorVersion) % 2 == 1:
+ release.append(releaseVersion)
+ return release
+
+
+def get_wxmsw_settings(wx_root, shared=False, unicode=False, debug=False, wxPython=False):
+ if not os.path.exists(wx_root):
+ print "Directory %s does not exist." % wx_root
+ sys.exit(1)
+
+ defines = ['__WXMSW__']
+ includes = [os.path.join(wx_root, 'include')]
+ cxxflags = []
+ libs = []
+ libpaths = []
+
+ libdir = os.path.join(wx_root, 'lib')
+ ext = ''
+ postfix = 'vc'
+
+ version_str_nodot = ''.join(get_wx_version(wx_root)[0:2])
+
+ if shared:
+ defines.append('WXUSINGDLL')
+ libdir = os.path.join(libdir, Options.options.wx_compiler_prefix + '_dll')
+ else:
+ libdir = os.path.join(libdir, Options.options.wx_compiler_prefix + '_lib')
+
+ if unicode:
+ defines.append('_UNICODE')
+ ext += 'u'
+
+ depext = ''
+ if wxPython and not version_str_nodot.startswith('29'):
+ ext += 'h'
+ depext += 'h'
+ elif debug:
+ ext += 'd'
+ depext += 'd'
+
+ configdir = os.path.join(libdir, 'msw' + ext)
+
+ monolithic = False
+ cfg_file = os.path.join(configdir, 'build.cfg')
+ if os.path.exists(cfg_file):
+ cfg = parse_build_cfg(cfg_file)
+ if "MONOLITHIC" in cfg:
+ monolithic = cfg["MONOLITHIC"]
+ libpaths.append(libdir)
+ includes.append(configdir)
+
+ def get_wxlib_name(name):
+ if name == 'base':
+ return 'wxbase%s%s' % (version_str_nodot, ext)
+
+ return "wxmsw%s%s_%s" % (version_str_nodot, ext, name)
+
+ libs.extend(['wxzlib' + depext, 'wxjpeg' + depext, 'wxpng' + depext, 'wxexpat' + depext])
+ if monolithic:
+ libs.extend(["wxmsw%s%s" % (version_str_nodot, ext)])
+ else:
+ libs.extend([get_wxlib_name('base'), get_wxlib_name('core')])
+
+ if wxPython or debug:
+ defines.append('__WXDEBUG__')
+
+ return (defines, includes, libs, libpaths)
diff --git a/wscript b/wscript
index 8f6c227..e508cbe 100644
--- a/wscript
+++ b/wscript
@@ -29,98 +29,11 @@
from settings import *
-if build_port == "wx":
- webcore_dirs.extend(['Source/WebKit/wx', 'Source/WebKit/wx/WebKitSupport'])
-
-wk_includes = ['.',
- os.path.join(wk_root, 'Source', 'JavaScriptCore'),
- os.path.join(wk_root, 'Source', 'JavaScriptCore', 'wtf', 'text'),
- os.path.join(wk_root, 'Source', 'WebCore'),
- os.path.join(wk_root, 'Source', 'WebCore', 'DerivedSources'),
- os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'image-decoders'),
- os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'win'),
- os.path.join(wk_root, 'Source', 'WebCore', 'workers'),
- os.path.join(output_dir),
- ]
-
-if build_port == "wx":
- wk_includes.append(os.path.join(wk_root, 'Source', 'WebKit', 'wx'))
- wk_includes.append(os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'wx', 'wxcode'))
-
-if sys.platform.startswith("win"):
- wk_includes.append(os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'win'))
- wk_includes.append(os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'graphics', 'win'))
-
-windows_deps = [
- 'lib/pthreadVC2.dll',
- 'bin/icuuc40.dll', 'bin/icudt40.dll', 'bin/icuin40.dll',
- 'bin/libcurl.dll', 'bin/libeay32.dll', 'bin/ssleay32.dll', 'bin/zlib1.dll',
- 'lib/sqlite3.dll', 'bin/libxml2.dll', 'bin/libxslt.dll', 'bin/iconv.dll',
- ]
-
-webcore_sources = {}
-
-if build_port == "wx":
- webcore_sources['wx'] = [
- 'Source/WebCore/bindings/cpp/WebDOMEventTarget.cpp',
- 'Source/WebCore/platform/KillRingNone.cpp',
- 'Source/WebCore/platform/text/LocalizedNumberNone.cpp'
- ]
-
- if building_on_win32:
- # make sure platform/wx comes after this so we get the right
- # FontPlatformData.h
- webcore_dirs.extend(['Source/WebCore/platform/wx/wxcode/win', 'Source/WebCore/plugins/win'])
- webcore_sources['wx-win'] = [
- 'Source/WebCore/platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp',
- 'Source/WebCore/platform/graphics/win/TransformationMatrixWin.cpp',
- 'Source/WebCore/platform/ScrollAnimatorWin.cpp',
- # wxTimer on Windows has a bug that causes it to eat crashes in callbacks
- # so we need to use the Win port's implementation until the wx bug fix is
- # widely available (it was fixed in 2.8.10).
- 'Source/WebCore/platform/win/SharedTimerWin.cpp',
- 'Source/WebCore/platform/win/WebCoreInstanceHandle.cpp',
- # Use the Windows plugin architecture
- #'Source/WebCore/plugins/win/PluginDataWin.cpp',
- 'Source/WebCore/plugins/win/PluginDatabaseWin.cpp',
- 'Source/WebCore/plugins/win/PluginMessageThrottlerWin.cpp',
- 'Source/WebCore/plugins/win/PluginPackageWin.cpp',
- 'Source/WebCore/plugins/win/PluginViewWin.cpp',
- ]
- elif sys.platform.startswith('darwin'):
- webcore_dirs.append('Source/WebCore/plugins/mac')
- webcore_dirs.append('Source/WebCore/platform/wx/wxcode/mac/carbon')
- webcore_dirs.append('Source/WebCore/platform/mac')
- webcore_dirs.append('Source/WebCore/platform/text/mac')
- webcore_sources['wx-mac'] = [
- 'Source/WebCore/platform/mac/PurgeableBufferMac.cpp',
- 'Source/WebCore/platform/mac/WebCoreNSStringExtras.mm',
- 'Source/WebCore/platform/mac/WebCoreSystemInterface.mm',
- 'Source/WebCore/platform/graphics/cg/FloatSizeCG.cpp',
- 'Source/WebCore/platform/graphics/mac/ComplexTextController.cpp',
- 'Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp',
- 'Source/WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp',
- 'Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp',
- 'Source/WebCore/platform/graphics/mac/SimpleFontDataATSUI.mm',
- 'Source/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp',
- 'Source/WebCore/platform/graphics/wx/FontPlatformDataWxMac.mm',
- 'Source/WebCore/platform/text/mac/ShapeArabic.c',
- 'Source/WebCore/platform/wx/wxcode/mac/carbon/fontprops.mm',
- 'Source/WebCore/plugins/mac/PluginPackageMac.cpp',
- 'Source/WebCore/plugins/mac/PluginViewMac.mm'
- ]
- else:
- webcore_sources['wx-gtk'] = [
- 'Source/WebCore/plugins/PluginViewNone.cpp',
- 'Source/WebCore/plugins/PluginPackageNone.cpp'
- ]
- webcore_dirs.append('Source/WebCore/platform/wx/wxcode/gtk')
-
import TaskGen
from TaskGen import taskgen, feature, after
import Task, ccroot
-def generate_webcore_derived_sources():
+def generate_webcore_derived_sources(conf):
# build the derived sources
derived_sources_dir = os.path.join(webcore_dir, 'DerivedSources')
wc_dir = webcore_dir
@@ -136,12 +49,12 @@
if building_on_win32:
oldpath = os.environ["PATH"]
os.environ["PATH"] = "/usr/bin" + os.pathsep + os.environ["PATH"]
- 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)))
+ os.system('make -f %s/DerivedSources.make WebCore=%s SOURCE_ROOT=%s all FEATURE_DEFINES="%s"' % (wc_dir, wc_dir, wc_dir, conf.env["FEATURE_DEFINES"]))
if building_on_win32:
os.environ["PATH"] = oldpath
os.chdir(olddir)
-def generate_jscore_derived_sources():
+def generate_jscore_derived_sources(conf):
# build the derived sources
js_dir = jscore_dir
if building_on_win32:
@@ -157,7 +70,7 @@
if building_on_win32:
oldpath = os.environ["PATH"]
os.environ["PATH"] = "/usr/bin" + os.pathsep + os.environ["PATH"]
- 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))
+ command = 'make -f %s/DerivedSources.make JavaScriptCore=%s BUILT_PRODUCTS_DIR=%s all FEATURE_DEFINES="%s"' % (js_dir, js_dir, js_dir, conf.env["FEATURE_DEFINES"])
os.system(command)
if building_on_win32:
os.environ["PATH"] = oldpath
@@ -168,9 +81,9 @@
def configure(conf):
common_configure(conf)
- generate_jscore_derived_sources()
- generate_webcore_derived_sources()
- if build_port == "wx" and sys.platform.startswith('win'):
+ generate_jscore_derived_sources(conf)
+ generate_webcore_derived_sources(conf)
+ if Options.options.port == "wx" and sys.platform.startswith('win'):
graphics_dir = os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'graphics')
# HACK ALERT: MSVC automatically adds the source file's directory as the first entry in the
# path. Unfortunately, that means when compiling these files we will end up including
@@ -188,14 +101,104 @@
for api_file in glob.glob(os.path.join(jscore_dir, 'API/*.h')):
shutil.copy(api_file, os.path.join(jscore_out_dir, os.path.basename(api_file)))
- if build_port == "wx" and Options.options.wxpython:
+ if Options.options.port == "wx" and Options.options.wxpython:
common_configure(conf)
conf.check_tool('swig', tooldir='Source/WebKit/wx/bindings/python')
conf.check_swig_version('1.3.29')
-def build(bld):
+def build(bld):
+
+ webcore_dirs = list(webcore_dirs_common)
+
+ if Options.options.port == "wx":
+ webcore_dirs.extend(['Source/WebKit/wx', 'Source/WebKit/wx/WebKitSupport'])
+
+ wk_includes = ['.',
+ os.path.join(wk_root, 'Source', 'JavaScriptCore'),
+ os.path.join(wk_root, 'Source', 'JavaScriptCore', 'wtf', 'text'),
+ os.path.join(wk_root, 'Source', 'WebCore'),
+ os.path.join(wk_root, 'Source', 'WebCore', 'DerivedSources'),
+ os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'image-decoders'),
+ os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'win'),
+ os.path.join(wk_root, 'Source', 'WebCore', 'workers'),
+ os.path.join(output_dir),
+ ]
+
+ if Options.options.port == "wx":
+ wk_includes.append(os.path.join(wk_root, 'Source', 'WebKit', 'wx'))
+ wk_includes.append(os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'wx', 'wxcode'))
+
+ if sys.platform.startswith("win"):
+ wk_includes.append(os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'win'))
+ wk_includes.append(os.path.join(wk_root, 'Source', 'WebCore', 'platform', 'graphics', 'win'))
+
+ windows_deps = [
+ 'lib/pthreadVC2.dll',
+ 'bin/icuuc40.dll', 'bin/icudt40.dll', 'bin/icuin40.dll',
+ 'bin/libcurl.dll', 'bin/libeay32.dll', 'bin/ssleay32.dll', 'bin/zlib1.dll',
+ 'lib/sqlite3.dll', 'bin/libxml2.dll', 'bin/libxslt.dll', 'bin/iconv.dll',
+ ]
+
+ webcore_sources = {}
+
+ if Options.options.port == "wx":
+ webcore_sources['wx'] = [
+ 'Source/WebCore/bindings/cpp/WebDOMEventTarget.cpp',
+ 'Source/WebCore/platform/KillRingNone.cpp',
+ 'Source/WebCore/platform/text/LocalizedNumberNone.cpp'
+ ]
+
+ if building_on_win32:
+ # make sure platform/wx comes after this so we get the right
+ # FontPlatformData.h
+ webcore_dirs.extend(['Source/WebCore/platform/wx/wxcode/win', 'Source/WebCore/plugins/win'])
+ webcore_sources['wx-win'] = [
+ 'Source/WebCore/platform/graphics/win/GlyphPageTreeNodeCairoWin.cpp',
+ 'Source/WebCore/platform/graphics/win/TransformationMatrixWin.cpp',
+ 'Source/WebCore/platform/ScrollAnimatorWin.cpp',
+ # wxTimer on Windows has a bug that causes it to eat crashes in callbacks
+ # so we need to use the Win port's implementation until the wx bug fix is
+ # widely available (it was fixed in 2.8.10).
+ 'Source/WebCore/platform/win/SharedTimerWin.cpp',
+ 'Source/WebCore/platform/win/WebCoreInstanceHandle.cpp',
+ # Use the Windows plugin architecture
+ #'Source/WebCore/plugins/win/PluginDataWin.cpp',
+ 'Source/WebCore/plugins/win/PluginDatabaseWin.cpp',
+ 'Source/WebCore/plugins/win/PluginMessageThrottlerWin.cpp',
+ 'Source/WebCore/plugins/win/PluginPackageWin.cpp',
+ 'Source/WebCore/plugins/win/PluginViewWin.cpp',
+ ]
+ elif sys.platform.startswith('darwin'):
+ webcore_dirs.append('Source/WebCore/plugins/mac')
+ webcore_dirs.append('Source/WebCore/platform/wx/wxcode/mac/carbon')
+ webcore_dirs.append('Source/WebCore/platform/mac')
+ webcore_dirs.append('Source/WebCore/platform/text/mac')
+ webcore_sources['wx-mac'] = [
+ 'Source/WebCore/platform/mac/PurgeableBufferMac.cpp',
+ 'Source/WebCore/platform/mac/WebCoreNSStringExtras.mm',
+ 'Source/WebCore/platform/mac/WebCoreSystemInterface.mm',
+ 'Source/WebCore/platform/graphics/cg/FloatSizeCG.cpp',
+ 'Source/WebCore/platform/graphics/mac/ComplexTextController.cpp',
+ 'Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp',
+ 'Source/WebCore/platform/graphics/mac/ComplexTextControllerATSUI.cpp',
+ 'Source/WebCore/platform/graphics/mac/GlyphPageTreeNodeMac.cpp',
+ 'Source/WebCore/platform/graphics/mac/SimpleFontDataATSUI.mm',
+ 'Source/WebCore/platform/graphics/mac/SimpleFontDataCoreText.cpp',
+ 'Source/WebCore/platform/graphics/wx/FontPlatformDataWxMac.mm',
+ 'Source/WebCore/platform/text/mac/ShapeArabic.c',
+ 'Source/WebCore/platform/wx/wxcode/mac/carbon/fontprops.mm',
+ 'Source/WebCore/plugins/mac/PluginPackageMac.cpp',
+ 'Source/WebCore/plugins/mac/PluginViewMac.mm'
+ ]
+ else:
+ webcore_sources['wx-gtk'] = [
+ 'Source/WebCore/plugins/PluginViewNone.cpp',
+ 'Source/WebCore/plugins/PluginPackageNone.cpp'
+ ]
+ webcore_dirs.append('Source/WebCore/platform/wx/wxcode/gtk')
+
+
import TaskGen
- global wk_includes
# FIXME: Does this need to be Source/JavaScriptCore?
bld.add_subdirs('Source/JavaScriptCore')
@@ -204,11 +207,11 @@
TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cxx']
TaskGen.task_gen.mappings['.m'] = TaskGen.task_gen.mappings['.cxx']
- features = [build_port]
+ features = [Options.options.port.lower()]
exclude_patterns = ['*AllInOne.cpp', '*Brew.cpp', '*CFNet.cpp', '*Chromium*.cpp',
'*Efl.cpp', '*Gtk.cpp', '*Haiku.cpp', '*Mac.cpp', '*None.cpp', '*Qt.cpp', '*Safari.cpp',
'test*bindings.*', '*WinCE.cpp', "WebDOMCanvas*.cpp", "WebDOMSVG*.cpp"]
- if build_port == 'wx':
+ if Options.options.port == 'wx':
features.append('curl')
exclude_patterns.append('*Win.cpp')
@@ -261,7 +264,7 @@
excludes = []
- if build_port == 'wx':
+ if Options.options.port == 'wx':
excludes = get_excludes(webcore_dir, exclude_patterns)
excludes.extend(['UserStyleSheetLoader.cpp', 'RenderMediaControls.cpp'])
@@ -343,5 +346,5 @@
bld.add_group()
- if build_port == "wx":
+ if Options.options.port == "wx":
bld.add_subdirs(['Tools/DumpRenderTree', 'Tools/wx/browser', 'Source/WebKit/wx/bindings/python'])