bake 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +6 -0
  5. data/Gemfile +7 -0
  6. data/Gemfile.lock +40 -0
  7. data/README.md +99 -0
  8. data/Rakefile +6 -0
  9. data/bake.gemspec +25 -0
  10. data/bin/bake +25 -10
  11. data/lib/bake.rb +21 -140
  12. data/lib/bake/book.rb +79 -0
  13. data/lib/bake/command.rb +29 -0
  14. data/lib/bake/command/invoke.rb +67 -0
  15. data/lib/bake/command/list.rb +76 -0
  16. data/lib/bake/command/top.rb +111 -0
  17. data/lib/bake/context.rb +103 -110
  18. data/lib/bake/loader.rb +82 -0
  19. data/lib/bake/loaders.rb +110 -0
  20. data/lib/bake/recipe.rb +109 -0
  21. data/lib/bake/version.rb +23 -0
  22. metadata +73 -85
  23. data/CHANGELOG +0 -38
  24. data/CONCEPTS +0 -54
  25. data/MIT-LICENSE +0 -21
  26. data/README +0 -38
  27. data/REFERENCE +0 -2
  28. data/TUTORIAL +0 -128
  29. data/lib/bake/addon.rb +0 -20
  30. data/lib/bake/configuration.rb +0 -126
  31. data/lib/bake/extensions.rb +0 -3
  32. data/lib/bake/extensions/class.rb +0 -11
  33. data/lib/bake/extensions/object.rb +0 -22
  34. data/lib/bake/extensions/string.rb +0 -22
  35. data/lib/bake/file_target.rb +0 -19
  36. data/lib/bake/plugin.rb +0 -49
  37. data/lib/bake/plugins/cpp.rb +0 -188
  38. data/lib/bake/plugins/cpp/darwin.rb +0 -26
  39. data/lib/bake/plugins/cpp/gcc.rb +0 -14
  40. data/lib/bake/plugins/cpp/gcc_toolset_base.rb +0 -101
  41. data/lib/bake/plugins/cpp/msvc.rb +0 -118
  42. data/lib/bake/plugins/cpp/qt.rb +0 -53
  43. data/lib/bake/plugins/cpp/toolset_base.rb +0 -56
  44. data/lib/bake/plugins/macro.rb +0 -18
  45. data/lib/bake/plugins/runner.rb +0 -40
  46. data/lib/bake/plugins/system.rb +0 -30
  47. data/lib/bake/project.rb +0 -91
  48. data/lib/bake/project_loader.rb +0 -116
  49. data/lib/bake/system_utils.rb +0 -42
  50. data/lib/bake/target.rb +0 -155
  51. data/lib/bake/toolset.rb +0 -25
  52. data/lib/bake_version.rb +0 -5
  53. data/test/test_bake.rb +0 -2
  54. data/test/test_configuration.rb +0 -58
@@ -1,42 +0,0 @@
1
- require 'fileutils'
2
-
3
- module Bake
4
- class SystemUtils
5
- def initialize(options = {})
6
- @options = options
7
- if options[:dry_run]
8
- @file_utils = FileUtils::DryRun
9
- elsif options[:verbose]
10
- @file_utils = FileUtils::Verbose
11
- else
12
- @file_utils = FileUtils
13
- end
14
- end
15
-
16
- def dry_run?
17
- return @options[:dry_run]
18
- end
19
-
20
- def verbose?
21
- return @options[:dry_run] || @options[:verbose]
22
- end
23
-
24
- def sh(*args)
25
- cmd = args.join(' ')
26
- puts cmd if verbose?
27
- if !dry_run?
28
- system(*args)
29
- raise "error: #{cmd}" if !$? || !$?.success?
30
- end
31
- end
32
-
33
- def fwrite(file, contents)
34
- puts "writing '#{file}'" if verbose?
35
- File.open(file, "w") { |f| f.puts(contents) } if !dry_run?
36
- end
37
-
38
- def method_missing(name, *args)
39
- @file_utils.send(name, *args)
40
- end
41
- end
42
- end
@@ -1,155 +0,0 @@
1
- require 'bake/configuration'
2
- require 'bake/toolset'
3
-
4
- module Bake
5
- class Target
6
- include Configuration
7
-
8
- attr_reader :parent, :children, :deps, :posts, :toolset
9
- attr_accessor :name
10
-
11
- def initialize(parent, *args)
12
- @parent = parent
13
- @children = []
14
- @deps = []
15
- @posts = []
16
- @stale = nil
17
- parent.children << self if parent
18
-
19
- @toolset = args.first.is_a?(Toolset) ? args.shift : nil
20
- @building = false
21
- props = args.last.respond_to?(:to_hash) ? args.pop : {}
22
- props.each_pair { |name, val| opt(name => val) }
23
-
24
- post_initialize(*args) if respond_to?(:post_initialize)
25
- mix_in_toolset
26
- end
27
-
28
- def stale?
29
- return @stale if !@stale.nil?
30
- tmin = mtimes.min
31
- @stale = deps.any? { |dep| dep.stale? || dep.mtimes.max > tmin }
32
- return @stale
33
- end
34
-
35
- def products
36
- return nil
37
- end
38
-
39
- def built?
40
- return @built
41
- end
42
-
43
- def build_r
44
- return if @built
45
- raise "circular dependency detected in '#{self}'" if @building
46
- @building = true
47
- deps.each { |dep| dep.build_r }
48
- Dir.chdir(get(:cwdir)) do
49
- if stale?
50
- if products
51
- outdir = get(:outdir)
52
- toolset.sys.mkdir_p(outdir) if !File.exists?(outdir)
53
- end
54
- build if respond_to?(:build)
55
- end
56
- end
57
- @building = false
58
- @built = true
59
- posts.each { |post| post.build_r }
60
- end
61
-
62
- def clean_r
63
- children.each { |child| child.clean_r }
64
- clean
65
- end
66
-
67
- def clean
68
- prods = products.make_array
69
- toolset.sys.rm_f(prods) if !prods.empty?
70
- end
71
-
72
- def dep(*targets)
73
- targets = normalize_targets(*targets)
74
- targets.each { |target| add_dep(target) }
75
- end
76
-
77
- def add_dep(target)
78
- deps << target
79
- end
80
-
81
- def post(*targets)
82
- normalize_targets(*targets).each { |target| posts << target }
83
- end
84
-
85
- def current_project
86
- return parent.current_project
87
- end
88
-
89
- def mtimes
90
- prods = products.make_array
91
- return [ Time.now ] if prods.empty?
92
- return products.make_array.collect do |prod|
93
- File.exists?(prod) ? File.mtime(prod) : Time.at(0)
94
- end
95
- end
96
-
97
- alias :id :name
98
-
99
- def to_s
100
- return "<#{class_name}: #{id}>"
101
- end
102
-
103
- protected
104
- def class_name
105
- return self.class.name.split('::').last
106
- end
107
-
108
- private
109
- def normalize_targets(*targets)
110
- normalized_targets = []
111
- targets.flatten.each do |target|
112
- if !target.is_a?(Target)
113
- begin
114
- # resolve normal targets
115
- target = current_project.resolve(target)
116
- rescue RuntimeError => e
117
- # when no normal target exists, see if a file exists
118
- if File.exists?(target)
119
- target = FileTarget.new(self, toolset, target)
120
- else
121
- raise e
122
- end
123
- end
124
- end
125
- normalized_targets << target
126
- end
127
- return normalized_targets
128
- end
129
-
130
- def mix_in_toolset
131
- return if !toolset
132
- mixin_name = self.class.name.split('::').last
133
- # collect all the relevant mixins
134
- modules = []
135
- toolset_class = toolset.class
136
- while toolset_class && !toolset_class.equal?(::Object)
137
- if toolset_class.const_defined?(mixin_name)
138
- modules << toolset_class.const_get(mixin_name)
139
- end
140
- toolset_class = toolset_class.superclass
141
- end
142
- # add them in reverse order to preserve inheritance relations
143
- modules.reverse_each do |mod|
144
- extend(mod)
145
- if mod.instance_methods.include?('post_initialize')
146
- post_initialize
147
- end
148
- end
149
- end
150
- end
151
- end
152
-
153
- require 'bake/file_target'
154
- require 'bake/project'
155
-
@@ -1,25 +0,0 @@
1
- require 'bake/plugin'
2
- require 'fileutils'
3
-
4
- module Bake
5
- class Toolset
6
- include Addon
7
-
8
- attr_reader :sys
9
-
10
- def initialize(sys)
11
- @sys = sys
12
- end
13
-
14
- def constructor(name, target_class)
15
- toolset = self
16
- command(name) do |*args|
17
- block = args.last.is_a?(Proc) ? args.pop : nil
18
- target = target_class.new(current, toolset, *args)
19
- context_eval(target, &block) if block
20
- return target
21
- end
22
- end
23
- end
24
- end
25
-
@@ -1,5 +0,0 @@
1
- module Bake
2
- VERSION = [ 0, 1, 2 ]
3
- VERSION_STRING = VERSION.join('.')
4
- end
5
-
@@ -1,2 +0,0 @@
1
- require 'test_configuration'
2
-
@@ -1,58 +0,0 @@
1
- $: << File.dirname(__FILE__) + '/../lib'
2
-
3
- require 'test/unit'
4
- require 'bake/configuration'
5
-
6
- class ConfigTree
7
- include Bake::Configuration
8
-
9
- def initialize(parent = nil)
10
- @parent = parent
11
- parent.children << self if parent
12
- @children = []
13
- end
14
-
15
- protected
16
- attr_reader :parent, :children
17
- end
18
-
19
- class TestConfigTree < Test::Unit::TestCase
20
- def setup
21
- @cfg = ConfigTree.new
22
- @parent = ConfigTree.new
23
- @child = ConfigTree.new(@parent)
24
- end
25
-
26
- def test_opt
27
- assert_raise(RuntimeError) { @cfg.opt(:yes => true, :no => false) }
28
- assert_raise(RuntimeError) { @cfg.opt(:yes => true, :no => false) }
29
-
30
- @cfg.opt(:defines => 'DEBUG')
31
- assert_equal(1, @cfg[:defines].size)
32
- assert(@cfg[:defines].include?('DEBUG'))
33
-
34
- @cfg.opt(:defines => 'WIN32')
35
- assert_equal(2, @cfg[:defines].size)
36
- assert(@cfg[:defines].include?('DEBUG'))
37
- assert(@cfg[:defines].include?('WIN32'))
38
-
39
- @cfg.opt(:libtype => 'static')
40
- assert_equal('static', @cfg[:libtype])
41
-
42
- @cfg.opt(:libtype => 'dynamic')
43
- assert_equal('dynamic', @cfg[:libtype])
44
-
45
- assert_raise(Bake::PropertyNotFoundException) { @cfg[:random] }
46
-
47
- assert_equal(0, @child[:defines].size)
48
-
49
- @parent.opt(:defines => 'DEBUG')
50
- @child.opt(:defines => 'WIN32')
51
- assert_equal(1, @parent[:defines].size)
52
- assert(@child[:defines].include?('DEBUG'))
53
- assert_equal(2, @child[:defines].size)
54
- assert(@child[:defines].include?('DEBUG'))
55
- assert(@child[:defines].include?('WIN32'))
56
- end
57
- end
58
-