Restore the wx buildbot for Mac by automatically installing dependencies not provided...
[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 if [ -z $WEBKITOUTPUTDIR ]; then
41     WEBKITOUTPUTDIR=`cd $WK_ROOT/WebKitTools/Scripts; perl -e "use webkitdirs; print productDir()"`
42 fi
43
44 WINDEPS="pthreads/lib/pthreadVC2.dll icu/bin/icuuc34.dll icu/bin/icudt34.dll libcurl/*.dll sqlite3/sqlite3.dll"
45
46 # TODO: check that we are running from the root of the source tree...
47
48 # cygpath will bork if the dir doesn't exist...
49 mkdir -p $WEBKITOUTPUTDIR
50
51 if [ $OSTYPE == cygwin ]; then
52     EXE=.exe
53     WK_ROOTDIR=`cygpath -d $WK_ROOT`
54     WEBKITOUTPUTDIR=`cygpath -d $WEBKITOUTPUTDIR`
55     export WEBKITOUTPUTDIR
56     if [ -z $WXWIN ]; then
57         echo "Error, you must set WXWIN to your wxWidgets root directory."
58         exit 1
59     fi
60     if [ -z $BAKEFILE_PATHS ]; then
61         export BAKEFILE_PATHS=$WXWIN/build/bakefiles/wxpresets
62     fi
63     LINKER=`which link`
64     if [ "$LINKER" = "/usr/bin/link" ]; then
65         echo "WARNING: wxWebKit builds using MSVC on Windows, but it looks like"
66         echo "you have the GCC linker on your path. If /usr/bin/link does NOT point"
67         echo "to the MSVC linker, you need to move it or change your path to pick up"
68         echo "Microsoft's link.exe program first."
69     fi
70
71 else
72     export WEBKITOUTPUTDIR
73     WX_PREFIX=`wx-config --prefix`
74     if [ ! -d "$WX_PREFIX" ]; then
75         echo "ERROR: Cannot find your wxWidgets installation."
76         echo "Make sure wx-config is on your PATH and points to a valid wxWidgets installation."
77         exit 1
78     fi
79     if [ ! -d "$WX_PREFIX/share/bakefile" ]; then
80         echo "ERROR: wxWidgets installation does not have wxpresets."
81         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+."
82         exit 1
83     fi    
84     
85     if [ -z $BAKEFILE_PATHS ]; then
86         export BAKEFILE_PATHS=$WX_PREFIX/share/bakefile
87     fi
88 fi
89
90 # after all that, make sure that BAKEFILE_PATHS was either set
91 # previously, or by the code above
92 if [ -z $BAKEFILE_PATHS ]; then
93     echo "Error, you must set BAKEFILE_PATHS to the directory containing wxpresets."
94     exit 1
95 fi
96
97 #----------------------------------------------------------------------
98 # process command line args
99
100 do_bake=0
101 do_prep=0
102 do_extras=0
103 do_build=0
104 do_clean=0
105 do_install=0
106 use_wxgc=0
107 wxdebug=0
108 wxpython=0
109 make_args=''
110 other_args=''
111
112 for flag in $*; do
113     case $flag in
114     bake)   do_bake=1                                      ;;
115     prep)   do_prep=1                                      ;;
116     build)  do_build=1                                     ;;
117     all)    do_extras=1; do_bake=1; do_prep=1; do_build=1  ;;
118     clean)  other_args=clean; do_clean=1                   ;;
119     wxgc)   use_wxgc=1                                     ;;
120     wxdebug) wxdebug=1                                     ;;
121     wxpython) wxpython=1                                   ;;
122     wxpython-install) wxpython_install=1                   ;;
123     *)      export $flag ;; #other_args='$other_args "$flag"'               ;;
124     esac
125 done
126
127
128 #----------------------------------------------------------------------
129
130 # if no arguments were passed, do a full build.
131 if [ $do_bake == 0 -a $do_prep == 0 -a $do_build == 0 -a $do_clean == 0 ]; then
132     do_bake=1; do_prep=1; do_build=1
133 fi
134
135 function do_make {
136     dir=$1
137     cxxflags=$2
138     olddir=$PWD
139     shift
140     shift
141     if [ $OSTYPE == cygwin ]; then
142         cd $dir
143         nmake -f makefile.vc CXXFLAGS="$cxxflags" $@
144         cd $olddir
145     else
146         make -C $dir -f GNUmakefile $MAKE_ARGS CXXFLAGS="$cxxflags" $@
147     fi
148     if [ $? != 0 ]; then
149         exit $? 
150     fi
151 }
152
153 olddir=$PWD
154
155 if [ $do_clean == 1 ]; then
156     rm -rf $WK_ROOT/JavaScriptCore/DerivedSources
157     rm -rf $WK_ROOT/WebCore/DerivedSources
158     rm -rf $WK_ROOT/WebCore/include/JavaScriptCore
159 else
160
161     mkdir -p $WEBKITOUTPUTDIR/build
162
163     if [ $do_bake == 1 ]; then
164         # bakefile stuff
165         cd $WK_ROOT/WebKit/wx
166         bakefile_gen
167     
168         # we need to do this because Bakefile doesn't know which
169         # platform it's running on with GNU format, and so it defaults
170         # to the standard Unix file endings and linker args.
171         if [ "${OSTYPE:0:6}" = "darwin" ]; then
172             sed "s/libwebcore-wx.so/libwebcore-wx.dylib/" < $WK_ROOT/WebCore/GNUmakefile > temp
173             mv temp $WK_ROOT/WebCore/GNUmakefile
174     
175             sed "s/\-shared/\-dynamiclib/" < $WK_ROOT/WebCore/GNUmakefile > temp
176             mv temp $WK_ROOT/WebCore/GNUmakefile
177             
178             sed "s/libwxwebkit.so/libwxwebkit.dylib/" < $WK_ROOT/WebKit/wx/GNUmakefile > temp
179             mv temp $WK_ROOT/WebKit/wx/GNUmakefile
180             
181             sed "s/\-shared/\-dynamiclib/" < $WK_ROOT/WebKit/wx/GNUmakefile > temp
182             mv temp $WK_ROOT/WebKit/wx/GNUmakefile
183         fi
184     fi
185
186     if [ $do_prep == 1 ]; then
187         # Other preparation steps
188         
189         # since the buildbot will wipe the build tree clean sometimes, we need to reinstall
190         # the dependencies if they aren't installed.
191         if [ ! "${OSTYPE:0:6}" == "cygwin" ]; then
192             $WK_ROOT/WebKitTools/wx/install-unix-extras
193         fi
194         
195         cd $WK_ROOT/JavaScriptCore
196         # FIXME: The below is needed because Bakefile doesn't yet properly set dependencies on 
197         # creating the build dir. Everything works when you do make all, but not when you
198         # try to make a specific target. For more info, see: http://www.bakefile.org/ticket/167
199         mkdir -p obj-gnu
200         mkdir -p obj-msvc
201         do_make . "" dftables$EXE
202         ./make-generated-sources.sh
203         if [ $? != 0 ]; then
204             exit $? 
205         fi
206     
207         cd $WK_ROOT/WebCore
208         ./make-generated-sources.sh platform/wx/wx-encodings.txt
209         if [ $? != 0 ]; then
210             exit $? 
211         fi
212     fi
213 fi
214
215
216 if [ $do_build == 1 -o $do_clean == 1 ]; then
217     # Build steps
218     WXGC_DEFINE=""
219     if [ $use_wxgc == 1 ]; then
220         WXGC_DEFINE="-DWTF_USE_WXGC=1"
221     fi
222     WX_EXT=
223     if [ "$OSTYPE" == "cygwin" -a $wxdebug == 1 ]; then
224         WX_EXT=d
225     fi
226     if [ "$OSTYPE" == "cygwin" -a $wxpython == 1 ]; then
227         other_args=WX_PYTHON=1
228         WX_EXT=h
229         wxdebug=1
230     fi
231     
232     PLATFORM_OS="win"
233     if [ "${OSTYPE:0:6}" == "darwin" ]; then
234         PLATFORM_OS="mac"
235     else
236         PLATFORM_OS="linux"
237     fi
238
239     WINDEPS="$WINDEPS $WXWIN/lib/vc_dll/wxmsw28u${WX_EXT}_core_vc.dll $WXWIN/lib/vc_dll/wxbase28u${WX_EXT}_vc.dll"
240     
241     do_make $WK_ROOT/JavaScriptCore      "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args 
242     do_make $WK_ROOT/WebCore "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args
243     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 
244     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 
245     
246     if [ $do_build == 1 ]; then 
247         if [ "${OSTYPE:0:6}" = "darwin" ]; then
248             cd  $WEBKITOUTPUTDIR
249             mkdir -p wxBrowser.app/Contents/MacOS
250             mkdir -p wxBrowser.app/Contents/Frameworks
251             cp wxBrowser wxBrowser.app/Contents/MacOS
252             install_name_tool -change libwxwebkit.dylib @executable_path/../Frameworks/libwxwebkit.dylib wxBrowser.app/Contents/MacOS/wxBrowser
253             if [ ! -f "$WEBKITOUTPUTDIR/libwxwebkit.dylib" ]; then
254                 ln -s $WEBKITOUTPUTDIR/libwxwebkit.dylib wxBrowser.app/Contents/Frameworks
255             fi
256         fi
257         
258         if [ $wxpython == 1 ]; then
259             SWIG=`which swig`
260
261             if [ ! -f "$SWIG" ]; then
262                 echo "ERROR: Cannot find SWIG. Make sure that SWIG 1.3.29 is located on your path.";
263                 exit 1;
264             fi
265     
266             cd $WK_ROOT/WebKit/wx/bindings/python
267             
268             SWIG_FLAGS=`python -c "import wx.build.config; import string; print string.join(wx.build.config.swig_args, ' ')"`
269             WEBKIT_INCLUDE="-I$WK_ROOT/WebKit/wx"
270             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
271                 WEBKIT_INCLUDE="-I`cygpath -d $WK_ROOT/WebKit/wx`"
272             fi
273             $SWIG $SWIG_FLAGS -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -o webview.cpp webview.i
274             #$SWIG -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -xml -o webview.xml webview.i
275                         
276             
277             PY_INCLUDE=`python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc()"`
278             PY_VERSION=`python -c "import sys;  print str(sys.version_info[0]) + str(sys.version_info[1])"`
279             PY_LIBDIR=`python -c "import distutils.sysconfig; import sys; sys.stdout.write(distutils.sysconfig.PREFIX)"`
280             
281             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
282                 PY_LIBDIR="$PY_LIBDIR\\Libs"
283             else
284                 PY_LIBDIR="$PY_LIBDIR/lib"
285             fi
286             
287             do_make $WK_ROOT/WebKit/wx/bindings/python  "-DBUILDING_WX__=1 -DWXUSINGDLL=1 -DWXUSINGDLL_WEBKIT=1 -I$PY_INCLUDE $WXGC_DEFINE" \
288                     WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS PYTHON_VERSION=$PY_VERSION PYTHON_LIBDIR=$PY_LIBDIR $other_args
289             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
290                 if [ -f $WEBKITOUTPUTDIR/_webview.pyd -a -f $WEBKITOUTPUTDIR/_webview.dll ]; then
291                     rm $WEBKITOUTPUTDIR/_webview.pyd
292                     mv $WEBKITOUTPUTDIR/_webview.dll $WEBKITOUTPUTDIR/_webview.pyd
293                 fi
294             fi
295         fi
296         
297     
298         if [ "$OSTYPE" == "cygwin" ]; then
299             echo "Copying necessary DLLs to run test and sample applications..."
300             cd $WK_ROOT
301             cp $WINDEPS $WEBKITOUTPUTDIR
302         fi
303         
304         BROWSERAPP="wxBrowser"
305         
306         if [ "${OSTYPE:0:6}" == "darwin" ]; then
307             BROWSERAPP="wxBrowser.app/Contents/MacOS/wxBrowser"
308         fi
309     
310         echo ""
311         echo ""
312         echo "--- BUILD COMPLETE ---"
313         echo ""
314         echo "Next steps:"
315         echo ""
316         if [ "${OSTYPE:0:5}" = "linux" ]; then
317             echo "-- Add /usr/local/lib and $WEBKITOUTPUTDIR to your LD_LIBRARY_PATH environment variable."
318             echo ""
319         fi
320         echo "-- Run '$WK_ROOT/WebKitTools/Scripts/run-javascriptcore-tests --wx' to ensure JSCore tests pass."
321         echo ""
322         echo "-- Run $WEBKITOUTPUTDIR/$BROWSERAPP to test your wxWebKit build."
323         echo ""
324         echo ""
325     fi
326 fi
327
328 cd $olddir