source: trunk/third/libIDL/install-sh @ 18251

Revision 18251, 5.5 KB checked in by ghudson, 22 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18250, 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 (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.
30doit="${DOITPROG-}"
31
32
33# put in absolute paths if you don't have them in your path; or use env. vars.
34
35mvprog="${MVPROG-mv}"
36cpprog="${CPPROG-cp}"
37chmodprog="${CHMODPROG-chmod}"
38chownprog="${CHOWNPROG-chown}"
39chgrpprog="${CHGRPPROG-chgrp}"
40stripprog="${STRIPPROG-strip}"
41rmprog="${RMPROG-rm}"
42mkdirprog="${MKDIRPROG-mkdir}"
43
44transformbasename=""
45transform_arg=""
46instcmd="$mvprog"
47chmodcmd="$chmodprog 0755"
48chowncmd=""
49chgrpcmd=""
50stripcmd=""
51rmcmd="$rmprog -f"
52mvcmd="$mvprog"
53src=""
54dst=""
55dir_arg=""
56
57while [ 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
105done
106
107if [ x"$src" = x ]
108then
109        echo "install:  no input file specified"
110        exit 1
111else
112        true
113fi
114
115if [ x"$dir_arg" != x ]; then
116        dst=$src
117        src=""
118       
119        if [ -d $dst ]; then
120                instcmd=:
121        else
122                instcmd=mkdir
123        fi
124else
125
126# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
127# might cause directories to be created, which would be especially bad
128# if $src (and thus $dsttmp) contains '*'.
129
130        if [ -f $src -o -d $src ]
131        then
132                true
133        else
134                echo "install:  $src does not exist"
135                exit 1
136        fi
137       
138        if [ x"$dst" = x ]
139        then
140                echo "install:  no destination specified"
141                exit 1
142        else
143                true
144        fi
145
146# If destination is a directory, append the input filename; if your system
147# does not like double slashes in filenames, you may need to add some logic
148
149        if [ -d $dst ]
150        then
151                dst="$dst"/`basename $src`
152        else
153                true
154        fi
155fi
156
157## this sed command emulates the dirname command
158dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
159
160# Make sure that the destination directory exists.
161#  this part is taken from Noah Friedman's mkinstalldirs script
162
163# Skip lots of stat calls in the usual case.
164if [ ! -d "$dstdir" ]; then
165defaultIFS='   
166'
167IFS="${IFS-${defaultIFS}}"
168
169oIFS="${IFS}"
170# Some sh's can't handle IFS=/ for some reason.
171IFS='%'
172set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
173IFS="${oIFS}"
174
175pathcomp=''
176
177while [ $# -ne 0 ] ; do
178        pathcomp="${pathcomp}${1}"
179        shift
180
181        if [ ! -d "${pathcomp}" ] ;
182        then
183                $mkdirprog "${pathcomp}"
184        else
185                true
186        fi
187
188        pathcomp="${pathcomp}/"
189done
190fi
191
192if [ x"$dir_arg" != x ]
193then
194        $doit $instcmd $dst &&
195
196        if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
197        if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
198        if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
199        if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
200else
201
202# If we're going to rename the final executable, determine the name now.
203
204        if [ x"$transformarg" = x ]
205        then
206                dstfile=`basename $dst`
207        else
208                dstfile=`basename $dst $transformbasename |
209                        sed $transformarg`$transformbasename
210        fi
211
212# don't allow the sed command to completely eliminate the filename
213
214        if [ x"$dstfile" = x ]
215        then
216                dstfile=`basename $dst`
217        else
218                true
219        fi
220
221# Make a temp file name in the proper directory.
222
223        dsttmp=$dstdir/#inst.$$#
224
225# Move or copy the file name to the temp name
226
227        $doit $instcmd $src $dsttmp &&
228
229        trap "rm -f ${dsttmp}" 0 &&
230
231# and set any options; do chmod last to preserve setuid bits
232
233# If any of these fail, we abort the whole thing.  If we want to
234# ignore errors from any of these, just make sure not to ignore
235# errors from the above "$doit $instcmd $src $dsttmp" command.
236
237        if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
238        if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
239        if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
240        if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
241
242# Now rename the file to the real destination.
243
244        $doit $rmcmd -f $dstdir/$dstfile &&
245        $doit $mvcmd $dsttmp $dstdir/$dstfile
246
247fi &&
248
249
250exit 0
Note: See TracBrowser for help on using the repository browser.