source: trunk/third/cns/install.sh @ 8789

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