Mercurial > hg > xemacs-beta
comparison modules/sample/internal/install-sh @ 996:25e260cb7994
[xemacs-hg @ 2002-09-10 15:27:02 by james]
Enable unloading of dynamic modules. Create the first two internal XEmacs
modules: LDAP and postgreSQL. Update the sample directory to contain a
sample internal XEmacs module and a sample external XEmacs module. Improve
support for autoloading modules. Make internal module code compile into the
XEmacs binary if XEmacs is configured without module support. Make the
internal module directories self-contained so that they can be distributed
separately from XEmacs.
author | james |
---|---|
date | Tue, 10 Sep 2002 15:27:39 +0000 |
parents | |
children | 6ed8c4ccc17e |
comparison
equal
deleted
inserted
replaced
995:4575a219af58 | 996:25e260cb7994 |
---|---|
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 "install: no input file specified" | |
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 "install: $src does not exist" | |
136 exit 1 | |
137 fi | |
138 | |
139 if [ x"$dst" = x ] | |
140 then | |
141 echo "install: no destination specified" | |
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 temp file name in the proper directory. | |
223 | |
224 dsttmp=$dstdir/#inst.$$# | |
225 | |
226 # Move or copy the file name to the temp name | |
227 | |
228 $doit $instcmd $src $dsttmp && | |
229 | |
230 trap "rm -f ${dsttmp}" 0 && | |
231 | |
232 # and set any options; do chmod last to preserve setuid bits | |
233 | |
234 # If any of these fail, we abort the whole thing. If we want to | |
235 # ignore errors from any of these, just make sure not to ignore | |
236 # errors from the above "$doit $instcmd $src $dsttmp" command. | |
237 | |
238 if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && | |
239 if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && | |
240 if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && | |
241 if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && | |
242 | |
243 # Now rename the file to the real destination. | |
244 | |
245 $doit $rmcmd -f $dstdir/$dstfile && | |
246 $doit $mvcmd $dsttmp $dstdir/$dstfile | |
247 | |
248 fi && | |
249 | |
250 | |
251 exit 0 |