nutcracker 0.4.0.16 → 0.4.1.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +3 -3
  3. data/ext/nutcracker/ChangeLog +33 -8
  4. data/ext/nutcracker/Makefile.in +34 -21
  5. data/ext/nutcracker/README.md +61 -26
  6. data/ext/nutcracker/aclocal.m4 +34 -31
  7. data/ext/nutcracker/autom4te.cache/output.0 +1875 -1330
  8. data/ext/nutcracker/autom4te.cache/output.1 +1875 -1330
  9. data/ext/nutcracker/autom4te.cache/requests +232 -451
  10. data/ext/nutcracker/autom4te.cache/traces.0 +2256 -2129
  11. data/ext/nutcracker/autom4te.cache/traces.1 +73 -59
  12. data/ext/nutcracker/config.h.in +1 -2
  13. data/ext/nutcracker/config.h.in~ +333 -0
  14. data/ext/nutcracker/config/compile +1 -1
  15. data/ext/nutcracker/config/config.guess +13 -160
  16. data/ext/nutcracker/config/config.sub +25 -11
  17. data/ext/nutcracker/config/depcomp +1 -1
  18. data/ext/nutcracker/config/install-sh +170 -196
  19. data/ext/nutcracker/config/ltmain.sh +3509 -2018
  20. data/ext/nutcracker/config/missing +1 -1
  21. data/ext/nutcracker/configure +1874 -1329
  22. data/ext/nutcracker/configure.ac +3 -2
  23. data/ext/nutcracker/contrib/Makefile.in +18 -5
  24. data/ext/nutcracker/contrib/yaml-0.1.4/LICENSE +19 -0
  25. data/ext/nutcracker/contrib/yaml-0.1.4/Makefile.am +20 -0
  26. data/ext/nutcracker/contrib/yaml-0.1.4/Makefile.in +832 -0
  27. data/ext/nutcracker/contrib/yaml-0.1.4/README +27 -0
  28. data/ext/nutcracker/contrib/yaml-0.1.4/aclocal.m4 +1157 -0
  29. data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/output.0 +13342 -0
  30. data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/output.1 +14611 -0
  31. data/ext/nutcracker/{autom4te.cache → contrib/yaml-0.1.4/autom4te.cache}/output.2 +3465 -8761
  32. data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/requests +516 -0
  33. data/ext/nutcracker/{autom4te.cache/traces.2 → contrib/yaml-0.1.4/autom4te.cache/traces.0} +662 -698
  34. data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/traces.1 +577 -0
  35. data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/traces.2 +2721 -0
  36. data/ext/nutcracker/contrib/yaml-0.1.4/config.h.in +79 -0
  37. data/ext/nutcracker/contrib/yaml-0.1.4/config.h.in~ +80 -0
  38. data/ext/nutcracker/contrib/yaml-0.1.4/config/compile +347 -0
  39. data/ext/nutcracker/contrib/yaml-0.1.4/config/config.guess +1421 -0
  40. data/ext/nutcracker/contrib/yaml-0.1.4/config/config.sub +1807 -0
  41. data/ext/nutcracker/contrib/yaml-0.1.4/config/depcomp +791 -0
  42. data/ext/nutcracker/contrib/yaml-0.1.4/config/install-sh +501 -0
  43. data/ext/nutcracker/contrib/yaml-0.1.4/config/ltmain.sh +11147 -0
  44. data/ext/nutcracker/contrib/yaml-0.1.4/config/missing +215 -0
  45. data/ext/nutcracker/contrib/yaml-0.1.4/config/test-driver +148 -0
  46. data/ext/nutcracker/contrib/yaml-0.1.4/configure +14611 -0
  47. data/ext/nutcracker/contrib/yaml-0.1.4/configure.ac +75 -0
  48. data/ext/nutcracker/contrib/yaml-0.1.4/doc/doxygen.cfg +222 -0
  49. data/ext/nutcracker/contrib/yaml-0.1.4/include/yaml.h +1971 -0
  50. data/ext/nutcracker/contrib/yaml-0.1.4/m4/libtool.m4 +8369 -0
  51. data/ext/nutcracker/contrib/yaml-0.1.4/m4/ltoptions.m4 +437 -0
  52. data/ext/nutcracker/contrib/yaml-0.1.4/m4/ltsugar.m4 +124 -0
  53. data/ext/nutcracker/contrib/yaml-0.1.4/m4/ltversion.m4 +23 -0
  54. data/ext/nutcracker/contrib/yaml-0.1.4/m4/lt~obsolete.m4 +99 -0
  55. data/ext/nutcracker/contrib/yaml-0.1.4/src/Makefile.am +4 -0
  56. data/ext/nutcracker/contrib/yaml-0.1.4/src/Makefile.in +600 -0
  57. data/ext/nutcracker/contrib/yaml-0.1.4/src/api.c +1392 -0
  58. data/ext/nutcracker/contrib/yaml-0.1.4/src/dumper.c +394 -0
  59. data/ext/nutcracker/contrib/yaml-0.1.4/src/emitter.c +2329 -0
  60. data/ext/nutcracker/contrib/yaml-0.1.4/src/loader.c +432 -0
  61. data/ext/nutcracker/contrib/yaml-0.1.4/src/parser.c +1374 -0
  62. data/ext/nutcracker/contrib/yaml-0.1.4/src/reader.c +465 -0
  63. data/ext/nutcracker/contrib/yaml-0.1.4/src/scanner.c +3570 -0
  64. data/ext/nutcracker/contrib/yaml-0.1.4/src/writer.c +141 -0
  65. data/ext/nutcracker/contrib/yaml-0.1.4/src/yaml_private.h +640 -0
  66. data/ext/nutcracker/contrib/yaml-0.1.4/tests/Makefile.am +8 -0
  67. data/ext/nutcracker/contrib/yaml-0.1.4/tests/Makefile.in +1083 -0
  68. data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor-alt.c +800 -0
  69. data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor.c +1130 -0
  70. data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter-alt.c +217 -0
  71. data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter.c +202 -0
  72. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-dumper.c +311 -0
  73. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-emitter.c +327 -0
  74. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-loader.c +63 -0
  75. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-parser.c +63 -0
  76. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-scanner.c +63 -0
  77. data/ext/nutcracker/contrib/yaml-0.1.4/tests/test-reader.c +354 -0
  78. data/ext/nutcracker/contrib/yaml-0.1.4/tests/test-version.c +29 -0
  79. data/ext/nutcracker/m4/libtool.m4 +1474 -1087
  80. data/ext/nutcracker/m4/ltoptions.m4 +90 -37
  81. data/ext/nutcracker/m4/ltsugar.m4 +4 -3
  82. data/ext/nutcracker/m4/ltversion.m4 +6 -6
  83. data/ext/nutcracker/m4/lt~obsolete.m4 +4 -3
  84. data/ext/nutcracker/man/nutcracker.8 +1 -1
  85. data/ext/nutcracker/notes/memcache.md +162 -0
  86. data/ext/nutcracker/notes/recommendation.md +10 -5
  87. data/ext/nutcracker/notes/redis.md +23 -9
  88. data/ext/nutcracker/scripts/nutcracker.init +10 -0
  89. data/ext/nutcracker/scripts/nutcracker.init.debian +83 -0
  90. data/ext/nutcracker/scripts/nutcracker.spec +36 -2
  91. data/ext/nutcracker/scripts/redis-check.sh +4 -0
  92. data/ext/nutcracker/src/Makefile.am +6 -1
  93. data/ext/nutcracker/src/Makefile.in +26 -12
  94. data/ext/nutcracker/src/event/Makefile.in +19 -6
  95. data/ext/nutcracker/src/hashkit/Makefile.in +19 -6
  96. data/ext/nutcracker/src/hashkit/nc_jenkins.c +1 -1
  97. data/ext/nutcracker/src/hashkit/nc_ketama.c +3 -3
  98. data/ext/nutcracker/src/nc.c +1 -1
  99. data/ext/nutcracker/src/nc_conf.c +67 -19
  100. data/ext/nutcracker/src/nc_conf.h +9 -4
  101. data/ext/nutcracker/src/nc_connection.c +35 -2
  102. data/ext/nutcracker/src/nc_connection.h +53 -47
  103. data/ext/nutcracker/src/nc_core.c +8 -1
  104. data/ext/nutcracker/src/nc_message.c +23 -7
  105. data/ext/nutcracker/src/nc_message.h +24 -1
  106. data/ext/nutcracker/src/nc_proxy.c +14 -3
  107. data/ext/nutcracker/src/nc_rbtree.c +1 -5
  108. data/ext/nutcracker/src/nc_request.c +58 -10
  109. data/ext/nutcracker/src/nc_response.c +27 -4
  110. data/ext/nutcracker/src/nc_server.c +33 -5
  111. data/ext/nutcracker/src/nc_server.h +10 -9
  112. data/ext/nutcracker/src/nc_string.h +17 -0
  113. data/ext/nutcracker/src/nc_util.c +5 -1
  114. data/ext/nutcracker/src/proto/Makefile.in +19 -6
  115. data/ext/nutcracker/src/proto/nc_memcache.c +76 -12
  116. data/ext/nutcracker/src/proto/nc_proto.h +9 -0
  117. data/ext/nutcracker/src/proto/nc_redis.c +400 -18
  118. data/lib/nutcracker.rb +1 -1
  119. data/lib/nutcracker/version.rb +1 -1
  120. metadata +61 -6
  121. data/ext/nutcracker/notes/memcache.txt +0 -123
@@ -0,0 +1,501 @@
1
+ #!/bin/sh
2
+ # install - install a program, script, or datafile
3
+
4
+ scriptversion=2013-12-25.23; # UTC
5
+
6
+ # This originates from X11R5 (mit/util/scripts/install.sh), which was
7
+ # later released in X11R6 (xc/config/util/install.sh) with the
8
+ # following copyright and license.
9
+ #
10
+ # Copyright (C) 1994 X Consortium
11
+ #
12
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ # of this software and associated documentation files (the "Software"), to
14
+ # deal in the Software without restriction, including without limitation the
15
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16
+ # sell copies of the Software, and to permit persons to whom the Software is
17
+ # furnished to do so, subject to the following conditions:
18
+ #
19
+ # The above copyright notice and this permission notice shall be included in
20
+ # all copies or substantial portions of the Software.
21
+ #
22
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
26
+ # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
27
+ # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
+ #
29
+ # Except as contained in this notice, the name of the X Consortium shall not
30
+ # be used in advertising or otherwise to promote the sale, use or other deal-
31
+ # ings in this Software without prior written authorization from the X Consor-
32
+ # tium.
33
+ #
34
+ #
35
+ # FSF changes to this file are in the public domain.
36
+ #
37
+ # Calling this script install-sh is preferred over install.sh, to prevent
38
+ # 'make' implicit rules from creating a file called install from it
39
+ # when there is no Makefile.
40
+ #
41
+ # This script is compatible with the BSD install script, but was written
42
+ # from scratch.
43
+
44
+ tab=' '
45
+ nl='
46
+ '
47
+ IFS=" $tab$nl"
48
+
49
+ # Set DOITPROG to "echo" to test this script.
50
+
51
+ doit=${DOITPROG-}
52
+ doit_exec=${doit:-exec}
53
+
54
+ # Put in absolute file names if you don't have them in your path;
55
+ # or use environment vars.
56
+
57
+ chgrpprog=${CHGRPPROG-chgrp}
58
+ chmodprog=${CHMODPROG-chmod}
59
+ chownprog=${CHOWNPROG-chown}
60
+ cmpprog=${CMPPROG-cmp}
61
+ cpprog=${CPPROG-cp}
62
+ mkdirprog=${MKDIRPROG-mkdir}
63
+ mvprog=${MVPROG-mv}
64
+ rmprog=${RMPROG-rm}
65
+ stripprog=${STRIPPROG-strip}
66
+
67
+ posix_mkdir=
68
+
69
+ # Desired mode of installed file.
70
+ mode=0755
71
+
72
+ chgrpcmd=
73
+ chmodcmd=$chmodprog
74
+ chowncmd=
75
+ mvcmd=$mvprog
76
+ rmcmd="$rmprog -f"
77
+ stripcmd=
78
+
79
+ src=
80
+ dst=
81
+ dir_arg=
82
+ dst_arg=
83
+
84
+ copy_on_change=false
85
+ is_target_a_directory=possibly
86
+
87
+ usage="\
88
+ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
89
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
90
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
91
+ or: $0 [OPTION]... -d DIRECTORIES...
92
+
93
+ In the 1st form, copy SRCFILE to DSTFILE.
94
+ In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
95
+ In the 4th, create DIRECTORIES.
96
+
97
+ Options:
98
+ --help display this help and exit.
99
+ --version display version info and exit.
100
+
101
+ -c (ignored)
102
+ -C install only if different (preserve the last data modification time)
103
+ -d create directories instead of installing files.
104
+ -g GROUP $chgrpprog installed files to GROUP.
105
+ -m MODE $chmodprog installed files to MODE.
106
+ -o USER $chownprog installed files to USER.
107
+ -s $stripprog installed files.
108
+ -t DIRECTORY install into DIRECTORY.
109
+ -T report an error if DSTFILE is a directory.
110
+
111
+ Environment variables override the default commands:
112
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
113
+ RMPROG STRIPPROG
114
+ "
115
+
116
+ while test $# -ne 0; do
117
+ case $1 in
118
+ -c) ;;
119
+
120
+ -C) copy_on_change=true;;
121
+
122
+ -d) dir_arg=true;;
123
+
124
+ -g) chgrpcmd="$chgrpprog $2"
125
+ shift;;
126
+
127
+ --help) echo "$usage"; exit $?;;
128
+
129
+ -m) mode=$2
130
+ case $mode in
131
+ *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
132
+ echo "$0: invalid mode: $mode" >&2
133
+ exit 1;;
134
+ esac
135
+ shift;;
136
+
137
+ -o) chowncmd="$chownprog $2"
138
+ shift;;
139
+
140
+ -s) stripcmd=$stripprog;;
141
+
142
+ -t)
143
+ is_target_a_directory=always
144
+ dst_arg=$2
145
+ # Protect names problematic for 'test' and other utilities.
146
+ case $dst_arg in
147
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
148
+ esac
149
+ shift;;
150
+
151
+ -T) is_target_a_directory=never;;
152
+
153
+ --version) echo "$0 $scriptversion"; exit $?;;
154
+
155
+ --) shift
156
+ break;;
157
+
158
+ -*) echo "$0: invalid option: $1" >&2
159
+ exit 1;;
160
+
161
+ *) break;;
162
+ esac
163
+ shift
164
+ done
165
+
166
+ # We allow the use of options -d and -T together, by making -d
167
+ # take the precedence; this is for compatibility with GNU install.
168
+
169
+ if test -n "$dir_arg"; then
170
+ if test -n "$dst_arg"; then
171
+ echo "$0: target directory not allowed when installing a directory." >&2
172
+ exit 1
173
+ fi
174
+ fi
175
+
176
+ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
177
+ # When -d is used, all remaining arguments are directories to create.
178
+ # When -t is used, the destination is already specified.
179
+ # Otherwise, the last argument is the destination. Remove it from $@.
180
+ for arg
181
+ do
182
+ if test -n "$dst_arg"; then
183
+ # $@ is not empty: it contains at least $arg.
184
+ set fnord "$@" "$dst_arg"
185
+ shift # fnord
186
+ fi
187
+ shift # arg
188
+ dst_arg=$arg
189
+ # Protect names problematic for 'test' and other utilities.
190
+ case $dst_arg in
191
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
192
+ esac
193
+ done
194
+ fi
195
+
196
+ if test $# -eq 0; then
197
+ if test -z "$dir_arg"; then
198
+ echo "$0: no input file specified." >&2
199
+ exit 1
200
+ fi
201
+ # It's OK to call 'install-sh -d' without argument.
202
+ # This can happen when creating conditional directories.
203
+ exit 0
204
+ fi
205
+
206
+ if test -z "$dir_arg"; then
207
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
208
+ if test ! -d "$dst_arg"; then
209
+ echo "$0: $dst_arg: Is not a directory." >&2
210
+ exit 1
211
+ fi
212
+ fi
213
+ fi
214
+
215
+ if test -z "$dir_arg"; then
216
+ do_exit='(exit $ret); exit $ret'
217
+ trap "ret=129; $do_exit" 1
218
+ trap "ret=130; $do_exit" 2
219
+ trap "ret=141; $do_exit" 13
220
+ trap "ret=143; $do_exit" 15
221
+
222
+ # Set umask so as not to create temps with too-generous modes.
223
+ # However, 'strip' requires both read and write access to temps.
224
+ case $mode in
225
+ # Optimize common cases.
226
+ *644) cp_umask=133;;
227
+ *755) cp_umask=22;;
228
+
229
+ *[0-7])
230
+ if test -z "$stripcmd"; then
231
+ u_plus_rw=
232
+ else
233
+ u_plus_rw='% 200'
234
+ fi
235
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
236
+ *)
237
+ if test -z "$stripcmd"; then
238
+ u_plus_rw=
239
+ else
240
+ u_plus_rw=,u+rw
241
+ fi
242
+ cp_umask=$mode$u_plus_rw;;
243
+ esac
244
+ fi
245
+
246
+ for src
247
+ do
248
+ # Protect names problematic for 'test' and other utilities.
249
+ case $src in
250
+ -* | [=\(\)!]) src=./$src;;
251
+ esac
252
+
253
+ if test -n "$dir_arg"; then
254
+ dst=$src
255
+ dstdir=$dst
256
+ test -d "$dstdir"
257
+ dstdir_status=$?
258
+ else
259
+
260
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
261
+ # might cause directories to be created, which would be especially bad
262
+ # if $src (and thus $dsttmp) contains '*'.
263
+ if test ! -f "$src" && test ! -d "$src"; then
264
+ echo "$0: $src does not exist." >&2
265
+ exit 1
266
+ fi
267
+
268
+ if test -z "$dst_arg"; then
269
+ echo "$0: no destination specified." >&2
270
+ exit 1
271
+ fi
272
+ dst=$dst_arg
273
+
274
+ # If destination is a directory, append the input filename; won't work
275
+ # if double slashes aren't ignored.
276
+ if test -d "$dst"; then
277
+ if test "$is_target_a_directory" = never; then
278
+ echo "$0: $dst_arg: Is a directory" >&2
279
+ exit 1
280
+ fi
281
+ dstdir=$dst
282
+ dst=$dstdir/`basename "$src"`
283
+ dstdir_status=0
284
+ else
285
+ dstdir=`dirname "$dst"`
286
+ test -d "$dstdir"
287
+ dstdir_status=$?
288
+ fi
289
+ fi
290
+
291
+ obsolete_mkdir_used=false
292
+
293
+ if test $dstdir_status != 0; then
294
+ case $posix_mkdir in
295
+ '')
296
+ # Create intermediate dirs using mode 755 as modified by the umask.
297
+ # This is like FreeBSD 'install' as of 1997-10-28.
298
+ umask=`umask`
299
+ case $stripcmd.$umask in
300
+ # Optimize common cases.
301
+ *[2367][2367]) mkdir_umask=$umask;;
302
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
303
+
304
+ *[0-7])
305
+ mkdir_umask=`expr $umask + 22 \
306
+ - $umask % 100 % 40 + $umask % 20 \
307
+ - $umask % 10 % 4 + $umask % 2
308
+ `;;
309
+ *) mkdir_umask=$umask,go-w;;
310
+ esac
311
+
312
+ # With -d, create the new directory with the user-specified mode.
313
+ # Otherwise, rely on $mkdir_umask.
314
+ if test -n "$dir_arg"; then
315
+ mkdir_mode=-m$mode
316
+ else
317
+ mkdir_mode=
318
+ fi
319
+
320
+ posix_mkdir=false
321
+ case $umask in
322
+ *[123567][0-7][0-7])
323
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
324
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
325
+ ;;
326
+ *)
327
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
328
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
329
+
330
+ if (umask $mkdir_umask &&
331
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
332
+ then
333
+ if test -z "$dir_arg" || {
334
+ # Check for POSIX incompatibilities with -m.
335
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
336
+ # other-writable bit of parent directory when it shouldn't.
337
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
338
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
339
+ case $ls_ld_tmpdir in
340
+ d????-?r-*) different_mode=700;;
341
+ d????-?--*) different_mode=755;;
342
+ *) false;;
343
+ esac &&
344
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
345
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
346
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
347
+ }
348
+ }
349
+ then posix_mkdir=:
350
+ fi
351
+ rmdir "$tmpdir/d" "$tmpdir"
352
+ else
353
+ # Remove any dirs left behind by ancient mkdir implementations.
354
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
355
+ fi
356
+ trap '' 0;;
357
+ esac;;
358
+ esac
359
+
360
+ if
361
+ $posix_mkdir && (
362
+ umask $mkdir_umask &&
363
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
364
+ )
365
+ then :
366
+ else
367
+
368
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
369
+ # or it failed possibly due to a race condition. Create the
370
+ # directory the slow way, step by step, checking for races as we go.
371
+
372
+ case $dstdir in
373
+ /*) prefix='/';;
374
+ [-=\(\)!]*) prefix='./';;
375
+ *) prefix='';;
376
+ esac
377
+
378
+ oIFS=$IFS
379
+ IFS=/
380
+ set -f
381
+ set fnord $dstdir
382
+ shift
383
+ set +f
384
+ IFS=$oIFS
385
+
386
+ prefixes=
387
+
388
+ for d
389
+ do
390
+ test X"$d" = X && continue
391
+
392
+ prefix=$prefix$d
393
+ if test -d "$prefix"; then
394
+ prefixes=
395
+ else
396
+ if $posix_mkdir; then
397
+ (umask=$mkdir_umask &&
398
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
399
+ # Don't fail if two instances are running concurrently.
400
+ test -d "$prefix" || exit 1
401
+ else
402
+ case $prefix in
403
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
404
+ *) qprefix=$prefix;;
405
+ esac
406
+ prefixes="$prefixes '$qprefix'"
407
+ fi
408
+ fi
409
+ prefix=$prefix/
410
+ done
411
+
412
+ if test -n "$prefixes"; then
413
+ # Don't fail if two instances are running concurrently.
414
+ (umask $mkdir_umask &&
415
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
416
+ test -d "$dstdir" || exit 1
417
+ obsolete_mkdir_used=true
418
+ fi
419
+ fi
420
+ fi
421
+
422
+ if test -n "$dir_arg"; then
423
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
424
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
425
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
426
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
427
+ else
428
+
429
+ # Make a couple of temp file names in the proper directory.
430
+ dsttmp=$dstdir/_inst.$$_
431
+ rmtmp=$dstdir/_rm.$$_
432
+
433
+ # Trap to clean up those temp files at exit.
434
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
435
+
436
+ # Copy the file name to the temp name.
437
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
438
+
439
+ # and set any options; do chmod last to preserve setuid bits.
440
+ #
441
+ # If any of these fail, we abort the whole thing. If we want to
442
+ # ignore errors from any of these, just make sure not to ignore
443
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
444
+ #
445
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
446
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
447
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
448
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
449
+
450
+ # If -C, don't bother to copy if it wouldn't change the file.
451
+ if $copy_on_change &&
452
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
453
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
454
+ set -f &&
455
+ set X $old && old=:$2:$4:$5:$6 &&
456
+ set X $new && new=:$2:$4:$5:$6 &&
457
+ set +f &&
458
+ test "$old" = "$new" &&
459
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
460
+ then
461
+ rm -f "$dsttmp"
462
+ else
463
+ # Rename the file to the real destination.
464
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
465
+
466
+ # The rename failed, perhaps because mv can't rename something else
467
+ # to itself, or perhaps because mv is so ancient that it does not
468
+ # support -f.
469
+ {
470
+ # Now remove or move aside any old file at destination location.
471
+ # We try this two ways since rm can't unlink itself on some
472
+ # systems and the destination file might be busy for other
473
+ # reasons. In this case, the final cleanup might fail but the new
474
+ # file should still install successfully.
475
+ {
476
+ test ! -f "$dst" ||
477
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
478
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
479
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
480
+ } ||
481
+ { echo "$0: cannot unlink or rename $dst" >&2
482
+ (exit 1); exit 1
483
+ }
484
+ } &&
485
+
486
+ # Now rename the file to the real destination.
487
+ $doit $mvcmd "$dsttmp" "$dst"
488
+ }
489
+ fi || exit 1
490
+
491
+ trap '' 0
492
+ fi
493
+ done
494
+
495
+ # Local variables:
496
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
497
+ # time-stamp-start: "scriptversion="
498
+ # time-stamp-format: "%:y-%02m-%02d.%02H"
499
+ # time-stamp-time-zone: "UTC"
500
+ # time-stamp-end: "; # UTC"
501
+ # End: