Class: Target
- Inherits:
-
Object
- Object
- Target
- Defined in:
- lib/makeconf/target.rb
Overview
A target is a section in a Makefile
Instance Attribute Summary collapse
-
#deps ⇒ Object
Returns the value of attribute deps.
-
#objs ⇒ Object
readonly
Returns the value of attribute objs.
-
#rules ⇒ Object
Returns the value of attribute rules.
Instance Method Summary collapse
- #add_dependency(depends) ⇒ Object
- #add_rule(rule) ⇒ Object
-
#cp(src, dst) ⇒ Object
Copy a file to a directory.
-
#initialize(objs, deps = [], rules = []) ⇒ Target
constructor
A new instance of Target.
-
#merge!(src) ⇒ Object
Merge one target with another.
-
#mkdir(path) ⇒ Object
Ensure that a directory is created before any rules are evaluated.
- #prepend_rule(target, rule) ⇒ Object
-
#to_s ⇒ Object
Return the string representation of the target.
Constructor Details
#initialize(objs, deps = [], rules = []) ⇒ Target
Returns a new instance of Target.
7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/makeconf/target.rb', line 7 def initialize(objs, deps = [], rules = []) deps = [ deps ] if deps.kind_of?(String) rules = [ rules ] if rules.kind_of?(String) raise ArgumentError.new('Bad objs') unless objs.kind_of?(String) raise ArgumentError.new('Bad deps') unless deps.kind_of?(Array) raise ArgumentError.new('Bad rules') unless rules.kind_of?(Array) @objs = objs @deps = deps @rules = rules @dirs_to_create = [] # directories to create @files_to_copy = {} # files to be copied end |
Instance Attribute Details
#deps ⇒ Object
Returns the value of attribute deps.
5 6 7 |
# File 'lib/makeconf/target.rb', line 5 def deps @deps end |
#objs ⇒ Object (readonly)
Returns the value of attribute objs.
4 5 6 |
# File 'lib/makeconf/target.rb', line 4 def objs @objs end |
#rules ⇒ Object
Returns the value of attribute rules.
5 6 7 |
# File 'lib/makeconf/target.rb', line 5 def rules @rules end |
Instance Method Details
#add_dependency(depends) ⇒ Object
43 44 45 |
# File 'lib/makeconf/target.rb', line 43 def add_dependency(depends) @deps.push(depends).uniq! end |
#add_rule(rule) ⇒ Object
47 48 49 |
# File 'lib/makeconf/target.rb', line 47 def add_rule(rule) @rules.push(rule) end |
#cp(src, dst) ⇒ Object
Copy a file to a directory. This is more efficient than calling cp(1) for each file.
38 39 40 41 |
# File 'lib/makeconf/target.rb', line 38 def cp(src,dst) @files_to_copy[dst] ||= [] @files_to_copy[dst].push(src) end |
#merge!(src) ⇒ Object
Merge one target with another
22 23 24 25 26 27 28 29 |
# File 'lib/makeconf/target.rb', line 22 def merge!(src) raise ArgumentError.new('Mismatched object') \ unless src.objs == @objs @deps.push(src.deps).uniq! @rules.push(src.rules).flatten! @dirs_to_create.push(src.dirs_to_create).flatten!.uniq! @files_to_copy.merge!(src.files_to_copy) end |
#mkdir(path) ⇒ Object
Ensure that a directory is created before any rules are evaluated
32 33 34 |
# File 'lib/makeconf/target.rb', line 32 def mkdir(path) @dirs_to_create.push(path) unless @dirs_to_create.include?(path) end |
#prepend_rule(target, rule) ⇒ Object
51 52 53 |
# File 'lib/makeconf/target.rb', line 51 def prepend_rule(target,rule) @rules.unshift(rule) end |
#to_s ⇒ Object
Return the string representation of the target
56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/makeconf/target.rb', line 56 def to_s res = "\n" + @objs + ':' res += ' ' + @deps.join(' ') if @deps res += "\n" @dirs_to_create.each do |dir| res += "\t" + Platform.mkdir(dir) + "\n" end @files_to_copy.each do |k,v| res += "\t" + Platform.cp(v, k) + "\n" end @rules.each { |r| res += "\t" + r + "\n" } res end |