Files
2025-09-29 00:52:08 +02:00

126 lines
4.4 KiB
Ruby
Executable File

require 'rake/clean'
task :default => 'tutorial:test'
desc '"rake run" runs the tutorial as a desktop app'
task :run => 'tutorial:run'
cwd = File.dirname(__FILE__)
require 'rbconfig'
irbin = RbConfig::CONFIG['bindir']
ir = "#{irbin}/ir.exe"
raise "Could not find ir.exe" unless File.exist? ir
IR = ir
# TODO: Mono support -- (jimmysch) Moonlight only as Mono doesn't support WPF
CSC="#{ENV['SystemRoot']}\\Microsoft.NET\\Framework\\v3.5\\csc.exe"
CSC2="#{ENV['SystemRoot']}\\Microsoft.NET\\Framework\\v2.0.50727\\csc.exe"
if ENV["DLR_ROOT"]
root = ENV['DLR_ROOT']
# This is a dev environment. See http://wiki.github.com/ironruby/ironruby
BIN = "#{root}/Languages/Ruby/Scripts/bin"
RUBY_STDLIBS = "#{root}/Languages/Ruby/StdLib/ruby/1.9.1"
IRONRUBY_LIBS = "#{root}/Languages/Ruby/Libs"
GEMS = "#{root}/External.LCA_RESTRICTED/Languages/Ruby/ruby-1.8.6p368/lib/ruby/gems/1.8/gems"
chiron = "#{root}/Bin/Silverlight3Debug/Chiron.exe"
chiron = "#{root}/Bin/Silverlight3Release/Chiron.exe" unless File.exist?(chiron)
raise "Could not find Chiron.exe. Do you have a build of Silverlight? If not, type 'bsd'" unless File.exist?(chiron)
CHIRON = chiron
else
BIN = irbin
RUBY_STDLIBS = "#{irbin}/../lib/ruby/1.8"
IRONRUBY_LIBS = RUBY_STDLIBS
GEMS = "#{irbin}/../lib/IronRuby/gems/1.8/gems"
CHIRON = "#{irbin}/../silverlight/bin/Chiron.exe"
if File.exist?("#{GEMS}/minitest-1.4.2")
`#{BIN}/igem install minitest --version 1.4.2 --no-rdoc --no-ri`
end
end
CLEAN.include("app.xap", "deploy","app/Libs","app/Tutorials/*_tutorial.generated.html", "dlr.js")
CLOBBER.include("**/SplashScreen.dll","**/SplashScreen.g.resources","**/TutorialSamples.dll")
namespace 'tutorial' do
desc 'Copy any required Ruby libraries to a subfolder for use in the tutorial'
task :build => [:clean, "wpf/Splashscreen.dll","app/Tutorials/ironruby_files/TutorialSamples.dll"] do
cd cwd do
mkdir 'app/Libs' unless File.exist?('app/Libs')
cp "#{RUBY_STDLIBS}/erb.rb", "app/Libs"
%w(stringio.rb bigdecimal.rb).each{|i| cp "#{IRONRUBY_LIBS}/#{i}", 'app/Libs' }
cp_r "#{RUBY_STDLIBS}/rdoc", "app/Libs"
cp_r "#{GEMS}/minitest-1.4.2", "app/Libs"
cp "#{File.dirname(CHIRON)}/dlr.js", '.'
end
end
desc 'Preparing tutorial for deploying to ironruby.net/tutorial'
task :deploy => [:build, :generate_html] do
cd cwd do
`#{CHIRON} /s /d:app /z:app.xap`
rm_r 'deploy' if File.exist? 'deploy'
mkdir 'deploy'
%w(app.xap sl_tutorial.html console_tutorial.rb).each{|i| cp i, 'deploy'}
%w(test app).each{|i| cp_r i, 'deploy'}
Dir['app/Tutorials/*generated.html'].each{|i| cp i, 'deploy'}
cp "#{File.dirname(CHIRON)}/dlr.js", 'deploy'
end
puts "Deployment finished: see the 'deploy' directory"
end
desc 'Test the tutorial'
task :test => ['test:desktop', 'test:silverlight']
namespace 'test' do
desc "Test the tutorial on the desktop"
task :desktop => :build do
cd "#{cwd}/test" do
puts `#{IR} test_console.rb`
end
end
desc "Test the tutorial in Silverlight"
task :silverlight => :build do
`#{CHIRON} /n /b:sl_tutorial.html?test`
end
end
desc 'Generate HTML for tutorial'
task :generate_html => :clean do
cd(cwd){ `#{IR} html_tutorial.rb` }
end
desc 'Run the tutorial (desktop is default)'
task :run => :desktop
file "wpf/Splashscreen.dll" => "wpf/SplashScreen.cs" do
cd "#{cwd}/wpf" do
system "#{CSC} /t:library /r:WindowsBase.dll SplashScreen.cs"
system "#{IR} -e \"require 'SplashScreen.dll'; SplashScreen::SplashScreen.write_image_resource 'SplashScreen.png', 'SplashScreen.g.resources'\""
system "#{CSC} /t:library /r:WindowsBase.dll /resource:SplashScreen.g.resources SplashScreen.cs"
end
end
file "app/Tutorials/ironruby_files/TutorialSamples.dll" => "app/Tutorials/ironruby_files/Prime.cs" do
cd "#{cwd}/app/Tutorials/ironruby_files" do
system "#{CSC2} /t:library Prime.cs"
mv "Prime.dll","TutorialSamples.dll"
end
end
desc 'Run the tutorial as a desktop application'
task :desktop => ["wpf/Splashscreen.dll","app/Tutorials/ironruby_files/TutorialSamples.dll"] do
cd(cwd){ `#{IR} wpf_tutorial.rb` }
end
desc 'Run the tutorial in the web browser'
task :silverlight => :build do
cd(cwd){ `#{CHIRON} /n /b:sl_tutorial.html` }
end
end