[macruby-changes] [699] MacRuby/trunk/lib

source_changes at macosforge.org source_changes at macosforge.org
Sun Nov 2 20:51:29 PST 2008


Revision: 699
          http://trac.macosforge.org/projects/ruby/changeset/699
Author:   rich at infoether.com
Date:     2008-11-02 20:51:29 -0800 (Sun, 02 Nov 2008)
Log Message:
-----------
use new configuration object and don't rebuild executable if its done...faster rebuild of app

Modified Paths:
--------------
    MacRuby/trunk/lib/hotcocoa/application_builder.rb
    MacRuby/trunk/lib/hotcocoa.rb

Modified: MacRuby/trunk/lib/hotcocoa/application_builder.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa/application_builder.rb	2008-11-03 04:50:08 UTC (rev 698)
+++ MacRuby/trunk/lib/hotcocoa/application_builder.rb	2008-11-03 04:51:29 UTC (rev 699)
@@ -4,32 +4,58 @@
   
   class ApplicationBuilder
     
+    class Configuration
+      attr_reader :name, :version, :icon, :resources, :sources, :info_string, :load
+      
+      def initialize(file)
+        require 'yaml'
+        yml = YAML.load(File.read(file))
+        @name = yml["name"]
+        @load = yml["load"]
+        @version = yml["version"] || "1.0"
+        @icon = yml["icon"]
+        @info_string = yml["info_string"]
+        @sources = yml["sources"] || []
+        @resources = yml["resources"] || []
+        @overwrite = yml["overwrite"] == true ? true : false
+        @secure = yml["secure"] == true ? true : false
+      end
+      
+      def overwrite?
+        @overwrite
+      end
+
+      def secure?
+        @secure
+      end
+      
+      def icon_exist?
+        @icon ? File.exist?(@icon) : false
+      end
+
+    end
+    
     ApplicationBundlePackage = "APPL????"
     
     attr_accessor :name, :load_file, :sources, :overwrite, :icon, :version, :info_string, :secure, :resources
     
-    def self.build(build_options)
-      build_options.each do |key, value|
-        build_options[key.intern] = value if key.respond_to?(:intern)
+    def self.build(config)
+      unless config.kind_of?(Configuration)
+        puts "Your Rakefile needs to be updated.  Please copy the Rakefile from"
+        exit
       end
-      if build_options[:file]
-        require 'yaml'
-        build_options = YAML.load(File.read(build_options[:file]))
-      end
       builder = new
-      builder.secure = (build_options[:secure] == true)
-      builder.name = build_options[:name]
-      builder.load_file = build_options[:load]
-      builder.icon = build_options[:icon] if build_options[:icon] && File.exist?(build_options[:icon])
-      builder.version = build_options[:version] || "1.0"
-      builder.info_string = build_options[:info_string]
-      builder.overwrite = (build_options.include?(:overwrite) ? build_options[:overwrite] : true)
-      sources = build_options[:sources] || []
-      sources.each do |source|
+      builder.secure = config.secure?
+      builder.name = config.name
+      builder.load_file = config.load
+      builder.icon = config.icon if config.icon_exist?
+      builder.version = config.version
+      builder.info_string = config.info_string
+      builder.overwrite = config.overwrite?
+      config.sources.each do |source|
         builder.add_source_path source
       end
-      resources = build_options[:resources] || []
-      resources.each do |resource|
+      config.resources.each do |resource|
         builder.add_resource_path resource
       end
       builder.build
@@ -72,26 +98,22 @@
     private
     
       def check_for_bundle_root
-        if File.exist?(bundle_root)
-          if overwrite?
-            `rm -rf #{bundle_root}`
-          else
-            puts "Error, #{bundle_root} already exists, use :overwrite => true to remove"
-          end
+        if File.exist?(bundle_root) && overwrite?
+          `rm -rf #{bundle_root}`
         end
       end
     
       def build_bundle_structure
-        Dir.mkdir(bundle_root)
-        Dir.mkdir(contents_root)
-        Dir.mkdir(macos_root)
-        Dir.mkdir(resources_root)
+        Dir.mkdir(bundle_root) unless File.exist?(bundle_root)
+        Dir.mkdir(contents_root) unless File.exist?(contents_root)
+        Dir.mkdir(macos_root) unless File.exist?(macos_root)
+        Dir.mkdir(resources_root) unless File.exist?(resources_root)
       end
       
       def write_bundle_files
         write_pkg_info_file
         write_info_plist_file
-        build_executable
+        build_executable unless File.exist?(File.join(macos_root, objective_c_executable_file))
         write_ruby_main
       end
       
@@ -177,7 +199,7 @@
           }
         end
         archs = RUBY_ARCH.include?('ppc') ? '-arch ppc' : '-arch i386 -arch x86_64'
-        puts `cd "#{macos_root}" && gcc main.m -o #{name.gsub(/ /, '')} #{archs} -framework MacRuby -framework Foundation -fobjc-gc-only`
+        puts `cd "#{macos_root}" && gcc main.m -o #{objective_c_executable_file} #{archs} -framework MacRuby -framework Foundation -fobjc-gc-only`
         File.unlink(objective_c_source_file)
       end
       
@@ -223,6 +245,10 @@
         File.join(contents_root, "PkgInfo")
       end
       
+      def objective_c_executable_file
+        name.gsub(/ /, '')
+      end
+      
       def objective_c_source_file
         File.join(macos_root, "main.m")
       end

Modified: MacRuby/trunk/lib/hotcocoa.rb
===================================================================
--- MacRuby/trunk/lib/hotcocoa.rb	2008-11-03 04:50:08 UTC (rev 698)
+++ MacRuby/trunk/lib/hotcocoa.rb	2008-11-03 04:51:29 UTC (rev 699)
@@ -1,4 +1,4 @@
-framework 'cocoa'
+framework 'Cocoa'
 
 module HotCocoa
   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20081102/571692c6/attachment.html>


More information about the macruby-changes mailing list