2 require 'rake/testtask'
3 require 'rake/rdoctask'
4 require 'rake/gempackagetask'
6 GEM_VERSION = "0.4.999"
8 desc "Remove build products"
10 rm Dir.glob( "lib/**/*.jar" )
11 rm Dir.glob( "lib/**/*.#{ Config::CONFIG['DLEXT'] }" )
12 rm Dir.glob( "ext/**/Makefile" )
13 rm Dir.glob( "ext/**/*.{o,#{ Config::CONFIG['DLEXT'] }}" )
14 rm Dir.glob( "java/**/*.{class,jar}" )
17 Rake::RDocTask.new do |task|
18 task.rdoc_files.add [ 'lib/**/*.rb', 'stubs/**/*.rb' ]
21 task :clobber => [ :clean ]
23 def setup_extension( dir, lib_dir, extension )
24 ext = File.join( "ext", dir )
25 so_name = "#{ extension }.#{ Config::CONFIG['DLEXT'] }"
26 ext_so = File.join( ext, so_name )
27 lib_so = File.join( "lib", lib_dir, so_name )
28 ext_files = FileList[ File.join( ext, "*.{c,h}" ) ]
29 ext_makefile = File.join( ext, "Makefile" )
30 extconf_rb = File.join( ext, "extconf.rb" )
32 file ext_makefile => [ extconf_rb ] do
38 file ext_so => ext_files + [ ext_makefile ] do
49 file lib_so => [ ext_so ] do
53 task :compile => [ lib_so ]
56 def setup_jar( dir, lib_dir, extension )
57 ext = File.join( "java", dir )
58 jar_name = "#{ extension }.jar"
59 ext_jar = File.join( ext, lib_dir, jar_name )
60 lib_jar = File.join( "lib", lib_dir, jar_name )
61 ext_files = FileList[ File.join( ext, "**", "*.java" ) ]
62 main_source = File.join( lib_dir, "#{ extension.capitalize }Service.java" )
64 file ext_jar => [ ext_files ] do
66 sh 'javac', '-classpath', File.join( ENV['JRUBY_HOME'], 'lib/jruby.jar' ), main_source
67 sh 'jar', 'cf', File.join( lib_dir, jar_name ), *Dir.glob( '**/*.class' )
71 file lib_jar => ext_jar do
75 task :compile => [ lib_jar ]
80 setup_jar( 'futures', 'concurrent', 'futures' )
81 setup_jar( 'primitives', 'concurrent', 'primitives' )
83 setup_extension( 'futures', 'concurrent', 'futures' )
84 setup_extension( 'primitives', 'concurrent', 'primitives' )
87 desc "Compile extensions"
90 task :test => [ :compile ]
91 Rake::TestTask.new do |task|
92 task.ruby_opts << '-rrubygems'
95 task.test_files = [ "test/test_all.rb" ]
99 gemspec = Gem::Specification.new do |gemspec|
100 gemspec.name = "concurrent"
101 gemspec.version = GEM_VERSION
102 gemspec.author = "MenTaLguY <mental@rydia.net>"
103 gemspec.summary = "Omnibus concurrency library for Ruby"
104 gemspec.test_file = 'test/test_all.rb'
105 gemspec.files = FileList[ 'Rakefile', 'test/*.rb', 'ext/**/*.{c,h,rb}',
107 "lib/**/*.{rb,jar,#{ Config::CONFIG['DLEXT'] }}" ]
108 gemspec.require_paths = [ 'lib' ]
109 gemspec.add_dependency 'scheduler', '>= 0.1'
110 gemspec.has_rdoc = true
114 gemspec.platform = 'jruby'
116 gemspec.platform = Gem::Platform::WIN32
118 gemspec.platform = Gem::Platform::RUBY
119 gemspec.extensions = FileList[ 'ext/**/extconf.rb' ]
123 task :package => [ :clean, :test ]
124 Rake::GemPackageTask.new( gemspec ) do |task|
125 task.gem_spec = gemspec
129 task :default => [ :clean, :test ]