1#!/bin/sh 2# 3# Ostatnia aktualizacja: 4# $Id: install-sh,v 1.2 2002/07/12 15:51:34 mati Exp $ 5# 6# install - install a program, script, or datafile 7# This comes from X11R5 (mit/util/scripts/install.sh). 8# 9# Copyright 1991 by the Massachusetts Institute of Technology 10# 11# Permission to use, copy, modify, distribute, and sell this software and its 12# documentation for any purpose is hereby granted without fee, provided that 13# the above copyright notice appear in all copies and that both that 14# copyright notice and this permission notice appear in supporting 15# documentation, and that the name of M.I.T. not be used in advertising or 16# publicity pertaining to distribution of the software without specific, 17# written prior permission. M.I.T. makes no representations about the 18# suitability of this software for any purpose. It is provided "as is" 19# without express or implied warranty. 20# 21# Calling this script install-sh is preferred over install.sh, to prevent 22# `make' implicit rules from creating a file called install from it 23# when there is no Makefile. 24# 25# This script is compatible with the BSD install script, but was written 26# from scratch. It can only install one file at a time, a restriction 27# shared with many OS's install programs. 28 29 30# set DOITPROG to echo to test this script 31 32# Don't use :- since 4.3BSD and earlier shells don't like it. 33doit="${DOITPROG-}" 34 35 36# put in absolute paths if you don't have them in your path; or use env. vars. 37 38mvprog="${MVPROG-mv}" 39cpprog="${CPPROG-cp}" 40chmodprog="${CHMODPROG-chmod}" 41chownprog="${CHOWNPROG-chown}" 42chgrpprog="${CHGRPPROG-chgrp}" 43stripprog="${STRIPPROG-strip}" 44rmprog="${RMPROG-rm}" 45mkdirprog="${MKDIRPROG-mkdir}" 46 47transformbasename="" 48transform_arg="" 49instcmd="$mvprog" 50chmodcmd="$chmodprog 0755" 51chowncmd="" 52chgrpcmd="" 53stripcmd="" 54rmcmd="$rmprog -f" 55mvcmd="$mvprog" 56src="" 57dst="" 58dir_arg="" 59 60while [ x"$1" != x ]; do 61 case $1 in 62 -c) instcmd="$cpprog" 63 shift 64 continue;; 65 66 -d) dir_arg=true 67 shift 68 continue;; 69 70 -m) chmodcmd="$chmodprog $2" 71 shift 72 shift 73 continue;; 74 75 -o) chowncmd="$chownprog $2" 76 shift 77 shift 78 continue;; 79 80 -g) chgrpcmd="$chgrpprog $2" 81 shift 82 shift 83 continue;; 84 85 -s) stripcmd="$stripprog" 86 shift 87 continue;; 88 89 -t=*) transformarg=`echo $1 | sed 's/-t=//'` 90 shift 91 continue;; 92 93 -b=*) transformbasename=`echo $1 | sed 's/-b=//'` 94 shift 95 continue;; 96 97 *) if [ x"$src" = x ] 98 then 99 src=$1 100 else 101 # this colon is to work around a 386BSD /bin/sh bug 102 : 103 dst=$1 104 fi 105 shift 106 continue;; 107 esac 108done 109 110if [ x"$src" = x ] 111then 112 echo "install: no input file specified" 113 exit 1 114else 115 true 116fi 117 118if [ x"$dir_arg" != x ]; then 119 dst=$src 120 src="" 121 122 if [ -d $dst ]; then 123 instcmd=: 124 else 125 instcmd=mkdir 126 fi 127else 128 129# Waiting for this to be detected by the "$instcmd $src $dsttmp" command 130# might cause directories to be created, which would be especially bad 131# if $src (and thus $dsttmp) contains '*'. 132 133 if [ -f $src -o -d $src ] 134 then 135 true 136 else 137 echo "install: $src does not exist" 138 exit 1 139 fi 140 141 if [ x"$dst" = x ] 142 then 143 echo "install: no destination specified" 144 exit 1 145 else 146 true 147 fi 148 149# If destination is a directory, append the input filename; if your system 150# does not like double slashes in filenames, you may need to add some logic 151 152 if [ -d $dst ] 153 then 154 dst="$dst"/`basename $src` 155 else 156 true 157 fi 158fi 159 160## this sed command emulates the dirname command 161dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` 162 163# Make sure that the destination directory exists. 164# this part is taken from Noah Friedman's mkinstalldirs script 165 166# Skip lots of stat calls in the usual case. 167if [ ! -d "$dstdir" ]; then 168defaultIFS=' 169' 170IFS="${IFS-${defaultIFS}}" 171 172oIFS="${IFS}" 173# Some sh's can't handle IFS=/ for some reason. 174IFS='%' 175set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` 176IFS="${oIFS}" 177 178pathcomp='' 179 180while [ $# -ne 0 ] ; do 181 pathcomp="${pathcomp}${1}" 182 shift 183 184 if [ ! -d "${pathcomp}" ] ; 185 then 186 $mkdirprog "${pathcomp}" 187 else 188 true 189 fi 190 191 pathcomp="${pathcomp}/" 192done 193fi 194 195if [ x"$dir_arg" != x ] 196then 197 $doit $instcmd $dst && 198 199 if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && 200 if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && 201 if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && 202 if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi 203else 204 205# If we're going to rename the final executable, determine the name now. 206 207 if [ x"$transformarg" = x ] 208 then 209 dstfile=`basename $dst` 210 else 211 dstfile=`basename $dst $transformbasename | 212 sed $transformarg`$transformbasename 213 fi 214 215# don't allow the sed command to completely eliminate the filename 216 217 if [ x"$dstfile" = x ] 218 then 219 dstfile=`basename $dst` 220 else 221 true 222 fi 223 224# Make a temp file name in the proper directory. 225 226 dsttmp=$dstdir/#inst.$$# 227 228# Move or copy the file name to the temp name 229 230 $doit $instcmd $src $dsttmp && 231 232 trap "rm -f ${dsttmp}" 0 && 233 234# and set any options; do chmod last to preserve setuid bits 235 236# If any of these fail, we abort the whole thing. If we want to 237# ignore errors from any of these, just make sure not to ignore 238# errors from the above "$doit $instcmd $src $dsttmp" command. 239 240 if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && 241 if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && 242 if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && 243 if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && 244 245# Now rename the file to the real destination. 246 247 $doit $rmcmd -f $dstdir/$dstfile && 248 $doit $mvcmd $dsttmp $dstdir/$dstfile 249 250fi && 251 252 253exit 0 254