Class: Target

Inherits:
Object
  • Object
show all
Defined in:
lib/makeconf/target.rb

Overview

A target is a section in a Makefile

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(objs, deps = [], rules = []) ⇒ Target

Returns a new instance of Target.

Raises:

  • (ArgumentError)


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

#depsObject

Returns the value of attribute deps.



5
6
7
# File 'lib/makeconf/target.rb', line 5

def deps
  @deps
end

#objsObject (readonly)

Returns the value of attribute objs.



4
5
6
# File 'lib/makeconf/target.rb', line 4

def objs
  @objs
end

#rulesObject

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

Raises:

  • (ArgumentError)


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_sObject

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