snappy_ext 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/ext/snappy/extconf.rb +36 -0
  2. data/ext/snappy/snappy_ext.cc +131 -0
  3. data/ext/snappy/vendor/snappy-1.0.0/AUTHORS +1 -0
  4. data/ext/snappy/vendor/snappy-1.0.0/COPYING +28 -0
  5. data/ext/snappy/vendor/snappy-1.0.0/ChangeLog +3 -0
  6. data/ext/snappy/vendor/snappy-1.0.0/INSTALL +230 -0
  7. data/ext/snappy/vendor/snappy-1.0.0/Makefile.am +24 -0
  8. data/ext/snappy/vendor/snappy-1.0.0/Makefile.in +926 -0
  9. data/ext/snappy/vendor/snappy-1.0.0/NEWS +3 -0
  10. data/ext/snappy/vendor/snappy-1.0.0/README +132 -0
  11. data/ext/snappy/vendor/snappy-1.0.0/aclocal.m4 +9076 -0
  12. data/ext/snappy/vendor/snappy-1.0.0/autogen.sh +8 -0
  13. data/ext/snappy/vendor/snappy-1.0.0/compile +99 -0
  14. data/ext/snappy/vendor/snappy-1.0.0/config.guess +1466 -0
  15. data/ext/snappy/vendor/snappy-1.0.0/config.h.in +107 -0
  16. data/ext/snappy/vendor/snappy-1.0.0/config.sub +1579 -0
  17. data/ext/snappy/vendor/snappy-1.0.0/configure +17962 -0
  18. data/ext/snappy/vendor/snappy-1.0.0/configure.ac +99 -0
  19. data/ext/snappy/vendor/snappy-1.0.0/depcomp +530 -0
  20. data/ext/snappy/vendor/snappy-1.0.0/install-sh +323 -0
  21. data/ext/snappy/vendor/snappy-1.0.0/ltmain.sh +8413 -0
  22. data/ext/snappy/vendor/snappy-1.0.0/m4/gtest.m4 +74 -0
  23. data/ext/snappy/vendor/snappy-1.0.0/missing +360 -0
  24. data/ext/snappy/vendor/snappy-1.0.0/mkinstalldirs +158 -0
  25. data/ext/snappy/vendor/snappy-1.0.0/snappy-internal.h +136 -0
  26. data/ext/snappy/vendor/snappy-1.0.0/snappy-sinksource.cc +46 -0
  27. data/ext/snappy/vendor/snappy-1.0.0/snappy-sinksource.h +110 -0
  28. data/ext/snappy/vendor/snappy-1.0.0/snappy-stubs-internal.cc +28 -0
  29. data/ext/snappy/vendor/snappy-1.0.0/snappy-stubs-internal.h +457 -0
  30. data/ext/snappy/vendor/snappy-1.0.0/snappy-stubs-public.h +59 -0
  31. data/ext/snappy/vendor/snappy-1.0.0/snappy-stubs-public.h.in +59 -0
  32. data/ext/snappy/vendor/snappy-1.0.0/snappy-test.cc +523 -0
  33. data/ext/snappy/vendor/snappy-1.0.0/snappy-test.h +458 -0
  34. data/ext/snappy/vendor/snappy-1.0.0/snappy.cc +1001 -0
  35. data/ext/snappy/vendor/snappy-1.0.0/snappy.h +141 -0
  36. data/ext/snappy/vendor/snappy-1.0.0/snappy_unittest.cc +1073 -0
  37. data/ext/snappy/version.h +4 -0
  38. data/snappy_ext.gemspec +58 -0
  39. metadata +99 -0
@@ -0,0 +1,36 @@
1
+ require 'mkmf'
2
+
3
+ # Compile the embedded snappy- lib
4
+ vendor_dir = File.join(File.dirname(__FILE__)), "vendor"
5
+ snappy_dir = Dir[File.join(vendor_dir, "snappy-*")].first
6
+ old_pwd = Dir.pwd
7
+ begin
8
+ Dir.chdir(snappy_dir)
9
+
10
+ fork {
11
+ exec("./configure")
12
+ }; Process.wait; exit(1) unless $?.success?
13
+ fork {
14
+ exec("make")
15
+ }; Process.wait; exit(1) unless $?.success?
16
+
17
+ ensure
18
+ Dir.chdir(old_pwd)
19
+ end
20
+
21
+ have_header("ruby/st.h") || have_header("st.h")
22
+
23
+ # Pull in Snappy includes
24
+ $INCFLAGS << " -I#{snappy_dir}"
25
+
26
+ # Link with the Snappy object files
27
+ Dir["#{snappy_dir}/.libs/*.o"].each { |o|
28
+ $LOCAL_LIBS << " #{o}"
29
+ }
30
+
31
+ # Ensure we're linked with CXX, or it all breaks, due to libstdc++ and such
32
+ #CONFIG['LDSHARED'] = '$(CXX) -dynamiclib'
33
+
34
+ have_library("stdc++")
35
+ dir_config('snappy')
36
+ create_makefile('snappy_ext')
@@ -0,0 +1,131 @@
1
+ #include <snappy.h>
2
+ #include "version.h"
3
+
4
+ #include "ruby.h"
5
+
6
+ #if HAVE_RUBY_ST_H
7
+ #include "ruby/st.h"
8
+ #endif
9
+ #if HAVE_ST_H
10
+ #include "st.h"
11
+ #endif
12
+
13
+ #include <string.h>
14
+ #include <stdio.h>
15
+
16
+ #ifdef HAVE_RUBY_ENCODING_H
17
+ #include <ruby/encoding.h>
18
+ int binary_string_encoding;
19
+ #endif
20
+
21
+ VALUE binary_string_for_buffer(VALUE input, char * buf, size_t len)
22
+ {
23
+ // Create the string
24
+ VALUE str = rb_str_new5(input, buf, len);
25
+
26
+ #ifdef HAVE_RUBY_ENCODING_H
27
+ // Set the encoding
28
+ rb_enc_associate_index(str, binary_string_encoding);
29
+ #endif
30
+
31
+ // Copy taintedness
32
+ OBJ_INFECT(input, str);
33
+
34
+ return str;
35
+ }
36
+
37
+ /*
38
+ * call-seq:
39
+ * compress(string) -> string
40
+ *
41
+ * returns a Snappy-compressed string
42
+ */
43
+ extern "C"
44
+ VALUE snappy_ext_compress(VALUE self, VALUE string)
45
+ {
46
+ string = StringValue(string);
47
+
48
+ char * in_buf = RSTRING_PTR(string);
49
+ size_t in_len = RSTRING_LEN(string);
50
+
51
+ char * out_buf = (char *)malloc(snappy::MaxCompressedLength(in_len));
52
+ size_t out_len = 0;
53
+
54
+ snappy::RawCompress(in_buf, in_len, out_buf, &out_len);
55
+
56
+ // Shrink the buffer
57
+ out_buf = (char *)realloc(out_buf, out_len);
58
+
59
+ // Encase the output buffer in a String object without copying
60
+ return binary_string_for_buffer(string, out_buf, out_len);
61
+ }
62
+
63
+ /*
64
+ * call-seq:
65
+ * uncompress(string) -> string
66
+ *
67
+ * Returns a decompressed string, or raises ArgumentError if the compressed
68
+ * data is somehow corrupt
69
+ */
70
+ extern "C"
71
+ VALUE snappy_ext_uncompress(VALUE self, VALUE string)
72
+ {
73
+ string = StringValue(string);
74
+
75
+ char * in_buf = RSTRING_PTR(string);
76
+ size_t in_len = RSTRING_LEN(string);
77
+
78
+ size_t out_len = 0;
79
+
80
+ if (!snappy::GetUncompressedLength(in_buf, in_len, &out_len)) {
81
+ rb_raise(rb_eArgError, "invalid compressed data");
82
+ }
83
+
84
+ char * out_buf = (char*)malloc(out_len);
85
+
86
+ if (!snappy::RawUncompress(in_buf, in_len, out_buf)) {
87
+ free(out_buf);
88
+ rb_raise(rb_eArgError, "invalid compressed data");
89
+ }
90
+
91
+ return binary_string_for_buffer(string, out_buf, out_len);
92
+ }
93
+
94
+ extern "C"
95
+ void Init_snappy_ext()
96
+ {
97
+ VALUE snappy_sym, snappy, snappy_ext;
98
+
99
+ snappy_sym = rb_intern("Snappy");
100
+
101
+ #ifdef HAVE_RUBY_ENCODING_H
102
+ // Look up the BINARY encoding
103
+ binary_string_encoding = rb_enc_find_index("BINARY");
104
+ #endif
105
+
106
+ // Get or define ::Snappy
107
+ if (rb_const_defined(rb_cObject, snappy_sym)) {
108
+ snappy = rb_const_get(rb_cObject, rb_intern("Snappy"));
109
+ } else {
110
+ snappy = rb_define_module("Snappy");
111
+ }
112
+
113
+ // Define Snappy::Ext
114
+ snappy_ext = rb_define_module_under(snappy, "Ext");
115
+
116
+ // Pass in our version constants
117
+ rb_define_const(snappy_ext, "Version", rb_str_new2(GEM_VERSION));
118
+ {
119
+ char version[16];
120
+ snprintf(version, sizeof(version), "%u.%u.%u",
121
+ SNAPPY_VERSION >> 16 & 0xff, SNAPPY_VERSION >> 8 & 0xff, SNAPPY_VERSION & 0xff
122
+ );
123
+ rb_define_const(snappy_ext, "SnappyVersion", rb_str_new2(version));
124
+ }
125
+
126
+ // Add our methods to both Snappy::Ext and Snappy
127
+ rb_define_module_function(snappy, "compress", RUBY_METHOD_FUNC(snappy_ext_compress), 1);
128
+ rb_define_module_function(snappy, "uncompress", RUBY_METHOD_FUNC(snappy_ext_uncompress), 1);
129
+ rb_define_module_function(snappy_ext, "compress", RUBY_METHOD_FUNC(snappy_ext_compress), 1);
130
+ rb_define_module_function(snappy_ext, "uncompress", RUBY_METHOD_FUNC(snappy_ext_uncompress), 1);
131
+ }
@@ -0,0 +1 @@
1
+ opensource@google.com
@@ -0,0 +1,28 @@
1
+ Copyright (c) 2011, Google Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are
6
+ met:
7
+
8
+ * Redistributions of source code must retain the above copyright
9
+ notice, this list of conditions and the following disclaimer.
10
+ * Redistributions in binary form must reproduce the above
11
+ copyright notice, this list of conditions and the following disclaimer
12
+ in the documentation and/or other materials provided with the
13
+ distribution.
14
+ * Neither the name of Google Inc. nor the names of its
15
+ contributors may be used to endorse or promote products derived from
16
+ this software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,3 @@
1
+ Snappy v1.0, March 17th 2011:
2
+
3
+ * Initial version.
@@ -0,0 +1,230 @@
1
+ Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
2
+ Foundation, Inc.
3
+
4
+ This file is free documentation; the Free Software Foundation gives
5
+ unlimited permission to copy, distribute and modify it.
6
+
7
+
8
+ Basic Installation
9
+ ==================
10
+
11
+ These are generic installation instructions.
12
+
13
+ The `configure' shell script attempts to guess correct values for
14
+ various system-dependent variables used during compilation. It uses
15
+ those values to create a `Makefile' in each directory of the package.
16
+ It may also create one or more `.h' files containing system-dependent
17
+ definitions. Finally, it creates a shell script `config.status' that
18
+ you can run in the future to recreate the current configuration, and a
19
+ file `config.log' containing compiler output (useful mainly for
20
+ debugging `configure').
21
+
22
+ It can also use an optional file (typically called `config.cache'
23
+ and enabled with `--cache-file=config.cache' or simply `-C') that saves
24
+ the results of its tests to speed up reconfiguring. (Caching is
25
+ disabled by default to prevent problems with accidental use of stale
26
+ cache files.)
27
+
28
+ If you need to do unusual things to compile the package, please try
29
+ to figure out how `configure' could check whether to do them, and mail
30
+ diffs or instructions to the address given in the `README' so they can
31
+ be considered for the next release. If you are using the cache, and at
32
+ some point `config.cache' contains results you don't want to keep, you
33
+ may remove or edit it.
34
+
35
+ The file `configure.ac' (or `configure.in') is used to create
36
+ `configure' by a program called `autoconf'. You only need
37
+ `configure.ac' if you want to change it or regenerate `configure' using
38
+ a newer version of `autoconf'.
39
+
40
+ The simplest way to compile this package is:
41
+
42
+ 1. `cd' to the directory containing the package's source code and type
43
+ `./configure' to configure the package for your system. If you're
44
+ using `csh' on an old version of System V, you might need to type
45
+ `sh ./configure' instead to prevent `csh' from trying to execute
46
+ `configure' itself.
47
+
48
+ Running `configure' takes awhile. While running, it prints some
49
+ messages telling which features it is checking for.
50
+
51
+ 2. Type `make' to compile the package.
52
+
53
+ 3. Optionally, type `make check' to run any self-tests that come with
54
+ the package.
55
+
56
+ 4. Type `make install' to install the programs and any data files and
57
+ documentation.
58
+
59
+ 5. You can remove the program binaries and object files from the
60
+ source code directory by typing `make clean'. To also remove the
61
+ files that `configure' created (so you can compile the package for
62
+ a different kind of computer), type `make distclean'. There is
63
+ also a `make maintainer-clean' target, but that is intended mainly
64
+ for the package's developers. If you use it, you may have to get
65
+ all sorts of other programs in order to regenerate files that came
66
+ with the distribution.
67
+
68
+ Compilers and Options
69
+ =====================
70
+
71
+ Some systems require unusual options for compilation or linking that
72
+ the `configure' script does not know about. Run `./configure --help'
73
+ for details on some of the pertinent environment variables.
74
+
75
+ You can give `configure' initial values for configuration parameters
76
+ by setting variables in the command line or in the environment. Here
77
+ is an example:
78
+
79
+ ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
80
+
81
+ *Note Defining Variables::, for more details.
82
+
83
+ Compiling For Multiple Architectures
84
+ ====================================
85
+
86
+ You can compile the package for more than one kind of computer at the
87
+ same time, by placing the object files for each architecture in their
88
+ own directory. To do this, you must use a version of `make' that
89
+ supports the `VPATH' variable, such as GNU `make'. `cd' to the
90
+ directory where you want the object files and executables to go and run
91
+ the `configure' script. `configure' automatically checks for the
92
+ source code in the directory that `configure' is in and in `..'.
93
+
94
+ If you have to use a `make' that does not support the `VPATH'
95
+ variable, you have to compile the package for one architecture at a
96
+ time in the source code directory. After you have installed the
97
+ package for one architecture, use `make distclean' before reconfiguring
98
+ for another architecture.
99
+
100
+ Installation Names
101
+ ==================
102
+
103
+ By default, `make install' will install the package's files in
104
+ `/usr/local/bin', `/usr/local/man', etc. You can specify an
105
+ installation prefix other than `/usr/local' by giving `configure' the
106
+ option `--prefix=PATH'.
107
+
108
+ You can specify separate installation prefixes for
109
+ architecture-specific files and architecture-independent files. If you
110
+ give `configure' the option `--exec-prefix=PATH', the package will use
111
+ PATH as the prefix for installing programs and libraries.
112
+ Documentation and other data files will still use the regular prefix.
113
+
114
+ In addition, if you use an unusual directory layout you can give
115
+ options like `--bindir=PATH' to specify different values for particular
116
+ kinds of files. Run `configure --help' for a list of the directories
117
+ you can set and what kinds of files go in them.
118
+
119
+ If the package supports it, you can cause programs to be installed
120
+ with an extra prefix or suffix on their names by giving `configure' the
121
+ option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
122
+
123
+ Optional Features
124
+ =================
125
+
126
+ Some packages pay attention to `--enable-FEATURE' options to
127
+ `configure', where FEATURE indicates an optional part of the package.
128
+ They may also pay attention to `--with-PACKAGE' options, where PACKAGE
129
+ is something like `gnu-as' or `x' (for the X Window System). The
130
+ `README' should mention any `--enable-' and `--with-' options that the
131
+ package recognizes.
132
+
133
+ For packages that use the X Window System, `configure' can usually
134
+ find the X include and library files automatically, but if it doesn't,
135
+ you can use the `configure' options `--x-includes=DIR' and
136
+ `--x-libraries=DIR' to specify their locations.
137
+
138
+ Specifying the System Type
139
+ ==========================
140
+
141
+ There may be some features `configure' cannot figure out
142
+ automatically, but needs to determine by the type of machine the package
143
+ will run on. Usually, assuming the package is built to be run on the
144
+ _same_ architectures, `configure' can figure that out, but if it prints
145
+ a message saying it cannot guess the machine type, give it the
146
+ `--build=TYPE' option. TYPE can either be a short name for the system
147
+ type, such as `sun4', or a canonical name which has the form:
148
+
149
+ CPU-COMPANY-SYSTEM
150
+
151
+ where SYSTEM can have one of these forms:
152
+
153
+ OS KERNEL-OS
154
+
155
+ See the file `config.sub' for the possible values of each field. If
156
+ `config.sub' isn't included in this package, then this package doesn't
157
+ need to know the machine type.
158
+
159
+ If you are _building_ compiler tools for cross-compiling, you should
160
+ use the `--target=TYPE' option to select the type of system they will
161
+ produce code for.
162
+
163
+ If you want to _use_ a cross compiler, that generates code for a
164
+ platform different from the build platform, you should specify the
165
+ "host" platform (i.e., that on which the generated programs will
166
+ eventually be run) with `--host=TYPE'.
167
+
168
+ Sharing Defaults
169
+ ================
170
+
171
+ If you want to set default values for `configure' scripts to share,
172
+ you can create a site shell script called `config.site' that gives
173
+ default values for variables like `CC', `cache_file', and `prefix'.
174
+ `configure' looks for `PREFIX/share/config.site' if it exists, then
175
+ `PREFIX/etc/config.site' if it exists. Or, you can set the
176
+ `CONFIG_SITE' environment variable to the location of the site script.
177
+ A warning: not all `configure' scripts look for a site script.
178
+
179
+ Defining Variables
180
+ ==================
181
+
182
+ Variables not defined in a site shell script can be set in the
183
+ environment passed to `configure'. However, some packages may run
184
+ configure again during the build, and the customized values of these
185
+ variables may be lost. In order to avoid this problem, you should set
186
+ them in the `configure' command line, using `VAR=value'. For example:
187
+
188
+ ./configure CC=/usr/local2/bin/gcc
189
+
190
+ will cause the specified gcc to be used as the C compiler (unless it is
191
+ overridden in the site shell script).
192
+
193
+ `configure' Invocation
194
+ ======================
195
+
196
+ `configure' recognizes the following options to control how it
197
+ operates.
198
+
199
+ `--help'
200
+ `-h'
201
+ Print a summary of the options to `configure', and exit.
202
+
203
+ `--version'
204
+ `-V'
205
+ Print the version of Autoconf used to generate the `configure'
206
+ script, and exit.
207
+
208
+ `--cache-file=FILE'
209
+ Enable the cache: use and save the results of the tests in FILE,
210
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
211
+ disable caching.
212
+
213
+ `--config-cache'
214
+ `-C'
215
+ Alias for `--cache-file=config.cache'.
216
+
217
+ `--quiet'
218
+ `--silent'
219
+ `-q'
220
+ Do not print messages saying which checks are being made. To
221
+ suppress all normal output, redirect it to `/dev/null' (any error
222
+ messages will still be shown).
223
+
224
+ `--srcdir=DIR'
225
+ Look for the package's source code in directory DIR. Usually
226
+ `configure' can determine that directory automatically.
227
+
228
+ `configure' also accepts some other, not widely useful, options. Run
229
+ `configure --help' for more details.
230
+
@@ -0,0 +1,24 @@
1
+ ACLOCAL_AMFLAGS = -I m4
2
+
3
+ # Library.
4
+ lib_LTLIBRARIES = libsnappy.la
5
+ libsnappy_la_SOURCES = snappy.cc snappy-sinksource.cc snappy-stubs-internal.cc
6
+ libsnappy_la_LDFLAGS = $(EXTRA_LIBSNAPPY_LDFLAGS)
7
+
8
+ include_HEADERS = snappy.h snappy-sinksource.h snappy-stubs-public.h
9
+ noinst_HEADERS = snappy-internal.h snappy-stubs-internal.h snappy-test.h
10
+
11
+ # Unit tests and benchmarks.
12
+ snappy_unittest_CPPFLAGS = $(gflags_CFLAGS) $(GTEST_CPPFLAGS)
13
+ snappy_unittest_CXXFLAGS = $(GTEST_CPPFLAGS)
14
+ snappy_unittest_SOURCES = snappy_unittest.cc snappy-test.cc
15
+ snappy_unittest_LDFLAGS = $(GTEST_LDFLAGS)
16
+ snappy_unittest_LDADD = libsnappy.la $(gflags_LIBS) $(GTEST_LIBS)
17
+ TESTS = snappy_unittest
18
+ noinst_PROGRAMS = $(TESTS)
19
+
20
+ EXTRA_DIST = autogen.sh testdata/alice29.txt testdata/asyoulik.txt testdata/baddata1.snappy testdata/baddata2.snappy testdata/baddata3.snappy testdata/cp.html testdata/fields.c testdata/geo.protodata testdata/grammar.lsp testdata/house.jpg testdata/html testdata/html_x_4 testdata/kennedy.xls testdata/kppkn.gtb testdata/lcet10.txt testdata/mapreduce-osdi-1.pdf testdata/plrabn12.txt testdata/ptt5 testdata/sum testdata/urls.10K testdata/xargs.1
21
+ dist_doc_DATA = ChangeLog COPYING INSTALL NEWS README
22
+
23
+ libtool: $(LIBTOOL_DEPS)
24
+ $(SHELL) ./config.status --recheck