ext/Rakefile in rdkafka-0.12.0 vs ext/Rakefile in rdkafka-0.12.1
- old
+ new
@@ -1,39 +1,68 @@
+# frozen_string_literal: true
+
require File.expand_path('../../lib/rdkafka/version', __FILE__)
-require "mini_portile2"
require "fileutils"
require "open-uri"
task :default => :clean do
- # Download and compile librdkafka
- recipe = MiniPortile.new("librdkafka", Rdkafka::LIBRDKAFKA_VERSION)
+ # For nix users, nix can't locate the file paths because the packages it's requiring aren't managed by the system but are
+ # managed by nix itself, so using the normal file paths doesn't work for nix users.
+ #
+ # Mini_portile causes an issue because it's dependencies are downloaded on the fly and therefore don't exist/aren't
+ # accessible in the nix environment
+ if ENV.fetch('RDKAFKA_EXT_PATH', '').empty?
+ # Download and compile librdkafka if RDKAFKA_EXT_PATH is not set
+ require "mini_portile2"
+ recipe = MiniPortile.new("librdkafka", Rdkafka::LIBRDKAFKA_VERSION)
- # Use default homebrew openssl if we're on mac and the directory exists
- # and each of flags is not empty
- if recipe.host&.include?("darwin") && system("which brew &> /dev/null") && Dir.exist?("#{homebrew_prefix = %x(brew --prefix openssl).strip}")
- ENV["CPPFLAGS"] = "-I#{homebrew_prefix}/include" unless ENV["CPPFLAGS"]
- ENV["LDFLAGS"] = "-L#{homebrew_prefix}/lib" unless ENV["LDFLAGS"]
- end
+ # Use default homebrew openssl if we're on mac and the directory exists
+ # and each of flags is not empty
+ if recipe.host&.include?("darwin") && system("which brew &> /dev/null") && Dir.exist?("#{homebrew_prefix = %x(brew --prefix openssl).strip}")
+ ENV["CPPFLAGS"] = "-I#{homebrew_prefix}/include" unless ENV["CPPFLAGS"]
+ ENV["LDFLAGS"] = "-L#{homebrew_prefix}/lib" unless ENV["LDFLAGS"]
+ end
- recipe.files << {
- :url => "https://codeload.github.com/edenhill/librdkafka/tar.gz/v#{Rdkafka::LIBRDKAFKA_VERSION}",
- :sha256 => Rdkafka::LIBRDKAFKA_SOURCE_SHA256
- }
- recipe.configure_options = ["--host=#{recipe.host}"]
- recipe.cook
- # Move dynamic library we're interested in
- if recipe.host.include?('darwin')
- from_extension = '1.dylib'
- to_extension = 'dylib'
+ releases = File.expand_path(File.join(File.dirname(__FILE__), '../dist'))
+
+ recipe.files << {
+ :url => "file://#{releases}/librdkafka_#{Rdkafka::LIBRDKAFKA_VERSION}.tar.gz",
+ :sha256 => Rdkafka::LIBRDKAFKA_SOURCE_SHA256
+ }
+ recipe.configure_options = ["--host=#{recipe.host}"]
+
+ # Disable using libc regex engine in favor of the embedded one
+ # The default regex engine of librdkafka does not always work exactly as most of the users
+ # would expect, hence this flag allows for changing it to the other one
+ if ENV.key?('RDKAFKA_DISABLE_REGEX_EXT')
+ recipe.configure_options << '--disable-regex-ext'
+ end
+
+ recipe.cook
+ # Move dynamic library we're interested in
+ if recipe.host.include?('darwin')
+ from_extension = '1.dylib'
+ to_extension = 'dylib'
+ else
+ from_extension = 'so.1'
+ to_extension = 'so'
+ end
+ lib_path = File.join(File.dirname(__FILE__), "ports/#{recipe.host}/librdkafka/#{Rdkafka::LIBRDKAFKA_VERSION}/lib/librdkafka.#{from_extension}")
+ FileUtils.mv(lib_path, File.join(File.dirname(__FILE__), "librdkafka.#{to_extension}"))
+ # Cleanup files created by miniportile we don't need in the gem
+ FileUtils.rm_rf File.join(File.dirname(__FILE__), "tmp")
+ FileUtils.rm_rf File.join(File.dirname(__FILE__), "ports")
else
- from_extension = 'so.1'
- to_extension = 'so'
+ # Otherwise, copy existing libraries to ./ext
+ if ENV['RDKAFKA_EXT_PATH'].nil? || ENV['RDKAFKA_EXT_PATH'].empty?
+ raise "RDKAFKA_EXT_PATH must be set in your nix config when running under nix"
+ end
+ files = [
+ File.join(ENV['RDKAFKA_EXT_PATH'], 'lib', 'librdkafka.dylib'),
+ File.join(ENV['RDKAFKA_EXT_PATH'], 'lib', 'librdkafka.so')
+ ]
+ files.each { |ext| FileUtils.cp(ext, File.dirname(__FILE__)) if File.exist?(ext) }
end
- lib_path = File.join(File.dirname(__FILE__), "ports/#{recipe.host}/librdkafka/#{Rdkafka::LIBRDKAFKA_VERSION}/lib/librdkafka.#{from_extension}")
- FileUtils.mv(lib_path, File.join(File.dirname(__FILE__), "librdkafka.#{to_extension}"))
- # Cleanup files created by miniportile we don't need in the gem
- FileUtils.rm_rf File.join(File.dirname(__FILE__), "tmp")
- FileUtils.rm_rf File.join(File.dirname(__FILE__), "ports")
end
task :clean do
FileUtils.rm_f File.join(File.dirname(__FILE__), "librdkafka.dylib")
FileUtils.rm_f File.join(File.dirname(__FILE__), "librdkafka.so")