From 95a9ab85614d8fd894de36aea158761bd4e4d12f Mon Sep 17 00:00:00 2001 From: Allan Odgaard Date: Mon, 20 Aug 2012 12:32:44 +0200 Subject: [PATCH] Improve error reporting in gen_build This is for the case where the user is missing targets (e.g. did not checkout submodules). --- bin/gen_build | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/bin/gen_build b/bin/gen_build index 84259d59..bfa3f202 100755 --- a/bin/gen_build +++ b/bin/gen_build @@ -70,7 +70,9 @@ class Targets end def target_named(name) - self.find { |target| target[:name] == name } + res = self.find { |target| target[:name] == name } + return res unless res.nil? + abort "*** no target named ‘#{name}’. Did you update submodules?\n" end def each(&block) @@ -292,7 +294,6 @@ def resources_helper(target, key, symbol) target[key].to_a.each do |path| if path =~ /^@/ src = TARGETS.target_named($') - abort "*** target does not exist: ‘#{path}’.\nKnown targets:\n - #{TARGETS.map { |target| target[:name] }.join("\n - ")}\n" if src.nil? abort "*** no resources in target: ‘#{path}’ (from target: #{target[:name]}).\n" unless src.has_key?(:rsrc_info) src[:rsrc_info].each do |info| rsrc << { :src => info[:src], :dst => esc_path(info[:install_name]) } @@ -630,15 +631,12 @@ open("#{builddir}/build.ninja", "w") do |io| # = Do a topological sort based on the dependency graph = # ======================================================= - targets = { } # name → target - dag = '' TARGETS.each do |target| target['LINK'].each { |dep| dag << "#{target[:name]}\t#{dep}\n" } unless target['LINK'].nil? target.each do |key, value| value.each { |rsrc| dag << "#{target[:name]}\t#$'\n" if rsrc =~ /^@/ } if key =~ /^CP_/ end - targets[target[:name]] = target end dag = open('|/usr/bin/tsort -q', 'r+') { |tsort| tsort << dag; tsort.close_write; tsort.read } @@ -647,7 +645,7 @@ open("#{builddir}/build.ninja", "w") do |io| # ========================================================================= dag.scan(/.+/).reverse_each do |name| - target = targets[name] + target = TARGETS.target_named(name) io << clean(target) io << sources(target)