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