2007-11-19 Kevin Ollivier <kevino@theolliviers.com>
[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         cd $WK_ROOT/JavaScriptCore
189         # FIXME: The below is needed because Bakefile doesn't yet properly set dependencies on 
190         # creating the build dir. Everything works when you do make all, but not when you
191         # try to make a specific target. For more info, see: http://www.bakefile.org/ticket/167
192         mkdir -p obj-gnu
193         mkdir -p obj-msvc
194         do_make . "" dftables$EXE
195         ./make-generated-sources.sh
196         if [ $? != 0 ]; then
197             exit $? 
198         fi
199     
200         cd $WK_ROOT/WebCore
201         ./move-js-headers.sh
202         if [ $? != 0 ]; then
203             exit $? 
204         fi
205         ./make-generated-sources.sh platform/wx/wx-encodings.txt
206         if [ $? != 0 ]; then
207             exit $? 
208         fi
209     fi
210 fi
211
212
213 if [ $do_build == 1 -o $do_clean == 1 ]; then
214     # Build steps
215     WXGC_DEFINE=""
216     if [ $use_wxgc == 1 ]; then
217         WXGC_DEFINE="-DWTF_USE_WXGC=1"
218     fi
219     WX_EXT=
220     if [ "$OSTYPE" == "cygwin" -a $wxdebug == 1 ]; then
221         WX_EXT=d
222     fi
223     if [ "$OSTYPE" == "cygwin" -a $wxpython == 1 ]; then
224         other_args=WX_PYTHON=1
225         WX_EXT=h
226         wxdebug=1
227     fi
228     
229     PLATFORM_OS="win"
230     if [ "${OSTYPE:0:6}" == "darwin" ]; then
231         PLATFORM_OS="mac"
232     else
233         PLATFORM_OS="linux"
234     fi
235
236     WINDEPS="$WINDEPS $WXWIN/lib/vc_dll/wxmsw28u${WX_EXT}_core_vc.dll $WXWIN/lib/vc_dll/wxbase28u${WX_EXT}_vc.dll"
237     
238     do_make $WK_ROOT/JavaScriptCore      "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args 
239     do_make $WK_ROOT/WebCore "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args
240     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 
241     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 
242     
243     if [ $do_build == 1 ]; then 
244         if [ "${OSTYPE:0:6}" = "darwin" ]; then
245             cd  $WEBKITOUTPUTDIR
246             mkdir -p wxBrowser.app/Contents/MacOS
247             mkdir -p wxBrowser.app/Contents/Frameworks
248             cp wxBrowser wxBrowser.app/Contents/MacOS
249             install_name_tool -change libwxwebkit.dylib @executable_path/../Frameworks/libwxwebkit.dylib wxBrowser.app/Contents/MacOS/wxBrowser
250             if [ ! -f "$WEBKITOUTPUTDIR/libwxwebkit.dylib" ]; then
251                 ln -s $WEBKITOUTPUTDIR/libwxwebkit.dylib wxBrowser.app/Contents/Frameworks
252             fi
253         fi
254         
255         if [ $wxpython == 1 ]; then
256             SWIG=`which swig`
257
258             if [ ! -f "$SWIG" ]; then
259                 echo "ERROR: Cannot find SWIG. Make sure that SWIG 1.3.29 is located on your path.";
260                 exit 1;
261             fi
262     
263             cd $WK_ROOT/WebKit/wx/bindings/python
264             
265             SWIG_FLAGS=`python -c "import wx.build.config; import string; print string.join(wx.build.config.swig_args, ' ')"`
266             WEBKIT_INCLUDE="-I$WK_ROOT/WebKit/wx"
267             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
268                 WEBKIT_INCLUDE="-I`cygpath -d $WK_ROOT/WebKit/wx`"
269             fi
270             $SWIG $SWIG_FLAGS -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -o webview.cpp webview.i
271             #$SWIG -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -xml -o webview.xml webview.i
272                         
273             
274             PY_INCLUDE=`python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc()"`
275             PY_VERSION=`python -c "import sys;  print str(sys.version_info[0]) + str(sys.version_info[1])"`
276             PY_LIBDIR=`python -c "import distutils.sysconfig; import sys; sys.stdout.write(distutils.sysconfig.PREFIX)"`
277             
278             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
279                 PY_LIBDIR="$PY_LIBDIR\\Libs"
280             else
281                 PY_LIBDIR="$PY_LIBDIR/lib"
282             fi
283             
284             do_make $WK_ROOT/WebKit/wx/bindings/python  "-DBUILDING_WX__=1 -DWXUSINGDLL=1 -DWXUSINGDLL_WEBKIT=1 -I$PY_INCLUDE $WXGC_DEFINE" \
285                     WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS PYTHON_VERSION=$PY_VERSION PYTHON_LIBDIR=$PY_LIBDIR $other_args
286             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
287                 if [ -f $WEBKITOUTPUTDIR/_webview.pyd -a -f $WEBKITOUTPUTDIR/_webview.dll ]; then
288                     rm $WEBKITOUTPUTDIR/_webview.pyd
289                     mv $WEBKITOUTPUTDIR/_webview.dll $WEBKITOUTPUTDIR/_webview.pyd
290                 fi
291             fi
292         fi
293         
294     
295         if [ "$OSTYPE" == "cygwin" ]; then
296             echo "Copying necessary DLLs to run test and sample applications..."
297             cd $WK_ROOT
298             cp $WINDEPS $WEBKITOUTPUTDIR
299         fi
300         
301         BROWSERAPP="wxBrowser"
302         
303         if [ "${OSTYPE:0:6}" == "darwin" ]; then
304             BROWSERAPP="wxBrowser.app/Contents/MacOS/wxBrowser"
305         fi
306     
307         echo ""
308         echo ""
309         echo "--- BUILD COMPLETE ---"
310         echo ""
311         echo "Next steps:"
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 '$WK_ROOT/WebKitTools/Scripts/run-javascriptcore-tests --wx' 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