filament 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/CHANGELOG +26 -0
  2. data/lib/filament/os.rb +77 -0
  3. data/lib/filament/package.rb +76 -26
  4. data/lib/filament/platform.rb +81 -78
  5. data/lib/filament/target.rb +50 -11
  6. data/lib/filament/util/filelist2.rb +10 -2
  7. data/lib/filament/util/fileutils.rb +1 -1
  8. data/lib/filament.rb +48 -24
  9. data/plugins/00util/lib/filament/plugins/util.rb +7 -7
  10. data/plugins/01java/lib/filament/java/mixins/classpath.rb +11 -0
  11. data/plugins/01java/lib/filament/java/tools/compile.rb +3 -1
  12. data/plugins/01java/lib/filament/java/tools/execute.rb +3 -1
  13. data/plugins/01java/lib/filament/java/tools/jar.rb +16 -12
  14. data/plugins/01java/lib/filament/java/tools/proguard.rb +2 -0
  15. data/plugins/01java/lib/filament/java/tools.rb +18 -18
  16. data/plugins/01java/lib/filament/plugins/java.rb +1 -1
  17. data/plugins/02javame/lib/filament/javame/library.rb +79 -16
  18. data/plugins/02javame/lib/filament/javame/suite.rb +75 -16
  19. data/plugins/02javame/lib/filament/javame/tasks/library_task.rb +190 -0
  20. data/plugins/02javame/lib/filament/javame/tools/emulator.rb +1 -1
  21. data/plugins/02javame/lib/filament/javame/tools/external/mpp_sdk.rb +0 -1
  22. data/plugins/02javame/lib/filament/javame/tools/external/wtk.rb +0 -1
  23. data/plugins/02javame/lib/filament/javame/{platform.rb → tools/platform.rb} +6 -5
  24. data/plugins/02javame/lib/filament/javame/tools/preverifier.rb +1 -1
  25. data/plugins/02javame/lib/filament/javame/tools.rb +1 -1
  26. data/plugins/02javame/lib/init.rb +6 -19
  27. data/plugins/04spin/lib/filament/spin/sji.rb +36 -0
  28. data/plugins/04spin/lib/filament/spin/tasks/sji_task.rb +86 -0
  29. data/plugins/04spin/lib/init.rb +4 -0
  30. data/plugins/04spin/lib/spin/sji.rb +339 -0
  31. data/plugins/05push/lib/filament/plugins/push.rb +3 -3
  32. data/plugins/10svn/lib/filament/plugins/svn.rb +3 -3
  33. data/plugins/10svn/lib/filament/scm/svn.rb +7 -13
  34. data/plugins/10svn/lib/init.rb +1 -1
  35. data/plugins/11http/lib/filament/plugins/http.rb +6 -0
  36. data/plugins/11http/lib/filament/scm/http.rb +67 -0
  37. data/plugins/11http/lib/init.rb +5 -0
  38. metadata +34 -8
  39. data/lib/filament/artifact.rb +0 -49
  40. data/plugins/01java/lib/filament/java/mixins/java_mixin.rb +0 -19
  41. data/plugins/02javame/lib/filament/javame/mixins/library_mixin.rb +0 -181
  42. data/plugins/02javame/lib/filament/javame/mixins/suite_mixin.rb +0 -114
@@ -0,0 +1,190 @@
1
+ require 'rake'
2
+
3
+ module Filament::JavaME::Tasks
4
+ class LibraryTask < Filament::Task
5
+ def initialize
6
+ @bootclasspath = []
7
+ @classpath = []
8
+ @cldc_version = nil
9
+ @defaultmidlet_class = nil
10
+ @is_suite = false
11
+ @jad_proc = Proc.new {}
12
+ @me_configuration = 'CLDC-1.0'
13
+ @me_profile = 'MIDP-2.0'
14
+ @midlets= []
15
+ @name = nil
16
+ @output_dir = nil
17
+ @proguard_proc = nil
18
+ @resources = []
19
+ @should_obfuscate = false # TODO should be based on $build_type
20
+ @srcs = []
21
+ @suite_icon = nil
22
+ @suite_name = nil
23
+ @suite_vendor = nil
24
+ @suite_version = nil
25
+ @task_deps = []
26
+ @working_dir = nil
27
+
28
+ instance_variables.each do |var_sym|
29
+ attr_name = var_sym.gsub(/^@/,'')
30
+
31
+ self.class.send(:define_method, attr_name.to_sym) do
32
+ instance_variable_get(var_sym)
33
+ end
34
+
35
+ self.class.send(:define_method, "#{attr_name}=".to_sym) do |value|
36
+ instance_variable_set(var_sym, value)
37
+ end
38
+ end
39
+
40
+ yield self if block_given?
41
+
42
+ define
43
+ end
44
+
45
+ def jar_path
46
+ return "#{output_dir}/#{@name}.jar"
47
+ end
48
+
49
+ def jad_path
50
+ return "#{output_dir}/#{name}.jad"
51
+ end
52
+
53
+ def tasks
54
+ tasks = []
55
+ tasks << @jar_task
56
+ tasks << @jad_task if suite?
57
+
58
+ return tasks
59
+ end
60
+
61
+ def invoke
62
+ tasks.each{|t| t.invoke}
63
+ end
64
+
65
+ def verify
66
+ end
67
+
68
+ def define
69
+ verify
70
+
71
+ directory output_dir
72
+ compiled_dir = work(:compiled)
73
+ preverified_dir = work(:preverified)
74
+ package_dir = work(:package)
75
+ proguard_dir = work(:proguard)
76
+ proguard_preverified_dir = work(:proguard_preverified)
77
+
78
+ unless @srcs.empty?
79
+ task compiled_dir => @task_deps + @srcs + @classpath + @bootclasspath do
80
+ # compile to the unverified directory
81
+ Filament::Java::Tools::Compile.new(@srcs, compiled_dir) do |c|
82
+ c.source_version = 1.2
83
+ c.target_version = 1.1
84
+ c.classpath = @classpath
85
+ c.bootclasspath = @bootclasspath
86
+ end
87
+ end
88
+
89
+ task preverified_dir => [compiled_dir] + @bootclasspath + @classpath do
90
+ # preverify to the preverified directory
91
+ Filament::JavaME::Tools::preverify(compiled_dir, preverified_dir) do |j|
92
+ j.cldc_version = @cldc_version
93
+ j.classpath = @classpath + @bootclasspath
94
+ end
95
+ end
96
+ end
97
+
98
+ task package_dir => [preverified_dir] + @resources do
99
+ package_files = FileList.new
100
+
101
+ # package up verified classes
102
+ package_files.add("#{preverified_dir}/*")
103
+
104
+ # package up resources
105
+ package_files.add(*@resources) unless @resources.empty?
106
+ package_files.each do |f|
107
+ p = Pathname.new(f)
108
+
109
+ if p.extname == '.jar'
110
+ Filament::Java::Tools::Jar.extract(f, package_dir)
111
+ else
112
+ Filament::cp_r_if(f, package_dir) { |p| !(p =~ /\.svn$/) }
113
+ end
114
+ end
115
+ end
116
+
117
+ # obfuscate, if necessary
118
+ if obfuscate?
119
+ task proguard_dir => [package_dir] + @classpath + @bootclasspath do
120
+ Filament::Java::Tools::proguard(package_dir, proguard_dir) do |o|
121
+ (@classpath + @bootclasspath).each do |libraryjar|
122
+ o.libraryjars libraryjar
123
+ end
124
+
125
+ @proguard_proc.call(o) unless @proguard_proc.nil?
126
+
127
+ o.defaultpackage "''"
128
+ o.dontusemixedcaseclassnames
129
+ o.allowaccessmodification
130
+ o.keep 'public class * extends javax.microedition.midlet.MIDlet'
131
+ end
132
+ end
133
+
134
+ task proguard_preverified_dir => [proguard_dir] + @classpath + @bootclasspath do
135
+ FileList.new("#{proguard_dir}/*").each do |f|
136
+ cp_r_if(f, proguard_preverified_dir) { |p| !(p =~ /\.class$/) }
137
+ end
138
+
139
+ Filament::JavaME::Tools::preverify(proguard_dir, proguard_preverified_dir) do |j|
140
+ j.cldc_version = @cldc_version
141
+ j.classpath = @classpath + @bootclasspath
142
+ end
143
+ end
144
+
145
+ @jar_task = file jar_path => [proguard_preverified_dir, output_dir] do |t|
146
+ Filament::Java::Tools::Jar.new(jar_path, FileList.new(proguard_preverified_dir))
147
+ end
148
+ else
149
+ @jar_task = file jar_path => [package_dir, output_dir] do |t|
150
+ Filament::Java::Tools::Jar.new(jar_path, FileList.new(package_dir))
151
+ end
152
+ end
153
+
154
+ @jad_task = file jad_path => [@jar_task, output_dir] do |t|
155
+ full_config = Proc.new do |d|
156
+ d.suite_version = @suite_version
157
+ d.suite_name = @suite_name
158
+ d.suite_icon = @suite_icon
159
+ d.suite_vendor = @suite_vendor
160
+ d.me_configuration = @me_configuration
161
+ d.me_profile = @me_profile
162
+
163
+ @midlets.each {|midlet| d.add_midlet(midlet)}
164
+
165
+ @jad_proc.call(d)
166
+ end
167
+
168
+ manifest_path = "#{working_dir}/MANIFEST.MF"
169
+ Filament::JavaME::Tools::write_manifest(manifest_path, &full_config)
170
+
171
+ Filament::Java::Tools::Jar.new(jar_path) do |jar|
172
+ jar.update = true
173
+ jar.manifest = manifest_path
174
+ end
175
+
176
+ Filament::JavaME::Tools::write_jad(jad_path, jar_path, &full_config)
177
+ end
178
+ end
179
+
180
+ def suite?
181
+ return @is_suite
182
+ end
183
+
184
+ private
185
+
186
+ def obfuscate?
187
+ return @should_obfuscate
188
+ end
189
+ end
190
+ end
@@ -1,5 +1,5 @@
1
1
  require 'filament/javame/tools'
2
- require 'filament/javame/platform'
2
+ require 'filament/javame/tools/platform'
3
3
 
4
4
  module Filament::JavaME::Tools
5
5
  class << self
@@ -1,4 +1,3 @@
1
- require 'filament/javame/platform'
2
1
  require 'filament/javame/tools/emulator'
3
2
 
4
3
  module Filament::JavaME::Tools
@@ -1,4 +1,3 @@
1
- require 'filament/javame/platform'
2
1
  require 'filament/javame/tools/emulator'
3
2
  require 'filament/javame/tools/preverifier'
4
3
 
@@ -7,23 +7,24 @@ module Filament::JavaME
7
7
 
8
8
  class << self
9
9
  def platform(model)
10
- p = TARGET_PLATFORMS[model]
11
- raise "Unknown target platform #{model}" if p.nil?
10
+ p = Filament::Platform.find(:name => model)
11
+ raise "Unknown target platform: #{model}" if p.nil?
12
+ raise "Not a JavaME platform: #{p.inspect}, #{p.tags.inspect}" unless p.tags.include?(:javame)
12
13
  return p
13
14
  end
14
15
 
15
16
  def tags_for(model)
16
- return platform(model)[:tags].clone
17
+ return platform(model).tags.clone
17
18
  end
18
19
 
19
20
  def cldc_version_for(model)
20
- return platform(model)[:cldc_version]
21
+ return platform(model).javame_configuration_version
21
22
  end
22
23
 
23
24
  def classpath_for(model)
24
25
  cldc_version = cldc_version_for(model)
25
26
 
26
- base_classpath = platform(model)[:classpath]
27
+ base_classpath = platform(model).classpath
27
28
 
28
29
  classpath = []
29
30
  classpath += base_classpath unless base_classpath.nil?
@@ -1,4 +1,4 @@
1
- require 'filament/javame/platform'
1
+ require 'filament/javame/tools/platform'
2
2
 
3
3
  module Filament::JavaME::Tools
4
4
  class << self
@@ -2,7 +2,7 @@ module Filament::JavaME
2
2
  module Tools; end
3
3
  end
4
4
 
5
+ require 'filament/javame/tools/platform'
5
6
  require 'filament/javame/tools/descriptor'
6
-
7
7
  require 'filament/javame/tools/external/wtk'
8
8
  require 'filament/javame/tools/external/mpp_sdk'
@@ -1,27 +1,14 @@
1
1
  require 'pathname'
2
2
 
3
- require 'filament/platform'
3
+ require 'filament/os'
4
4
 
5
- module Filament::JavaME
6
- HOME = Pathname.new(__FILE__).parent.parent.realpath
7
- end
8
5
  require 'filament/javame/tools'
9
6
  require 'filament/javame/tasks'
10
7
 
11
- def default_emulator
12
- return :MppSdk if darwin?
13
- return :Wtk
14
- end
8
+ include Filament::OS
15
9
 
16
- def default_preverifier
17
- return :MppSdk if darwin?
18
- return :Wtk
19
- end
10
+ emulator = ENV['JAVAME_EMULATOR'] || :MppSdk
11
+ Filament::JavaME::Tools::Emulator::set_type(emulator.to_sym)
20
12
 
21
- module Filament::JavaME
22
- emulator = ENV['JAVAME_EMULATOR'] || default_emulator
23
- Tools::Emulator::set_type(emulator.to_sym)
24
-
25
- preverifier = ENV['JAVAME_PREVERIFIER'] || default_preverifier
26
- Tools::Preverifier::set_type(preverifier.to_sym)
27
- end
13
+ preverifier = ENV['JAVAME_PREVERIFIER'] || darwin? ? :MppSdk : :Wtk
14
+ Filament::JavaME::Tools::Preverifier::set_type(preverifier.to_sym)
@@ -0,0 +1,36 @@
1
+ require 'yaml'
2
+ require 'filament/java/mixins/classpath'
3
+ require 'filament/spin/tasks/sji_task'
4
+
5
+ module Filament::Spin
6
+ class SJI < Filament::Target
7
+ include Filament::Java::Mixins::Classpath
8
+
9
+ attr_reader :srcs
10
+ attr_accessor2 :java_gen_package
11
+
12
+ def init
13
+ @srcs = Filament::FileList2.new
14
+ end
15
+
16
+ def define
17
+ @sji = Filament::Spin::Tasks::SJITask.new do |sji|
18
+ define_sji(sji)
19
+ end
20
+
21
+ output :tag => :java, :output => @sji.java_files, :tasks => @sji.tasks
22
+ output :tag => :spin, :output => @sji.spin_files, :tasks => @sji.tasks
23
+ output :tag => :jad_proc do |d|
24
+ d.append_entries('spin.bindings' => @sji.bindings.collect {|binding| "#{binding.keys}: #{binding.values}"}.join(';'))
25
+ end
26
+ end
27
+
28
+ def define_sji(sji)
29
+ sji.working_dir = working_dir
30
+ sji.srcs = srcs
31
+ sji.java_gen_package = @java_gen_package
32
+ sji.java_gen_dir = working_dir(:java_gen)
33
+ sji.spin_gen_dir = working_dir(:spin_gen)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,86 @@
1
+ require 'filament/javame/tasks/library_task'
2
+ require 'spin/sji'
3
+ require 'rake'
4
+
5
+ module Filament::Spin
6
+ module Tasks
7
+ class SJITask < Filament::Task
8
+ attr_accessor :java_gen_package, :working_dir, :java_gen_dir, :spin_gen_dir, :srcs
9
+
10
+ attr_reader :sji, :bindings
11
+
12
+ def initialize
13
+ @srcs = []
14
+ @sji = nil
15
+ @working_dir = nil
16
+
17
+ @java_gen_dir = nil
18
+ @spin_gen_dir = nil
19
+
20
+ @java_gen_package = nil
21
+
22
+ @bindings = []
23
+
24
+ @spin_gen_dir = nil
25
+ @java_gen_dir = nil
26
+
27
+ yield self if block_given?
28
+
29
+ define
30
+ end
31
+
32
+ def verify
33
+ raise 'java_gen_package must be set' if @java_gen_package.nil?
34
+
35
+ raise 'spin_gen_dir must be set' if @spin_gen_dir.nil?
36
+ raise 'java_gen_dir must be set' if @java_gen_dir.nil?
37
+ raise 'working_dir must be set' if @working_dir.nil?
38
+
39
+ raise 'srcs must not be empty' if @srcs.empty?
40
+ end
41
+
42
+ def tasks
43
+ return [@gen_spin_task, @gen_java_task]
44
+ end
45
+
46
+ def java_files
47
+ return @gen_java_files
48
+ end
49
+
50
+ def spin_files
51
+ return @gen_spin_files
52
+ end
53
+
54
+ def define
55
+ verify
56
+
57
+ @sji = Spin::SpinJavaInterface.new
58
+
59
+ srcs.each do |src|
60
+ @sji.load(src)
61
+ end
62
+
63
+ impls = []
64
+
65
+ @sji.prototypes.each do |prototype|
66
+ impls << s = Spin::JavaMethodImpl.new(prototype)
67
+ s.java_impl_package = @java_gen_package
68
+ @bindings << { (prototype.anonymous? ? '' : prototype.name) => s.full_class_name }
69
+ end
70
+
71
+ @gen_spin_files = impls.collect{|impl| impl.spin_file(spin_gen_dir)}
72
+ @gen_java_files = impls.collect{|impl| impl.java_file(java_gen_dir)}
73
+
74
+ directory spin_gen_dir
75
+ @gen_spin_task = task spin_gen_dir => srcs do
76
+ impls.each{|impl| impl.write_spin(spin_gen_dir)}
77
+ end
78
+
79
+ directory java_gen_dir
80
+ @gen_java_task = task java_gen_dir => srcs do
81
+ impls.each{|impl| impl.write_java(java_gen_dir)}
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,4 @@
1
+ require 'filament/spin/sji'
2
+
3
+ module Filament::Spin
4
+ end