#!/bin/bash
# Script to install a catalog in the centralized SGML catalog
# Send any comments to Eric Bischoff <eric@caldera.de>
# This program is under GPL license. See LICENSE file for details.

# Modified by Gentoo developers to better integrate it to portage.
# <text-markup@gentoo.org>

# Set help message
SGML_HELP_MESSAGE="Usage: `basename $0` [<option>] <action>\n\
where <option> is:\n\
\040 -d|--delegate: \t\t\t Use DELEGATE instead of CATALOG\n\
and where <action> is:\n\
\040 -a|--add <centralized> <ordinary>: \t Declare ordinary catalog in the centralized catalog\n\
\040 -r|--remove <centralized> <ordinary>:\t Remove ordinary catalog from the centralized catalog\n\
\040 -h, --help: \t\t\t\t Print this help message and exit\n\
\040 -v, --version: \t\t\t Print the version number and exit\n"

# Set version message
SGML_VERSION_MESSAGE="sgml-common version 0.6.3 (install-catalog version 1.0)"

# Set type of pointer
SGML_POINTER="CATALOG"

# Set action to be performed
SGML_ACTION=""

# Set catalogs
SGML_CENTRALIZED=""
SGML_ORDINARY=""

# Default ROOT value (usually defined by portage)
[ -z "$ROOT" ] && ROOT="/"
[[ $ROOT == */ ]] || ROOT="${ROOT}/"
EPREFIX=""
EROOT=${ROOT%/}${EPREFIX}/


# Process options
case $1 in
   -d|--delegate) SGML_POINTER="DELEGATE"
                shift 1
                ;;
esac

# Process actions
case $1 in
   -a|--add)    SGML_ACTION="addition"
		SGML_CENTRALIZED=$2
		SGML_ORDINARY=$3
		;;
   -r|--remove)	if [ -z "$3" -o "$3" = "--version" ]
		then
		  echo "install-catalog: Old syntax; doing nothing"
		  exit 0
		fi
   		SGML_ACTION="removal"
		SGML_CENTRALIZED=$2
		SGML_ORDINARY=$3
		;;
   -h|--help)	echo -e $SGML_HELP_MESSAGE
		exit 0
		;;
   -v|--version) echo -e $SGML_VERSION_MESSAGE
	 	exit 0
		;;
   --install)   echo "install-catalog: Old syntax; doing nothing"
		exit 0
		;;
   *)		echo -e $SGML_HELP_MESSAGE >&2
		exit 1
		;;
esac


# The arguments to this program should always be relative to $ROOT. Here we
# declare some extra variables to distingish between the absolute and
# relative paths.
SGML_ROOT_CENTRALIZED="${ROOT%/}${SGML_CENTRALIZED}"
SGML_ROOT_ORDINARY="${ROOT%/}${SGML_ORDINARY}"


# Check that the super catalog can be created and changed and deleted
if [ ! -w "${EROOT}etc/sgml" ]
then
  echo "`basename $0`: unable to write in ${EROOT}etc/sgml." >&2
  exit 2
fi
case $SGML_ACTION in
   addition)
	if [ -e "${EROOT}etc/sgml/catalog" -a ! -w "${EROOT}etc/sgml/catalog" ]
	then
	  echo "`basename $0`: can not modify \"${EROOT}etc/sgml/catalog\"." >&2
	  exit 2
	fi
	;;
   removal)
	if [ ! -w "${EROOT}etc/sgml/catalog" ]
	then
	  echo "`basename $0`: can not modify \"${EROOT}etc/sgml/catalog\"." >&2
	  exit 2
	fi
	;;
esac

# Check that the centralized catalog can be created, changed and deleted
if [ -z "$SGML_ROOT_CENTRALIZED" ]
then
  echo -e $SGML_HELP_MESSAGE >&2
  exit 1
fi
case $SGML_ACTION in
   addition)
	if [ -e "$SGML_ROOT_CENTRALIZED" -a ! -w "$SGML_ROOT_CENTRALIZED" ]
	then
	  echo "`basename $0`: can not modify \"$SGML_ROOT_CENTRALIZED\"." >&2
	  exit 2
	fi
	;;
   removal)
	if [ ! -w "$SGML_ROOT_CENTRALIZED" ]
	then
	  echo "`basename $0`: can not modify \"$SGML_ROOT_CENTRALIZED\"." >&2
	  exit 2
	fi
	;;
esac

# Check that we have at least one ordinary package to process
if [ -z "$SGML_ROOT_ORDINARY" ]
then
  echo -e $SGML_HELP_MESSAGE >&2
  exit 1
fi
case $SGML_ACTION in
   addition)
	if [ ! -s "$SGML_ROOT_ORDINARY" ]
	then
	  echo "`basename $0`: \"$SGML_ROOT_ORDINARY\" does not exist or is empty." >&2
	  exit 2
	fi
	;;
esac

# Installation or removal of pointers
case $SGML_ACTION in
    addition)
	echo "`basename $0`: addition of $SGML_ORDINARY in $SGML_CENTRALIZED"
	if grep -q "$SGML_ORDINARY" "$SGML_ROOT_CENTRALIZED" 2>/dev/null
	then
	  echo "Warning: $SGML_ORDINARY is already installed in the centralized catalog $SGML_CENTRALIZED" >&2
	else
	  echo "$SGML_POINTER \"$SGML_ORDINARY\"" >> "$SGML_ROOT_CENTRALIZED"
	fi
	grep -q "$SGML_CENTRALIZED" "${EROOT}etc/sgml/catalog" 2>/dev/null
	if [ $? -ne 0 ]
	then
		echo "`basename $0`: addition of $SGML_CENTRALIZED in ${EROOT}etc/sgml/catalog"
		echo "$SGML_POINTER \"$SGML_CENTRALIZED\"" >> "${EROOT}etc/sgml/catalog"
	fi
	;;
   removal)
	echo "`basename $0`: removal of $SGML_ORDINARY from $SGML_CENTRALIZED"
	if grep -q "$SGML_ORDINARY" "$SGML_ROOT_CENTRALIZED" 2>/dev/null
	then
		sed -e "\:$SGML_POINTER \"$SGML_ORDINARY\":d" < \
			"$SGML_ROOT_CENTRALIZED" > "${SGML_ROOT_CENTRALIZED}.new"
		mv "${SGML_ROOT_CENTRALIZED}.new" "$SGML_ROOT_CENTRALIZED"
	else
	  echo "Warning: $SGML_ORDINARY was not found in the centralized catalog $SGML_CENTRALIZED" >&2
	fi
	if [ ! -s "$SGML_ROOT_CENTRALIZED" ]
	then
	  rm "$SGML_ROOT_CENTRALIZED"
	  echo "`basename $0`: removal of $SGML_CENTRALIZED from ${EROOT}etc/sgml/catalog"
          sed -e "\:$SGML_POINTER \"$SGML_CENTRALIZED\":d" < "${EROOT}etc/sgml/catalog" > "${EROOT}etc/sgml/catalog.new"
          mv "${EROOT}etc/sgml/catalog.new" "${EROOT}etc/sgml/catalog"
	fi
	;;
esac

exit 0
