#!/usr/bin/env bash
#
# Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
#
# Script to create a Debian jessie chroot environment for building Dart
# Debian packages.
#

function usage {
  USAGE="Usage: $0 i386|amd64 [target dir] [be|beta|dev|<stable version>]]\n
\n
The first mandatory argument speciifies the CPU architecture using\n
the Debian convention (e.g. i386 and amd64).\n
\n
The second optional argument specifies the destination\n
directory. This defaults to 'debian_<architecture>'.\n
\n
The third optional argument specifies whether the chroot is\n
populated with a Dart checkout. Use 'be' for bleeding edge, 'dev'\n
for trunk/developer or the specific version number for a stable\n
version (e.g. 1.2)."

  echo -e $USAGE
  exit 1
}

# Expect one to three arguments, architecture, optional directory and
# optional channel.
if [ $# -lt 1 ] || [ $# -gt 3 ]
then
  usage
fi

ARCH=$1

if [ -n "$2" ]
then
  CHROOT=$2
else
  CHROOT=debian_$ARCH
fi

if [ -n "$3" ]
then
  CHANNEL=$3
fi

if [ "$ARCH" != "i386" ] && [ "$ARCH" != "amd64" ]
then
  usage
fi

SVN_REPRO="http://dart.googlecode.com/svn/"
if [ -n "$CHANNEL" ]
then
  if [ "$CHANNEL" == "be" ]
  then
    SVN_PATH="branches/bleeding_edge/deps/all.deps"
  elif [ "$CHANNEL" == "dev" ]
  then
    SVN_PATH="trunk/deps/all.deps"
  else
    SVN_PATH="branches/$CHANNEL/deps/all.deps"
  fi
  SRC_URI=$SVN_REPRO$SVN_PATH
fi

# Create Debian jessie chroot.
debootstrap --arch=$ARCH --components=main,restricted,universe,multiverse \
    jessie $CHROOT http://http.us.debian.org/debian/
chroot $CHROOT apt-get update
chroot $CHROOT apt-get -y install \
    debhelper python3 git gcc sudo make

# Add chrome-bot user.
chroot $CHROOT groupadd --gid 1001 chrome-bot
chroot $CHROOT useradd --gid 1001 --uid 1001 --create-home chrome-bot
mkdir $CHROOT/b
chown 1001:1001 $CHROOT/b

# Create trampoline script for running the initialization as chrome-bot.
cat << EOF > $CHROOT/b/init_chroot_trampoline.sh
#!/bin/sh
su -c /b/init_chroot.sh chrome-bot
EOF

# Create initialization script which does nothing.
cat << 'EOF' > $CHROOT/b/init_chroot.sh
#!/bin/sh
cd /b
EOF

# If the channel is set extend the initialization script to check out
# the Dart sources. This uses two cat commands as the first part needs
# to bypass variable interpretation.
if [ -n "$SRC_URI" ]
then
cat << 'EOF' >> $CHROOT/b/init_chroot.sh
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=$PATH:/b/depot_tools
EOF

cat << EOF >> $CHROOT/b/init_chroot.sh
gclient config $SRC_URI
gclient sync
gclient runhooks
EOF
fi

chmod 755 $CHROOT/b/init_chroot_trampoline.sh

chown 1001:1001 $CHROOT/b/init_chroot.sh
chmod 755 $CHROOT/b/init_chroot.sh
chroot $CHROOT /bin/sh /b/init_chroot_trampoline.sh
