# Rake doc: http://rake.rubyforge.org/files/doc/rakefile_rdoc.html require 'rake' require 'net/ftp' require 'net/http' require 'uri' include Rake ENV["RUBYOPT"] = nil EXTENSION = "RubySFML" RUBY_VER = "ruby-1.8.6-p111" GEMS_VER = "rubygems-0.9.4" ROOT_DIR = Dir.pwd RUBY_DIR = "#{ROOT_DIR}/#{RUBY_VER}" GEMS_DIR = "#{ROOT_DIR}/#{GEMS_VER}" EXTENSION_DIR = "#{ROOT_DIR}/#{EXTENSION}" RUBY_URL = "ftp://ftp.ruby-lang.org/pub/ruby/1.8/#{RUBY_VER}.tar.gz" # These are needed to build Ruby's zlib extension raise "You forgot to run vcvars32.bat!" unless ENV['INCLUDE'] and ENV['LIB'] ENV['INCLUDE'] += ";#{ROOT_DIR}/../extlibs/headers;#{ROOT_DIR}/zlib" ENV['LIB'] += ";#{ROOT_DIR}/../extlibs/libs-vc2005;#{ROOT_DIR}/zlib" # Need this for the Unix utils, like gzip.exe and tar.exe, to run ENV['PATH'] += ";#{ROOT_DIR}" desc "Deletes all compiled and installed Ruby files for a clean rebuild" task :cleanRuby do |t| rm_r "bin" rescue nil rm_r "lib" rescue nil rm_r "man" rescue nil rm_r RUBY_DIR rescue nil rm_r GEMS_DIR rescue nil rm "#{RUBY_VER}.tar" rescue nil rm "#{RUBY_VER}.tar.gz" rescue nil end desc "Gets the Ruby source code from the FTP server" task :getRuby do |t| tar = "#{RUBY_VER}.tar" tgz = "#{tar}.gz" unless File.exists?(tar) or File.exists?(tgz) puts "Downloading #{RUBY_URL}. Please wait..." Net::FTP.open("ftp.ruby-lang.org") do |ftp| ftp.login files = ftp.chdir("pub/ruby/1.8") ftp.getbinaryfile(tgz, tgz) end end end desc "Unpacks the Ruby source tarball" task :unpackRuby => [:getRuby] do |t| unless File.exists?(RUBY_DIR) tar = "#{RUBY_VER}.tar" tgz = "#{tar}.gz" sh "gzip", "-d", tgz if File.exists?(tgz) sh "tar", "-xvf", tar end unless File.exists?(GEMS_DIR) sh "unzip", "#{GEMS_VER}.zip" end end desc "Builds ruby.exe from the source code" task :buildRuby => [:unpackRuby] do |t| unless File.exists? "#{RUBY_DIR}/ruby.exe" Dir.chdir RUBY_DIR sh "win32\\configure.bat", "--target=i686-mswin32" sh "nmake" Dir.chdir ROOT_DIR end end desc "Installs #{RUBY_VER} and copies the extlibs into the bin folder" task :installRuby => [:buildRuby] do |t| unless File.exists? "#{ROOT_DIR}/bin/ruby.exe" Dir.chdir RUBY_DIR sh "nmake", "DESTDIR=\"#{ROOT_DIR}\"", "install" Dir.chdir ROOT_DIR end unless File.exists? "bin/zlib1.dll" cp Dir["../extlibs/bin/*.dll"], "bin" cp Dir["zlib/*.dll"], "bin" cp "#{RUBY_DIR}/.ext/i386-mswin32_80/zlib.so", "lib/ruby/1.8/i386-mswin32" end unless File.exists? "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/rubygems.rb" Dir.chdir GEMS_DIR sh "../bin/ruby.exe", "setup.rb" rm_r "#{ROOT_DIR}/lib/ruby/gems/1.8/doc/rubygems-0.9.4" rescue nil Dir.chdir ROOT_DIR end end desc "Deletes all compiled and installed RubySFML files for a clean rebuild" task :cleanExtension do |t| dirs = [EXTENSION_DIR, "#{ROOT_DIR}/RubyOpenGL/gl", "#{ROOT_DIR}/RubyOpenGL/glu"] dirs.each {|d| rm Dir["#{d}/*.so"] rm Dir["#{d}/*.def"] rm Dir["#{d}/*.pdb"] rm Dir["#{d}/*.lib"] rm Dir["#{d}/*.exp"] rm Dir["#{d}/*.log"] rm Dir["#{d}/*.obj"] rm "#{d}/Makefile" rescue nil } rm "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80/RubySFML.so" rescue nil rm "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80/gl.so" rescue nil rm "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80/glu.so" rescue nil end desc "Builds the SFMLRuby extension" task :buildExtension => [:installRuby] do |t| unless File.exists? "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80/gl.so" and File.exists? "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80/glu.so" Dir.chdir "#{ROOT_DIR}/RubyOpenGL/gl" sh "../../bin/ruby.exe", "extconf.rb" sh "nmake" cp "gl.so", "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80" Dir.chdir "#{ROOT_DIR}/RubyOpenGL/glu" sh "../../bin/ruby.exe", "extconf.rb" sh "nmake" cp "glu.so", "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80" Dir.chdir ROOT_DIR end inc = "../../include" lib = "../../lib/vc2005" ext = "#{EXTENSION_DIR}/RubySFML.so" File.delete(ext) unless uptodate?(ext, Dir["../lib/vc2005/*.lib"]) rescue nil Dir.chdir EXTENSION_DIR sh "../bin/ruby.exe", "extconf-win.rb", "--with-SFML-include=#{inc}", "--with-SFML-lib=#{lib}" sh "nmake" cp "RubySFML.so", "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80" cp "RubySFML.rb", "#{ROOT_DIR}/lib/ruby/site_ruby/1.8" Dir.chdir ROOT_DIR end desc "Builds everything and runs test.rb" task :test => [:buildExtension] do |t| Dir.chdir "#{ROOT_DIR}/test" sh "../bin/ruby.exe", "test.rb" Dir.chdir ROOT_DIR end desc "Zips up the compiled binaries for distribution" task :package => [:buildExtension] do |t| sh "zip", "-r", "RubySFML.zip", "LICENSE.txt", "bin", "doc", "lib", "test" end desc "Deletes all files generated by this build" task :clean => [:cleanExtension, :cleanRuby] do |t| rm "RubySFML.zip" rescue nil end desc "Deletes and rebuilds everything" task :rebuild => [:clean, :package] do |t| rm "RubySFML.zip" rescue nil end desc "(Same as 'rake package')" task :default => [:package]