# $NetBSD: shell,v 1.1 2006/05/21 23:50:15 jlam Exp $ # # Generate a +SHELL script that handles shell registration for the package. # case "${STAGE},$1" in UNPACK,|UNPACK,+SHELL) ${CAT} > ./+SHELL << 'EOF' #!@SH@ # # +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@" TRUE="@TRUE@" TOUCH="@TOUCH@" SELF=$0 ACTION=$1 PKG_METADATA_DIR="${2-`${PWD_CMD}`}" : ${PKG_PREFIX=@PREFIX@} : ${PKGNAME=${PKG_METADATA_DIR##*/}} case "${PKG_REGISTER_SHELLS:-@PKG_REGISTER_SHELLS@}" in [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) _PKG_REGISTER_SHELLS=yes ;; [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) _PKG_REGISTER_SHELLS=no ;; esac exitcode=0 case $ACTION in ADD) ${SED} -n "/^\# SHELL: /{s/^\# SHELL: //;p;}" ${SELF} | ${SORT} -u | { while read shell; do case ${_PKG_REGISTER_SHELLS} in no) continue ;; esac case $shell in /*) continue ;; *) if [ ${PKG_PREFIX} = / ] ; then shell="/$shell" else shell="${PKG_PREFIX}/$shell" fi ;; esac ${TEST} -f "$shell" || continue shelldb="/etc/shells" ${TEST} -f "$shelldb" || continue 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 ${_PKG_REGISTER_SHELLS} in no) continue ;; esac case $shell in /*) continue ;; *) if [ ${PKG_PREFIX} = / ] ; then shell="/$shell" else shell="${PKG_PREFIX}/$shell" fi ;; 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 ;; *) if [ ${PKG_PREFIX} = / ] ; then shell="/$shell" else shell="${PKG_PREFIX}/$shell" fi ;; 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 ;; *) if [ ${PKG_PREFIX} = / ] ; then shell="/$shell" else shell="${PKG_PREFIX}/$shell" fi ;; 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 EOF ${SED} -n "/^\# SHELL: /p" ${SELF} >> ./+SHELL ${CHMOD} +x ./+SHELL ;; esac