/[gtktalog]/gtktalog/install-sh
ViewVC logotype

Diff of /gtktalog/install-sh

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1.1.1 by ymettier, Thu Jul 13 22:56:30 2000 UTC revision 1.1.1.1.2.1 by ymettier, Fri Mar 28 21:46:01 2003 UTC
# Line 56  dir_arg="" Line 56  dir_arg=""
56    
57  while [ x"$1" != x ]; do  while [ x"$1" != x ]; do
58      case $1 in      case $1 in
59          -c) instcmd="$cpprog"          -c) instcmd=$cpprog
60              shift              shift
61              continue;;              continue;;
62    
# Line 79  while [ x"$1" != x ]; do Line 79  while [ x"$1" != x ]; do
79              shift              shift
80              continue;;              continue;;
81    
82          -s) stripcmd="$stripprog"          -s) stripcmd=$stripprog
83              shift              shift
84              continue;;              continue;;
85    
# Line 106  done Line 106  done
106    
107  if [ x"$src" = x ]  if [ x"$src" = x ]
108  then  then
109          echo "install:  no input file specified"          echo "$0: no input file specified" >&2
110          exit 1          exit 1
111  else  else
112          true          :
113  fi  fi
114    
115  if [ x"$dir_arg" != x ]; then  if [ x"$dir_arg" != x ]; then
116          dst=$src          dst=$src
117          src=""          src=""
118            
119          if [ -d $dst ]; then          if [ -d "$dst" ]; then
120                  instcmd=:                  instcmd=:
121                  chmodcmd=""                  chmodcmd=""
122          else          else
123                  instcmd=mkdir                  instcmd=$mkdirprog
124          fi          fi
125  else  else
126    
127  # Waiting for this to be detected by the "$instcmd $src $dsttmp" command  # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
128  # might cause directories to be created, which would be especially bad  # might cause directories to be created, which would be especially bad
129  # if $src (and thus $dsttmp) contains '*'.  # if $src (and thus $dsttmp) contains '*'.
130    
131          if [ -f $src -o -d $src ]          if [ -f "$src" ] || [ -d "$src" ]
132          then          then
133                  true                  :
134          else          else
135                  echo "install:  $src does not exist"                  echo "$0: $src does not exist" >&2
136                  exit 1                  exit 1
137          fi          fi
138            
139          if [ x"$dst" = x ]          if [ x"$dst" = x ]
140          then          then
141                  echo "install:  no destination specified"                  echo "$0: no destination specified" >&2
142                  exit 1                  exit 1
143          else          else
144                  true                  :
145          fi          fi
146    
147  # If destination is a directory, append the input filename; if your system  # 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  # does not like double slashes in filenames, you may need to add some logic
149    
150          if [ -d $dst ]          if [ -d "$dst" ]
151          then          then
152                  dst="$dst"/`basename $src`                  dst=$dst/`basename "$src"`
153          else          else
154                  true                  :
155          fi          fi
156  fi  fi
157    
158  ## this sed command emulates the dirname command  ## this sed command emulates the dirname command
159  dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`  dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
160    
161  # Make sure that the destination directory exists.  # Make sure that the destination directory exists.
162  #  this part is taken from Noah Friedman's mkinstalldirs script  #  this part is taken from Noah Friedman's mkinstalldirs script
163    
164  # Skip lots of stat calls in the usual case.  # Skip lots of stat calls in the usual case.
165  if [ ! -d "$dstdir" ]; then  if [ ! -d "$dstdir" ]; then
166  defaultIFS='      defaultIFS='
167  '          '
168  IFS="${IFS-${defaultIFS}}"  IFS="${IFS-$defaultIFS}"
169    
170  oIFS="${IFS}"  oIFS=$IFS
171  # Some sh's can't handle IFS=/ for some reason.  # Some sh's can't handle IFS=/ for some reason.
172  IFS='%'  IFS='%'
173  set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`  set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
174  IFS="${oIFS}"  IFS=$oIFS
175    
176  pathcomp=''  pathcomp=''
177    
178  while [ $# -ne 0 ] ; do  while [ $# -ne 0 ] ; do
179          pathcomp="${pathcomp}${1}"          pathcomp=$pathcomp$1
180          shift          shift
181    
182          if [ ! -d "${pathcomp}" ] ;          if [ ! -d "$pathcomp" ] ;
183          then          then
184                  $mkdirprog "${pathcomp}"                  $mkdirprog "$pathcomp"
185          else          else
186                  true                  :
187          fi          fi
188    
189          pathcomp="${pathcomp}/"          pathcomp=$pathcomp/
190  done  done
191  fi  fi
192    
193  if [ x"$dir_arg" != x ]  if [ x"$dir_arg" != x ]
194  then  then
195          $doit $instcmd $dst &&          $doit $instcmd "$dst" &&
196    
197          if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&          if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
198          if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&          if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
199          if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&          if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
200          if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi          if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
201  else  else
202    
203  # If we're going to rename the final executable, determine the name now.  # If we're going to rename the final executable, determine the name now.
204    
205          if [ x"$transformarg" = x ]          if [ x"$transformarg" = x ]
206          then          then
207                  dstfile=`basename $dst`                  dstfile=`basename "$dst"`
208          else          else
209                  dstfile=`basename $dst $transformbasename |                  dstfile=`basename "$dst" $transformbasename |
210                          sed $transformarg`$transformbasename                          sed $transformarg`$transformbasename
211          fi          fi
212    
213  # don't allow the sed command to completely eliminate the filename  # don't allow the sed command to completely eliminate the filename
214    
215          if [ x"$dstfile" = x ]          if [ x"$dstfile" = x ]
216          then          then
217                  dstfile=`basename $dst`                  dstfile=`basename "$dst"`
218          else          else
219                  true                  :
220          fi          fi
221    
222  # Make a temp file name in the proper directory.  # Make a couple of temp file names in the proper directory.
223    
224          dsttmp=$dstdir/#inst.$$#          dsttmp=$dstdir/#inst.$$#
225            rmtmp=$dstdir/#rm.$$#
226    
227  # Move or copy the file name to the temp name  # Trap to clean up temp files at exit.
228    
229          $doit $instcmd $src $dsttmp &&          trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
230            trap '(exit $?); exit' 1 2 13 15
231    
232          trap "rm -f ${dsttmp}" 0 &&  # Move or copy the file name to the temp name
233    
234            $doit $instcmd "$src" "$dsttmp" &&
235    
236  # and set any options; do chmod last to preserve setuid bits  # and set any options; do chmod last to preserve setuid bits
237    
# Line 235  else Line 239  else
239  # ignore errors from any of these, just make sure not to ignore  # ignore errors from any of these, just make sure not to ignore
240  # errors from the above "$doit $instcmd $src $dsttmp" command.  # errors from the above "$doit $instcmd $src $dsttmp" command.
241    
242          if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&          if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
243          if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&          if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
244          if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&          if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
245          if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&          if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
246    
247    # Now remove or move aside any old file at destination location.  We try this
248    # two ways since rm can't unlink itself on some systems and the destination
249    # file might be busy for other reasons.  In this case, the final cleanup
250    # might fail but the new file should still install successfully.
251    
252    {
253            if [ -f "$dstdir/$dstfile" ]
254            then
255                    $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
256                    $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
257                    {
258                      echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
259                      (exit 1); exit
260                    }
261            else
262                    :
263            fi
264    } &&
265    
266  # Now rename the file to the real destination.  # Now rename the file to the real destination.
267    
268          $doit $rmcmd -f $dstdir/$dstfile &&          $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
         $doit $mvcmd $dsttmp $dstdir/$dstfile  
269    
270  fi &&  fi &&
271    
272    # The final little trick to "correctly" pass the exit status to the exit trap.
273    
274  exit 0  {
275            (exit 0); exit
276    }

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.1.2.1

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26