📄 build-wxwebkit
字号:
#!/bin/bash# Copyright (C) 2007 Robin Dunn, 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. ## Driver for the wxWebKit build process.set -o errexit#set -o xtrace#----------------------------------------------------------------------# Set up the environmentscriptDir="$(cd $(dirname $0);pwd)"WK_ROOT=$scriptDir/../..WK_ROOTDIR="$WK_ROOT"cd $scriptDirif [ -z $WEBKITOUTPUTDIR ]; then WEBKITOUTPUTDIR=`cd $WK_ROOT/WebKitTools/Scripts; perl -e "use webkitdirs; print productDir()"`fiWKWINLIBS=WebKitLibraries/winWINDEPS=" $WKWINLIBS/lib/pthreadVC2.dll"WINDEPS="$WINDEPS $WKWINLIBS/bin/icuuc34.dll $WKWINLIBS/bin/icudt34.dll $WKWINLIBS/bin/icuin34.dll"WINDEPS="$WINDEPS $WKWINLIBS/bin/libcurl.dll $WKWINLIBS/bin/libeay32.dll $WKWINLIBS/bin/ssleay32.dll $WKWINLIBS/bin/zlib1.dll"WINDEPS="$WINDEPS $WKWINLIBS/lib/sqlite3.dll"WINDEPS="$WINDEPS $WKWINLIBS/bin/libxml2.dll $WKWINLIBS/bin/libxslt.dll" WINDEPS="$WINDEPS $WKWINLIBS/bin/iconv.dll" # TODO: check that we are running from the root of the source tree...# cygpath will bork if the dir doesn't exist...mkdir -p $WEBKITOUTPUTDIRif [ $OSTYPE == cygwin ]; then EXE=.exe WK_ROOTDIR=`cygpath -d $WK_ROOT` WEBKITOUTPUTDIR=`cygpath -d $WEBKITOUTPUTDIR` export WEBKITOUTPUTDIR if [ -z $WXWIN ]; then echo "Error, you must set WXWIN to your wxWidgets root directory." exit 1 fi if [ -z $WX_PREFIX ]; then WX_PREFIX=$WXWIN fi if [ -z $BAKEFILE_PATHS ]; then export BAKEFILE_PATHS=$WXWIN/build/bakefiles/wxpresets fi LINKER=`which link` if [ "$LINKER" = "/usr/bin/link" ]; then echo "WARNING: wxWebKit builds using MSVC on Windows, but it looks like" echo "you have the GCC linker on your path. If /usr/bin/link does NOT point" echo "to the MSVC linker, you need to move it or change your path to pick up" echo "Microsoft's link.exe program first." fielse export WEBKITOUTPUTDIR WX_PREFIX=`wx-config --prefix` if [ ! -d "$WX_PREFIX" ]; then echo "ERROR: Cannot find your wxWidgets installation." echo "Make sure wx-config is on your PATH and points to a valid wxWidgets installation." exit 1 fi CONFIG=`wx-config --selected-config` if [ "${CONFIG:0:4}" != "gtk2" -a "${CONFIG:0:3}" != "mac" ]; then echo "WARNING: This configuration '$CONFIG' is not currently supported by wxWebKit. Please use the win, mac, or gtk2 port depending on your platform." fi if [ ! -d "$WX_PREFIX/share/bakefile" ]; then echo "ERROR: wxWidgets installation does not have wxpresets." echo "wx-config is pointing to an installation that does not have Bakefile presets installed. Run `wx-config --version` to ensure your wxWidgets is of version 2.8+." exit 1 fi if [ -z $BAKEFILE_PATHS ]; then export BAKEFILE_PATHS=$WX_PREFIX/share/bakefile fifi# after all that, make sure that BAKEFILE_PATHS was either set# previously, or by the code aboveif [ -z $BAKEFILE_PATHS ]; then echo "Error, you must set BAKEFILE_PATHS to the directory containing wxpresets." exit 1fi#----------------------------------------------------------------------# process command line argsbuild_type_set=0do_bake=0do_prep=0do_extras=0do_build=0do_clean=0do_install=0use_wxgc=0debug=1wxdebug=0wxpython=0make_args=''other_args=''for flag in $*; do case $flag in bake) do_bake=1 ;; prep) do_prep=1 ;; build) do_build=1 ;; all) do_extras=1; do_bake=1; do_prep=1; do_build=1 ;; clean) other_args=clean; do_clean=1 ;; wxgc) use_wxgc=1 ;; wxdebug) wxdebug=1 ;; wxpython) wxpython=1 ;; wxpython-install) wxpython_install=1 ;; *) export $flag ;; #other_args='$other_args "$flag"' ;; esacdone#----------------------------------------------------------------------# if no arguments were passed, do a full build.if [ $do_bake == 0 -a $do_prep == 0 -a $do_build == 0 -a $do_clean == 0 ]; then do_bake=1; do_prep=1; do_build=1fiif [ -f $WK_ROOT/WebKitBuild/Configuration ]; then BUILD_TYPE=`cat $WK_ROOT/WebKitBuild/Configuration` echo "Configuration is: $BUILD_TYPE" if [ $BUILD_TYPE == "Release" ]; then debug=0 fi if [ $BUILD_TYPE == "Debug" ]; then debug=1 fi fifunction do_make { dir=$1 cxxflags=$2 olddir=$PWD shift shift # NOTE: If we try to do make clean after the Bakefiles were cleaned out, or before they were # first generated, we will get errors about missing files, so we need to check that the # makefile exists before running it. if [ $OSTYPE == cygwin ]; then cd $dir if [ -f makefile.vc ]; then nmake -f makefile.vc CXXFLAGS="$cxxflags" $@ fi cd $olddir else if [ -f $dir/GNUmakefile ]; then make -C $dir -f GNUmakefile $MAKE_ARGS CXXFLAGS="$cxxflags" $@ fi fi if [ $? != 0 ]; then exit $? fi}# output the first parameter that is a dir and existsfunction find_existing_dir { for arg in $*; do tester=$arg if [ $OSTYPE == cygwin ]; then tester=`cygpath -u $arg` fi if [ -d $tester ]; then echo $arg return fi done}olddir=$PWDif [ $do_clean != 1 ]; then mkdir -p $WEBKITOUTPUTDIR/build if [ $do_bake == 1 ]; then # bakefile stuff cd $WK_ROOT/WebKit/wx bakefile_gen # we need to do this because Bakefile doesn't know which # platform it's running on with GNU format, and so it defaults # to the standard Unix file endings and linker args. if [ "${OSTYPE:0:6}" = "darwin" ]; then sed "s/libwebcore-wx.so/libwebcore-wx.dylib/" < $WK_ROOT/WebCore/GNUmakefile > temp mv temp $WK_ROOT/WebCore/GNUmakefile sed "s/\-shared/\-dynamiclib/" < $WK_ROOT/WebCore/GNUmakefile > temp mv temp $WK_ROOT/WebCore/GNUmakefile sed "s/libwxwebkit.so/libwxwebkit.dylib/" < $WK_ROOT/WebKit/wx/GNUmakefile > temp mv temp $WK_ROOT/WebKit/wx/GNUmakefile sed "s/\-shared/\-dynamiclib/" < $WK_ROOT/WebKit/wx/GNUmakefile > temp mv temp $WK_ROOT/WebKit/wx/GNUmakefile fi fi if [ $do_prep == 1 ]; then # Other preparation steps # since the buildbot will wipe the build tree clean sometimes, we need to reinstall # the dependencies if they aren't installed. if [ "${OSTYPE:0:6}" == "darwin" ]; then $WK_ROOT/WebKitTools/wx/install-unix-extras fi cd $WK_ROOT/JavaScriptCore ./make-generated-sources.sh if [ $? != 0 ]; then exit $? fi cd $WK_ROOT/WebCore ./make-generated-sources.sh platform/wx/wx-encodings.txt if [ $? != 0 ]; then exit $? fi fifiif [ $do_build == 1 -o $do_clean == 1 ]; then # Build steps WXGC_DEFINE="" if [ $use_wxgc == 1 ]; then WXGC_DEFINE="-DWTF_USE_WXGC=1" fi WX_EXT= if [ "${OSTYPE:0:6}" == "cygwin" -a $wxdebug == 1 ]; then WX_EXT=d fi if [ "${OSTYPE:0:6}" == "cygwin" -a $wxpython == 1 ]; then other_args=WX_PYTHON=1 WX_EXT=h wxdebug=1 fi if [ "${OSTYPE:0:6}" == "cygwin" ]; then PLATFORM_OS="win" elif [ "${OSTYPE:0:6}" == "darwin" ]; then PLATFORM_OS="mac" else PLATFORM_OS="linux" use_wxgc=1 # Linux requires us to use wxgc to get proper drawing. fi WINDEPS="$WINDEPS $WXWIN/lib/vc_dll/wxmsw28u${WX_EXT}_core_vc.dll $WXWIN/lib/vc_dll/wxbase28u${WX_EXT}_vc.dll" do_make $WK_ROOT/JavaScriptCore "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug DEBUG=$debug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args mkdir -p $WEBKITOUTPUTDIR/JavaScriptCore cp -p $WK_ROOT/JavaScriptCore/API/*.h $WEBKITOUTPUTDIR/JavaScriptCore/ do_make $WK_ROOT/WebCore "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR DEBUG=$debug PLATFORM_OS=$PLATFORM_OS $other_args do_make $WK_ROOT/WebKit/wx "-DBUILDING_WX__=1 -DWXMAKINGDLL_WEBKIT=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug DEBUG=$debug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args do_make $WK_ROOT/WebKitTools/wx/browser "-DBUILDING_WX__=1 -DWXUSINGDLL_WEBKIT=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug DEBUG=$debug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args if [ $do_clean == 1 ]; then rm -rf $WK_ROOT/JavaScriptCore/DerivedSources rm -rf $WK_ROOT/WebCore/DerivedSources rm -rf $WK_ROOT/WebCore/include/JavaScriptCore fi if [ $do_build == 1 ]; then if [ "${OSTYPE:0:6}" = "darwin" ]; then cd $WEBKITOUTPUTDIR mkdir -p wxBrowser.app/Contents/MacOS mkdir -p wxBrowser.app/Contents/Frameworks cp wxBrowser wxBrowser.app/Contents/MacOS install_name_tool -change libwxwebkit.dylib @executable_path/../Frameworks/libwxwebkit.dylib wxBrowser.app/Contents/MacOS/wxBrowser if [ ! -f "$WEBKITOUTPUTDIR/libwxwebkit.dylib" ]; then ln -s $WEBKITOUTPUTDIR/libwxwebkit.dylib wxBrowser.app/Contents/Frameworks fi fi if [ $wxpython == 1 ]; then if [ -z $SWIG ]; then SWIG=`which swig` fi if [ ! -f "$SWIG" ]; then echo "ERROR: Cannot find SWIG. Make sure that SWIG 1.3.29 is located on your path."; exit 1; fi cd $WK_ROOT/WebKit/wx/bindings/python SWIG_FLAGS=`python -c "import wx.build.config; import string; print string.join(wx.build.config.swig_args, ' ')"` WEBKIT_INCLUDE="-I$WK_ROOT/WebKit/wx" if [ "${OSTYPE:0:6}" == "cygwin" ]; then WEBKIT_INCLUDE="-I`cygpath -d $WK_ROOT/WebKit/wx`" fi # Determine which include path to use for wxPython's *.i files # Options are: # wxPython installed on a posix system # the wxPython win32 devel tarball # a wx source tree from a tarball where wxPython is in the wx dir # a wx source tree from SVN where wxPython is a sibling of the wx dir WXPY_INCLUDE=`find_existing_dir \ $WX_PREFIX/include/wx-2.9/wx/wxPython/i_files \ $WX_PREFIX/include/wx-2.8/wx/wxPython/i_files \ $WX_PREFIX/include/wx/wxPython/i_files \ $WX_PREFIX/wxPython/src \ $WX_PREFIX/../wxPython/src` if [ -z $WXPY_INCLUDE ]; then echo "ERROR: Unable to find wxPython's *.i files" exit 1 fi # Run SWIG $SWIG $SWIG_FLAGS -I$WXPY_INCLUDE $WEBKIT_INCLUDE -o webview.cpp webview.i cp webview.py $WEBKITOUTPUTDIR/webview.py PY_INCLUDE=`python -c "import sys,distutils.sysconfig; sys.stdout.write(distutils.sysconfig.get_python_inc())"` PY_VERSION=`python -c "import sys; sys.stdout.write(str(sys.version_info[0]) + str(sys.version_info[1]))"` PY_LIBDIR=`python -c "import distutils.sysconfig; import sys; sys.stdout.write(distutils.sysconfig.PREFIX)"` if [ "${OSTYPE:0:6}" == "cygwin" ]; then PY_LIBDIR="$PY_LIBDIR\\Libs" else PY_LIBDIR="$PY_LIBDIR/lib" fi do_make $WK_ROOT/WebKit/wx/bindings/python "-DBUILDING_WX__=1 -DWXUSINGDLL=1 -DWXUSINGDLL_WEBKIT=1 -I$PY_INCLUDE -I$WX_PREFIX/wxPython/include -I$WX_PREFIX/../wxPython/include $WXGC_DEFINE" \ WX_DEBUG=$wxdebug DEBUG=$debug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS PYTHON_VERSION=$PY_VERSION PYTHON_LIBDIR=$PY_LIBDIR $other_args if [ "${OSTYPE:0:6}" == "cygwin" ]; then if [ -f $WEBKITOUTPUTDIR/_webview.pyd -a -f $WEBKITOUTPUTDIR/_webview.dll ]; then rm $WEBKITOUTPUTDIR/_webview.pyd mv $WEBKITOUTPUTDIR/_webview.dll $WEBKITOUTPUTDIR/_webview.pyd fi fi fi if [ "$OSTYPE" == "cygwin" ]; then echo "Copying necessary DLLs to run test and sample applications..." cd $WK_ROOT cp $WINDEPS `cygpath -u $WEBKITOUTPUTDIR` chmod +x `cygpath -u $WEBKITOUTPUTDIR/`*.dll if [ -e `cygpath -u $WEBKITOUTPUTDIR/_webview.dll` ]; then mv `cygpath -u $WEBKITOUTPUTDIR/_webview.dll` `cygpath -u $WEBKITOUTPUTDIR/_webview.pyd` fi fi BROWSERAPP="wxBrowser" if [ "${OSTYPE:0:6}" == "darwin" ]; then BROWSERAPP="wxBrowser.app/Contents/MacOS/wxBrowser" fi echo "" echo "" echo "--- BUILD COMPLETE ---" echo "" echo "Next steps:" echo "" echo "-- Run '$WK_ROOT/WebKitTools/Scripts/run-javascriptcore-tests --wx' to ensure JSCore tests pass." echo "" echo "-- Run $WEBKITOUTPUTDIR/$BROWSERAPP to test your wxWebKit build." echo "" echo "" fifiif [ $do_clean == 1 ]; then cd $WK_ROOT/WebKit/wx bakefile_gen --cleanficd $olddir
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -