# start of install
#
# $NetBSD: install,v 1.18 2002/11/21 10:11:57 jlam Exp $

case ${STAGE} in
PRE-INSTALL)
	msginit
	_pkg_exit=0
	if [ -n "${PKG_GROUPS}" ]; then
		_print_group_header=1
		eval set -- ${PKG_GROUPS}
		for groupset; do
			save_IFS="${IFS}"; IFS=":"
			set -- ${groupset}
			group="$1"; groupid="$2"
			IFS="${save_IFS}"
			
			# We need to check that ${PKG_GROUP} exists before
			# adding the user.  Do it with chgrp to be able to
			# use NIS.
			#
	          	${TOUCH} /tmp/grouptest.$$
		  	if ${CHGRP} ${group} /tmp/grouptest.$$ >/dev/null 2>&1; then
				${ECHO} "Group '${group}' already exists."
			elif [ "${_PKG_CREATE_USERGROUP}" = "NO" ]; then
				if [ ${_print_group_header} -gt 0 ]; then
					_print_group_header=0
					msgadd ""
					msgadd "The following groups need to be created for ${PKGNAME}:"
					msgadd ""
				fi
				if [ -z "${groupid}" ]; then
					groupid_str=
				else
					groupid_str=" (${groupid})"
				fi
				msgadd "#${group}${groupid_str}"
				_pkg_exit=1
			else
				groupid_option=
				if [ -n "${groupid}" ]; then
					groupid_option="-g"
				fi
				${ECHO} "Creating group: ${group}"
				${GROUPADD} ${groupid_option} ${groupid} "${group}"
			fi
			${RM} -f /tmp/grouptest.$$
		done
	fi
	if [ -n "${PKG_USERS}" ]; then
		_print_user_header=1
		eval set -- ${PKG_USERS}
		for userset; do
			save_IFS="${IFS}"; IFS=":"
			set -- ${userset}
			user="$1"; group="$2"; userid="$3"
			descr="${4:-${PKGBASE} ${user} user}"
			home="${5:-@PKG_USER_HOME@}"
			shell="${6:-@PKG_USER_SHELL@}"
			IFS="${save_IFS}"

			# Use `id' to be able to use NIS.
			if ${ID} "${user}" >/dev/null 2>&1; then
				${ECHO} "User '${user}' already exists."
			elif [ "${_PKG_CREATE_USERGROUP}" = "NO" ]; then
				if [ ${_print_user_header} -gt 0 ]; then
					_print_user_header=0
					msgadd ""
					msgadd "The following users need to be created for ${PKGNAME}:"
					msgadd ""
				fi
				if [ -z "${userid}" ]; then
					userid_str=
				else
					userid_str=" (${userid})"
				fi
				msgadd "#${user}${userid_str}: ${group}, ${home}, ${shell}"
				_pkg_exit=1
			else
				userid_option=
				if [ -n "${userid}" ]; then
					userid_option="-u"
				fi
				${ECHO} "Creating user: ${user}"
				${USERADD} -c "${descr}"		\
					${userid_option} ${userid}	\
					-g "${group}"			\
					-d "${home}"			\
					-s "${shell}"			\
					"${user}"
			fi
		done
	fi
	if ! msgempty; then
		${ECHO} "==========================================================================="
		msgprint
		${ECHO} ""
		${ECHO} "==========================================================================="
	fi
	if [ ${_pkg_exit} -gt 0 ]; then
		exit ${_pkg_exit}
	fi
        ;;

POST-INSTALL)
	msginit
	#
	# Create package directories.
	#
	if [ -n "${MAKE_DIRS}" -o -n "${OWN_DIRS}" -o			\
	     -n "${MAKE_DIRS_PERMS}" -o -n "${OWN_DIRS_PERMS}" ]; then
		_print_dir_header=1
		if [ -z "${RCD_SCRIPTS}" -o "${_PKG_RCD_SCRIPTS}" = "NO" ]; then
			_RCD_SCRIPTS_DIR=
		else
			_RCD_SCRIPTS_DIR="${RCD_SCRIPTS_DIR}"
		fi
		eval set -- ${_RCD_SCRIPTS_DIR} ${MAKE_DIRS} ${OWN_DIRS}
		for dir; do
			if [ -d "${dir}" ]; then
				continue
			fi
			if [ "${_PKG_CONFIG}" = "NO" ]; then
				if [ ${_print_dir_header} -gt 0 ]; then
					_print_dir_header=0
					msgadd ""
					msgadd "The following directories should be created for ${PKGNAME}:"
					msgadd ""
				fi
				msgadd "#${dir}"
			else
				${MKDIR} "${dir}"
				${ECHO} "${PKGBASE}" > "${dir}/.pkgsrc"
			fi
		done
		eval set -- ${MAKE_DIRS_PERMS} ${OWN_DIRS_PERMS}
		while [ $# -gt 0 ]; do
			dir="$1"; owner="$2"; group="$3"; mode="$4"
			shift; shift; shift; shift
			if [ "${_PKG_CONFIG}" = "NO" ]; then
				if [ ${_print_dir_header} -gt 0 ]; then
					_print_dir_header=0
					msgadd ""
					msgadd "The following directories should be created for ${PKGNAME}:"
					msgadd ""
				fi
				msgadd "#${dir} (o=${owner}, g=${group}, m=${mode})"
			else
				if [ ! -d "${dir}" ]; then
					${MKDIR} "${dir}"
					${ECHO} "${PKGBASE}" > "${dir}/.pkgsrc"
				fi
				${CHOWN} -R "${owner}" "${dir}"
				${CHGRP} -R "${group}" "${dir}"
				${CHMOD} -R "${mode}" "${dir}"
			fi
		done
	fi

	if [ "${_PKG_CONFIG}" = "YES" ]; then
		if [ -n "${CONF_FILES}" -o				\
		     -n "${CONF_FILES_PERMS}" -o			\
		     -n "${SUPPORT_FILES}" -o				\
		     -n "${SUPPORT_FILES_PERMS}" ] ||			\
		   [ "${_PKG_RCD_SCRIPTS}" = "YES" -a			\
		     -n "${RCD_SCRIPTS}" ]; then
			${CAT} << EOF
Installing configuration files for ${PKGNAME}:

EOF
		fi
	fi
	_print_file_header=1
	eval set -- ${CONF_FILES}
	while [ $# -gt 0 ]; do
		samplefile="$1"; file="$2"
		shift; shift

		if [ "${_PKG_CONFIG}" = "NO" ]; then
			if [ ${_print_file_header} -gt 0 ]; then
				_print_file_header=0
				msgadd ""
				msgadd "The following files should be created for ${PKGNAME}:"
				msgadd ""
			fi
			msgadd "#${file} (m=@CONF_FILES_MODE@)"
		elif [ -e "${file}" ]; then
			${ECHO} "    ${file} already exists, example file is"
			${ECHO} "        ${samplefile}"
		else
			if [ -e "${samplefile}" ]; then
				${ECHO} "    ${file}"
				${CP} "${samplefile}" "${file}"
				${CHMOD} @CONF_FILES_MODE@ "${file}"
			fi
		fi
	done
	eval set -- ${SUPPORT_FILES}
	while [ $# -gt 0 ]; do
		samplefile="$1"; file="$2"
		shift; shift

		if [ "${_PKG_CONFIG}" = "NO" ]; then
			if [ ${_print_file_header} -gt 0 ]; then
				_print_file_header=0
				msgadd ""
				msgadd "The following files should be created for ${PKGNAME}:"
				msgadd ""
			fi
			msgadd "#${file} (m=@SUPPORT_FILES_MODE@)"
		elif [ -e "${file}" ]; then
			${ECHO} "    ${file} already exists, example file is"
			${ECHO} "        ${samplefile}"
		else
			if [ -e "${samplefile}" ]; then
				${ECHO} "    ${file}"
				${CP} "${samplefile}" "${file}"
				${CHMOD} @SUPPORT_FILES_MODE@ "${file}"
			fi
		fi
	done
	eval set -- ${CONF_FILES_PERMS} ${SUPPORT_FILES_PERMS}
	while [ $# -gt 0 ]; do
		samplefile="$1"; file="$2"
		owner="$3"; group="$4"; mode="$5"
		shift; shift; shift; shift; shift

		if [ "${_PKG_CONFIG}" = "NO" ]; then
			if [ ${_print_file_header} -gt 0 ]; then
				_print_file_header=0
				msgadd ""
				msgadd "The following files should be created for ${PKGNAME}:"
				msgadd ""
			fi
			msgadd "#${file} (o=${owner}, g=${group}, m=${mode})"
		elif [ -e ${file} ]; then
			${ECHO} "    ${file} already exists, example file is"
			${ECHO} "        ${samplefile}"
		else
			if [ -e "${samplefile}" ]; then
				${ECHO} "    ${file}"
				${CP} "${samplefile}" "${file}"
				${CHOWN} "${owner}" "${file}"
				${CHGRP} "${group}" "${file}"
				${CHMOD} ${mode} "${file}"
			fi
		fi
	done
	eval set -- ${RCD_SCRIPTS}
	for script; do
		samplefile="${RCD_SCRIPTS_EXAMPLEDIR}/${script}"
		file="${RCD_SCRIPTS_DIR}/${script}"

		if [ "${_PKG_CONFIG}" = "NO" -o				\
		     "${_PKG_RCD_SCRIPTS}" = "NO" ]; then
			if [ ${_print_file_header} -gt 0 ]; then
				_print_file_header=0
				msgadd ""
				msgadd "The following files should be created for ${PKGNAME}:"
				msgadd ""
			fi
			msgadd "#${file} (m=@RCD_SCRIPTS_MODE@)"
		elif [ -e "${file}" ]; then
			${ECHO} "    ${file} already exists, example file is"
			${ECHO} "        ${samplefile}"
		else
			if [ -e "${samplefile}" ]; then
				${ECHO} "    ${file}"
				${CP} "${samplefile}" "${file}"
				${CHMOD} @RCD_SCRIPTS_MODE@ "${file}"
			fi
		fi
	done
	_print_special_header=1
	eval set -- ${SPECIAL_PERMS}
	while [ $# -gt 0 ]; do
		file="$1"; owner="$2"; group="$3"; mode="$4"
		shift; shift; shift; shift

		if [ ${_print_special_header} -gt 0 ]; then
			_print_special_header=0
			msgadd ""
			msgadd "The following files and directories have special permissions:"
			msgadd ""
		fi
		msgadd "#${file} (o=${owner}, g=${group}, m=${mode})"
		${CHOWN} "${owner}" "${file}"
		${CHGRP} "${group}" "${file}"
		${CHMOD} ${mode} "${file}"
	done
	if ! msgempty; then
		${ECHO} "==========================================================================="
		msgprint
		${ECHO} ""
		${ECHO} "==========================================================================="
	fi
	if [ "${_PKG_CONFIG}" = "YES" ]; then
		if [ -n "${CONF_FILES}" -o -n "${CONF_FILES_PERMS}" ]; then
			${CAT} << EOF

===========================================================================
You may wish to customize the following files for ${PKGNAME}:

EOF
			eval set -- ${CONF_FILES}
			while [ $# -gt 0 ]; do
				samplefile="$1"; file="$2"
				shift; shift

				${ECHO} "	${file}"
		       	done
			eval set -- ${CONF_FILES_PERMS}
			while [ $# -gt 0 ]; do
				samplefile="$1"; file="$2"
				owner="$3"; group="$4"; mode="$5"
				shift; shift; shift; shift; shift

				${ECHO} "	${file}"
			done
			${CAT} << EOF
===========================================================================
EOF
		fi
	fi
	if [ -n "${PKG_SHELL}" -a "${PKG_REGISTER_SHELLS}" = "YES" ]; then
		${ECHO} "===> Updating /etc/shells"
		${TOUCH} /etc/shells
		${CP} /etc/shells /etc/shells.pkgsrc."$$"
		(${GREP} -v ${PKG_SHELL} /etc/shells.pkgsrc."$$" || ${TRUE}; ${ECHO} ${PKG_SHELL}) > /etc/shells
		${RM} /etc/shells.pkgsrc."$$"
	fi
	;;

*)
	${ECHO} "Unexpected argument: ${STAGE}"
	exit 1
	;;
esac

# end of install