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
|
end
|
||||||
|
|
||||||
def execute(short_desc, command, extra_vars)
|
def execute(short_desc, command, extra_vars)
|
||||||
merged_variables = @variables.merge(extra_vars)
|
command = @variables.merge(extra_vars).expand_varref(command)
|
||||||
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
|
|
||||||
if @variables[:echo] == :command
|
if @variables[:echo] == :command
|
||||||
puts command.map { |c| c =~ /\s/ ? "'#{c}'" : c }.join(' ')
|
puts command.map { |c| c =~ /\s/ ? "'#{c}'" : c }.join(' ')
|
||||||
elsif @variables[:echo] == :short
|
elsif @variables[:echo] == :short
|
||||||
|
@ -21,9 +21,41 @@ module Rscons
|
|||||||
@vars[key] = val
|
@vars[key] = val
|
||||||
end
|
end
|
||||||
|
|
||||||
def merge(other)
|
def append(values)
|
||||||
other = other.vars if other.is_a?(VarSet)
|
values = values.vars if values.is_a?(VarSet)
|
||||||
VarSet.new(@vars.merge(other))
|
@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
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user