#! /bin/sh

# GDB script to create web ARI page directly from within gdb/ari directory.
#
# Copyright (C) 2012-2013 Free Software Foundation, Inc.
#
# This file is part of GDB.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Determine directory of current script.
scriptpath=`dirname $0`
# If "scriptpath" is a relative path, then convert it to absolute.
if [ "`echo ${scriptpath} | cut -b1`" != '/' ] ; then
    scriptpath="`pwd`/${scriptpath}"
fi

# update-web-ari.sh script wants four parameters
# 1: directory of checkout src or gdb-RELEASE for release sources.
# 2: a temp directory.
# 3: a directory for generated web page.
# 4: The name of the current package, must be gdb here.
# Here we provide default values for these 4 parameters

# srcdir parameter
if [ -z "${srcdir}" ] ; then
  srcdir=${scriptpath}/../../..
fi

# Determine location of a temporary directory to be used by
# update-web-ari.sh script.
if [ -z "${tempdir}" ] ; then
  if [ ! -z "$TMP" ] ; then
    tempdir=$TMP/create-ari
  elif [ ! -z "$TEMP" ] ; then
    tempdir=$TEMP/create-ari
  else
    tempdir=/tmp/create-ari
  fi
fi

# Default location of generate index.hmtl web page.
if [ -z "${webdir}" ] ; then
# Use 'branch' subdir name if Tag contains branch
  if [ -f "${srcdir}/gdb/CVS/Tag" ] ; then
    tagname=`cat "${srcdir}/gdb/CVS/Tag"`
  else
    tagname=trunk
  fi
  if [ "${tagname#branch}" != "${tagname}" ] ; then
    subdir=branch
  else
    subdir=trunk
  fi
  webdir=`pwd`/${subdir}/ari
fi

# Launch update-web-ari.sh in same directory as current script.
${SHELL} ${scriptpath}/update-web-ari.sh ${srcdir} ${tempdir} ${webdir} gdb

if [ -f "${webdir}/index.html" ] ; then
  echo "ARI output can be viewed in file \"${webdir}/index.html\""
else
  echo "ARI script failed to generate file \"${webdir}/index.html\""
fi

