# 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 sys 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, 'JavaScriptCore') webcore_dir = os.path.join(wk_root, 'WebCore') wklibs_dir = os.path.join(wk_root, 'WebKitLibraries') common_defines = [] common_cxxflags = [] common_includes = [] common_libs = [] common_libpaths = [] common_frameworks = [] jscore_dirs = [ 'API', 'bytecode', 'bytecompiler', 'debugger', 'DerivedSources', 'interpreter', 'jit', 'parser', 'pcre', 'profiler', 'runtime', 'wtf', 'wtf/unicode', 'wtf/unicode/icu', ] webcore_dirs = [ 'accessibility', 'bindings/js', 'bridge', 'bridge/c', 'css', 'DerivedSources', 'dom', 'dom/default', 'editing', 'history', 'html', 'inspector', 'loader', 'loader/appcache', 'loader/archive', 'loader/icon', 'page', 'page/animation', 'platform', 'platform/animation', 'platform/graphics', 'platform/graphics/transforms', 'platform/image-decoders', 'platform/image-decoders/bmp', 'platform/image-decoders/gif', 'platform/image-decoders/ico', 'platform/image-decoders/jpeg', 'platform/image-decoders/png', 'platform/image-decoders/xbm', 'platform/image-decoders/zlib', 'platform/network', 'platform/sql', 'platform/text', 'plugins', 'rendering', 'rendering/style', 'storage', 'xml' ] config_file = os.path.join(wk_root, 'WebKitBuild', 'Configuration') config = 'Debug' if os.path.exists(config_file): config = open(config_file).read() output_dir = os.path.join(wk_root, 'WebKitBuild', config) waf_configname = config.upper() build_port = "wx" building_on_win32 = sys.platform.startswith('win') if building_on_win32: if config == 'Release': waf_configname = waf_configname + ' CRT_MULTITHREADED_DLL' else: waf_configname = waf_configname + ' CRT_MULTITHREADED_DLL_DBG' create_hash_table = wk_root + "/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 = ['ENABLE_DATABASE', 'ENABLE_XSLT', 'ENABLE_JAVASCRIPT_DEBUGGER'] 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('--wxpython', action='store_true', default=False, help='Create the wxPython bindings.') def common_configure(conf): """ Configuration used by all targets, called from the target's configure() step. """ conf.check_tool('compiler_cxx') conf.check_tool('compiler_cc') conf.check_tool('python') conf.check_python_headers() if sys.platform.startswith('darwin'): conf.check_tool('osx') msvc_version = 'msvc2008' if building_on_win32: found_versions = conf.get_msvc_versions() if found_versions[0][0] == 'msvc 9.0': msvc_version = 'msvc2008' elif found_versions[0][0] == 'msvc 8.0': msvc_version = 'msvc2005' msvclibs_dir = '' if build_port == "wx": update_wx_deps(wk_root, msvc_version) msvclibs_dir = os.path.join(wklibs_dir, msvc_version, 'win') conf.env.append_value('CXXDEFINES', ['BUILDING_WX__=1', 'WTF_USE_WXGC=1']) if building_on_win32: conf.env.append_value('LIBPATH', os.path.join(msvclibs_dir, 'lib')) # wx settings wxdefines, wxincludes, wxlibs, wxlibpaths = get_wxmsw_settings(wx_root, shared=True, unicode=True, wxPython=True) conf.env['CXXDEFINES_WX'] = wxdefines conf.env['CPPPATH_WX'] = wxincludes conf.env['LIB_WX'] = wxlibs conf.env['LIBPATH_WX'] = wxlibpaths if sys.platform.startswith('darwin'): conf.env['LIB_ICU'] = ['icucore'] # Apple does not ship the ICU headers with Mac OS X, so WebKit includes a copy of 3.2 headers conf.env['CPPPATH_ICU'] = [os.path.join(jscore_dir, 'icu'), os.path.join(webcore_dir, 'icu')] conf.env.append_value('CPPPATH', wklibs_dir) conf.env.append_value('LIBPATH', wklibs_dir) #conf.env['PREFIX'] = output_dir libprefix = '' if building_on_win32: libprefix = 'lib' conf.env['LIB_JSCORE'] = [libprefix + 'jscore'] conf.env['LIB_WEBCORE'] = [libprefix + 'webcore'] conf.env['LIB_WXWEBKIT'] = ['wxwebkit'] conf.env['CXXDEFINES_WXWEBKIT'] = ['WXUSINGDLL_WEBKIT'] 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', 'comctl32', 'ole32', 'oleaut32', 'uuid', 'advapi32', 'wsock32', 'gdiplus']) 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': conf.env.append_value('LIB', ['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(path='wx-config', args='--cxxflags --libs', package='', uselib_store='WX') conf.check_cfg(path='xslt-config', args='--cflags --libs', package='', uselib_store='XSLT') conf.check_cfg(path='xml2-config', args='--cflags --libs', package='', uselib_store='XML') conf.check_cfg(path='curl-config', args='--cflags --libs', package='', uselib_store='CURL') if sys.platform.startswith('darwin'): conf.env.append_value('LIB', ['WebCoreSQLite3']) if not sys.platform.startswith('darwin'): conf.check_cfg(package='cairo', args='--cflags --libs', uselib_store='WX') conf.check_cfg(package='pango', args='--cflags --libs', uselib_store='WX') conf.check_cfg(package='gtk+-2.0', args='--cflags --libs', uselib_store='WX') conf.check_cfg(package='sqlite3', args='--cflags --libs', uselib_store='SQLITE3') conf.check_cfg(path='icu-config', args='--cflags --ldflags', package='', uselib_store='ICU')