mirror of
https://github.com/puma/puma.git
synced 2022-11-09 13:48:40 -05:00
537bc21593
Because frameworks like rails dependent on rack, if puma truly wants to be able to reload new code and thus new versions of rails, it has to be able to reload rack as well. Having a dependency on rack held by puma prevented that from happening and so that dependency has been removed.
158 lines
4 KiB
Ruby
158 lines
4 KiB
Ruby
require "hoe"
|
|
require "rake/extensiontask"
|
|
require "rake/javaextensiontask"
|
|
|
|
IS_JRUBY = defined?(RUBY_ENGINE) ? RUBY_ENGINE == "jruby" : false
|
|
|
|
Hoe.plugin :git
|
|
Hoe.plugin :ignore
|
|
|
|
HOE = Hoe.spec "puma" do
|
|
self.readme_file = "README.md"
|
|
self.urls = %w!http://puma.io https://github.com/puma/puma!
|
|
|
|
license "BSD-3-Clause"
|
|
developer 'Evan Phoenix', 'evan@phx.io'
|
|
|
|
spec_extras[:extensions] = ["ext/puma_http11/extconf.rb"]
|
|
spec_extras[:executables] = ['puma', 'pumactl']
|
|
spec_extras[:homepage] = self.urls.first
|
|
|
|
require_ruby_version ">= 1.8.7"
|
|
|
|
dependency "rack", [">= 1.1", "< 2.0"], :development
|
|
|
|
extra_dev_deps << ["rake-compiler", "~> 0.8"]
|
|
end
|
|
|
|
task :prerelease => [:clobber, :check_manifest, :test]
|
|
|
|
# hoe/test and rake-compiler don't seem to play well together, so disable
|
|
# hoe/test's .gemtest touch file thingy for now
|
|
HOE.spec.files -= [".gemtest"]
|
|
|
|
include Hoe::Git
|
|
|
|
desc "Print the current changelog."
|
|
task "changelog" do
|
|
tag = ENV["FROM"] || git_tags.last
|
|
range = [tag, "HEAD"].compact.join ".."
|
|
cmd = "git log #{range} '--format=tformat:%B|||%aN|||%aE|||'"
|
|
now = Time.new.strftime "%Y-%m-%d"
|
|
|
|
changes = `#{cmd}`.split(/\|\|\|/).each_slice(3).map { |msg, author, email|
|
|
msg.split(/\n/).reject { |s| s.empty? }.first
|
|
}.flatten.compact
|
|
|
|
$changes = Hash.new { |h,k| h[k] = [] }
|
|
|
|
codes = {
|
|
"!" => :major,
|
|
"+" => :minor,
|
|
"*" => :minor,
|
|
"-" => :bug,
|
|
"?" => :unknown,
|
|
}
|
|
|
|
codes_re = Regexp.escape codes.keys.join
|
|
|
|
changes.each do |change|
|
|
if change =~ /^\s*([#{codes_re}])\s*(.*)/ then
|
|
code, line = codes[$1], $2
|
|
else
|
|
code, line = codes["?"], change.chomp
|
|
end
|
|
|
|
$changes[code] << line
|
|
end
|
|
|
|
puts "=== #{ENV['VERSION'] || 'NEXT'} / #{now}"
|
|
puts
|
|
changelog_section :major
|
|
changelog_section :minor
|
|
changelog_section :bug
|
|
changelog_section :unknown
|
|
puts
|
|
end
|
|
|
|
# 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 !IS_JRUBY
|
|
|
|
# compile extensions using rake-compiler
|
|
# C (MRI, Rubinius)
|
|
Rake::ExtensionTask.new("puma_http11", HOE.spec) do |ext|
|
|
# place extension inside namespace
|
|
ext.lib_dir = "lib/puma"
|
|
|
|
ext.cross_compile = true
|
|
ext.cross_platform = ['i386-mswin32-60', 'i386-mingw32']
|
|
ext.cross_compiling do |spec|
|
|
# add fat-binary stub only when cross compiling
|
|
spec.files << "lib/puma/puma_http11.rb"
|
|
end
|
|
|
|
CLEAN.include "lib/puma/{1.8,1.9}"
|
|
CLEAN.include "lib/puma/puma_http11.rb"
|
|
end
|
|
|
|
else
|
|
|
|
# Java (JRuby)
|
|
Rake::JavaExtensionTask.new("puma_http11", HOE.spec) do |ext|
|
|
ext.lib_dir = "lib/puma"
|
|
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
|
|
|
|
# tests require extension be compiled, but depend on the platform
|
|
if IS_JRUBY
|
|
task :test => [:java]
|
|
else
|
|
task :test => [:compile]
|
|
end
|
|
|
|
namespace :test do
|
|
desc "Run the integration tests"
|
|
task :integration do
|
|
sh "cd test/shell; sh run.sh"
|
|
end
|
|
|
|
desc "Run all tests"
|
|
if defined?(JRUBY_VERSION) and ENV['TRAVIS']
|
|
task :all => :test
|
|
else
|
|
task :all => [:test, "test:integration"]
|
|
end
|
|
end
|
|
|