annotate install-sh @ 1062:b727849e2128 trunk

[svn] - Add the ability to easily save to playlist.m3u from the list menu. (For those who hate having to restart Audacious in order to save the playlist).
author nhjm449
date Mon, 15 May 2006 20:55:19 -0700
parents cb178e5ad177
children 7a4fcf84a34f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
1 #!/bin/sh
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
2 # install - install a program, script, or datafile
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
3
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
4 scriptversion=2005-05-14.22
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
5
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
6 # This originates from X11R5 (mit/util/scripts/install.sh), which was
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
7 # later released in X11R6 (xc/config/util/install.sh) with the
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
8 # following copyright and license.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
9 #
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
10 # Copyright (C) 1994 X Consortium
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
11 #
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
12 # Permission is hereby granted, free of charge, to any person obtaining a copy
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
13 # of this software and associated documentation files (the "Software"), to
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
14 # deal in the Software without restriction, including without limitation the
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
15 # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
16 # sell copies of the Software, and to permit persons to whom the Software is
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
17 # furnished to do so, subject to the following conditions:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
18 #
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
19 # The above copyright notice and this permission notice shall be included in
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
20 # all copies or substantial portions of the Software.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
21 #
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
22 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
23 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
24 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
25 # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
26 # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
27 # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
28 #
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
29 # Except as contained in this notice, the name of the X Consortium shall not
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
30 # be used in advertising or otherwise to promote the sale, use or other deal-
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
31 # ings in this Software without prior written authorization from the X Consor-
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
32 # tium.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
33 #
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
34 #
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
35 # FSF changes to this file are in the public domain.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
36 #
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
37 # Calling this script install-sh is preferred over install.sh, to prevent
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
38 # `make' implicit rules from creating a file called install from it
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
39 # when there is no Makefile.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
40 #
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
41 # This script is compatible with the BSD install script, but was written
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
42 # from scratch. It can only install one file at a time, a restriction
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
43 # shared with many OS's install programs.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
44
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
45 # set DOITPROG to echo to test this script
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
46
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
47 # Don't use :- since 4.3BSD and earlier shells don't like it.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
48 doit="${DOITPROG-}"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
49
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
50 # put in absolute paths if you don't have them in your path; or use env. vars.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
51
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
52 mvprog="${MVPROG-mv}"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
53 cpprog="${CPPROG-cp}"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
54 chmodprog="${CHMODPROG-chmod}"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
55 chownprog="${CHOWNPROG-chown}"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
56 chgrpprog="${CHGRPPROG-chgrp}"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
57 stripprog="${STRIPPROG-strip}"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
58 rmprog="${RMPROG-rm}"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
59 mkdirprog="${MKDIRPROG-mkdir}"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
60
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
61 chmodcmd="$chmodprog 0755"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
62 chowncmd=
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
63 chgrpcmd=
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
64 stripcmd=
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
65 rmcmd="$rmprog -f"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
66 mvcmd="$mvprog"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
67 src=
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
68 dst=
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
69 dir_arg=
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
70 dstarg=
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
71 no_target_directory=
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
72
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
73 usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
74 or: $0 [OPTION]... SRCFILES... DIRECTORY
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
75 or: $0 [OPTION]... -t DIRECTORY SRCFILES...
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
76 or: $0 [OPTION]... -d DIRECTORIES...
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
77
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
78 In the 1st form, copy SRCFILE to DSTFILE.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
79 In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
80 In the 4th, create DIRECTORIES.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
81
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
82 Options:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
83 -c (ignored)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
84 -d create directories instead of installing files.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
85 -g GROUP $chgrpprog installed files to GROUP.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
86 -m MODE $chmodprog installed files to MODE.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
87 -o USER $chownprog installed files to USER.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
88 -s $stripprog installed files.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
89 -t DIRECTORY install into DIRECTORY.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
90 -T report an error if DSTFILE is a directory.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
91 --help display this help and exit.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
92 --version display version info and exit.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
93
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
94 Environment variables override the default commands:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
95 CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
96 "
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
97
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
98 while test -n "$1"; do
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
99 case $1 in
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
100 -c) shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
101 continue;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
102
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
103 -d) dir_arg=true
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
104 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
105 continue;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
106
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
107 -g) chgrpcmd="$chgrpprog $2"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
108 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
109 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
110 continue;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
111
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
112 --help) echo "$usage"; exit $?;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
113
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
114 -m) chmodcmd="$chmodprog $2"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
115 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
116 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
117 continue;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
118
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
119 -o) chowncmd="$chownprog $2"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
120 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
121 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
122 continue;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
123
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
124 -s) stripcmd=$stripprog
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
125 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
126 continue;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
127
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
128 -t) dstarg=$2
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
129 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
130 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
131 continue;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
132
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
133 -T) no_target_directory=true
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
134 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
135 continue;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
136
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
137 --version) echo "$0 $scriptversion"; exit $?;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
138
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
139 *) # When -d is used, all remaining arguments are directories to create.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
140 # When -t is used, the destination is already specified.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
141 test -n "$dir_arg$dstarg" && break
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
142 # Otherwise, the last argument is the destination. Remove it from $@.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
143 for arg
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
144 do
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
145 if test -n "$dstarg"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
146 # $@ is not empty: it contains at least $arg.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
147 set fnord "$@" "$dstarg"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
148 shift # fnord
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
149 fi
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
150 shift # arg
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
151 dstarg=$arg
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
152 done
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
153 break;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
154 esac
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
155 done
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
156
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
157 if test -z "$1"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
158 if test -z "$dir_arg"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
159 echo "$0: no input file specified." >&2
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
160 exit 1
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
161 fi
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
162 # It's OK to call `install-sh -d' without argument.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
163 # This can happen when creating conditional directories.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
164 exit 0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
165 fi
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
166
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
167 for src
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
168 do
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
169 # Protect names starting with `-'.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
170 case $src in
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
171 -*) src=./$src ;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
172 esac
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
173
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
174 if test -n "$dir_arg"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
175 dst=$src
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
176 src=
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
177
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
178 if test -d "$dst"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
179 mkdircmd=:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
180 chmodcmd=
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
181 else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
182 mkdircmd=$mkdirprog
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
183 fi
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
184 else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
185 # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
186 # might cause directories to be created, which would be especially bad
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
187 # if $src (and thus $dsttmp) contains '*'.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
188 if test ! -f "$src" && test ! -d "$src"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
189 echo "$0: $src does not exist." >&2
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
190 exit 1
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
191 fi
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
192
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
193 if test -z "$dstarg"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
194 echo "$0: no destination specified." >&2
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
195 exit 1
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
196 fi
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
197
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
198 dst=$dstarg
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
199 # Protect names starting with `-'.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
200 case $dst in
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
201 -*) dst=./$dst ;;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
202 esac
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
203
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
204 # If destination is a directory, append the input filename; won't work
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
205 # if double slashes aren't ignored.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
206 if test -d "$dst"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
207 if test -n "$no_target_directory"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
208 echo "$0: $dstarg: Is a directory" >&2
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
209 exit 1
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
210 fi
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
211 dst=$dst/`basename "$src"`
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
212 fi
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
213 fi
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
214
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
215 # This sed command emulates the dirname command.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
216 dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
217
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
218 # Make sure that the destination directory exists.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
219
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
220 # Skip lots of stat calls in the usual case.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
221 if test ! -d "$dstdir"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
222 defaultIFS='
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
223 '
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
224 IFS="${IFS-$defaultIFS}"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
225
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
226 oIFS=$IFS
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
227 # Some sh's can't handle IFS=/ for some reason.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
228 IFS='%'
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
229 set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
230 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
231 IFS=$oIFS
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
232
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
233 pathcomp=
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
234
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
235 while test $# -ne 0 ; do
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
236 pathcomp=$pathcomp$1
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
237 shift
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
238 if test ! -d "$pathcomp"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
239 $mkdirprog "$pathcomp"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
240 # mkdir can fail with a `File exist' error in case several
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
241 # install-sh are creating the directory concurrently. This
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
242 # is OK.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
243 test -d "$pathcomp" || exit
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
244 fi
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
245 pathcomp=$pathcomp/
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
246 done
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
247 fi
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
248
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
249 if test -n "$dir_arg"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
250 $doit $mkdircmd "$dst" \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
251 && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
252 && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
253 && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
254 && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
255
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
256 else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
257 dstfile=`basename "$dst"`
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
258
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
259 # Make a couple of temp file names in the proper directory.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
260 dsttmp=$dstdir/_inst.$$_
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
261 rmtmp=$dstdir/_rm.$$_
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
262
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
263 # Trap to clean up those temp files at exit.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
264 trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
265 trap '(exit $?); exit' 1 2 13 15
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
266
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
267 # Copy the file name to the temp name.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
268 $doit $cpprog "$src" "$dsttmp" &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
269
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
270 # and set any options; do chmod last to preserve setuid bits.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
271 #
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
272 # If any of these fail, we abort the whole thing. If we want to
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
273 # ignore errors from any of these, just make sure not to ignore
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
274 # errors from the above "$doit $cpprog $src $dsttmp" command.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
275 #
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
276 { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
277 && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
278 && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
279 && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
280
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
281 # Now rename the file to the real destination.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
282 { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
283 || {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
284 # The rename failed, perhaps because mv can't rename something else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
285 # to itself, or perhaps because mv is so ancient that it does not
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
286 # support -f.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
287
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
288 # Now remove or move aside any old file at destination location.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
289 # We try this two ways since rm can't unlink itself on some
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
290 # systems and the destination file might be busy for other
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
291 # reasons. In this case, the final cleanup might fail but the new
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
292 # file should still install successfully.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
293 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
294 if test -f "$dstdir/$dstfile"; then
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
295 $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
296 || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
297 || {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
298 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
299 (exit 1); exit 1
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
300 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
301 else
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
302 :
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
303 fi
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
304 } &&
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
305
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
306 # Now rename the file to the real destination.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
307 $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
308 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
309 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
310 fi || { (exit 1); exit 1; }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
311 done
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
312
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
313 # The final little trick to "correctly" pass the exit status to the exit trap.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
314 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
315 (exit 0); exit 0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
316 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
317
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
318 # Local variables:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
319 # eval: (add-hook 'write-file-hooks 'time-stamp)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
320 # time-stamp-start: "scriptversion="
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
321 # time-stamp-format: "%:y-%02m-%02d.%02H"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
322 # time-stamp-end: "$"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
323 # End: