require 'rubygems'
gem 'echoe', '>=2.7.11'
require 'echoe'
e = Echoe.new("mongrel") do |p|
p.summary = "A small fast HTTP library and server that runs Rails, Camping, Nitro and Iowa apps."
p.author = "Zed A. Shaw"
p.email = "mongrel-development@rubyforge.org"
p.clean_pattern = ['ext/http11/*.{bundle,so,o,obj,pdb,lib,def,exp}', 'lib/*.{bundle,so,o,obj,pdb,lib,def,exp}', 'ext/http11/Makefile', 'pkg', 'lib/*.bundle', '*.gem', 'site/output', '.config', 'lib/http11.jar', 'ext/http11_java/classes', 'coverage', 'test_*.log', 'log', 'doc']
p.url = "http://mongrel.rubyforge.org"
p.rdoc_pattern = ['README', 'LICENSE', 'CONTRIBUTORS', 'CHANGELOG', 'COPYING', 'lib/**/*.rb', 'doc/**/*.rdoc']
p.docs_host = 'mongrel.cloudbur.st:/home/eweaver/www/mongrel/htdocs/web'
p.ignore_pattern = /^(pkg|site|projects|doc|log)|CVS|\.log/
p.ruby_version = '>=1.8.4'
p.dependencies = ['gem_plugin >=0.2.3']
p.extension_pattern = nil
p.certificate_chain = case (ENV['USER'] || ENV['USERNAME']).downcase
when 'eweaver'
['~/p/configuration/gem_certificates/mongrel/mongrel-public_cert.pem',
'~/p/configuration/gem_certificates/evan_weaver-mongrel-public_cert.pem']
when 'luislavena', 'luis'
['~/projects/gem_certificates/mongrel-public_cert.pem',
'~/projects/gem_certificates/luislavena-mongrel-public_cert.pem']
end
p.need_tar_gz = false
p.need_tgz = true
unless Platform.windows? or Platform.java?
p.extension_pattern = ["ext/**/extconf.rb"]
end
p.eval = proc do
if Platform.windows?
self.files += ['lib/http11.so']
self.platform = Gem::Platform::CURRENT
elsif Platform.java?
self.files += ['lib/http11.jar']
self.platform = 'jruby' # XXX Is this right?
else
add_dependency('daemons', '>= 1.0.3')
end
end
end
#### Ragel builder
desc "Rebuild the Ragel sources"
task :ragel do
Dir.chdir "ext/http11" do
target = "http11_parser.c"
File.unlink target if File.exist? target
sh "ragel http11_parser.rl -C -G2 -o #{target}"
raise "Failed to build C source" unless File.exist? target
end
Dir.chdir "ext/http11" do
target = "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java"
File.unlink target if File.exist? target
sh "ragel http11_parser.rl -J -o #{target}"
raise "Failed to build Java source" unless File.exist? target
end
end
#### Pre-compiled extensions for alternative platforms
def move_extensions
Dir["ext/**/*.#{Config::CONFIG['DLEXT']}"].each { |file| mv file, "lib/" }
end
def java_classpath_arg
# A myriad of ways to discover the JRuby classpath
classpath = begin
require 'java'
# Already running in a JRuby JVM
Java::java.lang.System.getProperty('java.class.path')
rescue LoadError
ENV['JRUBY_PARENT_CLASSPATH'] || ENV['JRUBY_HOME'] && FileList["#{ENV['JRUBY_HOME']}/lib/*.jar"].join(File::PATH_SEPARATOR)
end
classpath ? "-cp #{classpath}" : ""
end
if Platform.windows?
filename = "lib/http11.so"
file filename do
Dir.chdir("ext/http11") do
ruby "extconf.rb"
system(Platform.make)
end
move_extensions
end
task :compile => [filename]
elsif Platform.java?
# Avoid JRuby in-process launching problem
begin
require 'jruby'
JRuby.runtime.instance_config.run_ruby_in_process = false
rescue LoadError
end
filename = "lib/http11.jar"
file filename do
build_dir = "ext/http11_java/classes"
mkdir_p build_dir
sources = FileList['ext/http11_java/**/*.java'].join(' ')
sh "javac -target 1.4 -source 1.4 -d #{build_dir} #{java_classpath_arg} #{sources}"
sh "jar cf lib/http11.jar -C #{build_dir} ."
move_extensions
end
task :compile => [filename]
end
#### Project-wide install and uninstall tasks
def sub_project(project, *targets)
targets.each do |target|
Dir.chdir "projects/#{project}" do
sh("#{Platform.rake} #{target.to_s}") # --trace
end
end
end
desc "Compile all the projects"
task :compile_all => [:compile] do
sub_project("fastthread", :compile)
sub_project("mongrel_service", :compile)
end
desc "Package Mongrel and all subprojects"
task :package_all => [:package] do
sub_project("gem_plugin", :package)
sub_project("cgi_multipart_eof_fix", :package)
sub_project("fastthread", :package)
sub_project("mongrel_status", :package)
sub_project("mongrel_upload_progress", :package)
sub_project("mongrel_console", :package)
sub_project("mongrel_cluster", :package)
sub_project("mongrel_experimental", :package)
sh("rake java package") unless Platform.windows?
sub_project("mongrel_service", :package) if Platform.windows?
end
task :install_requirements do
# These run before Mongrel is installed
sub_project("gem_plugin", :install)
sub_project("cgi_multipart_eof_fix", :install)
sub_project("fastthread", :install)
end
desc "for Mongrel and all subprojects"
task :install => [:install_requirements] do
# These run after Mongrel is installed
sub_project("mongrel_status", :install)
sub_project("mongrel_upload_progress", :install)
sub_project("mongrel_console", :install)
sub_project("mongrel_cluster", :install)
# sub_project("mongrel_experimental", :install)
sub_project("mongrel_service", :install) if Platform.windows?
end
desc "for Mongrel and all its subprojects"
task :uninstall => [:clean] do
sub_project("mongrel_status", :uninstall)
sub_project("cgi_multipart_eof_fix", :uninstall)
sub_project("mongrel_upload_progress", :uninstall)
sub_project("mongrel_console", :uninstall)
sub_project("gem_plugin", :uninstall)
sub_project("fastthread", :uninstall)
# sub_project("mongrel_experimental", :uninstall)
sub_project("mongrel_service", :uninstall) if Platform.windows?
end
desc "for Mongrel and all its subprojects"
task :clean_all => [:clean] do
sub_project("gem_plugin", :clean)
sub_project("cgi_multipart_eof_fix", :clean)
sub_project("fastthread", :clean)
sub_project("mongrel_status", :clean)
sub_project("mongrel_upload_progress", :clean)
sub_project("mongrel_console", :clean)
sub_project("mongrel_cluster", :clean)
sub_project("mongrel_experimental", :clean)
sub_project("mongrel_service", :clean) if Platform.windows?
end
#### Site upload tasks
namespace :site do
desc "Upload the coverage report"
task :coverage => [:rcov] do
sh "rsync -azv --no-perms --no-times test/coverage/* mongrel.cloudbur.st:/home/eweaver/www/mongrel/htdocs/web/coverage" rescue nil
end
end