wx build fix for Windows. Don't use WebCore/move-js-headers.sh as it indiscriminately...
[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         ./make-generated-sources.sh platform/wx/wx-encodings.txt
202         if [ $? != 0 ]; then
203             exit $? 
204         fi
205     fi
206 fi
207
208
209 if [ $do_build == 1 -o $do_clean == 1 ]; then
210     # Build steps
211     WXGC_DEFINE=""
212     if [ $use_wxgc == 1 ]; then
213         WXGC_DEFINE="-DWTF_USE_WXGC=1"
214     fi
215     WX_EXT=
216     if [ "$OSTYPE" == "cygwin" -a $wxdebug == 1 ]; then
217         WX_EXT=d
218     fi
219     if [ "$OSTYPE" == "cygwin" -a $wxpython == 1 ]; then
220         other_args=WX_PYTHON=1
221         WX_EXT=h
222         wxdebug=1
223     fi
224     
225     PLATFORM_OS="win"
226     if [ "${OSTYPE:0:6}" == "darwin" ]; then
227         PLATFORM_OS="mac"
228     else
229         PLATFORM_OS="linux"
230     fi
231
232     WINDEPS="$WINDEPS $WXWIN/lib/vc_dll/wxmsw28u${WX_EXT}_core_vc.dll $WXWIN/lib/vc_dll/wxbase28u${WX_EXT}_vc.dll"
233     
234     do_make $WK_ROOT/JavaScriptCore      "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args 
235     do_make $WK_ROOT/WebCore "-DBUILDING_WX__=1 $WXGC_DEFINE" WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS $other_args
236     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 
237     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 
238     
239     if [ $do_build == 1 ]; then 
240         if [ "${OSTYPE:0:6}" = "darwin" ]; then
241             cd  $WEBKITOUTPUTDIR
242             mkdir -p wxBrowser.app/Contents/MacOS
243             mkdir -p wxBrowser.app/Contents/Frameworks
244             cp wxBrowser wxBrowser.app/Contents/MacOS
245             install_name_tool -change libwxwebkit.dylib @executable_path/../Frameworks/libwxwebkit.dylib wxBrowser.app/Contents/MacOS/wxBrowser
246             if [ ! -f "$WEBKITOUTPUTDIR/libwxwebkit.dylib" ]; then
247                 ln -s $WEBKITOUTPUTDIR/libwxwebkit.dylib wxBrowser.app/Contents/Frameworks
248             fi
249         fi
250         
251         if [ $wxpython == 1 ]; then
252             SWIG=`which swig`
253
254             if [ ! -f "$SWIG" ]; then
255                 echo "ERROR: Cannot find SWIG. Make sure that SWIG 1.3.29 is located on your path.";
256                 exit 1;
257             fi
258     
259             cd $WK_ROOT/WebKit/wx/bindings/python
260             
261             SWIG_FLAGS=`python -c "import wx.build.config; import string; print string.join(wx.build.config.swig_args, ' ')"`
262             WEBKIT_INCLUDE="-I$WK_ROOT/WebKit/wx"
263             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
264                 WEBKIT_INCLUDE="-I`cygpath -d $WK_ROOT/WebKit/wx`"
265             fi
266             $SWIG $SWIG_FLAGS -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -o webview.cpp webview.i
267             #$SWIG -I$WX_PREFIX/include/wx-2.8/wx/wxPython/i_files $WEBKIT_INCLUDE -xml -o webview.xml webview.i
268                         
269             
270             PY_INCLUDE=`python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc()"`
271             PY_VERSION=`python -c "import sys;  print str(sys.version_info[0]) + str(sys.version_info[1])"`
272             PY_LIBDIR=`python -c "import distutils.sysconfig; import sys; sys.stdout.write(distutils.sysconfig.PREFIX)"`
273             
274             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
275                 PY_LIBDIR="$PY_LIBDIR\\Libs"
276             else
277                 PY_LIBDIR="$PY_LIBDIR/lib"
278             fi
279             
280             do_make $WK_ROOT/WebKit/wx/bindings/python  "-DBUILDING_WX__=1 -DWXUSINGDLL=1 -DWXUSINGDLL_WEBKIT=1 -I$PY_INCLUDE $WXGC_DEFINE" \
281                     WX_DEBUG=$wxdebug WEBKIT_ROOT=$WK_ROOTDIR PLATFORM_OS=$PLATFORM_OS PYTHON_VERSION=$PY_VERSION PYTHON_LIBDIR=$PY_LIBDIR $other_args
282             if [ "${OSTYPE:0:6}" == "cygwin" ]; then
283                 if [ -f $WEBKITOUTPUTDIR/_webview.pyd -a -f $WEBKITOUTPUTDIR/_webview.dll ]; then
284                     rm $WEBKITOUTPUTDIR/_webview.pyd
285                     mv $WEBKITOUTPUTDIR/_webview.dll $WEBKITOUTPUTDIR/_webview.pyd
286                 fi
287             fi
288         fi
289         
290     
291         if [ "$OSTYPE" == "cygwin" ]; then
292             echo "Copying necessary DLLs to run test and sample applications..."
293             cd $WK_ROOT
294             cp $WINDEPS $WEBKITOUTPUTDIR
295         fi
296         
297         BROWSERAPP="wxBrowser"
298         
299         if [ "${OSTYPE:0:6}" == "darwin" ]; then
300             BROWSERAPP="wxBrowser.app/Contents/MacOS/wxBrowser"
301         fi
302     
303         echo ""
304         echo ""
305         echo "--- BUILD COMPLETE ---"
306         echo ""
307         echo "Next steps:"
308         echo ""
309         if [ "${OSTYPE:0:5}" = "linux" ]; then
310             echo "-- Add /usr/local/lib and $WEBKITOUTPUTDIR to your LD_LIBRARY_PATH environment variable."
311             echo ""
312         fi
313         echo "-- Run '$WK_ROOT/WebKitTools/Scripts/run-javascriptcore-tests --wx' to ensure JSCore tests pass."
314         echo ""
315         echo "-- Run $WEBKITOUTPUTDIR/$BROWSERAPP to test your wxWebKit build."
316         echo ""
317         echo ""
318     fi
319 fi
320
321 cd $olddir