~ubuntu-branches/ubuntu/oneiric/openvpn/oneiric

« back to all changes in this revision

Viewing changes to install-sh

  • Committer: Bazaar Package Importer
  • Author(s): Alberto Gonzalez Iniesta
  • Date: 2004-06-10 15:59:39 UTC
  • Revision ID: james.westby@ubuntu.com-20040610155939-dcmtiuvcoqnwek62
Tags: upstream-1.6.0
ImportĀ upstreamĀ versionĀ 1.6.0

Show diffs side-by-side

added added

removed removed

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