require 'fileutils' require 'erb' require 'rbconfig' namespace :app do namespace :build do task :osx => :environment do unless Bowline::Library.ready? Rake::Task["libs:setup"].invoke end config = Bowline.configuration assets_path = File.join(Bowline.assets_path, "osx") build_path = File.join(APP_ROOT, "build") app_path = File.join(build_path, "#{config.name}.app") FileUtils.rm_rf(app_path) contents_path = File.join(app_path, "Contents") FileUtils.mkdir_p(contents_path) FileUtils.cd(contents_path) do config_name = config.name config_id = config.id config_icon = "#{config.name}.icns" info_plist_path = File.join(assets_path, "Info.plist.erb") info_plist = ERB.new(File.read(info_plist_path)).result(binding) File.open("Info.plist", "w+") {|f| f.write info_plist } FileUtils.mkdir("Resources") FileUtils.cd("Resources") do FileUtils.mkdir("English.lproj") # Make icon makeicns = File.join(assets_path, "makeicns") if config.icon makeicns_in = File.join(APP_ROOT, config.icon) else makeicns_in = File.join(assets_path, "bowline.png") end makeicns_out = File.expand_path(File.join("English.lproj", config_icon)) puts "#{makeicns} -in #{makeicns_in} -out #{makeicns_out}" `#{makeicns} -in #{makeicns_in} -out #{makeicns_out}` # Copy App dirs = Dir[File.join(APP_ROOT, '**')] dirs.delete(build_path) dirs.delete(File.join(APP_ROOT, 'log')) dirs.delete(File.join(APP_ROOT, 'tmp')) dirs.delete(File.join(APP_ROOT, 'db', 'migrate')) dirs.delete_if {|i| i =~ /\.svn|\.DS_Store/ } FileUtils.cp_r(dirs, '.') # Copy Bowline bowline_dir = File.join("vendor", "bowline") FileUtils.rm_rf(bowline_dir) FileUtils.cp_r( Pathname.new(Bowline.lib_path).realpath, bowline_dir ) # Copy RB libs - TODO FileUtils.mkdir_p(config.rubylib_path) FileUtils.cp_r(Bowline::Library.rubylib_path, config.rubylib_path) end # Copy Binary FileUtils.mkdir("MacOS") FileUtils.cp( Bowline::Library.desktop_path, File.join("MacOS", config.name) ) end FileUtils.chmod_R(0755, app_path) FileUtils.chmod(0644, File.join(contents_path, "Info.plist")) end task :linux => :environment do # Build debian package raise "Unimplemented" end task :win32 => :environment do # Use Inno Setup raise "Unimplemented" end end desc "Build app" task :build do Rake::Task["app:build:#{Bowline::Platform.type}"].invoke end end