Statistics
| Branch: | Revision:

root / synthbench / bonnie++ / install.sh

History | View | Annotate | Download (4.4 kB)

1 0:839f52ef7657 louridas
##
2 0:839f52ef7657 louridas
##  install -- Install a program, script or datafile
3 0:839f52ef7657 louridas
##  Copyright (c) 1997-2000 Ralf S. Engelschall <rse@engelschall.com>
4 0:839f52ef7657 louridas
##  Originally written for shtool
5 0:839f52ef7657 louridas
##
6 0:839f52ef7657 louridas
##  This file is part of shtool and free software; you can redistribute
7 0:839f52ef7657 louridas
##  it and/or modify it under the terms of the GNU General Public
8 0:839f52ef7657 louridas
##  License as published by the Free Software Foundation; either version
9 0:839f52ef7657 louridas
##  2 of the License, or (at your option) any later version.
10 0:839f52ef7657 louridas
##
11 0:839f52ef7657 louridas
##  This file is distributed in the hope that it will be useful,
12 0:839f52ef7657 louridas
##  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 0:839f52ef7657 louridas
##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 0:839f52ef7657 louridas
##  General Public License for more details.
15 0:839f52ef7657 louridas
##
16 0:839f52ef7657 louridas
##  You should have received a copy of the GNU General Public License
17 0:839f52ef7657 louridas
##  along with this program; if not, write to the Free Software
18 0:839f52ef7657 louridas
##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19 0:839f52ef7657 louridas
##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
20 0:839f52ef7657 louridas
##
21 0:839f52ef7657 louridas
22 0:839f52ef7657 louridas
str_tool="install"
23 0:839f52ef7657 louridas
str_usage="[-v] [-t] [-c] [-C] [-s] [-m<mode>] [-o<owner>] [-g<group>] [-e<ext>] <file> [<file> ...] <path>"
24 0:839f52ef7657 louridas
arg_spec="2+"
25 0:839f52ef7657 louridas
opt_spec="v.t.c.C.s.m:o:g:e:"
26 0:839f52ef7657 louridas
opt_v=no
27 0:839f52ef7657 louridas
opt_t=no
28 0:839f52ef7657 louridas
opt_c=no
29 0:839f52ef7657 louridas
opt_C=no
30 0:839f52ef7657 louridas
opt_s=no
31 0:839f52ef7657 louridas
opt_m=""
32 0:839f52ef7657 louridas
opt_o=""
33 0:839f52ef7657 louridas
opt_g=""
34 0:839f52ef7657 louridas
opt_e=""
35 0:839f52ef7657 louridas
36 0:839f52ef7657 louridas
. ./sh.common
37 0:839f52ef7657 louridas
38 0:839f52ef7657 louridas
#   determine source(s) and destination
39 0:839f52ef7657 louridas
argc=$#
40 0:839f52ef7657 louridas
srcs=""
41 0:839f52ef7657 louridas
while [ $# -gt 1 ]; do
42 0:839f52ef7657 louridas
    srcs="$srcs $1"
43 0:839f52ef7657 louridas
    shift
44 0:839f52ef7657 louridas
done
45 0:839f52ef7657 louridas
dstpath="$1"
46 0:839f52ef7657 louridas
47 0:839f52ef7657 louridas
#   type check for destination
48 0:839f52ef7657 louridas
dstisdir=0
49 0:839f52ef7657 louridas
if [ -d $dstpath ]; then
50 0:839f52ef7657 louridas
    dstpath=`echo "$dstpath" | sed -e 's:/$::'`
51 0:839f52ef7657 louridas
    dstisdir=1
52 0:839f52ef7657 louridas
fi
53 0:839f52ef7657 louridas
54 0:839f52ef7657 louridas
#   consistency check for destination
55 0:839f52ef7657 louridas
if [ $argc -gt 2 -a $dstisdir = 0 ]; then
56 0:839f52ef7657 louridas
    echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2
57 0:839f52ef7657 louridas
    exit 1
58 0:839f52ef7657 louridas
fi
59 0:839f52ef7657 louridas
60 0:839f52ef7657 louridas
#   iterate over all source(s)
61 0:839f52ef7657 louridas
for src in $srcs; do
62 0:839f52ef7657 louridas
    dst=$dstpath
63 0:839f52ef7657 louridas
64 0:839f52ef7657 louridas
    #  If destination is a directory, append the input filename
65 0:839f52ef7657 louridas
    if [ $dstisdir = 1 ]; then
66 0:839f52ef7657 louridas
        dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'`
67 0:839f52ef7657 louridas
        dst="$dst/$dstfile"
68 0:839f52ef7657 louridas
    fi
69 0:839f52ef7657 louridas
70 0:839f52ef7657 louridas
    #  Add a possible extension to src and dst
71 0:839f52ef7657 louridas
    if [ ".$opt_e" != . ]; then
72 0:839f52ef7657 louridas
        src="$src$opt_e"
73 0:839f52ef7657 louridas
        dst="$dst$opt_e"
74 0:839f52ef7657 louridas
    fi
75 0:839f52ef7657 louridas
76 0:839f52ef7657 louridas
    #  Check for correct arguments
77 0:839f52ef7657 louridas
    if [ ".$src" = ".$dst" ]; then
78 0:839f52ef7657 louridas
        echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2
79 0:839f52ef7657 louridas
        continue
80 0:839f52ef7657 louridas
    fi
81 0:839f52ef7657 louridas
    if [ -d "$src" ]; then
82 0:839f52ef7657 louridas
        echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2
83 0:839f52ef7657 louridas
        continue
84 0:839f52ef7657 louridas
    fi
85 0:839f52ef7657 louridas
86 0:839f52ef7657 louridas
    #  Make a temp file name in the destination directory
87 0:839f52ef7657 louridas
    dsttmp=`echo $dst |\
88 0:839f52ef7657 louridas
            sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \
89 0:839f52ef7657 louridas
                -e "s;\$;/#INST@$$#;"`
90 0:839f52ef7657 louridas
91 0:839f52ef7657 louridas
    #  Verbosity
92 0:839f52ef7657 louridas
    if [ ".$opt_v" = .yes ]; then
93 0:839f52ef7657 louridas
        echo "$src -> $dst" 1>&2
94 0:839f52ef7657 louridas
    fi
95 0:839f52ef7657 louridas
96 0:839f52ef7657 louridas
    #  Copy or move the file name to the temp name
97 0:839f52ef7657 louridas
    #  (because we might be not allowed to change the source)
98 0:839f52ef7657 louridas
    if [ ".$opt_C" = .yes ]; then
99 0:839f52ef7657 louridas
        opt_c=yes
100 0:839f52ef7657 louridas
    fi
101 0:839f52ef7657 louridas
    if [ ".$opt_c" = .yes ]; then
102 0:839f52ef7657 louridas
        if [ ".$opt_t" = .yes ]; then
103 0:839f52ef7657 louridas
            echo "cp $src $dsttmp" 1>&2
104 0:839f52ef7657 louridas
        fi
105 0:839f52ef7657 louridas
        cp $src $dsttmp || exit $?
106 0:839f52ef7657 louridas
    else
107 0:839f52ef7657 louridas
        if [ ".$opt_t" = .yes ]; then
108 0:839f52ef7657 louridas
            echo "mv $src $dsttmp" 1>&2
109 0:839f52ef7657 louridas
        fi
110 0:839f52ef7657 louridas
        mv $src $dsttmp || exit $?
111 0:839f52ef7657 louridas
    fi
112 0:839f52ef7657 louridas
113 0:839f52ef7657 louridas
    #  Adjust the target file
114 0:839f52ef7657 louridas
    #  (we do chmod last to preserve setuid bits)
115 0:839f52ef7657 louridas
    if [ ".$opt_s" = .yes ]; then
116 0:839f52ef7657 louridas
        if [ ".$opt_t" = .yes ]; then
117 0:839f52ef7657 louridas
            echo "strip $dsttmp" 1>&2
118 0:839f52ef7657 louridas
        fi
119 0:839f52ef7657 louridas
        strip $dsttmp || exit $?
120 0:839f52ef7657 louridas
    fi
121 0:839f52ef7657 louridas
    if [ ".$opt_o" != . ]; then
122 0:839f52ef7657 louridas
        if [ ".$opt_t" = .yes ]; then
123 0:839f52ef7657 louridas
            echo "chown $opt_o $dsttmp" 1>&2
124 0:839f52ef7657 louridas
        fi
125 0:839f52ef7657 louridas
        chown $opt_o $dsttmp || exit $?
126 0:839f52ef7657 louridas
    fi
127 0:839f52ef7657 louridas
    if [ ".$opt_g" != . ]; then
128 0:839f52ef7657 louridas
        if [ ".$opt_t" = .yes ]; then
129 0:839f52ef7657 louridas
            echo "chgrp $opt_g $dsttmp" 1>&2
130 0:839f52ef7657 louridas
        fi
131 0:839f52ef7657 louridas
        chgrp $opt_g $dsttmp || exit $?
132 0:839f52ef7657 louridas
    fi
133 0:839f52ef7657 louridas
    if [ ".$opt_m" != . ]; then
134 0:839f52ef7657 louridas
        if [ ".$opt_t" = .yes ]; then
135 0:839f52ef7657 louridas
            echo "chmod $opt_m $dsttmp" 1>&2
136 0:839f52ef7657 louridas
        fi
137 0:839f52ef7657 louridas
        chmod $opt_m $dsttmp || exit $?
138 0:839f52ef7657 louridas
    fi
139 0:839f52ef7657 louridas
140 0:839f52ef7657 louridas
    #   Determine whether to do a quick install
141 0:839f52ef7657 louridas
    #   (has to be done _after_ the strip was already done)
142 0:839f52ef7657 louridas
    quick=no
143 0:839f52ef7657 louridas
    if [ ".$opt_C" = .yes ]; then
144 0:839f52ef7657 louridas
        if [ -r $dst ]; then
145 0:839f52ef7657 louridas
            if cmp -s $src $dst; then
146 0:839f52ef7657 louridas
                quick=yes
147 0:839f52ef7657 louridas
            fi
148 0:839f52ef7657 louridas
        fi
149 0:839f52ef7657 louridas
    fi
150 0:839f52ef7657 louridas
151 0:839f52ef7657 louridas
    #   Finally install the file to the real destination
152 0:839f52ef7657 louridas
    if [ $quick = yes ]; then
153 0:839f52ef7657 louridas
        if [ ".$opt_t" = .yes ]; then
154 0:839f52ef7657 louridas
            echo "rm -f $dsttmp" 1>&2
155 0:839f52ef7657 louridas
        fi
156 0:839f52ef7657 louridas
        rm -f $dsttmp
157 0:839f52ef7657 louridas
    else
158 0:839f52ef7657 louridas
        if [ ".$opt_t" = .yes ]; then
159 0:839f52ef7657 louridas
            echo "rm -f $dst && mv $dsttmp $dst" 1>&2
160 0:839f52ef7657 louridas
        fi
161 0:839f52ef7657 louridas
        rm -f $dst && mv $dsttmp $dst
162 0:839f52ef7657 louridas
    fi
163 0:839f52ef7657 louridas
done