#!/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 WINDEPS="pthreads/lib/pthreadVC2.dll icu/bin/icuuc34.dll icu/bin/icudt34.dll libcurl/*.dll sqlite3/sqlite3.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 $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 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 do_bake=0 do_prep=0 do_extras=0 do_build=0 do_clean=0 do_install=0 use_wxgc=0 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 function do_make { dir=$1 cxxflags=$2 olddir=$PWD shift shift if [ $OSTYPE == cygwin ]; then cd $dir nmake -f makefile.vc CXXFLAGS="$cxxflags" $@ cd $olddir else make -C $dir -f GNUmakefile $MAKE_ARGS CXXFLAGS="$cxxflags" $@ fi if [ $? != 0 ]; then exit $? fi } olddir=$PWD if [ $do_clean == 1 ]; then rm -rf $WK_ROOT/JavaScriptCore/DerivedSources rm -rf $WK_ROOT/WebCore/DerivedSources rm -rf $WK_ROOT/WebCore/include/JavaScriptCore else 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}" == "cygwin" ]; then $WK_ROOT/WebKitTools/wx/install-unix-extras fi cd $WK_ROOT/JavaScriptCore # FIXME: The below is needed because Bakefile doesn't yet properly set dependencies on # creating the build dir. Everything works when you do make all, but not when you # try to make a specific target. For more info, see: http://www.bakefile.org/ticket/167 mkdir -p obj-gnu mkdir -p obj-msvc do_make . "" dftables$EXE ./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 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" == "cygwin" -a $wxdebug == 1 ]; then WX_EXT=d fi if [ "$OSTYPE" == "cygwin" -a $wxpython == 1 ]; then other_args=WX_PYTHON=1 WX_EXT=h wxdebug=1 fi PLATFORM_OS="win" if [ "${OSTYPE:0:6}" == "darwin" ]; then PLATFORM_OS="mac" else PLATFORM_OS="linux" 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 WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args do_make $WK_ROOT/WebCore "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args do_make $WK_ROOT/WebKit/wx "-DBUILDING_WX__=1 -DWXMAKINGDLL_WEBKIT=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug 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 WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args 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 SWIG=`which swig` 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 $SWIG $SWIG_FLAGS -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -o webview.cpp webview.i #$SWIG -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -xml -o webview.xml webview.i PY_INCLUDE=`python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc()"` PY_VERSION=`python -c "import sys; print 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 $WXGC_DEFINE" \ WX_DEBUG=$wxdebug 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 $WEBKITOUTPUTDIR 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 "" if [ "${OSTYPE:0:5}" = "linux" ]; then echo "-- Add /usr/local/lib and $WEBKITOUTPUTDIR to your LD_LIBRARY_PATH environment variable." echo "" fi 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 cd $olddir