blob: eeb6ac2488ce134f08327461f7948611b3f75cdf [file] [log] [blame]
#!/usr/bin/env ruby
require './gschem_file'
require 'pp'
if ARGV.size == 0
filenames = Dir.glob('**/*.{sch,sym}')
else
filenames = get_schematic_filenames ARGV
end
seen = {}
filenames.each do |filename|
file = GschemSchematic.new(filename)
file.components.each do |component|
refdes = component.refdes
slot = component[:slot]
if !refdes
if !component.is_power
puts "Warning: #{component.inspect} does not have a refdes."
end
elsif !seen.has_key? refdes
seen[refdes] = [[filename, slot]]
else
if seen[refdes][0][1] == nil && slot == nil
puts "Error: duplicate unslotted component #{refdes} in #{seen[refdes].collect { |a| a[0] }.inspect}."
elsif (seen[refdes][0][1] == nil) != (slot == nil)
puts "Error: slotted and unslotted component #{refdes} at #{seen[refdes].collect { |a| "#{a[1] || 'none'} in #{a[0]}" }.inspect}."
else
seen[refdes].each do |_, s|
if s == slot
puts "Error: duplicate slotted component #{refdes}:#{slot} in #{seen[refdes].collect { |a| a[0] if a[1] == slot }.compact.inspect}."
break
end
end
end
seen[refdes].push [filename, slot]
end
end
end