Rakefile in rhodes-1.2.1 vs Rakefile in rhodes-1.2.2
- old
+ new
@@ -1,15 +1,431 @@
-$:.unshift(File.join(File.dirname(__FILE__), 'lib'))
-require 'lib/rhodes.rb'
-require 'rubygems'
-require 'hoe'
+require 'find'
+require 'erb'
-Hoe.spec 'rhodes' do |p|
- p.developer 'Rhomobile Dev', 'dev@rhomobile.com'
- p.extra_deps = [
- ['activesupport', '>=2.2.2'],
- ['templater', '>=0.5.0'],
- ["rhodes-framework", "= #{Rhodes::VERSION}"],
- ["rhodes-generator", "= #{Rhodes::VERSION}"],
- ["rhodes-build", "= #{Rhodes::VERSION}"]
- ]
+chdir File.dirname(__FILE__)
+
+require 'lib/build/jake.rb'
+
+load 'platform/bb/build/bb.rake'
+load 'platform/android/build/android.rake'
+load 'platform/iphone/rbuild/iphone.rake'
+load 'platform/wm/build/wm.rake'
+load 'platform/linux/tasks/linux.rake'
+
+namespace "config" do
+ task :common do
+ $startdir = File.dirname(__FILE__)
+ buildyml = 'rhobuild.yml'
+
+ buildyml = ENV["RHOBUILD"] unless ENV["RHOBUILD"].nil?
+ $config = Jake.config(File.open(buildyml))
+ if RUBY_PLATFORM =~ /(win|w)32$/
+ $all_files_mask = "*.*"
+ else
+ $all_files_mask = "*"
+ end
+ if $app_path.nil? #if we are called from the rakefile directly, this wont be set
+ #load the apps path and config
+
+ $app_path = $config["env"]["app"]
+ $app_config = YAML::load_file($app_path + "/build.yml")
+
+ end
+ Jake.set_bbver($app_config["bbver"].to_s)
+ end
+end
+
+def copy_assets(asset)
+
+ dest = File.join($srcdir,'apps/public')
+
+ cp_r asset + "/.", dest, :remove_destination => true
+
+end
+
+
+
+def common_bundle_start(startdir, dest)
+ app = $app_path
+ rhodeslib = "lib/framework"
+
+ rm_rf $srcdir
+ mkdir_p $srcdir
+ mkdir_p dest if not File.exists? dest
+ mkdir_p File.join($srcdir,'apps')
+
+
+
+ chdir rhodeslib
+ Dir.glob("*").each { |f|
+ src = f
+ cp_r src,dest
+ }
+ chdir dest
+ Dir.glob("**/rhodes-framework.rb").each {|f| rm f}
+ Dir.glob("**/erb.rb").each {|f| rm f}
+ Dir.glob("**/find.rb").each {|f| rm f}
+ $excludelib.each {|e| Dir.glob(e).each {|f| rm f}}
+
+ chdir startdir
+ #throw "ME"
+ cp_r app + '/app',File.join($srcdir,'apps')
+ cp_r app + '/public', File.join($srcdir,'apps')
+ cp app + '/rhoconfig.txt', File.join($srcdir,'apps')
+
+ copy_assets($assetfolder) if ($assetfolder and File.exists? $assetfolder)
+end
+
+def create_manifest
+ dir = File.join($srcdir, 'apps')
+ fname = "config.rb"
+ fappManifest = File.new( File.join(dir,'app_manifest.txt'), "w")
+
+ Find.find(dir) do |path|
+ if File.basename(path) == fname
+
+ relPath = path[dir.length+1, File.dirname(path).length-1] #relative path
+ relPath = relPath[0, relPath.length-3] #remove .rb extension
+ fappManifest.puts( relPath )
+
+ end
+ end
+
+ fappManifest.close()
+
+end
+
+namespace "build" do
+ namespace "bundle" do
+ task :xruby do
+ #needs $config, $srcdir, $excludelib, $bindir
+ app = $app_path
+ startdir = pwd
+ dest = $srcdir
+ xruby = File.dirname(__FILE__) + '/res/build-tools/xruby-0.3.3.jar'
+
+ common_bundle_start(startdir,dest)
+
+ if not $config["excludedirs"].nil?
+ if $config["excludedirs"].has_key?($config["platform"])
+ chdir File.join($srcdir, 'apps')
+
+ excl = $config["excludedirs"][$config["platform"]]
+ excl.each do |mask|
+ Dir.glob(mask).each {|f| rm_rf f}
+ end
+ end
+ end
+ chdir startdir
+
+ #create manifest
+ create_manifest
+
+ #"compile ERB"
+ ext = ".erb"
+ Find.find($srcdir) do |path|
+ if File.extname(path) == ext
+ rbText = ERB.new( IO.read(path) ).src
+ newName = File.basename(path).sub('.erb','_erb.rb')
+ fName = File.join(File.dirname(path), newName)
+ frb = File.new(fName, "w")
+ frb.write( rbText )
+ frb.close()
+ end
+ end
+
+
+ chdir $bindir
+ puts `java -jar "#{xruby}" -v -c RhoBundle 2>&1`
+ unless $? == 0
+ puts "Error interpreting ruby code"
+ exit 1
+ end
+ chdir startdir
+ chdir $srcdir
+
+ Dir.glob("**/*.rb") { |f| rm f }
+ Dir.glob("**/*.erb") { |f| rm f }
+
+ puts `jar uf ../RhoBundle.jar apps/#{$all_files_mask}`
+ unless $? == 0
+ puts "Error creating Rhobundle.jar"
+ exit 1
+ end
+ chdir startdir
+ end
+
+ task :noxruby do
+ app = $app_path
+ rhodeslib = File.dirname(__FILE__) + "/lib/framework"
+ compileERB = "lib/build/compileERB/default.rb"
+ compileRB = "lib/build/compileRB/compileRB.rb"
+ startdir = pwd
+ dest = $srcdir + "/lib"
+
+ common_bundle_start(startdir,dest)
+
+ create_manifest
+
+ cp compileERB, $srcdir
+ puts "Running default.rb"
+
+ puts `#{$rubypath} -I#{rhodeslib} #{$srcdir}/default.rb`
+ unless $? == 0
+ puts "Error interpreting erb code"
+ exit 1
+ end
+
+ rm "#{$srcdir}/default.rb"
+
+ cp compileRB, $srcdir
+ puts "Running compileRB"
+ puts `#{$rubypath} -I#{rhodeslib} #{$srcdir}/compileRB.rb`
+ unless $? == 0
+ puts "Error interpreting ruby code"
+ exit 1
+ end
+
+ chdir $srcdir
+ Dir.glob("**/*.rb") { |f| rm f }
+ Dir.glob("**/*.erb") { |f| rm f }
+
+ chdir startdir
+
+ cp_r "res/build-tools/db", $srcdir
+ end
+ end
+end
+
+
+# Simple rakefile that loads subdirectory 'rhodes' Rakefile
+# run "rake -T" to see list of available tasks
+
+#desc "Get versions"
+task :get_version do
+ bbver = "unknown"
+ iphonever = "unknown"
+ #symver = "unknown"
+ wmver = "unknown"
+ androidver = "unknown"
+
+
+ File.open("rhobuild.yml","r") do |f|
+ file = f.read
+ if file.match(/version: (\d+\.\d+\.\d+)/)
+ bbver = $1
+ end
+ end
+
+ File.open("platform/iphone/Info.plist","r") do |f|
+ file = f.read
+ if file.match(/CFBundleVersion<\/key>\s+<string>(\d+\.\d+\.*\d*)<\/string>/)
+ iphonever = $1
+ end
+ end
+
+ # File.open("platform/symbian/build/release.properties","r") do |f|
+ # file = f.read
+ # major = ""
+ # minor = ""
+ # build = ""
+ #
+ # if file.match(/release\.major=(\d+)/)
+ # major = $1
+ # end
+ # if file.match(/release\.minor=(\d+)/)
+ # minor = $1
+ # end
+ # if file.match(/build\.number=(\d+)/)
+ # build = $1
+ # end
+ #
+ # symver = major + "." + minor + "." + build
+ # end
+
+ File.open("platform/android/Rhodes/AndroidManifest.xml","r") do |f|
+ file = f.read
+ if file.match(/versionName="(\d+\.\d+\.*\d*)"/)
+ androidver = $1
+ end
+ end
+
+ rhodesver = "unknown"
+ rbuildver = "unknown"
+ rframever = "unknown"
+ rgenver = "unknown"
+
+ File.open("rhodes/rhodes/lib/rhodes.rb","r") do |f|
+ file = f.read
+ if file.match(/VERSION = '(\d+\.\d+\.*\d*)'/)
+ rhodesver = $1
+ end
+ end
+
+ File.open("lib/build/version.rb","r") do |f|
+ file = f.read
+ if file.match(/VERSION = '(\d+\.\d+\.*\d*)'/)
+ rbuildver = $1
+ end
+ end
+
+ File.open("lib/framework/version.rb","r") do |f|
+ file = f.read
+ if file.match(/VERSION = '(\d+\.\d+\.*\d*)'/)
+ rframever = $1
+ end
+ end
+
+ File.open("rhodes/rhodes-generator/lib/version.rb","r") do |f|
+ file = f.read
+ if file.match(/VERSION = '(\d+\.\d+\.*\d*)'/)
+ rgenver = $1
+ end
+ end
+
+
+ puts "Versions:"
+ puts " Blackberry: " + bbver
+ puts " iPhone: " + iphonever
+ #puts " Symbian: " + symver
+ puts " WinMo: " + wmver
+ puts " Android: " + androidver
+ puts " Rhodes: " + rhodesver
+ puts " Rhodes Build: " + rbuildver
+ puts " Rhodes Framework: " + rframever
+ puts " Rhodes Generator: " + rgenver
+end
+
+#desc "Set version"
+task :set_version, [:version] do |t,args|
+ throw "You must pass in version" if args.version.nil?
+ ver = args.version.split(/\./)
+ major = ver[0]
+ minor = ver[1]
+ build = ver[2]
+
+ throw "Invalid version format. Must be in the format of: major.minor.build" if major.nil? or minor.nil? or build.nil?
+
+ verstring = major+"."+minor+"."+build
+ origfile = ""
+
+ File.open("rhobuild.yml","r") { |f| origfile = f.read }
+ File.open("rhobuild.yml","w") do |f|
+ f.write origfile.gsub(/version: (\d+\.\d+\.\d+)/, "version: #{verstring}")
+ end
+
+ File.open("rhodes/rhodes-generator/generators/templates/application/build.yml","r") { |f| origfile = f.read }
+ File.open("rhodes/rhodes-generator/generators/templates/application/build.yml","w") do |f|
+ f.write origfile.gsub(/version: (\d+\.\d+\.\d+)/, "version: #{verstring}")
+ end
+
+ File.open("platform/iphone/Info.plist","r") { |f| origfile = f.read }
+ File.open("platform/iphone/Info.plist","w") do |f|
+ f.write origfile.gsub(/CFBundleVersion<\/key>(\s+)<string>(\d+\.\d+\.*\d*)<\/string>/, "CFBundleVersion</key>\n <string>#{verstring}</string>")
+ end
+
+ # File.open("platform/symbian/build/release.properties","r") { |f| origfile = f.read }
+ # File.open("platform/symbian/build/release.properties","w") do |f|
+ # origfile.gsub!(/release\.major=(\d+)/,"release.major=#{major}")
+ # origfile.gsub!(/release\.minor=(\d+)/,"release.minor=#{minor}")
+ # origfile.gsub!(/build\.number=(\d+)/,"build.number=#{build}")
+ # f.write origfile
+ # end
+
+ File.open("platform/android/Rhodes/AndroidManifest.xml","r") { |f| origfile = f.read }
+ File.open("platform/android/Rhodes/AndroidManifest.xml","w") do |f|
+ origfile.match(/versionCode="(\d+)"/)
+ vercode = $1.to_i + 1
+ origfile.gsub!(/versionCode="(\d+)"/,"versionCode=\"#{vercode}\"")
+ origfile.gsub!(/versionName="(\d+\.\d+\.*\d*)"/,"versionName=\"#{verstring}\"")
+
+ f.write origfile
+ end
+
+ ["rhodes/rhodes/lib/rhodes.rb",
+ "lib/build/version.rb",
+ "lib/framework/version.rb",
+ "lib/framework/rhodes.rb",
+ "rhodes/rhodes-generator/lib/version.rb"].each do |versionfile|
+
+ File.open(versionfile,"r") { |f| origfile = f.read }
+ File.open(versionfile,"w") do |f|
+ origfile.gsub!(/VERSION = '(\d+\.\d+\.*\d*)'/, "VERSION = '#{verstring}'")
+ origfile.gsub!(/DBVERSION = '(\d+\.\d+\.*\d*)'/, "DBVERSION = '#{verstring}'")
+ f.write origfile
+ end
+ end
+ Rake::Task[:get_version].invoke
+end
+
+
+
+namespace "buildall" do
+ namespace "bb" do
+# desc "Build all jdk versions for blackberry"
+ task :production => "config:common" do
+ $config["env"]["paths"].each do |k,v|
+ if k.to_s =~ /^4/
+ puts "BUILDING VERSION: #{k}"
+ $app_config["bbver"] = k
+ Jake.reconfig($config)
+
+ #reset all tasks used for building
+ Rake::Task["config:bb"].reenable
+ Rake::Task["build:bb:rhobundle"].reenable
+ Rake::Task["build:bb:rhodes"].reenable
+ Rake::Task["build:bb:rubyvm"].reenable
+ Rake::Task["device:bb:dev"].reenable
+ Rake::Task["device:bb:production"].reenable
+ Rake::Task["device:bb:rhobundle"].reenable
+ Rake::Task["package:bb:dev"].reenable
+ Rake::Task["package:bb:production"].reenable
+ Rake::Task["package:bb:rhobundle"].reenable
+ Rake::Task["package:bb:rhodes"].reenable
+ Rake::Task["package:bb:rubyvm"].reenable
+ Rake::Task["device:bb:production"].reenable
+ Rake::Task["clean:bb:preverified"].reenable
+
+ Rake::Task["clean:bb:preverified"].invoke
+ Rake::Task["device:bb:production"].invoke
+ end
+ end
+
+ end
+ end
+end
+
+task :gem do
+ puts "Removing old gem"
+ rm_rf Dir.glob("*.gem")
+ puts "Copying Rakefile"
+ cp "Rakefile", "rakefile.rb"
+
+ puts "Building manifest"
+ out = ""
+ Dir.glob("**/*") {|fname| out << fname + "\n" if File.file? fname}
+ File.open("Manifest.txt",'w') {|f| f.write(out)}
+
+ puts "Loading gemspec"
+ spec = Gem::Specification.load('rhodes.gemspec')
+
+ puts "Building gem"
+ gemfile = Gem::Builder.new(spec).build
+end
+
+task :tasks do
+ Rake::Task.tasks.each {|t| puts t.to_s}
+end
+
+task :switch_app => "config:common" do
+ rhobuildyml = File.dirname(__FILE__) + "/rhobuild.yml"
+ if File.exists? rhobuildyml
+ config = YAML::load_file(rhobuildyml)
+ else
+ puts "Cant find rhobuild.yml"
+ exit 1
+ end
+ config["env"]["app"] = $app_path.gsub(/\\/,"/")
+ File.open( rhobuildyml, 'w' ) do |out|
+ YAML.dump( config, out )
+ end
end