• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/json-c/install-sh

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

This page was automatically generated by LXR 0.3.1.  •  OpenWrt