wx buildbot fix. Update libpng dl script to the latest version.
[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         # FIXME: The below is needed because Bakefile doesn't yet properly set dependencies on 
204         # creating the build dir. Everything works when you do make all, but not when you
205         # try to make a specific target. For more info, see: http://www.bakefile.org/ticket/167
206         mkdir -p obj-gnu
207         mkdir -p obj-msvc
208         do_make . "" dftables$EXE
209         ./make-generated-sources.sh
210         if [ $? != 0 ]; then
211             exit $? 
212         fi
213     
214         cd $WK_ROOT/WebCore
215         ./make-generated-sources.sh platform/wx/wx-encodings.txt
216         if [ $? != 0 ]; then
217             exit $? 
218         fi
219     fi
220 fi
221
222
223 if [ $do_build == 1 -o $do_clean == 1 ]; then
224     # Build steps
225     WXGC_DEFINE=""
226     if [ $use_wxgc == 1 ]; then
227         WXGC_DEFINE="-DWTF_USE_WXGC=1"
228     fi
229     WX_EXT=
230     if [ "${OSTYPE:0:6}" == "cygwin" -a $wxdebug == 1 ]; then
231         WX_EXT=d
232     fi
233     if [ "${OSTYPE:0:6}" == "cygwin" -a $wxpython == 1 ]; then
234         other_args=WX_PYTHON=1
235         WX_EXT=h
236         wxdebug=1
237     fi
238     
239     PLATFORM_OS="win"
240     if [ "${OSTYPE:0:6}" == "darwin" ]; then
241         PLATFORM_OS="mac"
242     else
243         PLATFORM_OS="linux"
244     fi
245
246     WINDEPS="$WINDEPS $WXWIN/lib/vc_dll/wxmsw28u${WX_EXT}_core_vc.dll $WXWIN/lib/vc_dll/wxbase28u${WX_EXT}_vc.dll"
247     
248     # NOTE: If we try to do make clean after the Bakefiles were cleaned out, or before they were
249     # first generated, we will get errors about missing files. 
250     # FIXME: Make the check more robust.
251     if [ -f $WK_ROOT/JavaScriptCore/GNUmakefile ]; then
252         do_make $WK_ROOT/JavaScriptCore      "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args 
253         do_make $WK_ROOT/WebCore "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args
254         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 
255         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 
256     fi
257     
258     if [ $do_build == 1 ]; then 
259         if [ "${OSTYPE:0:6}" = "darwin" ]; then
260             cd  $WEBKITOUTPUTDIR
261             mkdir -p wxBrowser.app/Contents/MacOS
262             mkdir -p wxBrowser.app/Contents/Frameworks
263             cp wxBrowser wxBrowser.app/Contents/MacOS
264             install_name_tool -change libwxwebkit.dylib @executable_path/../Frameworks/libwxwebkit.dylib wxBrowser.app/Contents/MacOS/wxBrowser
265             if [ ! -f "$WEBKITOUTPUTDIR/libwxwebkit.dylib" ]; then
266                 ln -s $WEBKITOUTPUTDIR/libwxwebkit.dylib wxBrowser.app/Contents/Frameworks
267             fi
268         fi
269         
270         if [ $wxpython == 1 ]; then
271             SWIG=`which swig`
272
273             if [ ! -f "$SWIG" ]; then
274                 echo "ERROR: Cannot find SWIG. Make sure that SWIG 1.3.29 is located on your path.";
275                 exit 1;
276             fi
277     
278             cd $WK_ROOT/WebKit/wx/bindings/python
279             
280             SWIG_FLAGS=`python -c "import wx.build.config; import string; print string.join(wx.build.config.swig_args, ' ')"`
281             WEBKIT_INCLUDE="-I$WK_ROOT/WebKit/wx"
282             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
283                 WEBKIT_INCLUDE="-I`cygpath -d $WK_ROOT/WebKit/wx`"
284             fi
285             $SWIG $SWIG_FLAGS -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -o webview.cpp webview.i
286             #$SWIG -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -xml -o webview.xml webview.i
287                         
288             
289             PY_INCLUDE=`python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc()"`
290             PY_VERSION=`python -c "import sys;  print str(sys.version_info[0]) + str(sys.version_info[1])"`
291             PY_LIBDIR=`python -c "import distutils.sysconfig; import sys; sys.stdout.write(distutils.sysconfig.PREFIX)"`
292             
293             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
294                 PY_LIBDIR="$PY_LIBDIR\\Libs"
295             else
296                 PY_LIBDIR="$PY_LIBDIR/lib"
297             fi
298             
299             do_make $WK_ROOT/WebKit/wx/bindings/python  "-DBUILDING_WX__=1 -DWXUSINGDLL=1 -DWXUSINGDLL_WEBKIT=1 -I$PY_INCLUDE $WXGC_DEFINE" \
300                     WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS PYTHON_VERSION=$PY_VERSION PYTHON_LIBDIR=$PY_LIBDIR $other_args
301             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
302                 if [ -f $WEBKITOUTPUTDIR/_webview.pyd -a -f $WEBKITOUTPUTDIR/_webview.dll ]; then
303                     rm $WEBKITOUTPUTDIR/_webview.pyd
304                     mv $WEBKITOUTPUTDIR/_webview.dll $WEBKITOUTPUTDIR/_webview.pyd
305                 fi
306             fi
307         fi
308         
309     
310         if [ "$OSTYPE" == "cygwin" ]; then
311             echo "Copying necessary DLLs to run test and sample applications..."
312             cd $WK_ROOT
313             cp $WINDEPS $WEBKITOUTPUTDIR
314         fi
315         
316         BROWSERAPP="wxBrowser"
317         
318         if [ "${OSTYPE:0:6}" == "darwin" ]; then
319             BROWSERAPP="wxBrowser.app/Contents/MacOS/wxBrowser"
320         fi
321     
322         echo ""
323         echo ""
324         echo "--- BUILD COMPLETE ---"
325         echo ""
326         echo "Next steps:"
327         echo ""
328         echo "-- Run '$WK_ROOT/WebKitTools/Scripts/run-javascriptcore-tests --wx' to ensure JSCore tests pass."
329         echo ""
330         echo "-- Run $WEBKITOUTPUTDIR/$BROWSERAPP to test your wxWebKit build."
331         echo ""
332         echo ""
333     fi
334 fi
335
336 if [ $do_clean == 1 ]; then
337     cd $WK_ROOT/WebKit/wx
338     bakefile_gen --clean
339 fi
340
341 cd $olddir