puma/Rakefile

110 lines
3.1 KiB
Ruby

require "bundler/setup"
require "rake/testtask"
require "rake/extensiontask"
require "rake/javaextensiontask"
require_relative 'lib/puma/detect'
require 'rubygems/package_task'
require 'bundler/gem_tasks'
begin
# Add rubocop task
require "rubocop/rake_task"
RuboCop::RakeTask.new
rescue LoadError
end
gemspec = Gem::Specification.load("puma.gemspec")
Gem::PackageTask.new(gemspec).define
Rake::FileUtilsExt.verbose_flag = !!ENV['PUMA_TEST_DEBUG']
# generate extension code using Ragel (C and Java)
desc "Generate extension code (C and Java) using Ragel"
task :ragel
file 'ext/puma_http11/http11_parser.c' => ['ext/puma_http11/http11_parser.rl'] do |t|
begin
sh "ragel #{t.prerequisites.last} -C -G2 -I ext/puma_http11 -o #{t.name}"
rescue
fail "Could not build wrapper using Ragel (it failed or not installed?)"
end
end
task :ragel => ['ext/puma_http11/http11_parser.c']
file 'ext/puma_http11/org/jruby/puma/Http11Parser.java' => ['ext/puma_http11/http11_parser.java.rl'] do |t|
begin
sh "ragel #{t.prerequisites.last} -J -G2 -I ext/puma_http11 -o #{t.name}"
rescue
fail "Could not build wrapper using Ragel (it failed or not installed?)"
end
end
task :ragel => ['ext/puma_http11/org/jruby/puma/Http11Parser.java']
if !Puma.jruby?
# compile extensions using rake-compiler
# C (MRI, Rubinius)
Rake::ExtensionTask.new("puma_http11", gemspec) do |ext|
# place extension inside namespace
ext.lib_dir = "lib/puma"
CLEAN.include "lib/puma/{1.8,1.9}"
CLEAN.include "lib/puma/puma_http11.rb"
end
else
# Java (JRuby)
# ::Rake::JavaExtensionTask.source_files supplies the list of files to
# compile. At present, it only works with a glob prefixed with @ext_dir.
# override it so we can select the files
class ::Rake::JavaExtensionTask
def source_files
if ENV["PUMA_DISABLE_SSL"]
# uses no_ssl/PumaHttp11Service.java, removes MiniSSL.java
FileList[
File.join(@ext_dir, "no_ssl/PumaHttp11Service.java"),
File.join(@ext_dir, "org/jruby/puma/Http11.java"),
File.join(@ext_dir, "org/jruby/puma/Http11Parser.java")
]
else
FileList[
File.join(@ext_dir, "PumaHttp11Service.java"),
File.join(@ext_dir, "org/jruby/puma/Http11.java"),
File.join(@ext_dir, "org/jruby/puma/Http11Parser.java"),
File.join(@ext_dir, "org/jruby/puma/MiniSSL.java")
]
end
end
end
Rake::JavaExtensionTask.new("puma_http11", gemspec) do |ext|
ext.lib_dir = "lib/puma"
ext.source_version = '1.8'
ext.target_version = '1.8'
end
end
# the following is a fat-binary stub that will be used when
# require 'puma/puma_http11' and will use either 1.8 or 1.9 version depending
# on RUBY_VERSION
file "lib/puma/puma_http11.rb" do |t|
File.open(t.name, "w") do |f|
f.puts "RUBY_VERSION =~ /(\d+.\d+)/"
f.puts 'require "puma/#{$1}/puma_http11"'
end
end
Rake::TestTask.new(:test)
# tests require extension be compiled, but depend on the platform
if Puma.jruby?
task :test => [:java]
else
task :test => [:compile]
end
namespace :test do
desc "Run all tests"
task :all => :test
end
task :default => [:rubocop, "test:all"]