WebCore:
[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     
80     CONFIG=`wx-config --selected-config`
81     if [ "${CONFIG:0:4}" != "gtk2" -a "${CONFIG:0:3}" != "mac" ]; then
82         echo "ERROR: This configuration '$CONFIG' is not currently supported by wxWebKit. Please use the win, mac, or gtk2 port depending on your platform."
83         exit 1
84     fi
85     
86     if [ ! -d "$WX_PREFIX/share/bakefile" ]; then
87         echo "ERROR: wxWidgets installation does not have wxpresets."
88         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+."
89         exit 1
90     fi    
91     
92     if [ -z $BAKEFILE_PATHS ]; then
93         export BAKEFILE_PATHS=$WX_PREFIX/share/bakefile
94     fi
95 fi
96
97 # after all that, make sure that BAKEFILE_PATHS was either set
98 # previously, or by the code above
99 if [ -z $BAKEFILE_PATHS ]; then
100     echo "Error, you must set BAKEFILE_PATHS to the directory containing wxpresets."
101     exit 1
102 fi
103
104 #----------------------------------------------------------------------
105 # process command line args
106
107 do_bake=0
108 do_prep=0
109 do_extras=0
110 do_build=0
111 do_clean=0
112 do_install=0
113 use_wxgc=0
114 wxdebug=0
115 wxpython=0
116 make_args=''
117 other_args=''
118
119 for flag in $*; do
120     case $flag in
121     bake)   do_bake=1                                      ;;
122     prep)   do_prep=1                                      ;;
123     build)  do_build=1                                     ;;
124     all)    do_extras=1; do_bake=1; do_prep=1; do_build=1  ;;
125     clean)  other_args=clean; do_clean=1                   ;;
126     wxgc)   use_wxgc=1                                     ;;
127     wxdebug) wxdebug=1                                     ;;
128     wxpython) wxpython=1                                   ;;
129     wxpython-install) wxpython_install=1                   ;;
130     *)      export $flag ;; #other_args='$other_args "$flag"'               ;;
131     esac
132 done
133
134
135 #----------------------------------------------------------------------
136
137 # if no arguments were passed, do a full build.
138 if [ $do_bake == 0 -a $do_prep == 0 -a $do_build == 0 -a $do_clean == 0 ]; then
139     do_bake=1; do_prep=1; do_build=1
140 fi
141
142 function do_make {
143     dir=$1
144     cxxflags=$2
145     olddir=$PWD
146     shift
147     shift
148     if [ $OSTYPE == cygwin ]; then
149         cd $dir
150         nmake -f makefile.vc CXXFLAGS="$cxxflags" $@
151         cd $olddir
152     else
153         make -C $dir -f GNUmakefile $MAKE_ARGS CXXFLAGS="$cxxflags" $@
154     fi
155     if [ $? != 0 ]; then
156         exit $? 
157     fi
158 }
159
160 olddir=$PWD
161
162 if [ $do_clean == 1 ]; then
163     rm -rf $WK_ROOT/JavaScriptCore/DerivedSources
164     rm -rf $WK_ROOT/WebCore/DerivedSources
165     rm -rf $WK_ROOT/WebCore/include/JavaScriptCore
166 else
167
168     mkdir -p $WEBKITOUTPUTDIR/build
169
170     if [ $do_bake == 1 ]; then
171         # bakefile stuff
172         cd $WK_ROOT/WebKit/wx
173         bakefile_gen
174     
175         # we need to do this because Bakefile doesn't know which
176         # platform it's running on with GNU format, and so it defaults
177         # to the standard Unix file endings and linker args.
178         if [ "${OSTYPE:0:6}" = "darwin" ]; then
179             sed "s/libwebcore-wx.so/libwebcore-wx.dylib/" < $WK_ROOT/WebCore/GNUmakefile > temp
180             mv temp $WK_ROOT/WebCore/GNUmakefile
181     
182             sed "s/\-shared/\-dynamiclib/" < $WK_ROOT/WebCore/GNUmakefile > temp
183             mv temp $WK_ROOT/WebCore/GNUmakefile
184             
185             sed "s/libwxwebkit.so/libwxwebkit.dylib/" < $WK_ROOT/WebKit/wx/GNUmakefile > temp
186             mv temp $WK_ROOT/WebKit/wx/GNUmakefile
187             
188             sed "s/\-shared/\-dynamiclib/" < $WK_ROOT/WebKit/wx/GNUmakefile > temp
189             mv temp $WK_ROOT/WebKit/wx/GNUmakefile
190         fi
191     fi
192
193     if [ $do_prep == 1 ]; then
194         # Other preparation steps
195         
196         # since the buildbot will wipe the build tree clean sometimes, we need to reinstall
197         # the dependencies if they aren't installed.
198         if [ "${OSTYPE:0:6}" == "darwin" ]; then
199             $WK_ROOT/WebKitTools/wx/install-unix-extras
200         fi
201         
202         cd $WK_ROOT/JavaScriptCore
203         ./make-generated-sources.sh
204         if [ $? != 0 ]; then
205             exit $? 
206         fi
207     
208         cd $WK_ROOT/WebCore
209         ./make-generated-sources.sh platform/wx/wx-encodings.txt
210         if [ $? != 0 ]; then
211             exit $? 
212         fi
213     fi
214 fi
215
216
217 if [ $do_build == 1 -o $do_clean == 1 ]; then
218     # Build steps
219     WXGC_DEFINE=""
220     if [ $use_wxgc == 1 ]; then
221         WXGC_DEFINE="-DWTF_USE_WXGC=1"
222     fi
223     WX_EXT=
224     if [ "${OSTYPE:0:6}" == "cygwin" -a $wxdebug == 1 ]; then
225         WX_EXT=d
226     fi
227     if [ "${OSTYPE:0:6}" == "cygwin" -a $wxpython == 1 ]; then
228         other_args=WX_PYTHON=1
229         WX_EXT=h
230         wxdebug=1
231     fi
232     
233     PLATFORM_OS="win"
234     if [ "${OSTYPE:0:6}" == "darwin" ]; then
235         PLATFORM_OS="mac"
236     else
237         PLATFORM_OS="linux"
238     fi
239
240     WINDEPS="$WINDEPS $WXWIN/lib/vc_dll/wxmsw28u${WX_EXT}_core_vc.dll $WXWIN/lib/vc_dll/wxbase28u${WX_EXT}_vc.dll"
241     
242     # NOTE: If we try to do make clean after the Bakefiles were cleaned out, or before they were
243     # first generated, we will get errors about missing files. 
244     # FIXME: Make the check more robust.
245     if [ -f $WK_ROOT/JavaScriptCore/GNUmakefile ]; then
246         do_make $WK_ROOT/JavaScriptCore      "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args 
247         do_make $WK_ROOT/WebCore "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args
248         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 
249         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 
250     fi
251     
252     if [ $do_build == 1 ]; then 
253         if [ "${OSTYPE:0:6}" = "darwin" ]; then
254             cd  $WEBKITOUTPUTDIR
255             mkdir -p wxBrowser.app/Contents/MacOS
256             mkdir -p wxBrowser.app/Contents/Frameworks
257             cp wxBrowser wxBrowser.app/Contents/MacOS
258             install_name_tool -change libwxwebkit.dylib @executable_path/../Frameworks/libwxwebkit.dylib wxBrowser.app/Contents/MacOS/wxBrowser
259             if [ ! -f "$WEBKITOUTPUTDIR/libwxwebkit.dylib" ]; then
260                 ln -s $WEBKITOUTPUTDIR/libwxwebkit.dylib wxBrowser.app/Contents/Frameworks
261             fi
262         fi
263         
264         if [ $wxpython == 1 ]; then
265             SWIG=`which swig`
266
267             if [ ! -f "$SWIG" ]; then
268                 echo "ERROR: Cannot find SWIG. Make sure that SWIG 1.3.29 is located on your path.";
269                 exit 1;
270             fi
271     
272             cd $WK_ROOT/WebKit/wx/bindings/python
273             
274             SWIG_FLAGS=`python -c "import wx.build.config; import string; print string.join(wx.build.config.swig_args, ' ')"`
275             WEBKIT_INCLUDE="-I$WK_ROOT/WebKit/wx"
276             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
277                 WEBKIT_INCLUDE="-I`cygpath -d $WK_ROOT/WebKit/wx`"
278             fi
279             $SWIG $SWIG_FLAGS -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -o webview.cpp webview.i
280             #$SWIG -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -xml -o webview.xml webview.i
281                         
282             
283             PY_INCLUDE=`python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc()"`
284             PY_VERSION=`python -c "import sys;  print str(sys.version_info[0]) + str(sys.version_info[1])"`
285             PY_LIBDIR=`python -c "import distutils.sysconfig; import sys; sys.stdout.write(distutils.sysconfig.PREFIX)"`
286             
287             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
288                 PY_LIBDIR="$PY_LIBDIR\\Libs"
289             else
290                 PY_LIBDIR="$PY_LIBDIR/lib"
291             fi
292             
293             do_make $WK_ROOT/WebKit/wx/bindings/python  "-DBUILDING_WX__=1 -DWXUSINGDLL=1 -DWXUSINGDLL_WEBKIT=1 -I$PY_INCLUDE $WXGC_DEFINE" \
294                     WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS PYTHON_VERSION=$PY_VERSION PYTHON_LIBDIR=$PY_LIBDIR $other_args
295             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
296                 if [ -f $WEBKITOUTPUTDIR/_webview.pyd -a -f $WEBKITOUTPUTDIR/_webview.dll ]; then
297                     rm $WEBKITOUTPUTDIR/_webview.pyd
298                     mv $WEBKITOUTPUTDIR/_webview.dll $WEBKITOUTPUTDIR/_webview.pyd
299                 fi
300             fi
301         fi
302         
303     
304         if [ "$OSTYPE" == "cygwin" ]; then
305             echo "Copying necessary DLLs to run test and sample applications..."
306             cd $WK_ROOT
307             cp $WINDEPS $WEBKITOUTPUTDIR
308         fi
309         
310         BROWSERAPP="wxBrowser"
311         
312         if [ "${OSTYPE:0:6}" == "darwin" ]; then
313             BROWSERAPP="wxBrowser.app/Contents/MacOS/wxBrowser"
314         fi
315     
316         echo ""
317         echo ""
318         echo "--- BUILD COMPLETE ---"
319         echo ""
320         echo "Next steps:"
321         echo ""
322         echo "-- Run '$WK_ROOT/WebKitTools/Scripts/run-javascriptcore-tests --wx' to ensure JSCore tests pass."
323         echo ""
324         echo "-- Run $WEBKITOUTPUTDIR/$BROWSERAPP to test your wxWebKit build."
325         echo ""
326         echo ""
327     fi
328 fi
329
330 if [ $do_clean == 1 ]; then
331     cd $WK_ROOT/WebKit/wx
332     bakefile_gen --clean
333 fi
334
335 cd $olddir