filament 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +7 -0
- data/bin/filament +11 -0
- data/bin/filament-dbg +3 -0
- data/bin/filament-opt +3 -0
- data/bin/filament-test +3 -0
- data/bin/init +4 -0
- data/lib/filament/artifact.rb +49 -0
- data/lib/filament/context.rb +46 -0
- data/lib/filament/package/svn.rb +123 -0
- data/lib/filament/package.rb +326 -0
- data/lib/filament/platform.rb +79 -0
- data/lib/filament/plugins.rb +32 -0
- data/lib/filament/resolver.rb +91 -0
- data/lib/filament/target.rb +117 -0
- data/lib/filament/util/filelist2.rb +39 -0
- data/lib/filament/util/fileutils.rb +51 -0
- data/lib/filament/util/lazy_list.rb +74 -0
- data/lib/filament/workspace.rb +57 -0
- data/lib/filament.rb +199 -0
- data/lib/inflector.rb +124 -0
- data/lib/svn.rb +78 -0
- data/plugins/00util/lib/init.rb +47 -0
- data/plugins/01java/lib/filament/java/mixins/java_mixin.rb +19 -0
- data/plugins/01java/lib/filament/java/tools/compile.rb +41 -0
- data/plugins/01java/lib/filament/java/tools/execute.rb +37 -0
- data/plugins/01java/lib/filament/java/tools/jar.rb +59 -0
- data/plugins/01java/lib/filament/java/tools.rb +28 -0
- data/plugins/01java/lib/init.rb +1 -0
- data/plugins/02javame/lib/filament/javame/library.rb +16 -0
- data/plugins/02javame/lib/filament/javame/mixins/library_mixin.rb +144 -0
- data/plugins/02javame/lib/filament/javame/mixins/suite_mixin.rb +125 -0
- data/plugins/02javame/lib/filament/javame/platform.rb +105 -0
- data/plugins/02javame/lib/filament/javame/suite.rb +16 -0
- data/plugins/02javame/lib/filament/javame/tasks.rb +6 -0
- data/plugins/02javame/lib/filament/javame/tools/descriptor.rb +146 -0
- data/plugins/02javame/lib/filament/javame/tools/emulator.rb +36 -0
- data/plugins/02javame/lib/filament/javame/tools/external/mpp_sdk.rb +39 -0
- data/plugins/02javame/lib/filament/javame/tools/external/wtk.rb +60 -0
- data/plugins/02javame/lib/filament/javame/tools/preverifier.rb +43 -0
- data/plugins/02javame/lib/filament/javame/tools.rb +8 -0
- data/plugins/02javame/lib/init.rb +27 -0
- data/plugins/05push/lib/bluetooth.rb +66 -0
- data/plugins/05push/lib/filament/push/conduits/bluetooth_conduit.rb +25 -0
- data/plugins/05push/lib/filament/push/conduits/filter_conduit.rb +20 -0
- data/plugins/05push/lib/filament/push/conduits/scp_conduit.rb +35 -0
- data/plugins/05push/lib/filament/push.rb +21 -0
- data/plugins/05push/lib/init.rb +29 -0
- data/tests/build/artifact_name_test.rb +85 -0
- data/tests/build/artifact_test.rb +23 -0
- data/tests/gen/java/block_test.rb +42 -0
- data/tests/gen/java/callable_test.rb +23 -0
- data/tests/gen/java/method_test.rb +25 -0
- data/tests/gen/java/statement_test.rb +16 -0
- data/tests/java/tools_test.rb +8 -0
- data/tests/platform_test.rb +25 -0
- metadata +135 -0
data/lib/inflector.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
# The Inflector transforms words from singular to plural, class names to table names, modularized class names to ones without,
|
2
|
+
# and class names to foreign keys.
|
3
|
+
module Inflector
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def pluralize(word)
|
7
|
+
result = word.to_s.dup
|
8
|
+
|
9
|
+
if uncountable_words.include?(result.downcase)
|
10
|
+
result
|
11
|
+
else
|
12
|
+
plural_rules.each { |(rule, replacement)| break if result.gsub!(rule, replacement) }
|
13
|
+
result
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def singularize(word)
|
18
|
+
result = word.to_s.dup
|
19
|
+
|
20
|
+
if uncountable_words.include?(result.downcase)
|
21
|
+
result
|
22
|
+
else
|
23
|
+
singular_rules.each { |(rule, replacement)| break if result.gsub!(rule, replacement) }
|
24
|
+
result
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def camelize(lower_case_and_underscored_word)
|
29
|
+
lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
|
30
|
+
end
|
31
|
+
|
32
|
+
def underscore(camel_cased_word)
|
33
|
+
camel_cased_word.to_s.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z])/,'\1_\2').gsub(/([a-z\d])([A-Z])/,'\1_\2').downcase
|
34
|
+
end
|
35
|
+
|
36
|
+
def humanize(lower_case_and_underscored_word)
|
37
|
+
lower_case_and_underscored_word.to_s.gsub(/_/, " ").capitalize
|
38
|
+
end
|
39
|
+
|
40
|
+
def demodulize(class_name_in_module)
|
41
|
+
class_name_in_module.to_s.gsub(/^.*::/, '')
|
42
|
+
end
|
43
|
+
|
44
|
+
def tableize(class_name)
|
45
|
+
pluralize(underscore(class_name))
|
46
|
+
end
|
47
|
+
|
48
|
+
def classify(table_name)
|
49
|
+
camelize(singularize(table_name))
|
50
|
+
end
|
51
|
+
|
52
|
+
def foreign_key(class_name, separate_class_name_and_id_with_underscore = true)
|
53
|
+
Inflector.underscore(Inflector.demodulize(class_name)) +
|
54
|
+
(separate_class_name_and_id_with_underscore ? "_id" : "id")
|
55
|
+
end
|
56
|
+
|
57
|
+
def constantize(camel_cased_word)
|
58
|
+
camel_cased_word.split("::").inject(Object) do |final_type, part|
|
59
|
+
final_type = final_type.const_get(part)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
def uncountable_words #:doc
|
65
|
+
%w( equipment information rice money species series fish )
|
66
|
+
end
|
67
|
+
|
68
|
+
def plural_rules #:doc:
|
69
|
+
[
|
70
|
+
[/^(ox)$/i, '\1\2en'], # ox
|
71
|
+
[/([m|l])ouse$/i, '\1ice'], # mouse, louse
|
72
|
+
[/(matr|vert)ix|ex$/i, '\1ices'], # matrix, vertex, index
|
73
|
+
[/(x|ch|ss|sh)$/i, '\1es'], # search, switch, fix, box, process, address
|
74
|
+
[/([^aeiouy]|qu)ies$/i, '\1y'],
|
75
|
+
[/([^aeiouy]|qu)y$/i, '\1ies'], # query, ability, agency
|
76
|
+
[/(hive)$/i, '\1s'], # archive, hive
|
77
|
+
[/(?:([^f])fe|([lr])f)$/i, '\1\2ves'], # half, safe, wife
|
78
|
+
[/sis$/i, 'ses'], # basis, diagnosis
|
79
|
+
[/([ti])um$/i, '\1a'], # datum, medium
|
80
|
+
[/(p)erson$/i, '\1eople'], # person, salesperson
|
81
|
+
[/(m)an$/i, '\1en'], # man, woman, spokesman
|
82
|
+
[/(c)hild$/i, '\1hildren'], # child
|
83
|
+
[/(buffal|tomat)o$/i, '\1\2oes'], # buffalo, tomato
|
84
|
+
[/(bu)s$/i, '\1\2ses'], # bus
|
85
|
+
[/(alias)/i, '\1es'], # alias
|
86
|
+
[/(octop|vir)us$/i, '\1i'], # octopus, virus - virus has no defined plural (according to Latin/dictionary.com), but viri is better than viruses/viruss
|
87
|
+
[/(ax|cri|test)is$/i, '\1es'], # axis, crisis
|
88
|
+
[/s$/i, 's'], # no change (compatibility)
|
89
|
+
[/$/, 's']
|
90
|
+
]
|
91
|
+
end
|
92
|
+
|
93
|
+
def singular_rules #:doc:
|
94
|
+
[
|
95
|
+
[/(matr)ices$/i, '\1ix'],
|
96
|
+
[/(vert)ices$/i, '\1ex'],
|
97
|
+
[/^(ox)en/i, '\1'],
|
98
|
+
[/(alias)es$/i, '\1'],
|
99
|
+
[/([octop|vir])i$/i, '\1us'],
|
100
|
+
[/(cris|ax|test)es$/i, '\1is'],
|
101
|
+
[/(shoe)s$/i, '\1'],
|
102
|
+
[/(o)es$/i, '\1'],
|
103
|
+
[/(bus)es$/i, '\1'],
|
104
|
+
[/([m|l])ice$/i, '\1ouse'],
|
105
|
+
[/(x|ch|ss|sh)es$/i, '\1'],
|
106
|
+
[/(m)ovies$/i, '\1\2ovie'],
|
107
|
+
[/(s)eries$/i, '\1\2eries'],
|
108
|
+
[/([^aeiouy]|qu)ies$/i, '\1y'],
|
109
|
+
[/([lr])ves$/i, '\1f'],
|
110
|
+
[/(tive)s$/i, '\1'],
|
111
|
+
[/(hive)s$/i, '\1'],
|
112
|
+
[/([^f])ves$/i, '\1fe'],
|
113
|
+
[/(^analy)ses$/i, '\1sis'],
|
114
|
+
[/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i, '\1\2sis'],
|
115
|
+
[/([ti])a$/i, '\1um'],
|
116
|
+
[/(p)eople$/i, '\1\2erson'],
|
117
|
+
[/(m)en$/i, '\1an'],
|
118
|
+
[/(s)tatus$/i, '\1\2tatus'],
|
119
|
+
[/(c)hildren$/i, '\1\2hild'],
|
120
|
+
[/(n)ews$/i, '\1\2ews'],
|
121
|
+
[/s$/i, '']
|
122
|
+
]
|
123
|
+
end
|
124
|
+
end
|
data/lib/svn.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'memoize'
|
4
|
+
|
5
|
+
class SVN
|
6
|
+
include Memoize
|
7
|
+
|
8
|
+
attr_reader :uri
|
9
|
+
|
10
|
+
def initialize(uri)
|
11
|
+
@uri = uri.gsub(/\/$/,'')
|
12
|
+
|
13
|
+
[:info, 'valid?'.to_sym, :ls].each do |m|
|
14
|
+
memoize(m)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def valid?
|
19
|
+
return system("svn ls #{@uri} &> /dev/null")
|
20
|
+
end
|
21
|
+
|
22
|
+
def tag
|
23
|
+
return @uri.match(/(.*)(\/tags)(\/[.^\/]*$)/)[1]
|
24
|
+
end
|
25
|
+
|
26
|
+
def tag?
|
27
|
+
return !tag.nil?
|
28
|
+
end
|
29
|
+
|
30
|
+
def branch
|
31
|
+
return @uri.match(/(.*)(\/branches)(\/[.^\/]*$)/)[1]
|
32
|
+
end
|
33
|
+
|
34
|
+
def branch?
|
35
|
+
return !branch.nil?
|
36
|
+
end
|
37
|
+
|
38
|
+
def trunk?
|
39
|
+
return !@uri.match(/(.*)(\/trunk$)/).nil?
|
40
|
+
end
|
41
|
+
|
42
|
+
def info
|
43
|
+
info_p = IO.popen("svn info #{@uri}")
|
44
|
+
return YAML.load(info_p)
|
45
|
+
end
|
46
|
+
|
47
|
+
def ls
|
48
|
+
return IO.popen("svn ls #{@uri}").readlines.collect do |s|
|
49
|
+
s.chomp
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def root
|
54
|
+
return info['Repository Root']
|
55
|
+
end
|
56
|
+
|
57
|
+
def revision
|
58
|
+
return info['Revision']
|
59
|
+
end
|
60
|
+
|
61
|
+
def name
|
62
|
+
return info['Name']
|
63
|
+
end
|
64
|
+
|
65
|
+
def type
|
66
|
+
return info['Node Kind'].to_sym
|
67
|
+
end
|
68
|
+
|
69
|
+
def path
|
70
|
+
return @uri.split("#{root}/").last
|
71
|
+
end
|
72
|
+
|
73
|
+
def children
|
74
|
+
ls.collect do |child|
|
75
|
+
SVN.new("#{@uri}/#{child}")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class Filament::Util
|
2
|
+
package_actions = {
|
3
|
+
:list => Proc.new { |packages|
|
4
|
+
packages.each do |package|
|
5
|
+
package.list
|
6
|
+
end
|
7
|
+
},
|
8
|
+
:update => Proc.new { |packages|
|
9
|
+
packages.each do |package|
|
10
|
+
package.update
|
11
|
+
end
|
12
|
+
},
|
13
|
+
:status => Proc.new { |packages|
|
14
|
+
packages.each do |package|
|
15
|
+
package.status
|
16
|
+
end
|
17
|
+
},
|
18
|
+
:commit => Proc.new { |packages|
|
19
|
+
packages.each do |package|
|
20
|
+
package.commit
|
21
|
+
end
|
22
|
+
},
|
23
|
+
#Display the targets and dependencies, then exit.
|
24
|
+
:targets => Proc.new { |packages|
|
25
|
+
packages.each do |package|
|
26
|
+
puts " #{package.full_name}"
|
27
|
+
package.targets.each do |target|
|
28
|
+
puts " #{target.uri}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
target_actions = {
|
35
|
+
:prereqs => Proc.new { |targets|
|
36
|
+
targets.each do |target|
|
37
|
+
puts " #{target.uri}"
|
38
|
+
target.deps.each do |dep|
|
39
|
+
puts " #{dep.uri}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
Application::PACKAGE_ACTIONS.merge!(package_actions)
|
46
|
+
Application::TARGET_ACTIONS.merge!(target_actions)
|
47
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Filament::Java::Mixins
|
2
|
+
module JavaMixin
|
3
|
+
def init_java
|
4
|
+
end
|
5
|
+
|
6
|
+
def classpath(target)
|
7
|
+
cp = @classpath
|
8
|
+
all_deps = TargetList.new
|
9
|
+
all_deps << target.flattened_deps
|
10
|
+
all_deps << target.weak_deps
|
11
|
+
all_deps.each do |d|
|
12
|
+
jar = d[:jar]
|
13
|
+
# only add the jar if this dependecy has one
|
14
|
+
cp << jar unless jar.nil?
|
15
|
+
end
|
16
|
+
return cp
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Filament::Java::Tools
|
2
|
+
class Compile
|
3
|
+
attr_writer :sources, :output_dir, :source_version, :target_version,
|
4
|
+
:classpath, :bootclasspath
|
5
|
+
|
6
|
+
def initialize(sources=[], output_dir=nil)
|
7
|
+
init(sources, output_dir)
|
8
|
+
yield self if block_given?
|
9
|
+
compile unless @sources.empty? or @output_dir.nil?
|
10
|
+
end
|
11
|
+
|
12
|
+
# loads initial, default values
|
13
|
+
def init(sources, output_dir)
|
14
|
+
@sources = sources
|
15
|
+
@output_dir = output_dir
|
16
|
+
@bootclasspath = []
|
17
|
+
@classpath = []
|
18
|
+
@source_version = nil
|
19
|
+
@target_version = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
# executes compile
|
23
|
+
def compile
|
24
|
+
classpath = join_paths(@classpath)
|
25
|
+
bootclasspath = join_paths(@bootclasspath)
|
26
|
+
output_dir = fix_paths(@output_dir)
|
27
|
+
sources = fix_paths(@sources).join(' ')
|
28
|
+
c = "#{JAVAC}"
|
29
|
+
c << " -classpath #{classpath}" unless @classpath.empty?
|
30
|
+
c << " -bootclasspath #{bootclasspath}" \
|
31
|
+
unless @bootclasspath.empty?
|
32
|
+
c << " -source #{@source_version}" unless @source_version.nil?
|
33
|
+
c << " -target #{@target_version}" unless @target_version.nil?
|
34
|
+
|
35
|
+
c << " -d #{output_dir}"
|
36
|
+
c << " #{sources}"
|
37
|
+
|
38
|
+
sys c
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Filament::Java::Tools
|
2
|
+
class Execute
|
3
|
+
attr_writer :classpath, :properties, :mainclass, :args
|
4
|
+
|
5
|
+
def initialize(mainclass=nil)
|
6
|
+
init(mainclass)
|
7
|
+
yield self if block_given?
|
8
|
+
execute unless @mainclass.nil?
|
9
|
+
end
|
10
|
+
|
11
|
+
def init(mainclass)
|
12
|
+
@mainclass = mainclass
|
13
|
+
@properties = {}
|
14
|
+
@classpath = []
|
15
|
+
@args = []
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute
|
19
|
+
c = "#{JAVA} "
|
20
|
+
|
21
|
+
classpath = join_paths(@classpath)
|
22
|
+
c << "-cp #{classpath} " unless classpath.nil?
|
23
|
+
|
24
|
+
unless @properties.nil?
|
25
|
+
@properties.each do |k,v|
|
26
|
+
c << "-D#{k.to_s}=#{v.to_s} "
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
c << @mainclass << " "
|
31
|
+
|
32
|
+
c << @args.to_a.join
|
33
|
+
|
34
|
+
sys c
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Filament::Java::Tools
|
2
|
+
class Jar
|
3
|
+
attr_writer :jar_file, :base_dir, :manifest, :index, :update
|
4
|
+
attr_accessor :package_files
|
5
|
+
|
6
|
+
def initialize(jar_file=nil, base_dir=nil)
|
7
|
+
@jar_file = jar_file
|
8
|
+
@base_dir = base_dir
|
9
|
+
@package_files = []
|
10
|
+
@manifest = nil
|
11
|
+
@index = false
|
12
|
+
@update = false
|
13
|
+
|
14
|
+
yield self if block_given?
|
15
|
+
|
16
|
+
raise "jar_file cannot be nil." if @jar_file.nil?
|
17
|
+
|
18
|
+
jar
|
19
|
+
end
|
20
|
+
|
21
|
+
def jar
|
22
|
+
c = "#{JAR} "
|
23
|
+
c << 'v' if $verbose
|
24
|
+
c << 'f'
|
25
|
+
if @update
|
26
|
+
c << 'u'
|
27
|
+
else
|
28
|
+
c << 'c'
|
29
|
+
end
|
30
|
+
c << 'm' unless @manifest.nil?
|
31
|
+
c << " #{fix_paths(@jar_file)}"
|
32
|
+
c << " #{fix_paths(@manifest)}" unless @manifest.nil? or @manifest.empty?
|
33
|
+
c << " -C #{fix_paths(@base_dir)} ." unless @base_dir.nil?
|
34
|
+
c << " #{fix_paths(@package_files)}" unless @package_files.empty?
|
35
|
+
|
36
|
+
sys c
|
37
|
+
|
38
|
+
if @index
|
39
|
+
c = "#{JAR} i #{fix_paths(@jar_file)}"
|
40
|
+
sys c
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.extract(jar_file, output_dir)
|
45
|
+
cd output_dir do |dir|
|
46
|
+
if windows?
|
47
|
+
# using jar is too slow
|
48
|
+
c = "#{JAR} xf #{fix_paths(jar_file)}"
|
49
|
+
sys c
|
50
|
+
else
|
51
|
+
c = 'unzip '
|
52
|
+
c << '-q ' unless $verbose
|
53
|
+
c << "-o #{fix_paths(jar_file)}"
|
54
|
+
sys c
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'filament/platform'
|
2
|
+
|
3
|
+
module Filament
|
4
|
+
module Java
|
5
|
+
module Tools
|
6
|
+
def self.bin(path=nil)
|
7
|
+
java_home_env = ENV['JAVA_HOME']
|
8
|
+
unless java_home_env.nil?
|
9
|
+
java_bin = "#{java_home_env}/bin"
|
10
|
+
return java_bin if path.nil?
|
11
|
+
return Filament::Platform.to_exec_path("#{java_bin}/#{path}")
|
12
|
+
else
|
13
|
+
# assume it's in the path
|
14
|
+
return path
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
JAVAC = Tools.bin('javac')
|
19
|
+
JAVA = Tools.bin('java')
|
20
|
+
JAR = Tools.bin('jar')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
require 'filament/java/tools/jar'
|
26
|
+
require 'filament/java/tools/execute'
|
27
|
+
require 'filament/java/tools/compile'
|
28
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'filament/java/tools'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'filament/javame/mixins/library_mixin'
|
2
|
+
|
3
|
+
module Filament::JavaME
|
4
|
+
class Library < Filament::Artifact
|
5
|
+
include JavaME::Mixins::LibraryMixin
|
6
|
+
|
7
|
+
def init
|
8
|
+
init_library
|
9
|
+
end
|
10
|
+
|
11
|
+
def build_artifact
|
12
|
+
define_library(self)
|
13
|
+
invoke_tasks
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
require 'filament/java/mixins/java_mixin'
|
2
|
+
|
3
|
+
module Filament::JavaME::Mixins
|
4
|
+
module LibraryMixin
|
5
|
+
include Java::Mixins::JavaMixin
|
6
|
+
|
7
|
+
attr_writer :package_deps
|
8
|
+
attr_reader :srcs, :resources, :manifest, :platform, :cldc_version
|
9
|
+
|
10
|
+
def jar_path
|
11
|
+
return "#{output_dir}/#{@name}.jar"
|
12
|
+
end
|
13
|
+
|
14
|
+
def init_library
|
15
|
+
init_java
|
16
|
+
@srcs = FileList2.new
|
17
|
+
@resources = FileList2.new
|
18
|
+
@manifest = nil
|
19
|
+
@package_deps = false
|
20
|
+
@platform = JavaME::Tools.tags_for($target_platform)
|
21
|
+
@cldc_version = JavaME::Tools.cldc_version_for($target_platform)
|
22
|
+
@bootclasspath = JavaME::Tools.classpath_for($target_platform)
|
23
|
+
@classpath = []
|
24
|
+
|
25
|
+
@append_entries = {}
|
26
|
+
@custom_entries = {}
|
27
|
+
|
28
|
+
@jad_config = Proc.new do |d|
|
29
|
+
d.append_entries(@append_entries)
|
30
|
+
d.custom_entries(@custom_entries)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def custom_entries(h)
|
35
|
+
h.keys.each do |key|
|
36
|
+
@custom_entries[key] = h[key]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def append_entries(h)
|
41
|
+
h.keys.each do |key|
|
42
|
+
@append_entries[key] ||= []
|
43
|
+
|
44
|
+
entry = h[key]
|
45
|
+
|
46
|
+
if entry.is_a?(Array)
|
47
|
+
@append_entries[key] += entry
|
48
|
+
else
|
49
|
+
@append_entries[key] << entry
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def define_library(target)
|
55
|
+
compiled_dir = directory(:compiled)
|
56
|
+
preverified_dir = directory(:preverified)
|
57
|
+
package_dir = directory(:package)
|
58
|
+
|
59
|
+
cp = classpath(target)
|
60
|
+
# prune empty entries from src
|
61
|
+
@srcs.compact!
|
62
|
+
|
63
|
+
if @package_deps
|
64
|
+
target.flattened_deps.each do |dep|
|
65
|
+
j = dep[:jar]
|
66
|
+
unless j.nil?
|
67
|
+
@resources.include(j)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
jar_deps = @srcs + @resources + directories + cp + @bootclasspath
|
73
|
+
|
74
|
+
desc = target.package.descriptor
|
75
|
+
if File.exist?(desc)
|
76
|
+
jar_deps << desc
|
77
|
+
end
|
78
|
+
|
79
|
+
unless @manifest.nil?
|
80
|
+
jar_deps += @manifest
|
81
|
+
end
|
82
|
+
|
83
|
+
jar_task = file(jar_path => jar_deps) do |t|
|
84
|
+
package_files = FileList.new
|
85
|
+
unless @srcs.empty?
|
86
|
+
# compile to the unverified directory
|
87
|
+
Java::Tools::Compile.new(@srcs, compiled_dir) do |c|
|
88
|
+
c.source_version = 1.2
|
89
|
+
c.target_version = 1.1
|
90
|
+
c.classpath = cp
|
91
|
+
c.bootclasspath = @bootclasspath
|
92
|
+
end
|
93
|
+
|
94
|
+
# preverify to the preverified directory
|
95
|
+
JavaME::Tools.preverify(compiled_dir, preverified_dir) do |j|
|
96
|
+
j.cldc_version = @cldc_version
|
97
|
+
j.classpath = cp + @bootclasspath
|
98
|
+
end
|
99
|
+
|
100
|
+
# package up verified classes
|
101
|
+
package_files.add("#{preverified_dir}/*")
|
102
|
+
end
|
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
|
+
Java::Tools::Jar.extract(f, package_dir)
|
111
|
+
else
|
112
|
+
cp_r_if(f, package_dir) { |p| !(p =~ /\.svn$/) }
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# remove svn files we may have copied
|
117
|
+
exclude_files = FileList.new
|
118
|
+
exclude_files.clear_exclude
|
119
|
+
exclude_files.add("#{package_dir}/META-INF")
|
120
|
+
exclude_files.add("#{package_dir}/**/.svn")
|
121
|
+
|
122
|
+
exclude_files.each do |file|
|
123
|
+
rm_rf(file)
|
124
|
+
end
|
125
|
+
|
126
|
+
Java::Tools::Jar.new(jar_path, FileList.new(package_dir)) do |jar|
|
127
|
+
jar.manifest = @manifest
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
target.output :tag => [:default, :jar],
|
132
|
+
:output => jar_path,
|
133
|
+
:deployable => true
|
134
|
+
|
135
|
+
target.output :tag => :jad_config,
|
136
|
+
:output => @jad_config,
|
137
|
+
:deployable => false
|
138
|
+
|
139
|
+
@tasks << jar_task
|
140
|
+
|
141
|
+
return jar_task
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|