libcouchbase 1.2.3 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 994ce5bef19d9b756a99b100151c0186c1196b1c
4
- data.tar.gz: '04980977530cfe5f4c94f8eeb38c03546bcba541'
3
+ metadata.gz: 2e0fecefcadf6aba5e497d297195f7c75a8ac93d
4
+ data.tar.gz: 68a30faba8a468ab280aac7c8a7e387a0b59fbb1
5
5
  SHA512:
6
- metadata.gz: 5f3bd4838cdb3fcbca7825fb0b0bade82b4054c72526ab82720adb1d5e536b0e0367bd65d55f012f52cd223c08d6e67a113616d4c8280d99169656362a204b25
7
- data.tar.gz: 50a3ed477e3fa3e7faa06081343ab5a570e738e53d6f071a54629defa764f2a3a6aa40be9444c2e38e77470b9284a3aad40de1082e7338fa170ae441d4adb88f
6
+ metadata.gz: 362de9a1a26005ab3b5e0cc43afb28245a45a2f12f659c8cbd2c7f6e76cd14c2d4ec43abd6de670545411ccf84e14ed6ebe6124662faab5de2a6e088aa7b6725
7
+ data.tar.gz: be6115fcb1f03c7a8f55dffe186d6d74c564c6197d2228f72398592532b5bb982afc2c645b17595eeeadc7de152c937cd7dc0f2770bf4324f27d5dd7f67eb6a0
data/.gitignore CHANGED
@@ -16,3 +16,5 @@ bin
16
16
  Gemfile-custom
17
17
 
18
18
  *.gem
19
+
20
+ *.dll
data/README.md CHANGED
@@ -64,7 +64,7 @@ Tested on the following Operating Systems:
64
64
  * OSX / MacOS
65
65
  * Linux
66
66
  * Windows
67
- * NOTE:: windows support is not complete. This message will be removed once it is fully functional
67
+ * Ruby x64 2.4+ with MSYS2 DevKit
68
68
 
69
69
 
70
70
  ## Usage
data/Rakefile CHANGED
@@ -27,8 +27,9 @@ end
27
27
 
28
28
  desc 'Compile libcouchbase from submodule'
29
29
  if FFI::Platform.windows?
30
- task :compile => ["ext/bin/libcouchbase.#{FFI::Platform::LIBSUFFIX}"]
31
- CLOBBER.include("ext/bin/libcouchbase.#{FFI::Platform::LIBSUFFIX}")
30
+ task :compile do
31
+ puts "See windows_build.md for build instructions"
32
+ end
32
33
  else
33
34
  task :compile => ["ext/libcouchbase/build/lib/libcouchbase_libuv.#{FFI::Platform::LIBSUFFIX}"]
34
35
  CLOBBER.include("ext/libcouchbase/build/lib/libcouchbase_libuv.#{FFI::Platform::LIBSUFFIX}")
data/ext/Rakefile CHANGED
@@ -12,8 +12,7 @@ task :default => :libcouchbase
12
12
 
13
13
  desc "Compile libcouchbase from submodule"
14
14
  if FFI::Platform.windows?
15
- task :libcouchbase => ["ext/bin/libcouchbase.#{FFI::Platform::LIBSUFFIX}"]
16
- CLOBBER.include("ext/bin/libcouchbase.#{FFI::Platform::LIBSUFFIX}")
15
+ task :libcouchbase do; end
17
16
  else
18
17
  task :libcouchbase => ["ext/libcouchbase/build/lib/libcouchbase_libuv.#{FFI::Platform::LIBSUFFIX}"]
19
18
  CLOBBER.include("ext/libcouchbase/build/lib/libcouchbase_libuv.#{FFI::Platform::LIBSUFFIX}")
@@ -74,21 +74,13 @@ module Libcouchbase
74
74
  @reactor.on_program_interrupt { destroy }
75
75
  @io_ptr = FFI::MemoryPointer.new :pointer, 1
76
76
 
77
- if FFI::Platform.windows?
78
- @io_opts = Ext::IOOptions.new
79
- @io_opts[:version] = 0
80
- @io_opts[:type] = :IO_winIOCP
81
-
82
- err = Ext.create_io_ops(@io_ptr, @io_opts)
83
- else
84
- @io_opts = Ext::Libuv::UVOptions.new
85
- @io_opts[:version] = 0
86
- @io_opts[:loop] = @reactor.handle
87
- @io_opts[:start_stop_noop] = 1 # We want to control the start and stopping of the loop
88
-
89
- err = Ext::Libuv.create_libuv_io_opts(0, @io_ptr, @io_opts)
90
- end
77
+ # Configure Libuv plugin
78
+ @io_opts = Ext::Libuv::UVOptions.new
79
+ @io_opts[:version] = 0
80
+ @io_opts[:loop] = @reactor.handle
81
+ @io_opts[:start_stop_noop] = 1 # We want to control the start and stopping of the loop
91
82
 
83
+ err = Ext::Libuv.create_libuv_io_opts(0, @io_ptr, @io_opts)
92
84
  if err != :success
93
85
  raise Error.lookup(err), 'failed to allocate IO plugin'
94
86
  end
@@ -4,13 +4,13 @@ require 'libcouchbase/ext/libcouchbase/enums'
4
4
  module Libcouchbase::Ext
5
5
  extend FFI::Library
6
6
  if FFI::Platform.windows?
7
- ffi_lib ::File.expand_path("../../../../ext/bin/libcouchbase.#{FFI::Platform::LIBSUFFIX}", __FILE__)
8
- require 'libcouchbase/ext/libcouchbase_iocp'
7
+ ffi_lib ::File.expand_path("../../../../ext/libcouchbase.dll", __FILE__)
9
8
  else
10
9
  ffi_lib ::File.expand_path("../../../../ext/libcouchbase/build/lib/libcouchbase.#{FFI::Platform::LIBSUFFIX}", __FILE__)
11
- require 'libcouchbase/ext/libcouchbase_libuv'
12
10
  end
13
11
 
12
+ require 'libcouchbase/ext/libcouchbase_libuv'
13
+
14
14
  autoload :T, 'libcouchbase/ext/libcouchbase/t'
15
15
  autoload :HttpRequestT, 'libcouchbase/ext/libcouchbase/http_request_t'
16
16
  autoload :CONTIGBUF, 'libcouchbase/ext/libcouchbase/contigbuf'
@@ -4,7 +4,11 @@
4
4
 
5
5
  module Libcouchbase::Ext::Libuv
6
6
  extend FFI::Library
7
- ffi_lib ::File.expand_path("../../../../ext/libcouchbase/build/lib/libcouchbase_libuv.#{FFI::Platform::LIBSUFFIX}", __FILE__)
7
+ if FFI::Platform.windows?
8
+ ffi_lib ::File.expand_path("../../../../ext/libcouchbase_libuv.dll", __FILE__)
9
+ else
10
+ ffi_lib ::File.expand_path("../../../../ext/libcouchbase/build/lib/libcouchbase_libuv.#{FFI::Platform::LIBSUFFIX}", __FILE__)
11
+ end
8
12
 
9
13
  # ref: http://docs.couchbase.com/sdk-api/couchbase-c-client-2.4.8/group__lcb-libuv.html
10
14
  class UVOptions < FFI::Struct
@@ -13,79 +13,27 @@ module FFI::Platform
13
13
  end
14
14
  end
15
15
 
16
- if FFI::Platform.windows?
17
- require 'net/http'
18
-
19
- # Download a pre-built package
20
- url = if FFI::Platform.x64?
21
- "http://packages.couchbase.com/clients/c/libcouchbase-2.6.3_amd64_vc14.zip"
22
- else
23
- "http://packages.couchbase.com/clients/c/libcouchbase-2.6.3_x86_vc14.zip"
24
- end
25
- zip_file = File.expand_path("../../../../ext/libcouchbase.zip", __FILE__)
26
-
27
- file zip_file do
28
- print "downloading #{url}"
29
- uri = URI(url)
30
- Net::HTTP.start(uri.host, uri.port) do |http|
31
- request = Net::HTTP::Get.new uri
32
-
33
- http.request request do |response|
34
- open File.expand_path("../../../../ext/libcouchbase.zip", __FILE__), 'wb' do |io|
35
- response.read_body do |chunk|
36
- io.write chunk
37
- print '.'
38
- end
39
- end
40
- end
41
- end
42
- end
43
-
44
- # Extract the files
45
- file 'ext/tmp' => zip_file do
46
- begin
47
- puts "\nextracting files..."
48
- raise 'error extracting files' unless system(File.expand_path("../../../../ext/win-extract.bat", __FILE__))
49
- ensure
50
- # TODO:: remove dir
51
- end
52
- end
53
-
54
- # Copy binary files to bin dir
55
- file "ext/bin/libcouchbase.#{FFI::Platform::LIBSUFFIX}" => 'ext/tmp' do
56
- Dir.chdir('ext/tmp') do |path|
57
- dir = File.expand_path("../", Dir["**/libcouchbase.#{FFI::Platform::LIBSUFFIX}"].first)
58
- FileUtils.mv dir, File.expand_path("../../../../ext/bin", __FILE__)
59
- end
60
- FileUtils.rm_rf(File.expand_path("../../../../ext/tmp", __FILE__))
61
- end
62
- else
63
- # -----------
64
- # UNIX BUILD
65
- # -----------
66
-
67
- # Ensure the submodule is cloned
68
- file 'ext/libcouchbase/include' do
69
- system 'git', 'submodule', 'update', '--init'
70
- end
16
+ # Ensure the submodule is cloned
17
+ file 'ext/libcouchbase/include' do
18
+ system 'git', 'submodule', 'update', '--init'
19
+ end
71
20
 
72
- file 'ext/libcouchbase/build' => 'ext/libcouchbase/include' do
73
- FileUtils.mkdir('ext/libcouchbase/build')
74
- end
21
+ file 'ext/libcouchbase/build' => 'ext/libcouchbase/include' do
22
+ FileUtils.mkdir('ext/libcouchbase/build')
23
+ end
75
24
 
76
- file 'ext/libcouchbase/build/makefile' => 'ext/libcouchbase/build' do
77
- result = nil
78
- Dir.chdir("ext/libcouchbase") do |path|
79
- result = system './cmake/configure', '-with-libuv', ::File.expand_path('../../', ::Libuv::Ext.path_to_internal_libuv)
80
- end
81
- raise 'could not find cmake on path' unless result
25
+ file 'ext/libcouchbase/build/makefile' => 'ext/libcouchbase/build' do
26
+ result = nil
27
+ Dir.chdir("ext/libcouchbase") do |path|
28
+ result = system './cmake/configure', '-with-libuv', ::File.expand_path('../../', ::Libuv::Ext.path_to_internal_libuv)
82
29
  end
30
+ raise 'could not find cmake on path' unless result
31
+ end
83
32
 
84
- file "ext/libcouchbase/build/lib/libcouchbase_libuv.#{FFI::Platform::LIBSUFFIX}" => 'ext/libcouchbase/build/makefile' do
85
- result = nil
86
- Dir.chdir('ext/libcouchbase/build') do |path|
87
- result = system 'make'
88
- end
89
- raise 'make failed' unless result
33
+ file "ext/libcouchbase/build/lib/libcouchbase_libuv.#{FFI::Platform::LIBSUFFIX}" => 'ext/libcouchbase/build/makefile' do
34
+ result = nil
35
+ Dir.chdir('ext/libcouchbase/build') do |path|
36
+ result = system 'make'
90
37
  end
38
+ raise 'make failed' unless result
91
39
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true, encoding: ASCII-8BIT
2
2
 
3
3
  module Libcouchbase
4
- VERSION = '1.2.3'
4
+ VERSION = '1.2.4'
5
5
  end
data/libcouchbase.gemspec CHANGED
@@ -31,6 +31,10 @@ Gem::Specification.new do |gem|
31
31
  gem.files = `git ls-files`.split("\n")
32
32
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
33
33
 
34
+ if File.exist? 'ext/libcouchbase.dll'
35
+ gem.files += ['ext/libcouchbase.dll', 'ext/libcouchbase_libuv.dll']
36
+ end
37
+
34
38
  # Add the submodule to the gem
35
39
  relative_path = File.expand_path("../", __FILE__) + '/'
36
40
  `git submodule --quiet foreach pwd`.split($\).each do |submodule_path|
@@ -58,4 +62,7 @@ Gem::Specification.new do |gem|
58
62
  gem.files += submodule_files_paths
59
63
  end
60
64
  end
65
+
66
+ # Remove sym link (blows up on windows)
67
+ gem.files.delete('ext/libcouchbase/configure.pl')
61
68
  end
data/windows_build.md ADDED
@@ -0,0 +1,36 @@
1
+ # Building libcouchbase on Windows
2
+
3
+ NOTE:: we are currently not supporting 32bit Windows installations
4
+
5
+ 1. Install [Python 2.7 x64](https://www.python.org/downloads/)
6
+ 1. Install [cmake](https://cmake.org/download/)
7
+ 1. Install [OpenSSL x64 Dev](https://slproweb.com/products/Win32OpenSSL.html)
8
+ 1. Install [git](https://git-scm.com/downloads)
9
+ 1. `git clone https://github.com/libuv/libuv.git`
10
+ 1. Add libuv, openssl, cmake and python to Path ENV VAR
11
+ 1. Install [Build Tools for Visual Studio 2017](https://www.visualstudio.com/downloads/)
12
+ * Windows 10 SDK
13
+ * Visual C++ tools for cmake
14
+ * C++/CLI support
15
+ 1. Build libuv (or use `gem install libuv` to automate)
16
+ * `git clone https://chromium.googlesource.com/external/gyp build/gyp`
17
+ * `vcbuild.bat vs2017 shared debug x64` -- libcouchbase looks for a debug build
18
+ * `vcbuild.bat vs2017 shared release x64`
19
+ 1. `git clone https://github.com/couchbase/libcouchbase.git`
20
+ * `mkdir lcb-build`
21
+ * `cd lcb-build`
22
+ * `cmake -G "Visual Studio 15 Win64" ..\libcouchbase` (should include libuv + openssl)
23
+ * `cmake --build .`
24
+
25
+ Seems to also support: https://github.com/google/snappy
26
+
27
+ * `mkdir snappybuild && cd snappybuild && cmake -G "Visual Studio 15 Win64" ..\snappy`
28
+ * I couldn't work out how to have libcouchbase include this in the build.
29
+
30
+ I also had to modify `plugin-libuv.c` before this would compile on Windows
31
+
32
+ * Installed the Visual Studio GUI using VS Installer
33
+ * `#include "libcouchbase\plugins\io\bsdio-inl.c"`
34
+ * The linker has some dependencies that need to be removed such as: `OPTIMIZED.lib`
35
+
36
+ A pre-compiled version of libcouchbase.dll is shipped with the GEM
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libcouchbase
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen von Takach
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-04 00:00:00.000000000 Z
11
+ date: 2017-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -146,6 +146,7 @@ files:
146
146
  - Rakefile
147
147
  - ext/README.md
148
148
  - ext/Rakefile
149
+ - ext/libcouchbase.dll
149
150
  - ext/libcouchbase/.gitignore
150
151
  - ext/libcouchbase/CMakeLists.txt
151
152
  - ext/libcouchbase/CONTRIBUTING.md
@@ -170,7 +171,6 @@ files:
170
171
  - ext/libcouchbase/cmake/defs.mk.in
171
172
  - ext/libcouchbase/cmake/dtrace-instr-link.pl
172
173
  - ext/libcouchbase/cmake/source_files.cmake
173
- - ext/libcouchbase/configure.pl
174
174
  - ext/libcouchbase/contrib/cJSON/cJSON.c
175
175
  - ext/libcouchbase/contrib/cJSON/cJSON.h
176
176
  - ext/libcouchbase/contrib/cbsasl/CMakeLists.txt
@@ -659,6 +659,7 @@ files:
659
659
  - ext/libcouchbase/tools/docgen/seqgen.h
660
660
  - ext/libcouchbase/tools/linenoise/linenoise.c
661
661
  - ext/libcouchbase/tools/linenoise/linenoise.h
662
+ - ext/libcouchbase_libuv.dll
662
663
  - lib/libcouchbase.rb
663
664
  - lib/libcouchbase/bucket.rb
664
665
  - lib/libcouchbase/callbacks.rb
@@ -723,7 +724,6 @@ files:
723
724
  - lib/libcouchbase/ext/libcouchbase/valbuf.rb
724
725
  - lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb
725
726
  - lib/libcouchbase/ext/libcouchbase/viewhandle.rb
726
- - lib/libcouchbase/ext/libcouchbase_iocp.rb
727
727
  - lib/libcouchbase/ext/libcouchbase_libuv.rb
728
728
  - lib/libcouchbase/ext/tasks.rb
729
729
  - lib/libcouchbase/n1ql.rb
@@ -751,6 +751,7 @@ files:
751
751
  - spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json
752
752
  - spec/subdoc_spec.rb
753
753
  - spec/view_spec.rb
754
+ - windows_build.md
754
755
  homepage: https://github.com/cotag/libcouchbase
755
756
  licenses:
756
757
  - MIT
@@ -1 +0,0 @@
1
- ext/libcouchbase/cmake/configure
@@ -1,26 +0,0 @@
1
-
2
- # This file contains the structures required to configure libcouchbase to use
3
- # windows IOCP for event IO
4
-
5
- module Libcouchbase::Ext
6
-
7
- # ref: http://docs.couchbase.com/sdk-api/couchbase-c-client-2.6.2/group__lcb-io-plugin-api.html
8
-
9
- IOType = enum [
10
- :IO_libevent, 0x02,
11
- :IO_winsock, 0x03,
12
- :IO_libev, 0x04,
13
- :IO_select, 0x05,
14
- :IO_winIOCP, 0x06,
15
- :IO_libuv, 0x07
16
- ]
17
-
18
- class IOOptions < FFI::Struct
19
- layout :version, :int, # Always 0
20
- :type, IOType, # Always IO_winIOCP
21
- :cookie, :pointer
22
- end
23
-
24
- # pointer param returns IO opts structure
25
- attach_function :create_io_ops, :lcb_create_io_ops, [:pointer, IOOptions.by_ref], ErrorT
26
- end