nutcracker 0.3.0.12 → 0.4.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +5 -13
  2. data/README.md +3 -3
  3. data/Rakefile +12 -10
  4. data/ext/nutcracker/Makefile.in +215 -162
  5. data/ext/nutcracker/README.md +16 -4
  6. data/ext/nutcracker/aclocal.m4 +432 -254
  7. data/ext/nutcracker/{contrib/yaml-0.1.4/configure → autom4te.cache/output.0} +11367 -4545
  8. data/ext/nutcracker/autom4te.cache/output.1 +19907 -0
  9. data/ext/nutcracker/autom4te.cache/output.2 +19907 -0
  10. data/ext/nutcracker/autom4te.cache/requests +518 -0
  11. data/ext/nutcracker/autom4te.cache/traces.0 +2715 -0
  12. data/ext/nutcracker/autom4te.cache/traces.1 +967 -0
  13. data/ext/nutcracker/autom4te.cache/traces.2 +2715 -0
  14. data/ext/nutcracker/config/compile +347 -0
  15. data/ext/nutcracker/config/config.guess +116 -78
  16. data/ext/nutcracker/config/config.sub +65 -45
  17. data/ext/nutcracker/config/depcomp +295 -192
  18. data/ext/nutcracker/config/install-sh +7 -7
  19. data/ext/nutcracker/config/ltmain.sh +15 -20
  20. data/ext/nutcracker/config/missing +149 -265
  21. data/ext/nutcracker/configure +493 -367
  22. data/ext/nutcracker/contrib/Makefile.in +158 -116
  23. data/ext/nutcracker/extconf.rb +0 -1
  24. data/ext/nutcracker/m4/libtool.m4 +4 -23
  25. data/ext/nutcracker/m4/ltoptions.m4 +0 -0
  26. data/ext/nutcracker/m4/ltsugar.m4 +0 -0
  27. data/ext/nutcracker/m4/ltversion.m4 +0 -0
  28. data/ext/nutcracker/m4/lt~obsolete.m4 +0 -0
  29. data/ext/nutcracker/notes/recommendation.md +1 -1
  30. data/ext/nutcracker/notes/redis.md +35 -3
  31. data/ext/nutcracker/scripts/benchmark-mget.py +43 -0
  32. data/ext/nutcracker/scripts/nutcracker.spec +61 -3
  33. data/ext/nutcracker/scripts/redis-check.sh +43 -0
  34. data/ext/nutcracker/src/Makefile.in +205 -142
  35. data/ext/nutcracker/src/event/Makefile.in +164 -66
  36. data/ext/nutcracker/src/hashkit/Makefile.in +164 -66
  37. data/ext/nutcracker/src/nc_conf.c +2 -0
  38. data/ext/nutcracker/src/nc_connection.c +31 -0
  39. data/ext/nutcracker/src/nc_connection.h +3 -0
  40. data/ext/nutcracker/src/nc_core.c +38 -2
  41. data/ext/nutcracker/src/nc_core.h +11 -0
  42. data/ext/nutcracker/src/nc_log.c +90 -12
  43. data/ext/nutcracker/src/nc_log.h +11 -0
  44. data/ext/nutcracker/src/nc_mbuf.h +1 -1
  45. data/ext/nutcracker/src/nc_message.c +162 -116
  46. data/ext/nutcracker/src/nc_message.h +161 -129
  47. data/ext/nutcracker/src/nc_proxy.c +34 -4
  48. data/ext/nutcracker/src/nc_request.c +158 -32
  49. data/ext/nutcracker/src/nc_server.c +59 -5
  50. data/ext/nutcracker/src/nc_server.h +1 -0
  51. data/ext/nutcracker/src/nc_signal.c +2 -2
  52. data/ext/nutcracker/src/nc_stats.c +21 -0
  53. data/ext/nutcracker/src/nc_stats.h +28 -26
  54. data/ext/nutcracker/src/nc_string.c +176 -1
  55. data/ext/nutcracker/src/nc_string.h +26 -0
  56. data/ext/nutcracker/src/nc_util.c +12 -0
  57. data/ext/nutcracker/src/nc_util.h +1 -0
  58. data/ext/nutcracker/src/proto/Makefile.in +164 -66
  59. data/ext/nutcracker/src/proto/nc_memcache.c +279 -88
  60. data/ext/nutcracker/src/proto/nc_proto.h +3 -4
  61. data/ext/nutcracker/src/proto/nc_redis.c +561 -134
  62. data/lib/nutcracker/version.rb +1 -1
  63. metadata +31 -67
  64. data/ext/nutcracker/contrib/yaml-0.1.4/LICENSE +0 -19
  65. data/ext/nutcracker/contrib/yaml-0.1.4/Makefile.am +0 -20
  66. data/ext/nutcracker/contrib/yaml-0.1.4/Makefile.in +0 -736
  67. data/ext/nutcracker/contrib/yaml-0.1.4/README +0 -27
  68. data/ext/nutcracker/contrib/yaml-0.1.4/aclocal.m4 +0 -956
  69. data/ext/nutcracker/contrib/yaml-0.1.4/config.h.in +0 -80
  70. data/ext/nutcracker/contrib/yaml-0.1.4/config/config.guess +0 -1561
  71. data/ext/nutcracker/contrib/yaml-0.1.4/config/config.sub +0 -1686
  72. data/ext/nutcracker/contrib/yaml-0.1.4/config/depcomp +0 -630
  73. data/ext/nutcracker/contrib/yaml-0.1.4/config/install-sh +0 -520
  74. data/ext/nutcracker/contrib/yaml-0.1.4/config/ltmain.sh +0 -8406
  75. data/ext/nutcracker/contrib/yaml-0.1.4/config/missing +0 -376
  76. data/ext/nutcracker/contrib/yaml-0.1.4/configure.ac +0 -75
  77. data/ext/nutcracker/contrib/yaml-0.1.4/doc/doxygen.cfg +0 -222
  78. data/ext/nutcracker/contrib/yaml-0.1.4/include/yaml.h +0 -1971
  79. data/ext/nutcracker/contrib/yaml-0.1.4/m4/libtool.m4 +0 -7357
  80. data/ext/nutcracker/contrib/yaml-0.1.4/m4/ltoptions.m4 +0 -368
  81. data/ext/nutcracker/contrib/yaml-0.1.4/m4/ltsugar.m4 +0 -123
  82. data/ext/nutcracker/contrib/yaml-0.1.4/m4/ltversion.m4 +0 -23
  83. data/ext/nutcracker/contrib/yaml-0.1.4/m4/lt~obsolete.m4 +0 -92
  84. data/ext/nutcracker/contrib/yaml-0.1.4/src/Makefile.am +0 -4
  85. data/ext/nutcracker/contrib/yaml-0.1.4/src/Makefile.in +0 -484
  86. data/ext/nutcracker/contrib/yaml-0.1.4/src/api.c +0 -1392
  87. data/ext/nutcracker/contrib/yaml-0.1.4/src/dumper.c +0 -394
  88. data/ext/nutcracker/contrib/yaml-0.1.4/src/emitter.c +0 -2329
  89. data/ext/nutcracker/contrib/yaml-0.1.4/src/loader.c +0 -432
  90. data/ext/nutcracker/contrib/yaml-0.1.4/src/parser.c +0 -1374
  91. data/ext/nutcracker/contrib/yaml-0.1.4/src/reader.c +0 -465
  92. data/ext/nutcracker/contrib/yaml-0.1.4/src/scanner.c +0 -3570
  93. data/ext/nutcracker/contrib/yaml-0.1.4/src/writer.c +0 -141
  94. data/ext/nutcracker/contrib/yaml-0.1.4/src/yaml_private.h +0 -640
  95. data/ext/nutcracker/contrib/yaml-0.1.4/tests/Makefile.am +0 -8
  96. data/ext/nutcracker/contrib/yaml-0.1.4/tests/Makefile.in +0 -675
  97. data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor-alt.c +0 -800
  98. data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor.c +0 -1130
  99. data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter-alt.c +0 -217
  100. data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter.c +0 -202
  101. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-dumper.c +0 -311
  102. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-emitter.c +0 -327
  103. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-loader.c +0 -63
  104. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-parser.c +0 -63
  105. data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-scanner.c +0 -63
  106. data/ext/nutcracker/contrib/yaml-0.1.4/tests/test-reader.c +0 -354
  107. data/ext/nutcracker/contrib/yaml-0.1.4/tests/test-version.c +0 -29
File without changes
@@ -69,7 +69,7 @@ Seeing a `SERVER_ERROR` or `-ERR` response should be considered as a transient f
69
69
 
70
70
  ## read, writev and mbuf
71
71
 
72
- All memory for incoming requests and outgoing responses is allocated in mbuf. Mbuf enables zero copy for requests and responses flowing through the proxy. By default an mbuf is 16K bytes in size and this value can be tuned between 512 and 65K bytes using -m or --mbuf-size=N argument. Every connection has at least one mbuf allocated to it. This means that the number of concurrent connections nutcracker can support is dependent on the mbuf size. A small mbuf allows us to handle more connections, while a large mbuf allows us to read and write more data to and from kernel socket buffers.
72
+ All memory for incoming requests and outgoing responses is allocated in mbuf. Mbuf enables zero copy for requests and responses flowing through the proxy. By default an mbuf is 16K bytes in size and this value can be tuned between 512 and 16M bytes using -m or --mbuf-size=N argument. Every connection has at least one mbuf allocated to it. This means that the number of concurrent connections nutcracker can support is dependent on the mbuf size. A small mbuf allows us to handle more connections, while a large mbuf allows us to read and write more data to and from kernel socket buffers.
73
73
 
74
74
  If nutcracker is meant to handle a large number of concurrent client connections, you should set the mbuf size to 512 or 1K bytes.
75
75
 
@@ -1,4 +1,4 @@
1
- ## Redis Commands Supported
1
+ ## Redis Command Support
2
2
 
3
3
  ### Keys Command
4
4
 
@@ -39,12 +39,16 @@
39
39
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
40
40
  | RESTORE | Yes | RESTORE key ttl serialized-value |
41
41
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
42
- | SORT | No | SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination] |
42
+ | SORT | Yes* | SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination] |
43
43
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
44
44
  | TTL | Yes | TTL key |
45
45
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
46
46
  | TYPE | Yes | TYPE key |
47
47
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
48
+ | SCAN | No | SCAN cursor [MATCH pattern] [COUNT count] |
49
+ +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
50
+
51
+ * SORT support requires that the supplied keys hash to the same server. You can ensure this by using the same [hashtag](notes/recommendation.md#hash-tags) for all keys in the command.
48
52
 
49
53
  ### Strings Command
50
54
 
@@ -77,7 +81,7 @@
77
81
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
78
82
  | MGET | Yes | MGET key [key ...] |
79
83
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
80
- | MSET | No | MSET key value [key value ...] |
84
+ | MSET | Yes* | MSET key value [key value ...] |
81
85
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
82
86
  | MSETNX | No | MSETNX key value [key value ...] |
83
87
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
@@ -96,6 +100,8 @@
96
100
  | STRLEN | Yes | STRLEN key |
97
101
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
98
102
 
103
+ * MSET support is not Atomic
104
+
99
105
  ### Hashes
100
106
 
101
107
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
@@ -127,6 +133,8 @@
127
133
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
128
134
  | HVALS | Yes | HVALS key |
129
135
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
136
+ | HSCAN | Yes | HSCAN key cursor [MATCH pattern] [COUNT count] |
137
+ +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
130
138
 
131
139
  ### Lists
132
140
 
@@ -203,6 +211,8 @@
203
211
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
204
212
  | SUNIONSTORE | Yes* | SUNIONSTORE destination key [key ...] |
205
213
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
214
+ | SSCAN | Yes | SSCAN key cursor [MATCH pattern] [COUNT count] |
215
+ +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
206
216
 
207
217
  * SIDFF, SDIFFSTORE, SINTER, SINTERSTORE, SMOVE, SUNION and SUNIONSTORE support requires that the supplied keys hash to the same server. You can ensure this by using the same [hashtag](notes/recommendation.md#hash-tags) for all keys in the command. Twemproxy does no checking on its end to verify that all the keys hash to the same server, and the given command is forwarded to the server that the first key hashes to.
208
218
 
@@ -221,8 +231,12 @@
221
231
  | ZINCRBY | Yes | ZINCRBY key increment member |
222
232
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
223
233
  | ZINTERSTORE | Yes* | ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] |
234
+ +------------------------------------------------------------------------------------------------------------------------------------------------------+
235
+ | ZLEXCOUNT | Yes | ZLEXCOUNT key min max |
224
236
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
225
237
  | ZRANGE | Yes | ZRANGE key start stop [WITHSCORES] |
238
+ +------------------------------------------------------------------------------------------------------------------------------------------------------+
239
+ | ZRANGEBYLEX | Yes | ZRANGEBYLEX key min max [LIMIT offset count] |
226
240
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
227
241
  | ZRANGEBYSCORE | Yes | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] |
228
242
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
@@ -230,6 +244,8 @@
230
244
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
231
245
  | ZREM | Yes | ZREM key member [member ...] |
232
246
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
247
+ | ZREMRANGEBYLEX | Yes | ZREMRANGEBYLEX key min max |
248
+ +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
233
249
  | ZREMRANGEBYRANK | Yes | ZREMRANGEBYRANK key start stop |
234
250
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
235
251
  | ZREMRANGEBYSCORE | Yes | ZREMRANGEBYSCORE key min max |
@@ -244,9 +260,25 @@
244
260
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
245
261
  | ZUNIONSTORE | Yes* | ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] |
246
262
  +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
263
+ | ZSCAN | Yes | ZSCAN key cursor [MATCH pattern] [COUNT count] |
264
+ +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
247
265
 
248
266
  * ZINTERSTORE and ZUNIONSTORE support requires that the supplied keys hash to the same server. You can ensure this by using the same [hashtag](notes/recommendation.md#hash-tags) for all keys in the command. Twemproxy does no checking on its end to verify that all the keys hash to the same server, and the given command is forwarded to the server that the first key hashes to.
249
267
 
268
+ ### HyperLogLog
269
+
270
+ +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
271
+ | Command | Supported? | Format |
272
+ +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
273
+ | PFADD | Yes | PFADD key element [element ...] |
274
+ +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
275
+ | PFCOUNT | Yes | PFCOUNT key [key ...] |
276
+ +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
277
+ | PFMERGE | Yes* | PFMERGE destkey sourcekey [sourcekey ...] |
278
+ +-------------------+------------+---------------------------------------------------------------------------------------------------------------------+
279
+
280
+ * PFMERGE support requires that the supplied keys hash to the same server. You can ensure this by using the same [hashtag](notes/recommendation.md#hash-tags) for all keys in the command. Twemproxy does no checking on its end to verify that all the keys hash to the same server, and the given command is forwarded to the server that the first key hashes to.
281
+
250
282
 
251
283
  ### Pub/Sub
252
284
 
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env python
2
+ #coding: utf-8
3
+ #file : test_mget.py
4
+ #author : ning
5
+ #date : 2014-04-01 13:15:48
6
+
7
+ import os
8
+ import re
9
+ import commands
10
+
11
+ ports = [
12
+ 4001, # before improve
13
+ 4000, # after improve
14
+ 2000 # redis
15
+ ]
16
+
17
+ def system(cmd):
18
+ return commands.getoutput(cmd)
19
+
20
+ def extra(regex, text):
21
+ match = re.search(regex, text, re.DOTALL)
22
+ if match:
23
+ return match.group(1)
24
+
25
+ def testit():
26
+ for mget_size in [10, 100, 1000, 10000]:
27
+ for port in ports:
28
+ cnt = 100*1000 / mget_size
29
+ clients = 50
30
+ if mget_size == 10000:
31
+ clients = 2
32
+ cmd = 'cd /home/ning/xredis/deploy-srcs/redis-2.8.3/src && ./redis-benchmark.%d -n %d -p %d -t mget -r 1000000000 -c %d' % (mget_size, cnt, port, clients)
33
+ #print cmd
34
+ rst = system(cmd)
35
+
36
+ #100.00% <= 2 milliseconds
37
+ #28089.89 requests per second
38
+ rtime = extra('100.00% <= (\d+) milliseconds', rst)
39
+ qps = extra('([\.\d]+) requests per second', rst)
40
+
41
+ print 'mget_size=%d on %d: pqs: %s, rtime: %s' % (mget_size, port, qps, rtime)
42
+
43
+ testit()
@@ -1,20 +1,28 @@
1
1
  Summary: Twitter's nutcracker redis and memcached proxy
2
2
  Name: nutcracker
3
- Version: 0.2.2
3
+ Version: 0.3.0
4
4
  Release: 1
5
- URL: http://code.google.com/p/twemproxy/
5
+
6
+ URL: https://github.com/twitter/twemproxy/
6
7
  Source0: %{name}-%{version}.tar.gz
7
8
  License: Apache License 2.0
8
9
  Group: System Environment/Libraries
9
- Packager: Tom Parrott <tomp@tomp.co.uk>
10
+ Packager: Tom Parrott <tomp@tomp.co.uk>
10
11
  BuildRoot: %{_tmppath}/%{name}-root
11
12
 
13
+ BuildRequires: autoconf
14
+ BuildRequires: automake
15
+ BuildRequires: libtool
16
+
12
17
  %description
13
18
  twemproxy (pronounced "two-em-proxy"), aka nutcracker is a fast and lightweight proxy for memcached and redis protocol.
14
19
  It was primarily built to reduce the connection count on the backend caching servers.
15
20
 
16
21
  %prep
17
22
  %setup -q
23
+ %if 0%{?rhel} == 6
24
+ sed -i 's/2.64/2.63/g' configure.ac
25
+ %endif
18
26
  autoreconf -fvi
19
27
 
20
28
  %build
@@ -47,6 +55,56 @@ fi
47
55
 
48
56
  %files
49
57
  %defattr(-,root,root,-)
58
+ %if 0%{?rhel} == 6
59
+ /usr/sbin/nutcracker
60
+ %else
50
61
  /usr/bin/nutcracker
62
+ %endif
51
63
  %{_initrddir}/%{name}
64
+ %{_mandir}/man8/nutcracker.8.gz
52
65
  %config(noreplace)%{_sysconfdir}/%{name}/%{name}.yml
66
+
67
+ %changelog
68
+ * Fri Dec 20 2013 Manju Rajashekhar <manj@cs.stanford.edu>
69
+ - twemproxy: version 0.3.0 release
70
+ - SRANDMEMBER support for the optional count argument (mkhq)
71
+ - Handle case where server responds while the request is still being sent (jdi-tagged)
72
+ - event ports (solaris/smartos) support
73
+ - add timestamp when the server was ejected
74
+ - support for set ex/px/nx/xx for redis 2.6.12 and up (ypocat)
75
+ - kqueue (bsd) support (ferenyx)
76
+ - fix parsing redis response to accept integer reply (charsyam)
77
+
78
+ * Tue Jul 30 2013 Tait Clarridge <tait@clarridge.ca>
79
+ - Rebuild SPEC to work with CentOS
80
+ - Added buildrequires if building with mock/koji
81
+
82
+ * Tue Apr 23 2013 Manju Rajashekhar <manj@cs.stanford.edu>
83
+ - twemproxy: version 0.2.4 release
84
+ - redis keys must be less than mbuf_data_size() in length (fifsky)
85
+ - Adds support for DUMP/RESTORE commands in Redis (remotezygote)
86
+ - Use of the weight value in the modula distribution (mezzatto)
87
+ - Add support to unix socket connections to servers (mezzatto)
88
+ - only check for duplicate server name and not 'host:port:weight' when 'name' is configured
89
+ - crc16 hash support added (mezzatto)
90
+
91
+ * Thu Jan 31 2013 Manju Rajashekhar <manj@twitter.com>
92
+ - twemproxy: version 0.2.3 release
93
+ - RPOPLPUSH, SDIFF, SDIFFSTORE, SINTER, SINTERSTORE, SMOVE, SUNION, SUNIONSTORE, ZINTERSTORE, and ZUNIONSTORE support (dcartoon)
94
+ - EVAL and EVALSHA support (ferenyx)
95
+ - exit 1 if configuration file is invalid (cofyc)
96
+ - return non-zero exit status when nutcracker cannot start for some reason
97
+ - use server names in stats (charsyam)
98
+ - Fix failure to resolve long FQDN name resolve (conmame)
99
+ - add support for hash tags
100
+
101
+ * Thu Oct 18 2012 Manju Rajashekhar <manj@twitter.com>
102
+ - twemproxy: version 0.2.2 release
103
+ - fix the off-by-one error when calculating redis key length
104
+
105
+ * Fri Oct 12 2012 Manju Rajashekhar <manj@twitter.com>
106
+ - twemproxy: version 0.2.1 release
107
+ - don't use buf in conf_add_server
108
+ - allow an optional instance name for consistent hashing (charsyam)
109
+ - add --stats-addr=S option
110
+ - add stats-bind-any -a option (charsyam)
@@ -563,6 +563,49 @@ printf '*6\r\n$4\r\nzadd\r\n$7\r\n{zfoo}2\r\n$3\r\n100\r\n$3\r\nbar\r\n$3\r\n101
563
563
  printf '*5\r\n$11\r\nzunionstore\r\n$7\r\n{zfoo}3\r\n$1\r\n2\r\n$6\r\n{zfoo}\r\n$7\r\n{zfoo}2\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
564
564
  printf '*5\r\n$6\r\nzrange\r\n$7\r\n{zfoo}3\r\n$1\r\n0\r\n$1\r\n3\r\n$10\r\nWITHSCORES\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
565
565
 
566
+ printf '\nzlexcount\n'
567
+ printf '*2\r\n$3\r\ndel\r\n$4\r\nzfoo\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
568
+ printf '*4\r\n$9\r\nzlexcount\r\n$4\r\nzfoo\r\n$2\r\n(a\r\n$2\r\n(z\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
569
+ printf '*8\r\n$4\r\nzadd\r\n$4\r\nzfoo\r\n$3\r\n100\r\n$3\r\nbar\r\n$3\r\n101\r\n$3\r\nbat\r\n$3\r\n102\r\n$3\r\nbau\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
570
+ printf '*4\r\n$9\r\nzlexcount\r\n$4\r\nzfoo\r\n$2\r\n(a\r\n$4\r\n[bat\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
571
+ printf '*4\r\n$9\r\nzlexcount\r\n$4\r\nzfoo\r\n$1\r\n-\r\n$1\r\n+\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
572
+
573
+ printf '\nzrangebylex\n'
574
+ printf '*2\r\n$3\r\ndel\r\n$4\r\nzfoo\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
575
+ printf '*4\r\n$11\r\nzrangebylex\r\n$4\r\nzfoo\r\n$2\r\n(a\r\n$2\r\n(z\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
576
+ printf '*8\r\n$4\r\nzadd\r\n$4\r\nzfoo\r\n$3\r\n100\r\n$3\r\nbar\r\n$3\r\n101\r\n$3\r\nbat\r\n$3\r\n102\r\n$3\r\nbau\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
577
+ printf '*4\r\n$11\r\nzrangebylex\r\n$4\r\nzfoo\r\n$2\r\n(a\r\n$4\r\n[bat\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
578
+ printf '*4\r\n$11\r\nzrangebylex\r\n$4\r\nzfoo\r\n$1\r\n-\r\n$1\r\n+\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
579
+
580
+ printf '\nzremrangebylex\n'
581
+ printf '*2\r\n$3\r\ndel\r\n$4\r\nzfoo\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
582
+ printf '*4\r\n$14\r\nzremrangebylex\r\n$4\r\nzfoo\r\n$2\r\n(a\r\n$2\r\n(z\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
583
+ printf '*8\r\n$4\r\nzadd\r\n$4\r\nzfoo\r\n$3\r\n100\r\n$3\r\nbar\r\n$3\r\n101\r\n$3\r\nbat\r\n$3\r\n102\r\n$3\r\nbau\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
584
+ printf '*4\r\n$14\r\nzremrangebylex\r\n$4\r\nzfoo\r\n$2\r\n(a\r\n$2\r\n(z\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
585
+ printf '*4\r\n$14\r\nzremrangebylex\r\n$4\r\nzfoo\r\n$1\r\n-\r\n$1\r\n+\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
586
+
587
+ # hyperloglog
588
+
589
+ printf '\npfadd\n'
590
+ printf '*2\r\n$3\r\ndel\r\n$4\r\npfoo\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
591
+ printf '*4\r\n$5\r\npfadd\r\n$4\r\npfoo\r\n$3\r\nbar\r\n$3\r\nbas\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
592
+ printf '*2\r\n$7\r\npfcount\r\n$4\r\npfoo\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
593
+
594
+ printf '\npfcount\n'
595
+ printf '*2\r\n$3\r\ndel\r\n$4\r\npfoo\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
596
+ printf '*2\r\n$7\r\npfcount\r\n$4\r\npfoo\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
597
+ printf '*4\r\n$5\r\npfadd\r\n$4\r\npfoo\r\n$3\r\nbar\r\n$3\r\nbas\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
598
+ printf '*2\r\n$7\r\npfcount\r\n$4\r\npfoo\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
599
+
600
+ printf '\npfmerge\n'
601
+ printf '*2\r\n$3\r\ndel\r\n$6\r\n{pfoo}\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
602
+ printf '*2\r\n$3\r\ndel\r\n$7\r\n{pfoo}2\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
603
+ printf '*2\r\n$3\r\ndel\r\n$7\r\n{pfoo}3\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
604
+ printf '*4\r\n$5\r\npfadd\r\n$6\r\n{pfoo}\r\n$4\r\nsfoo\r\n$3\r\nbar\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
605
+ printf '*3\r\n$5\r\npfadd\r\n$7\r\n{pfoo}2\r\n$3\r\nbas\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
606
+ printf '*5\r\n$7\r\npfmerge\r\n$7\r\n{pfoo}3\r\n$1\r\n2\r\n$6\r\n{pfoo}\r\n$7\r\n{pfoo}2\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
607
+ printf '*2\r\n$7\r\npfcount\r\n$7\r\n{pfoo}3\r\n' | socat ${debug} ${timeout} - TCP:localhost:${port},shut-close
608
+
566
609
  # scripting
567
610
 
568
611
  printf '\neval\n'
@@ -1,9 +1,8 @@
1
- # Makefile.in generated by automake 1.11.3 from Makefile.am.
1
+ # Makefile.in generated by automake 1.14.1 from Makefile.am.
2
2
  # @configure_input@
3
3
 
4
- # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5
- # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
6
- # Foundation, Inc.
4
+ # Copyright (C) 1994-2013 Free Software Foundation, Inc.
5
+
7
6
  # This Makefile.in is free software; the Free Software Foundation
8
7
  # gives unlimited permission to copy and/or distribute it,
9
8
  # with or without modifications, as long as this notice is preserved.
@@ -16,6 +15,51 @@
16
15
  @SET_MAKE@
17
16
 
18
17
  VPATH = @srcdir@
18
+ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
19
+ am__make_running_with_option = \
20
+ case $${target_option-} in \
21
+ ?) ;; \
22
+ *) echo "am__make_running_with_option: internal error: invalid" \
23
+ "target option '$${target_option-}' specified" >&2; \
24
+ exit 1;; \
25
+ esac; \
26
+ has_opt=no; \
27
+ sane_makeflags=$$MAKEFLAGS; \
28
+ if $(am__is_gnu_make); then \
29
+ sane_makeflags=$$MFLAGS; \
30
+ else \
31
+ case $$MAKEFLAGS in \
32
+ *\\[\ \ ]*) \
33
+ bs=\\; \
34
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
35
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
36
+ esac; \
37
+ fi; \
38
+ skip_next=no; \
39
+ strip_trailopt () \
40
+ { \
41
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
42
+ }; \
43
+ for flg in $$sane_makeflags; do \
44
+ test $$skip_next = yes && { skip_next=no; continue; }; \
45
+ case $$flg in \
46
+ *=*|--*) continue;; \
47
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
48
+ -*I?*) strip_trailopt 'I';; \
49
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
50
+ -*O?*) strip_trailopt 'O';; \
51
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
52
+ -*l?*) strip_trailopt 'l';; \
53
+ -[dEDm]) skip_next=yes;; \
54
+ -[JT]) skip_next=yes;; \
55
+ esac; \
56
+ case $$flg in \
57
+ *$$target_option*) has_opt=yes; break;; \
58
+ esac; \
59
+ done; \
60
+ test $$has_opt = yes
61
+ am__make_dryrun = (target_option=n; $(am__make_running_with_option))
62
+ am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
19
63
  pkgdatadir = $(datadir)/@PACKAGE@
20
64
  pkgincludedir = $(includedir)/@PACKAGE@
21
65
  pkglibdir = $(libdir)/@PACKAGE@
@@ -38,7 +82,8 @@ host_triplet = @host@
38
82
  @OS_SOLARIS_TRUE@am__append_2 = -lnsl -lsocket
39
83
  sbin_PROGRAMS = nutcracker$(EXEEXT)
40
84
  subdir = src
41
- DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
85
+ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
86
+ $(top_srcdir)/config/depcomp
42
87
  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
43
88
  am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
44
89
  $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -64,33 +109,84 @@ nutcracker_DEPENDENCIES = $(top_builddir)/src/hashkit/libhashkit.a \
64
109
  $(top_builddir)/src/proto/libproto.a \
65
110
  $(top_builddir)/src/event/libevent.a \
66
111
  $(top_builddir)/contrib/yaml-0.1.4/src/.libs/libyaml.a
112
+ AM_V_lt = $(am__v_lt_@AM_V@)
113
+ am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
114
+ am__v_lt_0 = --silent
115
+ am__v_lt_1 =
116
+ AM_V_P = $(am__v_P_@AM_V@)
117
+ am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
118
+ am__v_P_0 = false
119
+ am__v_P_1 = :
120
+ AM_V_GEN = $(am__v_GEN_@AM_V@)
121
+ am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
122
+ am__v_GEN_0 = @echo " GEN " $@;
123
+ am__v_GEN_1 =
124
+ AM_V_at = $(am__v_at_@AM_V@)
125
+ am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
126
+ am__v_at_0 = @
127
+ am__v_at_1 =
67
128
  DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
68
129
  depcomp = $(SHELL) $(top_srcdir)/config/depcomp
69
130
  am__depfiles_maybe = depfiles
70
131
  am__mv = mv -f
71
132
  COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
72
133
  $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
73
- LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
74
- --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
75
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
134
+ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
135
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
136
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
137
+ $(AM_CFLAGS) $(CFLAGS)
138
+ AM_V_CC = $(am__v_CC_@AM_V@)
139
+ am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
140
+ am__v_CC_0 = @echo " CC " $@;
141
+ am__v_CC_1 =
76
142
  CCLD = $(CC)
77
- LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
78
- --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
79
- $(LDFLAGS) -o $@
143
+ LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
144
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
145
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
146
+ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
147
+ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
148
+ am__v_CCLD_0 = @echo " CCLD " $@;
149
+ am__v_CCLD_1 =
80
150
  SOURCES = $(nutcracker_SOURCES)
81
151
  DIST_SOURCES = $(nutcracker_SOURCES)
82
- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
83
- html-recursive info-recursive install-data-recursive \
84
- install-dvi-recursive install-exec-recursive \
85
- install-html-recursive install-info-recursive \
86
- install-pdf-recursive install-ps-recursive install-recursive \
87
- installcheck-recursive installdirs-recursive pdf-recursive \
88
- ps-recursive uninstall-recursive
152
+ RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
153
+ ctags-recursive dvi-recursive html-recursive info-recursive \
154
+ install-data-recursive install-dvi-recursive \
155
+ install-exec-recursive install-html-recursive \
156
+ install-info-recursive install-pdf-recursive \
157
+ install-ps-recursive install-recursive installcheck-recursive \
158
+ installdirs-recursive pdf-recursive ps-recursive \
159
+ tags-recursive uninstall-recursive
160
+ am__can_run_installinfo = \
161
+ case $$AM_UPDATE_INFO_DIR in \
162
+ n|no|NO) false;; \
163
+ *) (install-info --version) >/dev/null 2>&1;; \
164
+ esac
89
165
  RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
90
166
  distclean-recursive maintainer-clean-recursive
91
- AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
92
- $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
167
+ am__recursive_targets = \
168
+ $(RECURSIVE_TARGETS) \
169
+ $(RECURSIVE_CLEAN_TARGETS) \
170
+ $(am__extra_recursive_targets)
171
+ AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
93
172
  distdir
173
+ am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
174
+ # Read a list of newline-separated strings from the standard input,
175
+ # and print each of them once, without duplicates. Input order is
176
+ # *not* preserved.
177
+ am__uniquify_input = $(AWK) '\
178
+ BEGIN { nonempty = 0; } \
179
+ { items[$$0] = 1; nonempty = 1; } \
180
+ END { if (nonempty) { for (i in items) print i; }; } \
181
+ '
182
+ # Make sure the list of sources is unique. This is necessary because,
183
+ # e.g., the same source file might be shared among _SOURCES variables
184
+ # for different programs/libraries.
185
+ am__define_uniq_tagged_files = \
186
+ list='$(am__tagged_files)'; \
187
+ unique=`for i in $$list; do \
188
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
189
+ done | $(am__uniquify_input)`
94
190
  ETAGS = etags
95
191
  CTAGS = ctags
96
192
  DIST_SUBDIRS = $(SUBDIRS)
@@ -122,6 +218,7 @@ am__relativize = \
122
218
  reldir="$$dir2"
123
219
  ACLOCAL = @ACLOCAL@
124
220
  AMTAR = @AMTAR@
221
+ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
125
222
  AR = @AR@
126
223
  AUTOCONF = @AUTOCONF@
127
224
  AUTOHEADER = @AUTOHEADER@
@@ -311,14 +408,19 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps)
311
408
  $(am__aclocal_m4_deps):
312
409
  install-sbinPROGRAMS: $(sbin_PROGRAMS)
313
410
  @$(NORMAL_INSTALL)
314
- test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
315
411
  @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
412
+ if test -n "$$list"; then \
413
+ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
414
+ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
415
+ fi; \
316
416
  for p in $$list; do echo "$$p $$p"; done | \
317
417
  sed 's/$(EXEEXT)$$//' | \
318
- while read p p1; do if test -f $$p || test -f $$p1; \
319
- then echo "$$p"; echo "$$p"; else :; fi; \
418
+ while read p p1; do if test -f $$p \
419
+ || test -f $$p1 \
420
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
320
421
  done | \
321
- sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
422
+ sed -e 'p;s,.*/,,;n;h' \
423
+ -e 's|.*|.|' \
322
424
  -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
323
425
  sed 'N;N;N;s,\n, ,g' | \
324
426
  $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@@ -339,7 +441,8 @@ uninstall-sbinPROGRAMS:
339
441
  @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
340
442
  files=`for p in $$list; do echo "$$p"; done | \
341
443
  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
342
- -e 's/$$/$(EXEEXT)/' `; \
444
+ -e 's/$$/$(EXEEXT)/' \
445
+ `; \
343
446
  test -n "$$list" || exit 0; \
344
447
  echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
345
448
  cd "$(DESTDIR)$(sbindir)" && rm -f $$files
@@ -352,9 +455,10 @@ clean-sbinPROGRAMS:
352
455
  list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
353
456
  echo " rm -f" $$list; \
354
457
  rm -f $$list
458
+
355
459
  nutcracker$(EXEEXT): $(nutcracker_OBJECTS) $(nutcracker_DEPENDENCIES) $(EXTRA_nutcracker_DEPENDENCIES)
356
460
  @rm -f nutcracker$(EXEEXT)
357
- $(LINK) $(nutcracker_OBJECTS) $(nutcracker_LDADD) $(LIBS)
461
+ $(AM_V_CCLD)$(LINK) $(nutcracker_OBJECTS) $(nutcracker_LDADD) $(LIBS)
358
462
 
359
463
  mostlyclean-compile:
360
464
  -rm -f *.$(OBJEXT)
@@ -382,25 +486,25 @@ distclean-compile:
382
486
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nc_util.Po@am__quote@
383
487
 
384
488
  .c.o:
385
- @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
386
- @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
387
- @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
489
+ @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
490
+ @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
491
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
388
492
  @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
389
- @am__fastdepCC_FALSE@ $(COMPILE) -c $<
493
+ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
390
494
 
391
495
  .c.obj:
392
- @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
393
- @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
394
- @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
496
+ @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
497
+ @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
498
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
395
499
  @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
396
- @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
500
+ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
397
501
 
398
502
  .c.lo:
399
- @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
400
- @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
401
- @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
503
+ @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
504
+ @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
505
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
402
506
  @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
403
- @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
507
+ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
404
508
 
405
509
  mostlyclean-libtool:
406
510
  -rm -f *.lo
@@ -409,22 +513,25 @@ clean-libtool:
409
513
  -rm -rf .libs _libs
410
514
 
411
515
  # This directory's subdirectories are mostly independent; you can cd
412
- # into them and run `make' without going through this Makefile.
413
- # To change the values of `make' variables: instead of editing Makefiles,
414
- # (1) if the variable is set in `config.status', edit `config.status'
415
- # (which will cause the Makefiles to be regenerated when you run `make');
416
- # (2) otherwise, pass the desired values on the `make' command line.
417
- $(RECURSIVE_TARGETS):
418
- @fail= failcom='exit 1'; \
419
- for f in x $$MAKEFLAGS; do \
420
- case $$f in \
421
- *=* | --[!k]*);; \
422
- *k*) failcom='fail=yes';; \
423
- esac; \
424
- done; \
516
+ # into them and run 'make' without going through this Makefile.
517
+ # To change the values of 'make' variables: instead of editing Makefiles,
518
+ # (1) if the variable is set in 'config.status', edit 'config.status'
519
+ # (which will cause the Makefiles to be regenerated when you run 'make');
520
+ # (2) otherwise, pass the desired values on the 'make' command line.
521
+ $(am__recursive_targets):
522
+ @fail=; \
523
+ if $(am__make_keepgoing); then \
524
+ failcom='fail=yes'; \
525
+ else \
526
+ failcom='exit 1'; \
527
+ fi; \
425
528
  dot_seen=no; \
426
529
  target=`echo $@ | sed s/-recursive//`; \
427
- list='$(SUBDIRS)'; for subdir in $$list; do \
530
+ case "$@" in \
531
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
532
+ *) list='$(SUBDIRS)' ;; \
533
+ esac; \
534
+ for subdir in $$list; do \
428
535
  echo "Making $$target in $$subdir"; \
429
536
  if test "$$subdir" = "."; then \
430
537
  dot_seen=yes; \
@@ -439,57 +546,12 @@ $(RECURSIVE_TARGETS):
439
546
  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
440
547
  fi; test -z "$$fail"
441
548
 
442
- $(RECURSIVE_CLEAN_TARGETS):
443
- @fail= failcom='exit 1'; \
444
- for f in x $$MAKEFLAGS; do \
445
- case $$f in \
446
- *=* | --[!k]*);; \
447
- *k*) failcom='fail=yes';; \
448
- esac; \
449
- done; \
450
- dot_seen=no; \
451
- case "$@" in \
452
- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
453
- *) list='$(SUBDIRS)' ;; \
454
- esac; \
455
- rev=''; for subdir in $$list; do \
456
- if test "$$subdir" = "."; then :; else \
457
- rev="$$subdir $$rev"; \
458
- fi; \
459
- done; \
460
- rev="$$rev ."; \
461
- target=`echo $@ | sed s/-recursive//`; \
462
- for subdir in $$rev; do \
463
- echo "Making $$target in $$subdir"; \
464
- if test "$$subdir" = "."; then \
465
- local_target="$$target-am"; \
466
- else \
467
- local_target="$$target"; \
468
- fi; \
469
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
470
- || eval $$failcom; \
471
- done && test -z "$$fail"
472
- tags-recursive:
473
- list='$(SUBDIRS)'; for subdir in $$list; do \
474
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
475
- done
476
- ctags-recursive:
477
- list='$(SUBDIRS)'; for subdir in $$list; do \
478
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
479
- done
549
+ ID: $(am__tagged_files)
550
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
551
+ tags: tags-recursive
552
+ TAGS: tags
480
553
 
481
- ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
482
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
483
- unique=`for i in $$list; do \
484
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
485
- done | \
486
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
487
- END { if (nonempty) { for (i in files) print i; }; }'`; \
488
- mkid -fID $$unique
489
- tags: TAGS
490
-
491
- TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
492
- $(TAGS_FILES) $(LISP)
554
+ tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
493
555
  set x; \
494
556
  here=`pwd`; \
495
557
  if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -505,12 +567,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
505
567
  set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
506
568
  fi; \
507
569
  done; \
508
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
509
- unique=`for i in $$list; do \
510
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
511
- done | \
512
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
513
- END { if (nonempty) { for (i in files) print i; }; }'`; \
570
+ $(am__define_uniq_tagged_files); \
514
571
  shift; \
515
572
  if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
516
573
  test -n "$$unique" || unique=$$empty_fix; \
@@ -522,15 +579,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
522
579
  $$unique; \
523
580
  fi; \
524
581
  fi
525
- ctags: CTAGS
526
- CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
527
- $(TAGS_FILES) $(LISP)
528
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
529
- unique=`for i in $$list; do \
530
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
531
- done | \
532
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
533
- END { if (nonempty) { for (i in files) print i; }; }'`; \
582
+ ctags: ctags-recursive
583
+
584
+ CTAGS: ctags
585
+ ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
586
+ $(am__define_uniq_tagged_files); \
534
587
  test -z "$(CTAGS_ARGS)$$unique" \
535
588
  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
536
589
  $$unique
@@ -539,6 +592,21 @@ GTAGS:
539
592
  here=`$(am__cd) $(top_builddir) && pwd` \
540
593
  && $(am__cd) $(top_srcdir) \
541
594
  && gtags -i $(GTAGS_ARGS) "$$here"
595
+ cscopelist: cscopelist-recursive
596
+
597
+ cscopelist-am: $(am__tagged_files)
598
+ list='$(am__tagged_files)'; \
599
+ case "$(srcdir)" in \
600
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
601
+ *) sdir=$(subdir)/$(srcdir) ;; \
602
+ esac; \
603
+ for i in $$list; do \
604
+ if test -f "$$i"; then \
605
+ echo "$(subdir)/$$i"; \
606
+ else \
607
+ echo "$$sdir/$$i"; \
608
+ fi; \
609
+ done >> $(top_builddir)/cscope.files
542
610
 
543
611
  distclean-tags:
544
612
  -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -575,13 +643,10 @@ distdir: $(DISTFILES)
575
643
  done
576
644
  @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
577
645
  if test "$$subdir" = .; then :; else \
578
- test -d "$(distdir)/$$subdir" \
579
- || $(MKDIR_P) "$(distdir)/$$subdir" \
580
- || exit 1; \
581
- fi; \
582
- done
583
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
584
- if test "$$subdir" = .; then :; else \
646
+ $(am__make_dryrun) \
647
+ || test -d "$(distdir)/$$subdir" \
648
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
649
+ || exit 1; \
585
650
  dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
586
651
  $(am__relativize); \
587
652
  new_distdir=$$reldir; \
@@ -711,24 +776,22 @@ ps-am:
711
776
 
712
777
  uninstall-am: uninstall-sbinPROGRAMS
713
778
 
714
- .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
715
- install-am install-strip tags-recursive
716
-
717
- .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
718
- all all-am check check-am clean clean-generic clean-libtool \
719
- clean-sbinPROGRAMS ctags ctags-recursive distclean \
720
- distclean-compile distclean-generic distclean-libtool \
721
- distclean-tags distdir dvi dvi-am html html-am info info-am \
722
- install install-am install-data install-data-am install-dvi \
723
- install-dvi-am install-exec install-exec-am install-html \
724
- install-html-am install-info install-info-am install-man \
725
- install-pdf install-pdf-am install-ps install-ps-am \
726
- install-sbinPROGRAMS install-strip installcheck \
727
- installcheck-am installdirs installdirs-am maintainer-clean \
728
- maintainer-clean-generic mostlyclean mostlyclean-compile \
729
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
730
- tags tags-recursive uninstall uninstall-am \
731
- uninstall-sbinPROGRAMS
779
+ .MAKE: $(am__recursive_targets) install-am install-strip
780
+
781
+ .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
782
+ check-am clean clean-generic clean-libtool clean-sbinPROGRAMS \
783
+ cscopelist-am ctags ctags-am distclean distclean-compile \
784
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
785
+ dvi-am html html-am info info-am install install-am \
786
+ install-data install-data-am install-dvi install-dvi-am \
787
+ install-exec install-exec-am install-html install-html-am \
788
+ install-info install-info-am install-man install-pdf \
789
+ install-pdf-am install-ps install-ps-am install-sbinPROGRAMS \
790
+ install-strip installcheck installcheck-am installdirs \
791
+ installdirs-am maintainer-clean maintainer-clean-generic \
792
+ mostlyclean mostlyclean-compile mostlyclean-generic \
793
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
794
+ uninstall-am uninstall-sbinPROGRAMS
732
795
 
733
796
 
734
797
  # Tell versions [3.59,3.63) of GNU make to not export all variables.