#!/usr/bin/ksh

# @(#) run_makedisc 1.6@(#)

typeset PRG=
[[ $0 = /* ]] && PRG=$0 || PRG=$PWD/$0

typeset -r BIN_DIR=$(dirname $PRG)

export PATH="/export/YMI/bin:$PATH"

. $BIN_DIR/retools.ksh.lib

typeset OPT_SRC=
typeset OPT_DEST=
typeset OPT_VOLUME_INF=
typeset OPT_MOUNT_PT=
typeset OPT_MAKEDISC=makedisc
typeset OPT_DEBUG=false

typeset -r CD_CAPACITY=643
typeset MAKEDISC_OPTIONS="-g -w -R -d -v -l -t"
typeset -r PC_COMPATIBLE_OPTIONS="-g -w -R -d -r -l -t"


GetOpts() {

	typeset char=
	while getopts :f:m:e:gp char ; do
		case $char in
			f)	OPT_VOLUME_INF=$OPTARG	;;
			m)	OPT_MOUNT_PT=$OPTARG	;;
			e)	OPT_MAKEDISC=$OPTARG	;;
			p)	MAKEDISC_OPTIONS=$PC_COMPATIBLE_OPTIONS ;;
			g)	OPT_DEBUG=true
				set -x
				;;
			\?)	PrintErr "Unknown option $OPTARG"
				return 1
				;;
			:)	PrintErr "Option -$OPTARG requires a value!"
				return 1
				;;
		esac
	done

	shift OPTIND-1

	[ $# -ne 2 ] && {
		return 1
	}

	OPT_SRC=$1
	OPT_DEST=$2

	[ -z "$OPT_VOLUME_INF" -a -z "$OPT_MOUNT_PT" ] && {
		PrintErr "You must specify -f <volume.inf> or -m <mount_pt>"
		return 1
	}
	[ ! -z "$OPT_VOLUME_INF" -a ! -z "$OPT_MOUNT_PT" ] && {
		PrintErr "-f and -m are mutually exclusive"
		return 1
	}

	return 0
}


Usage() {
	PrintErr '\nUsage: run_makedisc -f volume_inf_file src_dir dest_file'
	PrintErr '       run_makedisc -m mount_point src_dir dest_file\n'
	PrintErr '       volume_inf_file = data file format specified' \
				'by makedisc(1).'
	PrintErr '       mount_point = name of automount directory\n'
}


_GetMakediscAbsolutePath() {
	[ "$OPT_DEBUG" = 'true' ] && set -x

	if [[ "$OPT_MAKEDISC" = /* ]] ; then
		echo $OPT_MAKEDISC
	else
		whence makedisc > /dev/null 2>&1 || {
			PrintErr "Cannot find makedisc(1) in the path, quitting"
			return 1
		}
		whence makedisc
	fi
	return 0
}


_GenVolumeInf() {

	typeset -ru mount_name=$1

	cat <<- EOF | sed -e 's:XMOUNT_DIRX:'"$mount_name:"
		SI"SUNSOFT_INC"
		VI"XMOUNT_DIRX"
		VS"INTERNAL_SERIES"
		PI"SUNSOFT_INC"
		DP"SOLARIS_PRODUCT_ENGINEERING"
		AI"NOT SPECIFIED"
		CM
		CF"COPYRGHT.FIL;1"
		AF"ABSTRACT.FIL;1"
		BF"BIBLIOG.FIL;1"
		CD""
		MD""
		FD""
	EOF

	return $?
}


Main() {
	[ "$OPT_DEBUG" = 'true' ] && set -x

	typeset makedisc=
	makedisc=$(_GetMakediscAbsolutePath)			|| return $?

	[ ! -x $makedisc ] && {
		PrintErr "Cannot execute $makedisc, quitting!"
		return 1
	}

	typeset -r logdir=${OPT_DEST}.log
	if [ -d $logdir ] ; then
		PrintErr "Directory $logdir has already existed!"
		PrintErr "Remove directory and restart if appropriate."
		return 1
	else
		mkdir $logdir					|| return $?
	fi

	typeset -r volume_inf=$logdir/volume.inf
	if [ ! -z "$OPT_MOUNT_PT" ] ; then
		_GenVolumeInf $OPT_MOUNT_PT > $volume_inf	|| return $?
	else
		cp $OPT_VOLUME_INF $volume_inf			|| return $?
	fi

	echo "MAKEDISC_OPTIONS: $MAKEDISC_OPTIONS"

	$makedisc $MAKEDISC_OPTIONS $logdir $OPT_SRC \
			$OPT_DEST $CD_CAPACITY > /dev/null 2>&1 || {
		integer error=$?
		PrintErr "Failed: see log files in $logdir for details"
		return $error
	}

	chmod 664 $OPT_DEST	|| {
		PrintErr "Failed to chmod on file $OPT_DEST"
		return 1
	}

	_PadFile $OPT_DEST	|| {
		PrintErr "Failed to pad to file $OPT_DEST"
		return 1
	}
}


GetOpts $@ || {
	Usage
	return 1
}


Main
return $?
