source: trunk/gsdl/src/gdbmset/install-sh@ 12844

Last change on this file since 12844 was 12844, checked in by mdewsnip, 18 years ago

Incremental building and dynamic GDBM updating code, many thanks to John Rowe and John Thompson at DL Consulting Ltd.

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