source: trunk/third/libglade/install-sh @ 15324

Revision 15324, 5.5 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r15323, 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                chmodcmd=""
122        else
123                instcmd=mkdir
124        fi
125else
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
156fi
157
158## this sed command emulates the dirname command
159dstdir=`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.
165if [ ! -d "$dstdir" ]; then
166defaultIFS='   
167'
168IFS="${IFS-${defaultIFS}}"
169
170oIFS="${IFS}"
171# Some sh's can't handle IFS=/ for some reason.
172IFS='%'
173set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
174IFS="${oIFS}"
175
176pathcomp=''
177
178while [ $# -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}/"
190done
191fi
192
193if [ x"$dir_arg" != x ]
194then
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
201else
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
248fi &&
249
250
251exit 0
Note: See TracBrowser for help on using the repository browser.