Add wxWebKit sample and build script, and integrate it with build-webkit. Also make...
[WebKit-https.git] / WebKitTools / wx / build-wxwebkit
1 #!/bin/bash
2
3 # Copyright (C) 2007 Robin Dunn, Kevin Ollivier  All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 # 1. Redistributions of source code must retain the above copyright
9 #    notice, this list of conditions and the following disclaimer.
10 # 2. Redistributions in binary form must reproduce the above copyright
11 #    notice, this list of conditions and the following disclaimer in the
12 #    documentation and/or other materials provided with the distribution.
13 #
14 # THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
25 #
26 # Driver for the wxWebKit build process.
27
28 set -o errexit
29 #set -o xtrace
30
31 #----------------------------------------------------------------------
32 # Set up the environment
33
34 scriptDir="$(cd $(dirname $0);pwd)"
35 WK_ROOT=$scriptDir/../..
36 WK_ROOTDIR=$WK_ROOT
37
38 cd $scriptDir
39
40 export WXWEBKIT=1
41 if [ -z $WEBKITOUTPUTDIR ]; then
42     WEBKITOUTPUTDIR=`cd $WK_ROOT/WebKitTools/Scripts; perl -e "use webkitdirs; print baseProductDir()"`
43 fi
44
45 WINDEPS="pthreads/lib/pthreadVC2.dll icu/bin/icuuc34.dll icu/bin/icudt34.dll libcurl/*.dll sqlite3/sqlite3.dll"
46
47 # TODO: check that we are running from the root of the source tree...
48
49 # cygpath will bork if the dir doesn't exist...
50 mkdir -p $WEBKITOUTPUTDIR
51
52 if [ $OSTYPE == cygwin ]; then
53     EXE=.exe
54     WK_ROOTDIR=`cygpath -d $WK_ROOT`
55     WEBKITOUTPUTDIR=`cygpath -d $WEBKITOUTPUTDIR`
56     export WEBKITOUTPUTDIR
57     if [ -z $WXWIN ]; then
58         echo "Error, you must set WXWIN to your wxWidgets root directory."
59         exit 1
60     fi
61     if [ -z $BAKEFILE_PATHS ]; then
62         export BAKEFILE_PATHS=$WXWIN/build/bakefiles/wxpresets
63     fi
64     LINKER=`which link`
65     if [ "$LINKER" = "/usr/bin/link" ]; then
66         echo "WARNING: wxWebKit builds using MSVC on Windows, but it looks like"
67         echo "you have the GCC linker on your path. If /usr/bin/link does NOT point"
68         echo "to the MSVC linker, you need to move it or change your path to pick up"
69         echo "Microsoft's link.exe program first."
70     fi
71
72 else
73     export WEBKITOUTPUTDIR
74     WX_PREFIX=`wx-config --prefix`
75     if [ ! -d "$WX_PREFIX" ]; then
76         echo "ERROR: Cannot find your wxWidgets installation."
77         echo "Make sure wx-config is on your PATH and points to a valid wxWidgets installation."
78         exit 1
79     fi
80     if [ ! -d "$WX_PREFIX/share/bakefile" ]; then
81         echo "ERROR: wxWidgets installation does not have wxpresets."
82         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+."
83         exit 1
84     fi    
85     
86     if [ -z $BAKEFILE_PATHS ]; then
87         export BAKEFILE_PATHS=$WX_PREFIX/share/bakefile
88     fi
89 fi
90
91 # after all that, make sure that BAKEFILE_PATHS was either set
92 # previously, or by the code above
93 if [ -z $BAKEFILE_PATHS ]; then
94     echo "Error, you must set BAKEFILE_PATHS to the directory containing wxpresets."
95     exit 1
96 fi
97
98 #----------------------------------------------------------------------
99 # process command line args
100
101 do_bake=0
102 do_prep=0
103 do_extras=0
104 do_build=0
105 do_clean=0
106 do_install=0
107 use_wxgc=0
108 wxdebug=0
109 wxpython=0
110 make_args=''
111 other_args=''
112
113 for flag in $*; do
114     case $flag in
115     bake)   do_bake=1                                      ;;
116     prep)   do_prep=1                                      ;;
117     build)  do_build=1                                     ;;
118     all)    do_extras=1; do_bake=1; do_prep=1; do_build=1  ;;
119     clean)  other_args=clean; do_clean=1                   ;;
120     wxgc)   use_wxgc=1                                     ;;
121     wxdebug) wxdebug=1                                     ;;
122     wxpython) wxpython=1                                   ;;
123     wxpython-install) wxpython_install=1                   ;;
124     *)      export $flag ;; #other_args='$other_args "$flag"'               ;;
125     esac
126 done
127
128
129 #----------------------------------------------------------------------
130
131 # if no arguments were passed, do a full build.
132 if [ $do_bake == 0 -a $do_prep == 0 -a $do_build == 0 -a $do_clean == 0 ]; then
133     do_bake=1; do_prep=1; do_build=1
134 fi
135
136 function do_make {
137     dir=$1
138     cxxflags=$2
139     olddir=$PWD
140     shift
141     shift
142     if [ $OSTYPE == cygwin ]; then
143         cd $dir
144         nmake -f makefile.vc CXXFLAGS="$cxxflags" $@
145         cd $olddir
146     else
147         make -C $dir -f GNUmakefile $MAKE_ARGS CXXFLAGS="$cxxflags" $@
148     fi
149 }
150
151 olddir=$PWD
152
153 if [ $do_clean == 1 ]; then
154     rm -rf $WK_ROOT/JavaScriptCore/DerivedSources
155     rm -rf $WK_ROOT/WebCore/DerivedSources
156     rm -rf $WK_ROOT/WebCore/include/JavaScriptCore
157 else
158
159     mkdir -p $WEBKITOUTPUTDIR/build
160
161     if [ $do_bake == 1 ]; then
162         # bakefile stuff
163         cd $WK_ROOT/WebKit/wx
164         bakefile_gen
165     
166         # we need to do this because Bakefile doesn't know which
167         # platform it's running on with GNU format, and so it defaults
168         # to the standard Unix file endings and linker args.
169         if [ "${OSTYPE:0:6}" = "darwin" ]; then
170             sed "s/libwebcore-wx.so/libwebcore-wx.dylib/" < $WK_ROOT/WebCore/GNUmakefile > temp
171             mv temp $WK_ROOT/WebCore/GNUmakefile
172     
173             sed "s/\-shared/\-dynamiclib/" < $WK_ROOT/WebCore/GNUmakefile > temp
174             mv temp $WK_ROOT/WebCore/GNUmakefile
175             
176             sed "s/libwxwebkit.so/libwxwebkit.dylib/" < $WK_ROOT/WebKit/wx/GNUmakefile > temp
177             mv temp $WK_ROOT/WebKit/wx/GNUmakefile
178             
179             sed "s/\-shared/\-dynamiclib/" < $WK_ROOT/WebKit/wx/GNUmakefile > temp
180             mv temp $WK_ROOT/WebKit/wx/GNUmakefile
181         fi
182     fi
183
184     if [ $do_prep == 1 ]; then
185         # Other preparation steps
186         cd $WK_ROOT/JavaScriptCore
187         # FIXME: The below is needed because Bakefile doesn't yet properly set dependencies on 
188         # creating the build dir. Everything works when you do make all, but not when you
189         # try to make a specific target. For more info, see: http://www.bakefile.org/ticket/167
190         mkdir -p obj-gnu
191         mkdir -p obj-msvc
192         do_make . "" dftables$EXE
193         ./make-generated-sources.sh
194         if [ $? != 0 ]; then
195             exit $? 
196         fi
197     
198         cd $WK_ROOT/WebCore
199         ./move-js-headers.sh
200         if [ $? != 0 ]; then
201             exit $? 
202         fi
203         ./make-generated-sources.sh platform/wx/wx-encodings.txt
204         if [ $? != 0 ]; then
205             exit $? 
206         fi
207     fi
208 fi
209
210
211 if [ $do_build == 1 -o $do_clean == 1 ]; then
212     # Build steps
213     WXGC_DEFINE=""
214     if [ $use_wxgc == 1 ]; then
215         WXGC_DEFINE="-DWTF_USE_WXGC=1"
216     fi
217     WX_EXT=
218     if [ "$OSTYPE" == "cygwin" -a $wxdebug == 1 ]; then
219         WX_EXT=d
220     fi
221     if [ "$OSTYPE" == "cygwin" -a $wxpython == 1 ]; then
222         other_args=WX_PYTHON=1
223         WX_EXT=h
224         wxdebug=1
225     fi
226     
227     PLATFORM_OS="win"
228     if [ "${OSTYPE:0:6}" == "darwin" ]; then
229         PLATFORM_OS="mac"
230     else
231         PLATFORM_OS="linux"
232     fi
233
234     WINDEPS="$WINDEPS $WXWIN/lib/vc_dll/wxmsw28u${WX_EXT}_core_vc.dll $WXWIN/lib/vc_dll/wxbase28u${WX_EXT}_vc.dll"
235     
236     do_make $WK_ROOT/JavaScriptCore      "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args 
237     do_make $WK_ROOT/WebCore "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args
238     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 
239     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 
240     
241     if [ $do_build == 1 ]; then 
242         if [ "${OSTYPE:0:6}" = "darwin" ]; then
243             cd  $WEBKITOUTPUTDIR
244             mkdir -p wxBrowser.app/Contents/MacOS
245             mkdir -p wxBrowser.app/Contents/Frameworks
246             cp wxBrowser wxBrowser.app/Contents/MacOS
247             install_name_tool -change libwxwebkit.dylib @executable_path/../Frameworks/libwxwebkit.dylib wxBrowser.app/Contents/MacOS/wxBrowser
248             if [ ! -f "$WEBKITOUTPUTDIR/libwxwebkit.dylib" ]; then
249                 ln -s $WEBKITOUTPUTDIR/libwxwebkit.dylib wxBrowser.app/Contents/Frameworks
250             fi
251         fi
252         
253         if [ $wxpython == 1 ]; then
254             SWIG=`which swig`
255
256             if [ ! -f "$SWIG" ]; then
257                 echo "ERROR: Cannot find SWIG. Make sure that SWIG 1.3.29 is located on your path.";
258                 exit 1;
259             fi
260     
261             cd $WK_ROOT/WebKit/wx/bindings/python
262             
263             SWIG_FLAGS=`python -c "import wx.build.config; import string; print string.join(wx.build.config.swig_args, ' ')"`
264             WEBKIT_INCLUDE="-I$WK_ROOT/WebKit/wx"
265             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
266                 WEBKIT_INCLUDE="-I`cygpath -d $WK_ROOT/WebKit/wx`"
267             fi
268             $SWIG $SWIG_FLAGS -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -o webview.cpp webview.i
269             #$SWIG -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -xml -o webview.xml webview.i
270                         
271             
272             PY_INCLUDE=`python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc()"`
273             PY_VERSION=`python -c "import sys;  print str(sys.version_info[0]) + str(sys.version_info[1])"`
274             PY_LIBDIR=`python -c "import distutils.sysconfig; import sys; sys.stdout.write(distutils.sysconfig.PREFIX)"`
275             
276             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
277                 PY_LIBDIR="$PY_LIBDIR\\Libs"
278             else
279                 PY_LIBDIR="$PY_LIBDIR/lib"
280             fi
281             
282             do_make $WK_ROOT/WebKit/wx/bindings/python  "-DBUILDING_WX__=1 -DWXUSINGDLL=1 -DWXUSINGDLL_WEBKIT=1 -I$PY_INCLUDE $WXGC_DEFINE" \
283                     WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS PYTHON_VERSION=$PY_VERSION PYTHON_LIBDIR=$PY_LIBDIR $other_args
284             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
285                 if [ -f $WEBKITOUTPUTDIR/_webview.pyd -a -f $WEBKITOUTPUTDIR/_webview.dll ]; then
286                     rm $WEBKITOUTPUTDIR/_webview.pyd
287                     mv $WEBKITOUTPUTDIR/_webview.dll $WEBKITOUTPUTDIR/_webview.pyd
288                 fi
289             fi
290         fi
291         
292     
293         if [ "$OSTYPE" == "cygwin" ]; then
294             echo "Copying necessary DLLs to run test and sample applications..."
295             cd $WK_ROOT
296             cp $WINDEPS $WEBKITOUTPUTDIR
297         fi
298         
299         BROWSERAPP="wxBrowser"
300         
301         if [ "${OSTYPE:0:6}" == "darwin" ]; then
302             BROWSERAPP="wxBrowser.app/Contents/MacOS/wxBrowser"
303         fi
304     
305         echo ""
306         echo ""
307         echo "--- BUILD COMPLETE ---"
308         echo ""
309         echo "Next steps:"
310         echo ""
311         echo "-- Add WXWEBKIT=1 to your environment variables. This will let WebKit scripts know you're using the wx build."
312         echo ""
313         if [ "${OSTYPE:0:5}" = "linux" ]; then
314             echo "-- Add /usr/local/lib and $WEBKITOUTPUTDIR to your LD_LIBRARY_PATH environment variable."
315             echo ""
316         fi
317         echo "-- Run the 'run-javascriptcore-tests' script to ensure JSCore tests pass."
318         echo ""
319         echo "-- Run $WEBKITOUTPUTDIR/$BROWSERAPP to test your wxWebKit build."
320         echo ""
321         echo ""
322     fi
323 fi
324
325 cd $olddir