ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/ermyth/autoconf/install-sh
Revision: 1.1
Committed: Thu Jul 19 08:24:47 2007 UTC (16 years, 10 months ago) by pippijn
Branch: MAIN
CVS Tags: HEAD
Log Message:
initial import. the most important changes since Atheme are:
- fixed many memory leaks
- fixed many bugs
- converted to C++ and use more STL containers
- added a (not very enhanced yet) perl module
- greatly improved XML-RPC speed
- added a JSON-RPC module with code from json-cpp
- added a valgrind memcheck module to operserv
- added a more object oriented base64 implementation
- added a specialised unit test framework
- improved stability
- use gettimeofday() if available
- reworked adding/removing commands
- MemoServ IGNORE DEL can now remove indices

File Contents

# User Rev Content
1 pippijn 1.1 #!/bin/sh
2     #
3     # $Id: install-sh 974 2005-07-18 08:50:28Z nenolod $
4     #
5     # install - install a program, script, or datafile
6     # This comes from X11R5 (mit/util/scripts/install.sh).
7     #
8     # Copyright 1991 by the Massachusetts Institute of Technology
9     #
10     # Permission to use, copy, modify, distribute, and sell this software and its
11     # documentation for any purpose is hereby granted without fee, provided that
12     # the above copyright notice appear in all copies and that both that
13     # copyright notice and this permission notice appear in supporting
14     # documentation, and that the name of M.I.T. not be used in advertising or
15     # publicity pertaining to distribution of the software without specific,
16     # written prior permission. M.I.T. makes no representations about the
17     # suitability of this software for any purpose. It is provided "as is"
18     # without express or implied warranty.
19     #
20     # Calling this script install-sh is preferred over install.sh, to prevent
21     # `make' implicit rules from creating a file called install from it
22     # when there is no Makefile.
23     #
24     # This script is compatible with the BSD install script, but was written
25     # from scratch. It can only install one file at a time, a restriction
26     # shared with many OS's install programs.
27    
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     mvprog="${MVPROG-mv}"
38     cpprog="${CPPROG-cp}"
39     chmodprog="${CHMODPROG-chmod}"
40     chownprog="${CHOWNPROG-chown}"
41     chgrpprog="${CHGRPPROG-chgrp}"
42     stripprog="${STRIPPROG-strip}"
43     rmprog="${RMPROG-rm}"
44     mkdirprog="${MKDIRPROG-mkdir}"
45    
46     transformbasename=""
47     transform_arg=""
48     instcmd="$mvprog"
49     chmodcmd="$chmodprog 0755"
50     chowncmd=""
51     chgrpcmd=""
52     stripcmd=""
53     rmcmd="$rmprog -f"
54     mvcmd="$mvprog"
55     src=""
56     dst=""
57     dir_arg=""
58    
59     while [ x"$1" != x ]; do
60     case $1 in
61     -c) instcmd="$cpprog"
62     shift
63     continue;;
64    
65     -d) dir_arg=true
66     shift
67     continue;;
68    
69     -m) chmodcmd="$chmodprog $2"
70     shift
71     shift
72     continue;;
73    
74     -o) chowncmd="$chownprog $2"
75     shift
76     shift
77     continue;;
78    
79     -g) chgrpcmd="$chgrpprog $2"
80     shift
81     shift
82     continue;;
83    
84     -s) stripcmd="$stripprog"
85     shift
86     continue;;
87    
88     -t=*) transformarg=`echo $1 | sed 's/-t=//'`
89     shift
90     continue;;
91    
92     -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
93     shift
94     continue;;
95    
96     *) if [ x"$src" = x ]
97     then
98     src=$1
99     else
100     # this colon is to work around a 386BSD /bin/sh bug
101     :
102     dst=$1
103     fi
104     shift
105     continue;;
106     esac
107     done
108    
109     if [ x"$src" = x ]
110     then
111     echo "install: no input file specified"
112     exit 1
113     else
114     true
115     fi
116    
117     if [ x"$dir_arg" != x ]; then
118     dst=$src
119     src=""
120    
121     if [ -d $dst ]; then
122     instcmd=:
123     chmodcmd=""
124     else
125     instcmd=mkdir
126     fi
127     else
128    
129     # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
130     # might cause directories to be created, which would be especially bad
131     # if $src (and thus $dsttmp) contains '*'.
132    
133     if [ -f $src -o -d $src ]
134     then
135     true
136     else
137     echo "install: $src does not exist"
138     exit 1
139     fi
140    
141     if [ x"$dst" = x ]
142     then
143     echo "install: no destination specified"
144     exit 1
145     else
146     true
147     fi
148    
149     # If destination is a directory, append the input filename; if your system
150     # does not like double slashes in filenames, you may need to add some logic
151    
152     if [ -d $dst ]
153     then
154     dst="$dst"/`basename $src`
155     else
156     true
157     fi
158     fi
159    
160     ## this sed command emulates the dirname command
161     dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
162    
163     # Make sure that the destination directory exists.
164     # this part is taken from Noah Friedman's mkinstalldirs script
165    
166     # Skip lots of stat calls in the usual case.
167     if [ ! -d "$dstdir" ]; then
168     defaultIFS='
169     '
170     IFS="${IFS-${defaultIFS}}"
171    
172     oIFS="${IFS}"
173     # Some sh's can't handle IFS=/ for some reason.
174     IFS='%'
175     set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
176     IFS="${oIFS}"
177    
178     pathcomp=''
179    
180     while [ $# -ne 0 ] ; do
181     pathcomp="${pathcomp}${1}"
182     shift
183    
184     if [ ! -d "${pathcomp}" ] ;
185     then
186     $mkdirprog "${pathcomp}"
187     else
188     true
189     fi
190    
191     pathcomp="${pathcomp}/"
192     done
193     fi
194    
195     if [ x"$dir_arg" != x ]
196     then
197     $doit $instcmd $dst &&
198    
199     if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
200     if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
201     if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
202     if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
203     else
204    
205     # If we're going to rename the final executable, determine the name now.
206    
207     if [ x"$transformarg" = x ]
208     then
209     dstfile=`basename $dst`
210     else
211     dstfile=`basename $dst $transformbasename |
212     sed $transformarg`$transformbasename
213     fi
214    
215     # don't allow the sed command to completely eliminate the filename
216    
217     if [ x"$dstfile" = x ]
218     then
219     dstfile=`basename $dst`
220     else
221     true
222     fi
223    
224     # Make a temp file name in the proper directory.
225    
226     dsttmp=$dstdir/#inst.$$#
227    
228     # Move or copy the file name to the temp name
229    
230     $doit $instcmd $src $dsttmp &&
231    
232     trap "rm -f ${dsttmp}" 0 &&
233    
234     # and set any options; do chmod last to preserve setuid bits
235    
236     # If any of these fail, we abort the whole thing. If we want to
237     # ignore errors from any of these, just make sure not to ignore
238     # errors from the above "$doit $instcmd $src $dsttmp" command.
239    
240     if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
241     if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
242     if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
243     if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
244    
245     # Now rename the file to the real destination.
246    
247     $doit $rmcmd -f $dstdir/$dstfile &&
248     $doit $mvcmd $dsttmp $dstdir/$dstfile
249    
250     fi &&
251    
252    
253     exit 0