diff options
Diffstat (limited to 'Rakefile')
-rw-r--r-- | Rakefile | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..3189556 --- /dev/null +++ b/Rakefile @@ -0,0 +1,178 @@ +require 'rubygems' +require 'rake' +require 'rake/testtask' +require 'rake/rdoctask' +require 'rake/contrib/sshpublisher' + +require "./lib/sqlite3/version" + +PACKAGE_NAME = "sqlite3-ruby" +PACKAGE_VERSION = SQLite3::Version::STRING + +SOURCE_FILES = FileList.new do |fl| + [ "ext", "lib", "test" ].each do |dir| + fl.include "#{dir}/**/*" + end + fl.include "Rakefile" + fl.exclude( /\bCVS\b/ ) +end + +PACKAGE_FILES = FileList.new do |fl| + [ "api", "doc" ].each do |dir| + fl.include "#{dir}/**/*" + end + fl.include "ChangeLog", "README", "LICENSE", "#{PACKAGE_NAME}.gemspec", "setup.rb" + fl.include SOURCE_FILES + fl.exclude( /\bCVS\b/ ) +end + +Gem.manage_gems + +def can_require( file ) + begin + require file + return true + rescue LoadError + return false + end +end + +desc "Default task" +task :default => [ :test ] + +desc "Clean generated files" +task :clean do + rm_rf "pkg" + rm_rf "api" + rm_f "ChangeLog" + rm_f "doc/faq/faq.html" + + native_files = [ "Makefile", "mkmf.log", "sqlite3_api.so", + "sqlite3_api_wrap.c", "sqlite3_api_wrap.o" ] + native_files.each { |f| rm_f "ext/sqlite3_api/#{f}" } +end + +desc "Run benchmarks vs. sqlite-ruby" +task :benchmark do + ruby "test/bm.rb" +end + +desc "Run benchmarks dl vs. native" +task :benchmark2 do + ruby "test/native-vs-dl.rb" +end + +desc "Generate the changelog using cvs2cl" +task :changelog => "ChangeLog" + +file "ChangeLog" do + unless system "cvs2cl" + warn "could not generate ChangeLog (cvs2cl missing?)" + end +end + +desc "Generate the FAQ document" +task :faq => "doc/faq/faq.html" + +file "doc/faq/faq.html" => [ "doc/faq/faq.rb", "doc/faq/faq.yml" ] do + cd( "doc/faq" ) { ruby "faq.rb > faq.html" } +end + +Rake::TestTask.new do |t| + t.test_files = [ "test/tests.rb" ] + t.verbose = true +end + +desc "Build all packages" +task :package + +package_name = "#{PACKAGE_NAME}-#{PACKAGE_VERSION}" +package_dir = "pkg" +package_dir_path = "#{package_dir}/#{package_name}" + +gz_file = "#{package_name}.tar.gz" +bz2_file = "#{package_name}.tar.bz2" +zip_file = "#{package_name}.zip" +gem_file = "#{package_name}.gem" + +task :gzip => SOURCE_FILES + [ :changelog, :faq, :rdoc, "#{package_dir}/#{gz_file}" ] +task :bzip => SOURCE_FILES + [ :changelog, :faq, :rdoc, "#{package_dir}/#{bz2_file}" ] +task :zip => SOURCE_FILES + [ :changelog, :faq, :rdoc, "#{package_dir}/#{zip_file}" ] +task :gem => SOURCE_FILES + [ :changelog, :faq, "#{package_dir}/#{gem_file}" ] + +task :package => [ :gzip, :bzip, :zip, :gem ] + +directory package_dir + +file package_dir_path do + mkdir_p package_dir_path rescue nil + PACKAGE_FILES.each do |fn| + f = File.join( package_dir_path, fn ) + if File.directory?( fn ) + mkdir_p f unless File.exist?( f ) + else + dir = File.dirname( f ) + mkdir_p dir unless File.exist?( dir ) + rm_f f + safe_ln fn, f + end + end +end + +file "#{package_dir}/#{zip_file}" => package_dir_path do + rm_f "#{package_dir}/#{zip_file}" + chdir package_dir do + sh %{zip -r #{zip_file} #{package_name}} + end +end + +file "#{package_dir}/#{gz_file}" => package_dir_path do + rm_f "#{package_dir}/#{gz_file}" + chdir package_dir do + sh %{tar czvf #{gz_file} #{package_name}} + end +end + +file "#{package_dir}/#{bz2_file}" => package_dir_path do + rm_f "#{package_dir}/#{bz2_file}" + chdir package_dir do + sh %{tar cjvf #{bz2_file} #{package_name}} + end +end + +file "#{package_dir}/#{gem_file}" => package_dir do + spec = eval(File.read(PACKAGE_NAME+".gemspec")) + Gem::Builder.new(spec).build + mv gem_file, "#{package_dir}/#{gem_file}" +end + +Rake::RDocTask.new do |rdoc| + rdoc.rdoc_dir = 'api' + rdoc.title = "SQLite3/Ruby" + rdoc.options << '--line-numbers --inline-source --main README' + rdoc.rdoc_files.include('lib/**/*.rb') + + if can_require( "rdoc/generators/template/html/jamis" ) + rdoc.template = "jamis" + end +end + +desc "Publish the API documentation" +task :pubrdoc => [ :rdoc ] do + Rake::SshDirPublisher.new( + "minam@rubyforge.org", + "/var/www/gforge-projects/sqlite-ruby/sqlite3/", + "api" ).upload +end + +desc "Publish the FAQ" +task :pubfaq => [ :faq ] do + Rake::SshFilePublisher.new( + "minam@rubyforge.org", + "/var/www/gforge-projects/sqlite-ruby/sqlite3", + "doc/faq", + "faq.html" ).upload +end + +desc "Publish the documentation" +task :pubdoc => [:pubrdoc, :pubfaq] |