hermann 0.18.1-java

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6da9dc68c659381482844060d7534fb070fde17e
4
+ data.tar.gz: 74ea4247774c4cabe6880b1db45a0234b9a8ab83
5
+ SHA512:
6
+ metadata.gz: c32c2668dcb9ccfc6f6768e3cdef001c450f29ae45887b262ca5b43bccd1f3817658bee048889b1a5af5ace3ce6761c06da79903f93394d8fa3e30beeb160da8
7
+ data.tar.gz: a164452507a36f750f8e480806fc5713b715b070e26c73bfa25c3931f7944f09c736fcc48e271615f138a248d9469b3b131993340dafb54fc8e2793b03512988
data/Rakefile ADDED
@@ -0,0 +1,45 @@
1
+ require 'rubygems'
2
+ require 'fileutils'
3
+ require "bundler/gem_tasks"
4
+ require 'rspec/core/rake_task'
5
+ require 'rake/extensiontask'
6
+
7
+
8
+ Rake::ExtensionTask.new do |t|
9
+ t.name = 'hermann_lib'
10
+ t.ext_dir = 'ext/hermann'
11
+ t.gem_spec = Gem::Specification.load('hermann.gemspec')
12
+ end
13
+
14
+ RSpec::Core::RakeTask.new(:spec) do |r|
15
+ options = ['--tag ~type:integration']
16
+
17
+ if RUBY_PLATFORM == 'java'
18
+ options << '--tag ~platform:mri'
19
+ else
20
+ options << '--tag ~platform:java'
21
+ end
22
+
23
+ r.rspec_opts = options.join(' ')
24
+ end
25
+
26
+ namespace :spec do
27
+ RSpec::Core::RakeTask.new(:integration) do |r|
28
+ r.rspec_opts = '--tag type:integration'
29
+ end
30
+ end
31
+
32
+ desc 'Remove the entire ./tmp directory'
33
+ task :removetmp do
34
+ FileUtils.rm_rf('tmp')
35
+ end
36
+
37
+ task :clean => [:removetmp]
38
+
39
+ if RUBY_PLATFORM == 'java'
40
+ task :default => [:clean, :spec]
41
+ else
42
+ task :build => [:compile]
43
+ task :default => [:clean, :build, :spec]
44
+ end
45
+
@@ -0,0 +1,149 @@
1
+ # External configuration for Hermann Gem
2
+
3
+ require 'rubygems'
4
+ require 'mkmf'
5
+ require 'mini_portile'
6
+ require 'digest/md5'
7
+
8
+ RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
9
+
10
+ LIBDIR = RbConfig::CONFIG['libdir']
11
+ INCLUDEDIR = RbConfig::CONFIG['includedir']
12
+ BASE_DIR = File.expand_path(File.dirname(__FILE__) + '/../../')
13
+
14
+ puts "Library Dir: #{LIBDIR}\n"
15
+ puts "Include Dir: #{INCLUDEDIR}"
16
+
17
+ ################################################################################
18
+ # MiniPortile overrides
19
+ ################################################################################
20
+ # RdKafkaRecipe is a class that adds some librdkafka specific customizations to
21
+ # make sure that we can safely build librdkafka when installing this gem
22
+ class RdKafkaRecipe < MiniPortile
23
+ attr_accessor :checksum
24
+
25
+ def configure
26
+ execute('configure', %Q(bash configure #{computed_options}))
27
+ end
28
+
29
+ def configured?
30
+ File.exists?(File.join(work_path, 'Makefile.config'))
31
+ end
32
+
33
+ # Overriding this from MiniPortile because it includes autoconf defaults that
34
+ # don't apply to librdkafka's mklove-based configure script
35
+ def configure_defaults
36
+ []
37
+ end
38
+
39
+ def download_file(url, full_path, count=3)
40
+ super(url, full_path, count)
41
+
42
+ # Support some simple checksumming
43
+ unless Digest::MD5.hexdigest(File.read(full_path)) == checksum
44
+ raise 'Checksum error!'
45
+ end
46
+ end
47
+
48
+ def download_file_http(url, full_path, count = 3)
49
+ filename = File.basename(full_path)
50
+ uri = URI.parse(url)
51
+
52
+ if ENV['http_proxy']
53
+ _, userinfo, p_host, p_port = URI.split(ENV['http_proxy'])
54
+ proxy_user, proxy_pass = userinfo.split(/:/) if userinfo
55
+ http = Net::HTTP.new(uri.host, uri.port, p_host, p_port, proxy_user, proxy_pass)
56
+ else
57
+ http = Net::HTTP.new(uri.host, uri.port)
58
+
59
+ if URI::HTTPS === uri
60
+ http.use_ssl = true
61
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
62
+
63
+ store = OpenSSL::X509::Store.new
64
+
65
+ # Auto-include system-provided certificates
66
+ store.set_default_paths
67
+
68
+ if ENV.has_key?("SSL_CERT_FILE") && File.exist?(ENV["SSL_CERT_FILE"])
69
+ store.add_file ENV["SSL_CERT_FILE"]
70
+ end
71
+
72
+ http.cert_store = store
73
+ end
74
+ end
75
+
76
+ message "Downloading #{filename} "
77
+ http.start do |h|
78
+ h.request_get(uri.path, 'Accept-Encoding' => 'identity') do |response|
79
+ case response
80
+ when Net::HTTPNotFound
81
+ output "404 - Not Found"
82
+ return false
83
+
84
+ when Net::HTTPClientError
85
+ output "Error: Client Error: #{response.inspect}"
86
+ return false
87
+
88
+ when Net::HTTPRedirection
89
+ raise "Too many redirections for the original URL, halting." if count <= 0
90
+ url = response["location"]
91
+ return download_file(url, full_path, count - 1)
92
+
93
+ when Net::HTTPOK
94
+ return with_tempfile(filename, full_path) do |temp_file|
95
+ size = 0
96
+ progress = 0
97
+ total = response.header["Content-Length"].to_i
98
+
99
+ if total == 0
100
+ # There are cases when apparently GitHub.com will return an empty
101
+ # content-length header, which means we can't really trust the
102
+ # response, so we'll treat it like a redirect
103
+ puts "Empty content-length header, retrying"
104
+ return download_file(url, full_path, count - 1)
105
+ end
106
+
107
+ response.read_body do |chunk|
108
+ temp_file << chunk
109
+ size += chunk.size
110
+ new_progress = (size * 100) / total
111
+ unless new_progress == progress
112
+ message "\rDownloading %s (%3d%%) " % [filename, new_progress]
113
+ end
114
+ progress = new_progress
115
+ end
116
+ output
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
123
+ ################################################################################
124
+
125
+ librdkafka = RdKafkaRecipe.new('librdkafka', '0.8.4')
126
+ librdkafka.files = ["https://github.com/edenhill/librdkafka/archive/#{librdkafka.version}.tar.gz"]
127
+ librdkafka.checksum = '28a3252fd0f31d4a38bea9cd25083a06'
128
+ librdkafka.patch_files = Dir["#{File.join(BASE_DIR, 'ext', 'patches', 'librdkafka')}/*.patch"]
129
+ checkpoint = ".librdkafka.#{librdkafka.version}.cooked"
130
+
131
+ unless File.exists?(checkpoint)
132
+ librdkafka.cook
133
+ File.open(checkpoint, 'w+') do |f|
134
+ f.write("Cooked: #{Time.now}\n")
135
+ end
136
+ end
137
+
138
+ librdkafka.activate
139
+
140
+ HEADER_DIRS = [INCLUDEDIR, File.join(librdkafka.path, 'include')]
141
+ LIB_DIRS = [LIBDIR]
142
+ dir_config('rdkafka', HEADER_DIRS, LIB_DIRS)
143
+
144
+ # Tell mkmf to staticallly link our mini_portile generated static library,
145
+ # courtesty of:
146
+ # <http://blog.zachallett.com/howto-ruby-c-extension-with-a-static-library>
147
+ $LOCAL_LIBS << File.join(librdkafka.path, 'lib', 'librdkafka.a')
148
+
149
+ create_makefile('hermann/hermann_lib')