move expanding variable expansions from Environment.execute() to VarSet.expand_varref()
This commit is contained in:
parent
ff822155ea
commit
cecb43a61c
@ -76,33 +76,7 @@ module Rscons
|
||||
end
|
||||
|
||||
def execute(short_desc, command, extra_vars)
|
||||
merged_variables = @variables.merge(extra_vars)
|
||||
expand_varref = proc do |varref|
|
||||
if varref.is_a?(Array)
|
||||
varref.map do |ent|
|
||||
expand_varref.call(ent)
|
||||
end
|
||||
else
|
||||
if varref =~ /^(.*)\$\[(\w+)\](.*)$/
|
||||
# expand array with given prefix, suffix
|
||||
prefix, varname, suffix = $1, $2, $3
|
||||
varval = merged_variables[varname]
|
||||
unless varval.is_a?(Array)
|
||||
raise "Array expected for $#{varname}"
|
||||
end
|
||||
varval.map {|e| "#{prefix}#{e}#{suffix}"}
|
||||
elsif varref =~ /^\$(.*)$/
|
||||
# expand a single variable reference
|
||||
varname = $1
|
||||
varval = merged_variables[varname]
|
||||
varval or raise "Could not find variable #{varname.inspect}"
|
||||
expand_varref.call(varval)
|
||||
else
|
||||
varref
|
||||
end
|
||||
end
|
||||
end
|
||||
command = expand_varref.call(command.flatten).flatten
|
||||
command = @variables.merge(extra_vars).expand_varref(command)
|
||||
if @variables[:echo] == :command
|
||||
puts command.map { |c| c =~ /\s/ ? "'#{c}'" : c }.join(' ')
|
||||
elsif @variables[:echo] == :short
|
||||
|
@ -21,9 +21,41 @@ module Rscons
|
||||
@vars[key] = val
|
||||
end
|
||||
|
||||
def merge(other)
|
||||
other = other.vars if other.is_a?(VarSet)
|
||||
VarSet.new(@vars.merge(other))
|
||||
def append(values)
|
||||
values = values.vars if values.is_a?(VarSet)
|
||||
@vars.merge!(values)
|
||||
self
|
||||
end
|
||||
|
||||
def merge(other = {})
|
||||
VarSet.new(Marshal.load(Marshal.dump(@vars))).append(other)
|
||||
end
|
||||
alias_method :clone, :merge
|
||||
|
||||
def expand_varref(varref)
|
||||
if varref.is_a?(Array)
|
||||
varref.map do |ent|
|
||||
expand_varref(ent)
|
||||
end.flatten
|
||||
else
|
||||
if varref =~ /^(.*)\$\[(\w+)\](.*)$/
|
||||
# expand array with given prefix, suffix
|
||||
prefix, varname, suffix = $1, $2, $3
|
||||
varval = @vars[varname]
|
||||
unless varval.is_a?(Array)
|
||||
raise "Array expected for $#{varname}"
|
||||
end
|
||||
varval.map {|e| "#{prefix}#{e}#{suffix}"}
|
||||
elsif varref =~ /^\$(.*)$/
|
||||
# expand a single variable reference
|
||||
varname = $1
|
||||
varval = @vars[varname]
|
||||
varval or raise "Could not find variable #{varname.inspect}"
|
||||
expand_varref(varval)
|
||||
else
|
||||
varref
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user