#!/bin/sh
# Script to install everything needed to build chromium (well, ideally, anyway)
# See http://code.google.com/p/chromium/wiki/LinuxBuildInstructions
# and http://code.google.com/p/chromium/wiki/LinuxBuild64Bit
set -ex

# Root can't access files on all filesystems, but /tmp should always be ok
# (unless it's full).  
DIR=`mktemp -d`
cd $DIR
touch .created

cleanup() {
  test -f $DIR/.created && rm -rf $DIR
}

# TODO(dkegel): add sha1sum verification
download() {
  dir=$1
  file=$2
  if ! test -f $file
  then
    wget $MIRROR/$dir/$file
  fi
}

unpack_deb() {
  file=$1
  ar x $file
  tar -xzvf data.tar.gz
  rm -f data.tar.gz control.tar.gz
}

download_deb() {
  download $1 $2
  unpack_deb $2
}

install_hardy() {
  sudo apt-get install subversion pkg-config python perl g++ g++-multilib \
       bison flex gperf libnss3-dev libglib2.0-dev libgtk2.0-dev \
       libnspr4-0d libnspr4-dev wdiff lighttpd php5-cgi msttcorefonts \
       sun-java6-fonts
}

install_hardy_64() {
  install_hardy

  # The packages libnspr4, libnss3, and libsqlite don't have 32
  # bit compabibility versions on 64 bit ubuntu hardy,
  # so install them packages the hard way
  # See https://bugs.launchpad.net/ubuntu/+source/ia32-libs/+bug/246911
  # TODO: There is no bug report yet for 32 bit sqlite runtime

  mkdir -p workdir-hardy64
  cd workdir-hardy64
  rm -rf usr

  MIRROR=http://mirrors.kernel.org/ubuntu
  download_deb pool/main/n/nspr libnspr4-0d_4.7.1~beta2-0ubuntu1_i386.deb
  download_deb pool/main/n/nss libnss3-1d_3.12.0~beta3-0ubuntu1_i386.deb
  download_deb pool/main/s/sqlite3 libsqlite3-0_3.4.2-2_i386.deb

  sudo rsync -v -a usr/lib/* /usr/lib32/
  sudo ldconfig

  # Make missing symlinks as described by 
  # https://bugs.launchpad.net/ubuntu/+source/ia32-libs/+bug/277772
  # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=492453 
  # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=497087
  cd /usr/lib32
  for lib in gio-2.0 gdk-x11-2.0 atk-1.0 gdk_pixbuf-2.0 \
           pangocairo-1.0 pango-1.0 pangoft2-1.0 \
           gobject-2.0 gmodule-2.0 glib-2.0 gtk-x11-2.0; do
    sudo ln -s -f lib$lib.so.0 lib$lib.so
  done
  for lib in z fontconfig
  do
    sudo ln -s -f lib$lib.so.1 lib$lib.so
  done
  for lib in cairo
  do
    sudo ln -s -f lib$lib.so.2 lib$lib.so
  done
  for lib in freetype
  do
    sudo ln -s -f lib$lib.so.6 lib$lib.so
  done
  for lib in plds4 plc4 nspr4
  do
    sudo ln -s -f /usr/lib32/lib$lib.so.0d /usr/lib32/lib$lib.so
  done

  for lib in nss3 nssutil3 smime3 ssl3
  do
    sudo ln -s -f /usr/lib32/lib$lib.so.1d /usr/lib32/lib$lib.so
  done
}

if egrep -q "Ubuntu 8.04|Ubuntu 8.10" /etc/issue && test `uname -m` = i686
then
  install_hardy
elif egrep -q "Ubuntu 8.04|Ubuntu 8.10" /etc/issue && test `uname -m` = x86_64
then
  install_hardy_64
else
  echo "Unsupported system"
  cleanup
  exit 1
fi
cleanup

