diff options
Diffstat (limited to 'WebKitTools/wx/build-wxwebkit')
-rwxr-xr-x | WebKitTools/wx/build-wxwebkit | 407 |
1 files changed, 407 insertions, 0 deletions
diff --git a/WebKitTools/wx/build-wxwebkit b/WebKitTools/wx/build-wxwebkit new file mode 100755 index 0000000..a4db5f2 --- /dev/null +++ b/WebKitTools/wx/build-wxwebkit @@ -0,0 +1,407 @@ +#!/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 environment + +scriptDir="$(cd $(dirname $0);pwd)" +WK_ROOT=$scriptDir/../.. +WK_ROOTDIR="$WK_ROOT" + +cd $scriptDir + +if [ -z $WEBKITOUTPUTDIR ]; then + WEBKITOUTPUTDIR=`cd $WK_ROOT/WebKitTools/Scripts; perl -e "use webkitdirs; print productDir()"` +fi + +WKWINLIBS=WebKitLibraries/win +WINDEPS=" $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 $WEBKITOUTPUTDIR + +if [ $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." + fi + +else + 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 + fi +fi + +# after all that, make sure that BAKEFILE_PATHS was either set +# previously, or by the code above +if [ -z $BAKEFILE_PATHS ]; then + echo "Error, you must set BAKEFILE_PATHS to the directory containing wxpresets." + exit 1 +fi + +#---------------------------------------------------------------------- +# process command line args +build_type_set=0 + +do_bake=0 +do_prep=0 +do_extras=0 +do_build=0 +do_clean=0 +do_install=0 +use_wxgc=0 +debug=1 +wxdebug=0 +wxpython=0 +make_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"' ;; + esac +done + + +#---------------------------------------------------------------------- + +# 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=1 +fi + +if [ -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 + +fi + +function 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 exists +function 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=$PWD + +if [ $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 FEATURE_DEFINES="ENABLE_DATABASE" + if [ $? != 0 ]; then + exit $? + fi + fi +fi + + +if [ $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 "" + fi +fi + +if [ $do_clean == 1 ]; then + cd $WK_ROOT/WebKit/wx + bakefile_gen --clean +fi + +cd $olddir |