diff --git a/Tools/Rake/Rakefile b/Tools/Rake/Rakefile index bca10e943..a66044776 100644 --- a/Tools/Rake/Rakefile +++ b/Tools/Rake/Rakefile @@ -14,7 +14,7 @@ spec = Gem::Specification.new do |s| s.platform = Gem::Platform::RUBY s.author = '280 North, Inc.' s.email = 'feedback @nospam@ 280north.com' - s.homepage = 'cappuccino.org' + s.homepage = 'http://cappuccino.org/' s.summary = "Objective-J extensions to Rake." s.name = 'objective-j' s.version = "0.7.0" diff --git a/Tools/Rake/lib/objective-j.rb b/Tools/Rake/lib/objective-j.rb index e8d52b2a2..cd02131ff 100644 --- a/Tools/Rake/lib/objective-j.rb +++ b/Tools/Rake/lib/objective-j.rb @@ -56,3 +56,51 @@ def file_d(*args, &block) file fileTask.name => fileDirectory end + +def copy_resources(files, destination, &block) + + copied_resources = [] + + files.each do |resource| + baselength = File.basename(resource).length + + if File.directory? resource + FileList[resource + '/**/*'].each do |subresource| + if File.file? subresource + + copied_resource = File.join(destination, subresource[(resource.length - baselength) .. -1]) + + custom_resource = true + custom_resource = block.call(subresource, copied_resource) if block_given? + + if custom_resource == true + file_d copied_resource => [subresource] do + cp_r(subresource, copied_resource) + end + + copied_resources << copied_resource + elsif custom_resource + copied_resources << custom_resource + end + end + end + else + copied_resource = File.join(destination, File.basename(resource)) + + custom_resource = true + custom_resource = block.call(resource, copied_resource) if block_given? + + if custom_resource == true + file_d copied_resource => [resource] do + cp_r(resource, copied_resource) + end + + copied_resources << copied_resource + elsif custom_resource + copied_resources << custom_resource + end + end + end + + return copied_resources +end diff --git a/Tools/Rake/lib/objective-j/bundletask.rb b/Tools/Rake/lib/objective-j/bundletask.rb index 778cd8980..988507bc9 100644 --- a/Tools/Rake/lib/objective-j/bundletask.rb +++ b/Tools/Rake/lib/objective-j/bundletask.rb @@ -189,6 +189,7 @@ module ObjectiveJ required_attribute :summary required_attribute :identifier + required_attribute :nib2cib_flags, [] required_attribute :platforms, [Platform::ObjJ] required_attribute :type, Bundle::Type::Application @@ -217,6 +218,7 @@ module ObjectiveJ # attribute_alias_singular :executable, :executables attribute_alias_singular :author, :authors attribute_alias_singular :flag, :flags + attribute_alias_singular :nib2cib_flag, :nib2cib_flags attribute_alias_singular :platform, :platforms # attribute_alias_singular :require_path, :require_paths # attribute_alias_singular :test_file, :test_files @@ -367,20 +369,35 @@ module ObjectiveJ def define validate - + resources_path = File.join(build_path, 'Resources') - copied_resources = [] - # create file tasks for copied resources - resources.each do |resource| + copied_resources = copy_resources resources, resources_path do |resource, copied_resource| + extname = File.extname(copied_resource) - copied_resource = File.join(resources_path, File.basename(resource)) + if extname == '.xib' || extname == '.nib' + copied_resource = File.join(File.dirname(copied_resource), File.basename(copied_resource, extname)) + '.cib' - file_d copied_resource => [resource] do - cp_r(resource, resources_path) + file_d copied_resource => [resource] do + IO.popen("nib2cib #{resource} #{copied_resource} #{nib2cib_flags.join(' ') || ''}") do |nib2cib| + nib2cib.sync = true + + while str = nib2cib.gets + puts str + end + end + end + + copied_resource + else + extensionless = File.join(File.dirname(copied_resource), File.basename(copied_resource, extname)) + + if extname == '.cib' and (File.exists?(extensionless + '.xib') or File.exists?(extensionless + '.nib')) + false + else + true + end end - - copied_resources << copied_resource end info_plist_path = build_path + '/Info.plist'