Skip to content

Commit e6d1315

Browse files
committed
v0.12.1-offline-librdkafka
1 parent eb1a1fa commit e6d1315

File tree

4 files changed

+60
-28
lines changed

4 files changed

+60
-28
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# 0.12.1 (2024-07-11)
2+
- [Fix] Switch to local release of librdkafka to mitigate its unavailability.
3+
14
# 0.12.0
25
* Bumps librdkafka to 1.9.0
36

dist/librdkafka_1.9.0.tar.gz

3.99 MB
Binary file not shown.

ext/Rakefile

+56-27
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,67 @@
1+
# frozen_string_literal: true
2+
13
require File.expand_path('../../lib/rdkafka/version', __FILE__)
2-
require "mini_portile2"
34
require "fileutils"
45
require "open-uri"
56

67
task :default => :clean do
7-
# Download and compile librdkafka
8-
recipe = MiniPortile.new("librdkafka", Rdkafka::LIBRDKAFKA_VERSION)
9-
10-
# Use default homebrew openssl if we're on mac and the directory exists
11-
# and each of flags is not empty
12-
if recipe.host&.include?("darwin") && system("which brew &> /dev/null") && Dir.exist?("#{homebrew_prefix = %x(brew --prefix openssl).strip}")
13-
ENV["CPPFLAGS"] = "-I#{homebrew_prefix}/include" unless ENV["CPPFLAGS"]
14-
ENV["LDFLAGS"] = "-L#{homebrew_prefix}/lib" unless ENV["LDFLAGS"]
15-
end
8+
# For nix users, nix can't locate the file paths because the packages it's requiring aren't managed by the system but are
9+
# managed by nix itself, so using the normal file paths doesn't work for nix users.
10+
#
11+
# Mini_portile causes an issue because it's dependencies are downloaded on the fly and therefore don't exist/aren't
12+
# accessible in the nix environment
13+
if ENV.fetch('RDKAFKA_EXT_PATH', '').empty?
14+
# Download and compile librdkafka if RDKAFKA_EXT_PATH is not set
15+
require "mini_portile2"
16+
recipe = MiniPortile.new("librdkafka", Rdkafka::LIBRDKAFKA_VERSION)
17+
18+
# Use default homebrew openssl if we're on mac and the directory exists
19+
# and each of flags is not empty
20+
if recipe.host&.include?("darwin") && system("which brew &> /dev/null") && Dir.exist?("#{homebrew_prefix = %x(brew --prefix openssl).strip}")
21+
ENV["CPPFLAGS"] = "-I#{homebrew_prefix}/include" unless ENV["CPPFLAGS"]
22+
ENV["LDFLAGS"] = "-L#{homebrew_prefix}/lib" unless ENV["LDFLAGS"]
23+
end
24+
25+
releases = File.expand_path(File.join(File.dirname(__FILE__), '../dist'))
26+
27+
recipe.files << {
28+
:url => "file://#{releases}/librdkafka_#{Rdkafka::LIBRDKAFKA_VERSION}.tar.gz",
29+
:sha256 => Rdkafka::LIBRDKAFKA_SOURCE_SHA256
30+
}
31+
recipe.configure_options = ["--host=#{recipe.host}"]
1632

17-
recipe.files << {
18-
:url => "https://codeload.github.com/edenhill/librdkafka/tar.gz/v#{Rdkafka::LIBRDKAFKA_VERSION}",
19-
:sha256 => Rdkafka::LIBRDKAFKA_SOURCE_SHA256
20-
}
21-
recipe.configure_options = ["--host=#{recipe.host}"]
22-
recipe.cook
23-
# Move dynamic library we're interested in
24-
if recipe.host.include?('darwin')
25-
from_extension = '1.dylib'
26-
to_extension = 'dylib'
33+
# Disable using libc regex engine in favor of the embedded one
34+
# The default regex engine of librdkafka does not always work exactly as most of the users
35+
# would expect, hence this flag allows for changing it to the other one
36+
if ENV.key?('RDKAFKA_DISABLE_REGEX_EXT')
37+
recipe.configure_options << '--disable-regex-ext'
38+
end
39+
40+
recipe.cook
41+
# Move dynamic library we're interested in
42+
if recipe.host.include?('darwin')
43+
from_extension = '1.dylib'
44+
to_extension = 'dylib'
45+
else
46+
from_extension = 'so.1'
47+
to_extension = 'so'
48+
end
49+
lib_path = File.join(File.dirname(__FILE__), "ports/#{recipe.host}/librdkafka/#{Rdkafka::LIBRDKAFKA_VERSION}/lib/librdkafka.#{from_extension}")
50+
FileUtils.mv(lib_path, File.join(File.dirname(__FILE__), "librdkafka.#{to_extension}"))
51+
# Cleanup files created by miniportile we don't need in the gem
52+
FileUtils.rm_rf File.join(File.dirname(__FILE__), "tmp")
53+
FileUtils.rm_rf File.join(File.dirname(__FILE__), "ports")
2754
else
28-
from_extension = 'so.1'
29-
to_extension = 'so'
55+
# Otherwise, copy existing libraries to ./ext
56+
if ENV['RDKAFKA_EXT_PATH'].nil? || ENV['RDKAFKA_EXT_PATH'].empty?
57+
raise "RDKAFKA_EXT_PATH must be set in your nix config when running under nix"
58+
end
59+
files = [
60+
File.join(ENV['RDKAFKA_EXT_PATH'], 'lib', 'librdkafka.dylib'),
61+
File.join(ENV['RDKAFKA_EXT_PATH'], 'lib', 'librdkafka.so')
62+
]
63+
files.each { |ext| FileUtils.cp(ext, File.dirname(__FILE__)) if File.exist?(ext) }
3064
end
31-
lib_path = File.join(File.dirname(__FILE__), "ports/#{recipe.host}/librdkafka/#{Rdkafka::LIBRDKAFKA_VERSION}/lib/librdkafka.#{from_extension}")
32-
FileUtils.mv(lib_path, File.join(File.dirname(__FILE__), "librdkafka.#{to_extension}"))
33-
# Cleanup files created by miniportile we don't need in the gem
34-
FileUtils.rm_rf File.join(File.dirname(__FILE__), "tmp")
35-
FileUtils.rm_rf File.join(File.dirname(__FILE__), "ports")
3665
end
3766

3867
task :clean do

lib/rdkafka/version.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module Rdkafka
2-
VERSION = "0.12.0"
2+
VERSION = "0.12.1"
33
LIBRDKAFKA_VERSION = "1.9.0"
44
LIBRDKAFKA_SOURCE_SHA256 = "59b6088b69ca6cf278c3f9de5cd6b7f3fd604212cd1c59870bc531c54147e889"
55
end

0 commit comments

Comments
 (0)