summaryrefslogtreecommitdiff
path: root/extconf.rb
diff options
context:
space:
mode:
Diffstat (limited to 'extconf.rb')
-rw-r--r--extconf.rb46
1 files changed, 46 insertions, 0 deletions
diff --git a/extconf.rb b/extconf.rb
new file mode 100644
index 0000000..efc891b
--- /dev/null
+++ b/extconf.rb
@@ -0,0 +1,46 @@
+require 'mkmf'
+
+# Check if Rust is available
+def rust_available?
+ system('cargo --version > /dev/null 2>&1')
+end
+
+if rust_available?
+ # Use cargo to build the Rust extension
+ system('cargo build --release') or abort 'Cargo build failed'
+
+ # Copy the built library to the expected location
+ ext_name = 'net_hippie_ext'
+ lib_path = case RUBY_PLATFORM
+ when /darwin/
+ "target/release/lib#{ext_name}.dylib"
+ when /linux/
+ "target/release/lib#{ext_name}.so"
+ when /mingw/
+ "target/release/#{ext_name}.dll"
+ else
+ abort "Unsupported platform: #{RUBY_PLATFORM}"
+ end
+
+ target_path = "#{ext_name}.#{RbConfig::CONFIG['DLEXT']}"
+
+ if File.exist?(lib_path)
+ FileUtils.cp(lib_path, target_path)
+ puts "Successfully built Rust extension: #{target_path}"
+ else
+ abort "Rust library not found at: #{lib_path}"
+ end
+
+ # Create a dummy Makefile since mkmf expects one
+ create_makefile(ext_name)
+else
+ puts "Warning: Rust not available, skipping native extension build"
+ puts "The gem will fall back to pure Ruby implementation"
+
+ # Create a dummy Makefile that does nothing
+ File.open('Makefile', 'w') do |f|
+ f.puts "all:\n\t@echo 'Skipping Rust extension build'"
+ f.puts "install:\n\t@echo 'Skipping Rust extension install'"
+ f.puts "clean:\n\t@echo 'Skipping Rust extension clean'"
+ end
+end \ No newline at end of file