1#!/bin/sh
2
3# Copyright (C) 2005, 2006 Apple Computer, Inc.  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#
9# 1.  Redistributions of source code must retain the above copyright
10#     notice, this list of conditions and the following disclaimer. 
11# 2.  Redistributions in binary form must reproduce the above copyright
12#     notice, this list of conditions and the following disclaimer in the
13#     documentation and/or other materials provided with the distribution. 
14# 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
15#     its contributors may be used to endorse or promote products derived
16#     from this software without specific prior written permission. 
17#
18# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29# A script to download the extra libraries needed to build WebKit on UNIX-based OSes.
30# libxml/libxslt need to be added, but so far I've had them on all the (UNIX) machines
31# I've tested on, so I don't have a machine to test the code on.
32
33DL_CMD="curl -L"
34
35scriptDir="$(cd $(dirname $0);pwd)"
36WK_ROOT=$scriptDir/../..
37WK_ROOTDIR=$WK_ROOT
38
39DL_DIR=/tmp/webkit-deps
40# NOTE: If you change this, make sure the dir is on the path.
41DEPS_PREFIX=$WK_ROOT/WebKitLibraries/unix
42DLLEXT=so
43
44if [ "${OSTYPE:0:6}" == "darwin" ]; then
45    DLLEXT=dylib
46fi
47
48mkdir -p $DL_DIR
49mkdir -p $DEPS_PREFIX
50
51ICU_VERSION="3.4.1"
52ICU_TARBALL="icu-$ICU_VERSION.tgz"
53ICU_URL="ftp://ftp.software.ibm.com/software/globalization/icu/$ICU_VERSION/$ICU_TARBALL"
54
55# dependent app, not lib, what should we do for these?
56
57GPERF_VERSION="3.0.1"
58GPERF_TARBALL="gperf-$GPERF_VERSION.tar.gz"
59GPERF_URL="ftp://mirrors.kernel.org/gnu/gperf/$GPERF_TARBALL"
60
61PKG_CONFIG_VERSION="0.20"
62PKG_CONFIG_TARBALL="pkg-config-$PKG_CONFIG_VERSION.tar.gz"
63PKG_CONFIG_URL="http://pkgconfig.freedesktop.org/releases/$PKG_CONFIG_TARBALL"
64
65ICONV_VERSION="1.9.2"
66ICONV_TARBALL="libiconv-$ICONV_VERSION.tar.gz"
67ICONV_URL="http://ftp.gnu.org/pub/gnu/libiconv/$ICONV_TARBALL"
68
69LIBJPEG_VERSION="6b"
70LIBJPEG_TARBALL="jpegsrc.v$LIBJPEG_VERSION.tar.gz"
71LIBJPEG_URL="http://wxwebkit.wxcommunity.com/downloads/deps/$LIBJPEG_TARBALL"
72
73LIBPNG_VERSION="1.2.33"
74LIBPNG_TARBALL="libpng-$LIBPNG_VERSION.tar.gz"
75LIBPNG_URL="http://wxwebkit.wxcommunity.com/downloads/deps/$LIBPNG_TARBALL"
76
77LIBCURL_VERSION="7.19.6"
78LIBCURL_TARBALL="curl-$LIBCURL_VERSION.tar.gz"
79LIBCURL_URL="http://curl.haxx.se/download/$LIBCURL_TARBALL"
80
81export MAC_OS_X_DEPLOYMENT_TARGET=10.4
82
83ARCH_FLAGS="-arch i386 -arch ppc -arch x86_64"
84SDK="/Developer/SDKs/MacOSX10.4u.sdk"
85
86if [ ! -d $SDK ]; then
87    SDK="/Developer/SDKs/MacOSX10.5.sdk"
88fi
89
90if [ "${OSTYPE:0:6}" == "darwin" ]; then  
91    export CC="gcc-4.0"
92    export CXX="g++-4.0"
93fi
94
95cd $DL_DIR
96# build ICU
97if [ `which icu-config >/dev/null 2>&1` ]; then
98  $DL_CMD -o $DL_DIR/$ICU_TARBALL $ICU_URL
99
100  tar xzvf $DL_DIR/$ICU_TARBALL
101  cd $DL_DIR/icu/source
102  
103  chmod +x configure install-sh
104
105  if [ "${OSTYPE:0:6}" == "darwin" ]; then  
106    ./configure --prefix=$DEPS_PREFIX --disable-dependency-tracking
107    make CFLAGS="-O -g -isysroot $SDK $ARCH_FLAGS" \
108    LDFLAGS=$ARCH_FLAGS
109    make install
110  else
111    ./configure --prefix=$DEPS_PREFIX
112  
113    make
114    #make check
115    make install
116  fi
117  cd $DL_DIR
118  rm -rf icu
119fi
120
121# TODO: What would be a good way to test for this?
122if [ ! -f $DEPS_PREFIX/lib/libiconv.$DLLEXT ]; then
123  $DL_CMD -o $DL_DIR/$ICONV_TARBALL $ICONV_URL
124
125  tar xzvf $DL_DIR/$ICONV_TARBALL
126  cd $DL_DIR/libiconv-$ICONV_VERSION
127
128  if [ "${OSTYPE:0:6}" == "darwin" ]; then  
129    ./configure --prefix=$DEPS_PREFIX --disable-dependency-tracking
130    make CFLAGS="-O -g -isysroot $SDK $ARCH_FLAGS" \
131    LDFLAGS="$ARCH_FLAGS"
132    make install
133  else
134    ./configure --prefix=$DEPS_PREFIX
135  
136    make
137    make install
138  fi
139  cd $DL_DIR
140  rm -rf $DL_DIR/libiconv-$ICONV_VERSION
141fi
142
143if [ ! -f $DEPS_PREFIX/lib/libjpeg.a ]; then
144  $DL_CMD -o $DL_DIR/$LIBJPEG_TARBALL $LIBJPEG_URL
145
146  tar xzvf $DL_DIR/$LIBJPEG_TARBALL
147  cd $DL_DIR/jpeg-$LIBJPEG_VERSION
148
149  # jpeg install command expects this to exist.
150  mkdir -p $DEPS_PREFIX/man/man1
151
152  if [ "${OSTYPE:0:6}" == "darwin" ]; then
153    ./configure --prefix=$DEPS_PREFIX --disable-dependency-tracking
154    make CFLAGS="-O -g -isysroot $SDK $ARCH_FLAGS" \
155    LDFLAGS="$ARCH_FLAGS"
156    make install
157  else
158    ./configure --prefix=$DEPS_PREFIX
159  
160    make
161  fi
162  
163  cp libjpeg.a $DEPS_PREFIX/lib
164  cp *.h $DEPS_PREFIX/include
165  
166  cd $DL_DIR
167  rm -rf $DL_DIR/jpeg-$LIBJPEG_VERSION
168fi
169
170if [ ! -f $DEPS_PREFIX/lib/libpng.a ]; then
171  $DL_CMD -o $DL_DIR/$LIBPNG_TARBALL $LIBPNG_URL
172
173  tar xzvf $DL_DIR/$LIBPNG_TARBALL
174  cd $DL_DIR/libpng-$LIBPNG_VERSION
175
176  if [ "${OSTYPE:0:6}" == "darwin" ]; then
177    ./configure --prefix=$DEPS_PREFIX --disable-dependency-tracking
178    make CFLAGS="-O -g -isysroot $SDK $ARCH_FLAGS" \
179    LDFLAGS="$ARCH_FLAGS"
180    make install
181  else
182    ./configure --prefix=$DEPS_PREFIX
183  
184    make
185    make install
186  fi
187  
188  cd $DL_DIR
189  rm -rf $DL_DIR/libpng-$LIBPNG_VERSION
190fi
191
192if [ ! -f $DEPS_PREFIX/lib/libcurl.$DLLEXT ]; then
193  $DL_CMD -o $DL_DIR/$LIBCURL_TARBALL $LIBCURL_URL
194
195  tar xzvf $DL_DIR/$LIBCURL_TARBALL
196  cd $DL_DIR/curl-$LIBCURL_VERSION
197
198  if [ "${OSTYPE:0:6}" == "darwin" ]; then
199    # CURL creates different build headers for 32 and 64 bit, so to get a universal build,
200    # we must first create a 32 bit version of the header, then a 64 bit version, and
201    # have the original header simply decide which to use.
202    export CFLAGS="-O -g -isysroot $SDK -mmacosx-version-min=10.4 -arch i386 -arch ppc"
203    ./configure --prefix=$DEPS_PREFIX --disable-dependency-tracking
204    
205    mkdir -p $DEPS_PREFIX/include/curl
206    
207    cp include/curl/curlbuild.h include/curl/curlbuild32.h
208    cp include/curl/curlbuild.h $DEPS_PREFIX/include/curl/curlbuild32.h
209    
210    make distclean
211    
212    export CFLAGS="-O -g -isysroot $SDK -mmacosx-version-min=10.4 -arch x86_64 -arch ppc64"
213    ./configure --prefix=$DEPS_PREFIX --disable-dependency-tracking
214    
215    cp include/curl/curlbuild.h include/curl/curlbuild64.h
216    cp include/curl/curlbuild.h $DEPS_PREFIX/include/curl/curlbuild64.h
217    
218    make distclean
219    
220    export CFLAGS="-O -g -isysroot $SDK -mmacosx-version-min=10.4 $ARCH_FLAGS"
221    ./configure --prefix=$DEPS_PREFIX --disable-dependency-tracking
222    
223    cat > include/curl/curlbuild.h <<EOF
224#ifdef __LP64__
225#include "curlbuild64.h"
226#else
227#include "curlbuild32.h"
228#endif 
229EOF
230
231    make CFLAGS="-O -g -isysroot $SDK $ARCH_FLAGS" \
232    LDFLAGS="$ARCH_FLAGS"
233    make install
234  else
235    ./configure --prefix=$DEPS_PREFIX
236  
237    make
238    make install
239  fi
240  
241  cd $DL_DIR
242  rm -rf $DL_DIR/curl-$LIBCURL_VERSION
243fi
244