#!/bin/bash

# Copyright (c) 2011 The Chromium OS Authors. 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 set /etc/lsb-release on the root file system. This script is run by
# build_image inside chroot.

readonly COMMON_SH=/usr/lib/crosutils/common.sh
if [ ! -r "${COMMON_SH}" ]; then
  echo "ERROR: Run inside chroot."
  exit 1
fi

. "${COMMON_SH}"

# Flags
DEFINE_string board "" "The board to build an image for."
DEFINE_string root "" "The root file system to write /etc/lsb-release to."

# Parse command line
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"

set -e

ROOT_FS_DIR="$FLAGS_root"
[ -n "$ROOT_FS_DIR" ] || die "--root is required."
[ -d "$ROOT_FS_DIR" ] || die "Root FS does not exist? ($ROOT_FS_DIR)"
[ -n "${CHROMEOS_VERSION_STRING}" ] || die "chromeos_version.sh isn't sourced."

hostname=$(hostname --fqdn || echo ${HOSTNAME:-localhost.localdomain})

CHROMEOS_VERSION_NAME="Chromium OS"
CHROMEOS_VERSION_AUSERVER=\
${CHROMEOS_VERSION_AUSERVER:-"http://${hostname}:8080/update"}
CHROMEOS_VERSION_DEVSERVER=\
${CHROMEOS_VERSION_DEVSERVER:-"http://${hostname}:8080"}

# Official builds must set CHROMEOS_OFFICIAL=1.
if [ ${CHROMEOS_OFFICIAL:-0} = 1 ]; then
  # Official builds (i.e., buildbot)
  CHROMEOS_VERSION_TRACK="dev-channel"
  CHROMEOS_VERSION_NAME="Chrome OS"
  CHROMEOS_VERSION_DESCRIPTION="${CHROMEOS_VERSION_STRING} (Official Build) \
${CHROMEOS_VERSION_TRACK} $FLAGS_board test"
  CHROMEOS_VERSION_AUSERVER="https://tools.google.com/service/update2"
  CHROMEOS_VERSION_DEVSERVER=""
elif [ "$USER" = "chrome-bot" ]; then
  # Continuous builder
  CHROMEOS_VERSION_TRACK="buildbot-build"
  CHROMEOS_VERSION_DESCRIPTION="${CHROMEOS_VERSION_STRING} (Continuous Build \
- Builder: ${BUILDBOT_BUILD:-"N/A"}) $FLAGS_board"
else
  # Developer hand-builds
  CHROMEOS_VERSION_TRACK=${CHROMEOS_VERSION_TRACK:-"developer-build"}
  CHROMEOS_VERSION_DESCRIPTION="${CHROMEOS_VERSION_STRING} (Developer Build \
- $USER) ${CHROMEOS_VERSION_TRACK} $FLAGS_board"
fi

# Set google-specific version numbers:
# CHROMEOS_RELEASE_BOARD is the target board identifier.
# CHROMEOS_RELEASE_DESCRIPTION is the version displayed by Chrome; see
#   chrome/browser/chromeos/chromeos_version_loader.cc.
# CHROMEOS_RELEASE_NAME is a human readable name for the build.
# CHROMEOS_RELEASE_TRACK and CHROMEOS_RELEASE_VERSION are used by the software
#   update service.
# TODO(skrul):  Remove GOOGLE_RELEASE once Chromium is updated to look at
#   CHROMEOS_RELEASE_VERSION for UserAgent data.
sudo_append "${ROOT_FS_DIR}/etc/lsb-release" <<EOF
CHROMEOS_RELEASE_BOARD=$FLAGS_board
CHROMEOS_RELEASE_DESCRIPTION=$CHROMEOS_VERSION_DESCRIPTION
CHROMEOS_RELEASE_NAME=$CHROMEOS_VERSION_NAME
CHROMEOS_RELEASE_TRACK=$CHROMEOS_VERSION_TRACK
CHROMEOS_RELEASE_VERSION=$CHROMEOS_VERSION_STRING
GOOGLE_RELEASE=$CHROMEOS_VERSION_STRING
CHROMEOS_AUSERVER=$CHROMEOS_VERSION_AUSERVER
CHROMEOS_DEVSERVER=$CHROMEOS_VERSION_DEVSERVER
EOF
