189 lines
4.9 KiB
Text
189 lines
4.9 KiB
Text
|
#!@SH@
|
||
|
#
|
||
|
# $NetBSD: shell,v 1.1 2005/07/29 18:32:18 jlam Exp $
|
||
|
#
|
||
|
# +SHELL - shell registration script
|
||
|
#
|
||
|
# Usage: ./+SHELL ADD|REMOVE [metadatadir]
|
||
|
# ./+SHELL CHECK-ADD|CHECK-REMOVE [metadatadir]
|
||
|
#
|
||
|
# This script supports two actions, ADD and REMOVE, that will add or
|
||
|
# remove shell paths from the shell database in /etc/shells. The
|
||
|
# CHECK-ADD action will check whether shell paths provided by the
|
||
|
# package are missing from the shell database, and print an informative
|
||
|
# message noting those shell paths. The CHECK-REMOVE action will check
|
||
|
# whether shell paths provided by the package are still present in the
|
||
|
# shell database, and print an informative message noting those shell
|
||
|
# paths. The CHECK-ADD and CHECK-REMOVE actions return non-zero if
|
||
|
# they detect either missing or existing paths, respectively.
|
||
|
#
|
||
|
# Lines starting with "# SHELL: " are data read by this script that
|
||
|
# name the shell paths that should be added or removed from the shell
|
||
|
# database. If the path is relative, then it is taken to be relative
|
||
|
# to ${PKG_PREFIX}.
|
||
|
#
|
||
|
# # SHELL: bin/pdksh
|
||
|
#
|
||
|
CAT="@CAT@"
|
||
|
CP="@CP@"
|
||
|
ECHO="@ECHO@"
|
||
|
GREP="@GREP@"
|
||
|
PWD_CMD="@PWD_CMD@"
|
||
|
RM="@RM@"
|
||
|
SED="@SED@"
|
||
|
SORT="@SORT@"
|
||
|
TEST="@TEST@"
|
||
|
TOUCH="@TOUCH@"
|
||
|
|
||
|
SELF=$0
|
||
|
ACTION=$1
|
||
|
|
||
|
PKG_METADATA_DIR="${2-`${PWD_CMD}`}"
|
||
|
: ${PKG_PREFIX=@PREFIX@}
|
||
|
: ${PKGNAME=${PKG_METADATA_DIR##*/}}
|
||
|
|
||
|
exitcode=0
|
||
|
case $ACTION in
|
||
|
ADD)
|
||
|
${SED} -n "/^\# SHELL: /{s/^\# SHELL: //;p;}" ${SELF} | ${SORT} -u |
|
||
|
{ while read shell; do
|
||
|
case $shell in
|
||
|
/*) continue ;;
|
||
|
*) shell="${PKG_PREFIX}/$shell" ;;
|
||
|
esac
|
||
|
${TEST} -f "$shell" || continue
|
||
|
|
||
|
shelldb="/etc/shells"
|
||
|
if ${TEST} -f "$shelldb" && \
|
||
|
${GREP} "^$shell" $shelldb >/dev/null; then
|
||
|
:
|
||
|
else
|
||
|
case "$printed_header" in
|
||
|
yes) ;;
|
||
|
*) printed_header=yes
|
||
|
${ECHO} "==========================================================================="
|
||
|
${ECHO} "Adding shells from ${PKGNAME} to $shelldb:"
|
||
|
${ECHO} ""
|
||
|
;;
|
||
|
esac
|
||
|
${ECHO} " $shell"
|
||
|
${TOUCH} $shelldb
|
||
|
${CP} $shelldb $shelldb.pkgsrc."$$"
|
||
|
{ ${CAT} $shelldb.pkgsrc."$$"; ${ECHO} "$shell"; } > $shelldb
|
||
|
${RM} $shelldb.pkgsrc."$$"
|
||
|
fi
|
||
|
done
|
||
|
case "$printed_header" in
|
||
|
yes) ${ECHO} ""
|
||
|
${ECHO} "==========================================================================="
|
||
|
;;
|
||
|
esac; }
|
||
|
;;
|
||
|
|
||
|
REMOVE)
|
||
|
${SED} -n "/^\# SHELL: /{s/^\# SHELL: //;p;}" ${SELF} | ${SORT} -u |
|
||
|
{ while read shell; do
|
||
|
case $shell in
|
||
|
/*) continue ;;
|
||
|
*) shell="${PKG_PREFIX}/$shell" ;;
|
||
|
esac
|
||
|
${TEST} -f "$shell" || continue
|
||
|
|
||
|
shelldb="/etc/shells"
|
||
|
if ${TEST} -f "$shelldb" && \
|
||
|
${GREP} "^$shell" $shelldb >/dev/null; then
|
||
|
case "$printed_header" in
|
||
|
yes) ;;
|
||
|
*) printed_header=yes
|
||
|
${ECHO} "==========================================================================="
|
||
|
${ECHO} "Removing shells from ${PKGNAME} to $shelldb:"
|
||
|
${ECHO} ""
|
||
|
;;
|
||
|
esac
|
||
|
${ECHO} " $shell"
|
||
|
${TOUCH} $shelldb
|
||
|
${CP} $shelldb $shelldb.pkgsrc."$$"
|
||
|
{ ${GREP} -v "^$shell" $shelldb.pkgsrc."$$" || ${TRUE}; } > $shelldb
|
||
|
${RM} $shelldb.pkgsrc."$$"
|
||
|
fi
|
||
|
done
|
||
|
case "$printed_header" in
|
||
|
yes) ${ECHO} ""
|
||
|
${ECHO} "==========================================================================="
|
||
|
;;
|
||
|
esac; }
|
||
|
;;
|
||
|
|
||
|
CHECK-ADD)
|
||
|
${SED} -n "/^\# SHELL: /{s/^\# SHELL: //;p;}" ${SELF} | ${SORT} -u |
|
||
|
{ while read shell; do
|
||
|
case $shell in
|
||
|
/*) continue ;;
|
||
|
*) shell="${PKG_PREFIX}/$shell" ;;
|
||
|
esac
|
||
|
${TEST} -f "$shell" || continue
|
||
|
|
||
|
shelldb="/etc/shells"
|
||
|
if ${TEST} -f "$shelldb" && \
|
||
|
${GREP} "^$shell" $shelldb >/dev/null; then
|
||
|
:
|
||
|
else
|
||
|
case "$printed_header" in
|
||
|
yes) ;;
|
||
|
*) printed_header=yes
|
||
|
${ECHO} "==========================================================================="
|
||
|
${ECHO} "The following lines can be added to $shelldb:"
|
||
|
${ECHO} ""
|
||
|
;;
|
||
|
esac
|
||
|
${ECHO} " $shell"
|
||
|
fi
|
||
|
done
|
||
|
case "$printed_header" in
|
||
|
yes) ${ECHO} ""
|
||
|
${ECHO} "==========================================================================="
|
||
|
exit 1
|
||
|
;;
|
||
|
esac; }
|
||
|
${TEST} $? -eq 0 || exitcode=1
|
||
|
;;
|
||
|
|
||
|
CHECK-REMOVE)
|
||
|
${SED} -n "/^\# SHELL: /{s/^\# SHELL: //;p;}" ${SELF} | ${SORT} -u |
|
||
|
{ while read shell; do
|
||
|
case $shell in
|
||
|
/*) continue ;;
|
||
|
*) shell="${PKG_PREFIX}/$shell" ;;
|
||
|
esac
|
||
|
${TEST} -f "$shell" || continue
|
||
|
|
||
|
shelldb="/etc/shells"
|
||
|
if ${TEST} -f "$shelldb" && \
|
||
|
${GREP} "^$shell" $shelldb >/dev/null; then
|
||
|
case "$printed_header" in
|
||
|
yes) ;;
|
||
|
*) printed_header=yes
|
||
|
${ECHO} "==========================================================================="
|
||
|
${ECHO} "The following lines can be removed from $shelldb:"
|
||
|
${ECHO} ""
|
||
|
;;
|
||
|
esac
|
||
|
${ECHO} " $shell"
|
||
|
fi
|
||
|
done
|
||
|
case "$printed_header" in
|
||
|
yes) ${ECHO} ""
|
||
|
${ECHO} "==========================================================================="
|
||
|
exit 1
|
||
|
;;
|
||
|
esac; }
|
||
|
${TEST} $? -eq 0 || exitcode=1
|
||
|
;;
|
||
|
|
||
|
*)
|
||
|
${ECHO} "Usage: ./+SHELL ADD|REMOVE [metadatadir]"
|
||
|
${ECHO} " ./+SHELL CHECK-ADD|CHECK-REMOVE [metadatadir]"
|
||
|
;;
|
||
|
esac
|
||
|
exit $exitcode
|