flak 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/.yardoc/checksums +28 -0
- data/.yardoc/objects/root.dat +0 -0
- data/.yardoc/proxy_types +0 -0
- data/.yardopts +1 -0
- data/Architecture.md +152 -0
- data/Documenting.md +2 -0
- data/MayaModules.md +2 -0
- data/README.md +173 -0
- data/flak.gemspec +6 -3
- data/lib/core_ext/hash.rb +82 -0
- data/lib/core_ext/string.rb +41 -0
- data/lib/flak.rb +20 -12
- data/lib/flak/rake/errors.rb +28 -0
- data/lib/flak/rake/file_actions.rb +70 -0
- data/lib/flak/rake/os.rb +18 -0
- data/lib/flak/rake/target.rb +47 -69
- data/lib/flak/rake/templates/cpp.rb +211 -0
- data/lib/flak/rake/templates/delight.rb +168 -0
- data/lib/flak/rake/templates/doc.rb +106 -0
- data/lib/flak/rake/templates/environment.rb +189 -0
- data/lib/flak/rake/templates/gl.rb +20 -0
- data/lib/flak/rake/templates/mac.rb +29 -0
- data/lib/flak/rake/templates/max.rb +22 -0
- data/lib/flak/rake/templates/maya.rb +172 -0
- data/lib/flak/rake/templates/maya_app.rb +97 -0
- data/lib/flak/rake/templates/maya_plugin.rb +93 -0
- data/lib/flak/rake/templates/merge_engine.rb +45 -0
- data/lib/flak/rake/templates/nuke.rb +60 -0
- data/lib/flak/rake/templates/release.rb +101 -0
- data/lib/flak/rake/templates/shell.rb +54 -0
- data/lib/flak/thor/cli.rb +5 -0
- data/lib/flak/thor/generate.rb +88 -144
- data/lib/flak/thor/target_file.rb +36 -17
- data/lib/flak/thor/templates/INSTALL.tt +3 -3
- data/lib/flak/thor/templates/Rakefile.tt +4 -2
- data/lib/flak/thor/templates/{cpp.tt → config/cpp.yml.tt} +6 -8
- data/lib/flak/thor/templates/{delight.tt → config/delight.yml.tt} +1 -1
- data/lib/flak/thor/templates/{doc.tt → config/doc.yml.tt} +0 -0
- data/lib/flak/thor/templates/{env.tt → config/environment.yml.tt} +6 -7
- data/lib/flak/thor/templates/{gl.tt → config/gl.yml.tt} +0 -0
- data/lib/flak/thor/templates/{mac.tt → config/mac.yml.tt} +0 -0
- data/lib/flak/thor/templates/{max.tt → config/max.yml.tt} +0 -0
- data/lib/flak/thor/templates/{maya.tt → config/maya.yml.tt} +9 -1
- data/lib/flak/thor/templates/{maya_app.tt → config/maya_app.yml.tt} +0 -2
- data/lib/flak/thor/templates/{maya_plugin.tt → config/maya_plugin.yml.tt} +0 -2
- data/lib/flak/thor/templates/config/nuke.yml.tt +3 -0
- data/lib/flak/thor/templates/config/release.yml.tt +3 -0
- data/lib/flak/thor/templates/config/shell.yml.tt +1 -0
- data/lib/flak/thor/templates/doc/content/install_guide.txt.tt +71 -25
- data/lib/flak/thor/templates/maya_plugin_cpp.tt +37 -0
- data/lib/flak/thor/templates/name_cpp.tt +6 -0
- data/lib/flak/thor/templates/name_h.tt +34 -0
- data/lib/flak/thor/templates/product.sh.tt +2 -2
- data/lib/flak/thor/wizard.rb +28 -15
- data/lib/flak/version.rb +1 -1
- data/target.jpg +0 -0
- metadata +127 -94
- data/README.textile +0 -59
- data/lib/flak/rake/base.rb +0 -316
- data/lib/flak/rake/cpp.rb +0 -139
- data/lib/flak/rake/delight.rb +0 -121
- data/lib/flak/rake/doc.rb +0 -69
- data/lib/flak/rake/gl.rb +0 -10
- data/lib/flak/rake/mac.rb +0 -23
- data/lib/flak/rake/max.rb +0 -29
- data/lib/flak/rake/maya.rb +0 -142
- data/lib/flak/rake/maya_app.rb +0 -45
- data/lib/flak/rake/maya_plugin.rb +0 -47
- data/lib/flak/rake/mod.rb +0 -46
- data/lib/flak/rake/nuke.rb +0 -29
- data/lib/flak/thor/templates/mod.tt +0 -0
- data/lib/flak/thor/templates/nuke.tt +0 -2
@@ -0,0 +1,168 @@
|
|
1
|
+
module Flak::Template
|
2
|
+
|
3
|
+
|
4
|
+
module Delight
|
5
|
+
module Settings
|
6
|
+
|
7
|
+
extend Flak::Template::MergeEngine
|
8
|
+
|
9
|
+
def self.extended target
|
10
|
+
infuse target
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def self.settings_modifications settings
|
15
|
+
mods = Hash.new
|
16
|
+
|
17
|
+
bind = binding()
|
18
|
+
|
19
|
+
Flak::Errors.assert("settings[:delight_location]", "String", bind,__FILE__)
|
20
|
+
Flak::Errors.assert("settings[:delight_version]", "String", bind,__FILE__)
|
21
|
+
Flak::Errors.assert("settings[:build_directory]", "String", bind,__FILE__)
|
22
|
+
|
23
|
+
v_loc = File.join( "#{settings[:delight_location]}-#{settings[:delight_version]}" )
|
24
|
+
|
25
|
+
|
26
|
+
mods[:lib_paths] = [ File.join( v_loc ,"lib") ]
|
27
|
+
|
28
|
+
mods[:include_paths] = [ File.join( v_loc ,"include")]
|
29
|
+
|
30
|
+
mods[:shader_compiler] = File.join( v_loc, "bin","shaderdl")
|
31
|
+
|
32
|
+
mods[:shader_build_directory] = settings[:build_directory]
|
33
|
+
|
34
|
+
mods[:libs] = ["3delight"]
|
35
|
+
|
36
|
+
mods[:shader_include_paths] = [ File.join( v_loc, "maya","rsl")]
|
37
|
+
|
38
|
+
mods
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
# all shader build files
|
45
|
+
def shader_files()
|
46
|
+
@settings[:sl_files].collect { |f| shader_file(f) }
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
# path to shader build: e.g. /hq/dev/jtools/build/2009.3/darwin/debug/goosebump.sdl
|
51
|
+
def shader_file(source)
|
52
|
+
bind = binding()
|
53
|
+
Flak::Errors.assert("@settings[:shader_build_directory]", "String", bind,__FILE__)
|
54
|
+
|
55
|
+
File.join(@settings[:shader_build_directory], source.gsub("/src/","/").ext('sdl'))
|
56
|
+
end
|
57
|
+
|
58
|
+
def shader_release_path(file)
|
59
|
+
bind = binding()
|
60
|
+
Flak::Errors.assert("@settings[:path_to_revision]", "String", bind,__FILE__)
|
61
|
+
|
62
|
+
File.join(@settings[:path_to_revision] , 'delight','shader', file.pathmap('%f'))
|
63
|
+
end
|
64
|
+
|
65
|
+
def delight_shader_compile_cmd(dest,src)
|
66
|
+
bind = binding()
|
67
|
+
Flak::Errors.assert("@settings[:shader_compiler]", "String", bind,__FILE__)
|
68
|
+
|
69
|
+
include_path_string = (@settings[:sl_files].collect {|f| f.pathmap('%d')}.uniq | ( @settings[:shader_include_paths] || [] )).collect { |el| "-I#{el.to_s}" }.join(" ")
|
70
|
+
shader_type_string = "-DSHADER_TYPE_#{src.pathmap('%d').pathmap('%f')}"
|
71
|
+
"#{@settings[:shader_compiler]} #{shader_type_string} #{include_path_string} -d #{dest} #{src}"
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
def delight_clean_cmd
|
76
|
+
"rm -f #{shader_files}"
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
module Tasks
|
89
|
+
def self.extended target
|
90
|
+
task_factory target
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
def self.task_factory target
|
95
|
+
settings = target.settings
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
files = settings[:sl_files]
|
100
|
+
unless files.nil?
|
101
|
+
|
102
|
+
files.each do |f|
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
# file tasks to build shader from sources
|
107
|
+
######################################################
|
108
|
+
target_shader = target.shader_file(f)
|
109
|
+
file target_shader => f do |t|
|
110
|
+
dest = target.make_directory_for(target_shader)
|
111
|
+
sh delight_shader_compile_cmd(dest,f)
|
112
|
+
end
|
113
|
+
|
114
|
+
namespace settings[:name].to_sym do
|
115
|
+
desc "build the #{settings[:name].to_sym} delight shaader"
|
116
|
+
task :build => target_shader
|
117
|
+
end
|
118
|
+
task :build => "#{settings[:name].to_sym}:build"
|
119
|
+
######################################################
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
# file tasks to release shaders
|
124
|
+
######################################################
|
125
|
+
release_shader = target.shader_release_path(target_shader)
|
126
|
+
file release_shader => target_shader do
|
127
|
+
target.make_directory_for(release_shader)
|
128
|
+
cp target_shader, release_shader
|
129
|
+
end
|
130
|
+
|
131
|
+
namespace settings[:name].to_sym do
|
132
|
+
task :release => release_shader
|
133
|
+
end
|
134
|
+
task :release => "#{settings[:name].to_sym}:release"
|
135
|
+
######################################################
|
136
|
+
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
|
141
|
+
# task to clean the build files
|
142
|
+
######################################################
|
143
|
+
namespace settings[:name].to_sym do
|
144
|
+
desc "clean the #{settings[:name].to_sym} build files"
|
145
|
+
task :clean do
|
146
|
+
sh delight_clean_cmd
|
147
|
+
end
|
148
|
+
end
|
149
|
+
task :clean => "#{settings[:name].to_sym}:clean"
|
150
|
+
######################################################
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
|
163
|
+
end
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
end
|
168
|
+
|
@@ -0,0 +1,106 @@
|
|
1
|
+
module Flak::Template
|
2
|
+
|
3
|
+
|
4
|
+
module Doc
|
5
|
+
module Settings
|
6
|
+
|
7
|
+
extend Flak::Template::MergeEngine
|
8
|
+
|
9
|
+
def self.extended target
|
10
|
+
infuse target
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.settings_modifications settings
|
14
|
+
|
15
|
+
mods = Hash.new
|
16
|
+
|
17
|
+
bind = binding()
|
18
|
+
Flak::Errors.assert("settings[:product_revision]", "String", bind,__FILE__)
|
19
|
+
Flak::Errors.assert("settings[:release_root]", "String", bind,__FILE__)
|
20
|
+
|
21
|
+
mods[:doc_directory_name] = "#{settings[:product_revision]}-doc"
|
22
|
+
|
23
|
+
mods[:doc_destination] = File.join( settings[:release_root] , mods[:doc_directory_name] )
|
24
|
+
|
25
|
+
mods
|
26
|
+
end
|
27
|
+
|
28
|
+
def doc_default_hash(item)
|
29
|
+
bind = binding()
|
30
|
+
Flak::Errors.assert("@settings[:product_name]", "String", bind,__FILE__)
|
31
|
+
Flak::Errors.assert("@settings[:product_revision]", "String", bind,__FILE__)
|
32
|
+
Flak::Errors.assert("@settings[:author_name]", "String", bind,__FILE__)
|
33
|
+
Flak::Errors.assert("@settings[:author_email]", "String", bind,__FILE__)
|
34
|
+
|
35
|
+
{
|
36
|
+
:title => "#{@settings[:product_name].capitalize} #{item[:type]}",
|
37
|
+
:description=> "#{@settings[:product_name].capitalize} #{@settings[:product_revision]} #{item[:type]}",
|
38
|
+
:author=> @settings[:author_name],
|
39
|
+
:email=> @settings[:author_email],
|
40
|
+
:created_at => Time.now.strftime("%d %B %Y")
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
def doc_plug_metadata(site)
|
46
|
+
site.items.each do |item|
|
47
|
+
unless item.binary?
|
48
|
+
item[:type] = "Index" if item.identifier == "/"
|
49
|
+
item[:type] = "Release Notes" if item.identifier == "/release_notes/"
|
50
|
+
item.attributes= doc_default_hash(item).merge(item.attributes)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
module Tasks
|
59
|
+
|
60
|
+
def self.extended target
|
61
|
+
task_factory target
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
def self.task_factory target
|
67
|
+
settings = target.settings
|
68
|
+
|
69
|
+
|
70
|
+
desc "Release documentation"
|
71
|
+
task :doc do
|
72
|
+
docroot = File.join(settings[:root],'doc')
|
73
|
+
Dir.chdir(docroot) do |d|
|
74
|
+
site = Nanoc::Site.new(YAML.load_file('config.yaml'))
|
75
|
+
site.config[:output_dir] = settings[:doc_destination]
|
76
|
+
target.doc_plug_metadata(site)
|
77
|
+
|
78
|
+
|
79
|
+
puts "Compiling site..."
|
80
|
+
site.compile
|
81
|
+
puts "Done... ;)"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
namespace :doc do
|
86
|
+
desc "Build and tar up documentation to tar.gz."
|
87
|
+
task :tar => :doc do
|
88
|
+
Dir.chdir( settings[:tools_directory] ) do |d|
|
89
|
+
sh "tar cfz #{settings[:product_name]}-#{settings[:product_revision]}-doc.tar.gz #{settings[:product_name]}/#{settings[:product_revision]}-doc"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
end
|
106
|
+
|
@@ -0,0 +1,189 @@
|
|
1
|
+
module Flak::Template
|
2
|
+
module Environment
|
3
|
+
|
4
|
+
module Settings
|
5
|
+
|
6
|
+
extend Flak::Template::MergeEngine
|
7
|
+
|
8
|
+
def self.extended target
|
9
|
+
infuse target
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def self.settings_modifications settings
|
14
|
+
|
15
|
+
mods = Hash.new
|
16
|
+
|
17
|
+
bind = binding()
|
18
|
+
|
19
|
+
Flak::Errors.assert("settings[:product_revision]", "String", bind,__FILE__)
|
20
|
+
Flak::Errors.assert("settings[:os]", "String", bind,__FILE__)
|
21
|
+
Flak::Errors.assert("settings[:configuration]", "String", bind,__FILE__)
|
22
|
+
Flak::Errors.assert("settings[:tools_directory]", "String", bind,__FILE__)
|
23
|
+
Flak::Errors.assert("settings[:product_name]", "String", bind,__FILE__)
|
24
|
+
|
25
|
+
mods[:build_directory] = File.join( "build", settings[:product_revision] , settings[:os], settings[:configuration])
|
26
|
+
|
27
|
+
mods[:release_root] = File.join(settings[:tools_directory], settings[:product_name])
|
28
|
+
|
29
|
+
mods[:path_to_revision] = File.join( mods[:release_root] , settings[:product_revision] )
|
30
|
+
|
31
|
+
mods[:path_to_revision] += "-#{settings[:os]}" unless settings[:agnostic]
|
32
|
+
|
33
|
+
mods
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def destination_filepath(relative_path, file)
|
38
|
+
bind = binding()
|
39
|
+
Flak::Errors.assert("@settings[:path_to_revision]", "String", bind,__FILE__)
|
40
|
+
File.join(@settings[:path_to_revision] , relative_path , file.pathmap('%f').no_erb)
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
module Tasks
|
48
|
+
|
49
|
+
def self.extended target
|
50
|
+
task_factory target
|
51
|
+
end
|
52
|
+
|
53
|
+
# We want to release erb files by binding them using ERB.
|
54
|
+
# To help identify erb files we define them as Filelists in
|
55
|
+
# yaml files under the key <identifier>_erb_files
|
56
|
+
# e.g. shell_erb_files or maya_script_erb_files
|
57
|
+
# for the identifiers: shell, and maya_script respectively
|
58
|
+
def self.generate_erb_tasks target
|
59
|
+
settings = target.settings
|
60
|
+
|
61
|
+
namespace settings[:name].to_sym do
|
62
|
+
|
63
|
+
erb_keys = settings.keys.find_all {|el| ( el.to_s =~ /^.*_erb_files$/)}
|
64
|
+
|
65
|
+
erb_keys.each do |k|
|
66
|
+
identifier = k.to_s.gsub("_erb_files", "") # shell or mel
|
67
|
+
files_key = identifier.to_sym # :shell or :mel
|
68
|
+
destination_path_key = "#{identifier}_destination".to_sym
|
69
|
+
|
70
|
+
write_erb_opts = {:chmod => 0755}
|
71
|
+
|
72
|
+
files = settings[k]
|
73
|
+
unless files.nil?
|
74
|
+
files.each do |f|
|
75
|
+
|
76
|
+
if settings.has_key? destination_path_key
|
77
|
+
destination_file = target.destination_filepath( settings[destination_path_key], f)
|
78
|
+
else
|
79
|
+
destination_file = target.send destination_path_key, f
|
80
|
+
end
|
81
|
+
|
82
|
+
file destination_file => f do
|
83
|
+
target.make_directory_for(destination_file)
|
84
|
+
target.write_erb_template(f,destination_file,write_erb_opts)
|
85
|
+
end
|
86
|
+
|
87
|
+
# desc "bind and release ERB #{destination_file.pathmap('%f')}"
|
88
|
+
task destination_file.pathmap('%f') => destination_file
|
89
|
+
|
90
|
+
task :release => destination_file.pathmap('%f')
|
91
|
+
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
def self.generate_copy_tasks target
|
103
|
+
settings = target.settings
|
104
|
+
|
105
|
+
namespace settings[:name].to_sym do
|
106
|
+
|
107
|
+
# copy_keys is an array of keys representing file types that should be copied
|
108
|
+
# for example maya_script_copy_files
|
109
|
+
# If so, there should be a proc called maya_script_release_path which is responsible for generating the release path
|
110
|
+
# this smells a bit - not sure if it can be fixed - we will see
|
111
|
+
##############################################
|
112
|
+
copy_keys = settings.keys.find_all {|el| ( el.to_s =~ /^.*_copy_files$/)}
|
113
|
+
|
114
|
+
copy_keys.each do |k|
|
115
|
+
identifier = k.to_s.gsub("_copy_files", "")
|
116
|
+
|
117
|
+
# destination_path_proc = "#{identifier}_destination".to_sym
|
118
|
+
destination_path_key = "#{identifier}_destination".to_sym
|
119
|
+
|
120
|
+
|
121
|
+
|
122
|
+
files = settings[k]
|
123
|
+
|
124
|
+
unless files.nil?
|
125
|
+
|
126
|
+
files.each do |f|
|
127
|
+
|
128
|
+
if settings.has_key? destination_path_key
|
129
|
+
destination_file = target.destination_filepath(settings[destination_path_key], f)
|
130
|
+
else
|
131
|
+
destination_file = target.send destination_path_key, f
|
132
|
+
end
|
133
|
+
|
134
|
+
file destination_file => f do
|
135
|
+
target.make_directory_for(destination_file)
|
136
|
+
sh "cp -r #{f} #{destination_file}"
|
137
|
+
File.chmod 0755, destination_file
|
138
|
+
end
|
139
|
+
task :release => destination_file
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
##############################################
|
144
|
+
end
|
145
|
+
|
146
|
+
|
147
|
+
end
|
148
|
+
|
149
|
+
|
150
|
+
def self.generate_inspect_and_release_tasks target
|
151
|
+
settings = target.settings
|
152
|
+
|
153
|
+
namespace settings[:name].to_sym do
|
154
|
+
|
155
|
+
desc "See resolved configuration settings for #{settings[:name].to_sym}"
|
156
|
+
task :inspect do
|
157
|
+
ap settings
|
158
|
+
end
|
159
|
+
|
160
|
+
desc "Release #{settings[:name].to_sym}"
|
161
|
+
task :release
|
162
|
+
|
163
|
+
end
|
164
|
+
task :release => "#{settings[:name].to_sym}:release"
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
|
172
|
+
def self.task_factory target
|
173
|
+
self.generate_erb_tasks target
|
174
|
+
self.generate_copy_tasks target
|
175
|
+
self.generate_inspect_and_release_tasks target
|
176
|
+
end
|
177
|
+
|
178
|
+
|
179
|
+
end
|
180
|
+
|
181
|
+
|
182
|
+
end
|
183
|
+
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
|
188
|
+
end
|
189
|
+
|