3 ## (From INN-1.4, written by Rich Salz)
5 ## A script to install files and directories.
9 ## Paths to programs. CHOWN, STRIP and WHOAMI are checked below.
21 ## Some systems don't support -x, so we have to use -f.
22 for d in /sbin /etc /usr/sbin /usr/etc; do
23 if [ -f $d/chown ]; then
29 for d in /usr/bin /bin /usr/ucb /usr/bsd; do
30 if [ -f $d/whoami ]; then
33 elif [ -f $d/id ]; then
34 WHOAMI=${d}/id | sed -n 's/^[^(]*(\([^)]*\)).*/\1/p'
38 for d in /usr/ccs/bin /usr/bin /bin; do
39 if [ -f $d/strip ]; then
65 while ${MORETODO} ; do
74 BACKUP=`expr "$1" : '-b\(.*\)'`
77 # backwards compatibility
88 GROUP=`expr "$1" : '-g\(.*\)'`
94 ${ROOT} && CHGROUPIT=true
98 GROUP=`expr "$1" : '-g\(.*\)'`
108 MODE=`expr "$1" : '-m\(.*\)'`
113 ${ROOT} && CHMODIT=true
117 MODE=`expr "$1" : '-m\(.*\)'`
118 ${ROOT} && CHMODIT=true
129 OWNER=`expr "$1" : '-o\(.*\)'`
135 ${ROOT} && CHOWNIT=true
139 OWNER=`expr "$1" : '-o\(.*\)'`
151 echo "${PROGNAME}: Unknown flag $1" 1>&2
161 ## Making a directory?
163 while test $# != 0; do
165 if [ ! -d "${DEST}" ] ; then
166 ${MKDIR} "${DEST}" || exit 1
169 ${CHOWN} "${OWNER}" "${DEST}" || exit 1
171 if ${CHGROUPIT} ; then
172 ${CHGRP} "${GROUP}" "${DEST}" || exit 1
175 ${CHMOD} "${MODE}" "${DEST}" || exit 1
182 ## Process arguments.
183 if [ $# -ne 2 ] ; then
184 echo "Usage: ${PROGNAME} [flags] source destination"
188 ## Get the destination and a temp file in the destination diretory.
189 if [ -d "$2" ] ; then
190 DEST="$2/`basename $1`"
194 TEMP="`expr "$2" : '\(.*\)/.*'`/$$.tmp"
197 ## If not given the same name, we must try to copy.
198 if [ X"$1" != X"$2" ] ; then
199 if cmp -s "$1" "${DEST}" ; then
200 ## Files are same; touch or not.
201 ${TOUCHIT} && touch "${DEST}"
203 ## If destination exists and we wish to backup, link to backup.
204 if [ -f "${DEST}" ] ; then
206 ${RM} -f "${DEST}${BACKUP}"
207 ${LN} "${DEST}" "${DEST}${BACKUP}"
210 ## Copy source to the right dir, then move to right spot.
211 ## Done in two parts so we can hope for atomicity.
212 ## We need to rm DEST due to bugs in "mv -f" on some systems.
213 ${RM} -f "${TEMP}" || exit 1
214 ${CP} "$1" "${TEMP}" || exit 1
215 ${RM} -f "${DEST}" || exit 1
216 ${MV} -f "${TEMP}" "${DEST}" || exit 1
220 ## Strip and set the modes.
222 ${STRIP} "${DEST}" || exit 1
225 ${CHOWN} "${OWNER}" "${DEST}" || exit 1
227 if ${CHGROUPIT} ; then
228 ${CHGRP} "${GROUP}" "${DEST}" || exit 1
231 ${CHMOD} "${MODE}" "${DEST}" || exit 1