~ubuntu-branches/ubuntu/gutsy/cwdaemon/gutsy

« back to all changes in this revision

Viewing changes to install-sh

  • Committer: Bazaar Package Importer
  • Author(s): Joop Stakenborg
  • Date: 2004-04-26 21:27:29 UTC
  • Revision ID: james.westby@ubuntu.com-20040426212729-3wwptnx2a1l9kein
Tags: 0.8
* Cwdaemon is now integrated with unixcw, see cwlib.c and cwlib.h.
  Weighting has been added to unixcw and some special characters needed
  by cwdaemon. The choppiness reported in previous versions of cwdaemon is
  fixed. And we have soundcard support!
* Better handling of aborting messages.
* Weighting now uses a value of -50 to 50.
* 2 extra command line options: -v for volume and -x for sound device.
* 2 extra escape sequences for controlling cwdaemon: ESCfx for switching the
  sound output on the fly and ESCgx for setting the soundcard volume.
* Tune (ESCc) now uses seconds as an argument, e.g. ESCc1 tunes 1 second,
  ESCc10 tunes 10 seconds. Maximum tune value is 10 seconds.
* A fix by Lada, OK1ZIA for big endian systems.
* Footswitch support by Wolf, DL2WRJ (pin 15 of the parallel port).
* New morse character '@' has been added.
* Process priority of cwdaemon can be set with the -P flag. You can try this
  if you experience timing problems.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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.
 
30
doit="${DOITPROG-}"
 
31
 
 
32
 
 
33
# put in absolute paths if you don't have them in your path; or use env. vars.
 
34
 
 
35
mvprog="${MVPROG-mv}"
 
36
cpprog="${CPPROG-cp}"
 
37
chmodprog="${CHMODPROG-chmod}"
 
38
chownprog="${CHOWNPROG-chown}"
 
39
chgrpprog="${CHGRPPROG-chgrp}"
 
40
stripprog="${STRIPPROG-strip}"
 
41
rmprog="${RMPROG-rm}"
 
42
mkdirprog="${MKDIRPROG-mkdir}"
 
43
 
 
44
transformbasename=""
 
45
transform_arg=""
 
46
instcmd="$mvprog"
 
47
chmodcmd="$chmodprog 0755"
 
48
chowncmd=""
 
49
chgrpcmd=""
 
50
stripcmd=""
 
51
rmcmd="$rmprog -f"
 
52
mvcmd="$mvprog"
 
53
src=""
 
54
dst=""
 
55
dir_arg=""
 
56
 
 
57
while [ 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
 
105
done
 
106
 
 
107
if [ x"$src" = x ]
 
108
then
 
109
        echo "$0: no input file specified" >&2
 
110
        exit 1
 
111
else
 
112
        :
 
113
fi
 
114
 
 
115
if [ x"$dir_arg" != x ]; then
 
116
        dst=$src
 
117
        src=""
 
118
 
 
119
        if [ -d "$dst" ]; then
 
120
                instcmd=:
 
121
                chmodcmd=""
 
122
        else
 
123
                instcmd=$mkdirprog
 
124
        fi
 
125
else
 
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" ] || [ -d "$src" ]
 
132
        then
 
133
                :
 
134
        else
 
135
                echo "$0: $src does not exist" >&2
 
136
                exit 1
 
137
        fi
 
138
 
 
139
        if [ x"$dst" = x ]
 
140
        then
 
141
                echo "$0: no destination specified" >&2
 
142
                exit 1
 
143
        else
 
144
                :
 
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
                :
 
155
        fi
 
156
fi
 
157
 
 
158
## this sed command emulates the dirname command
 
159
dstdir=`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.
 
165
if [ ! -d "$dstdir" ]; then
 
166
defaultIFS='
 
167
        '
 
168
IFS="${IFS-$defaultIFS}"
 
169
 
 
170
oIFS=$IFS
 
171
# Some sh's can't handle IFS=/ for some reason.
 
172
IFS='%'
 
173
set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
 
174
IFS=$oIFS
 
175
 
 
176
pathcomp=''
 
177
 
 
178
while [ $# -ne 0 ] ; do
 
179
        pathcomp=$pathcomp$1
 
180
        shift
 
181
 
 
182
        if [ ! -d "$pathcomp" ] ;
 
183
        then
 
184
                $mkdirprog "$pathcomp"
 
185
        else
 
186
                :
 
187
        fi
 
188
 
 
189
        pathcomp=$pathcomp/
 
190
done
 
191
fi
 
192
 
 
193
if [ x"$dir_arg" != x ]
 
194
then
 
195
        $doit $instcmd "$dst" &&
 
196
 
 
197
        if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
 
198
        if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
 
199
        if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
 
200
        if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
 
201
else
 
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
                :
 
220
        fi
 
221
 
 
222
# Make a couple of temp file names in the proper directory.
 
223
 
 
224
        dsttmp=$dstdir/#inst.$$#
 
225
        rmtmp=$dstdir/#rm.$$#
 
226
 
 
227
# Trap to clean up temp files at exit.
 
228
 
 
229
        trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
 
230
        trap '(exit $?); exit' 1 2 13 15
 
231
 
 
232
# 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
 
237
 
 
238
# If any of these fail, we abort the whole thing.  If we want to
 
239
# ignore errors from any of these, just make sure not to ignore
 
240
# errors from the above "$doit $instcmd $src $dsttmp" command.
 
241
 
 
242
        if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
 
243
        if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
 
244
        if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
 
245
        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.
 
267
 
 
268
        $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
 
269
 
 
270
fi &&
 
271
 
 
272
# The final little trick to "correctly" pass the exit status to the exit trap.
 
273
 
 
274
{
 
275
        (exit 0); exit
 
276
}