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