blob: 1770e9d255d8fe01075364449cdf64a1aa6e600a [file] [log] [blame]
Brian Silverman8fa2aad2017-06-10 16:45:30 -07001#!/usr/bin/env ruby
2
3require './gschem_file'
4require 'pp'
5
6if ARGV.size == 0
7 filenames = Dir.glob('**/*.{sch,sym}')
8else
9 filenames = get_schematic_filenames ARGV
10end
11
12seen = {}
13
14filenames.each do |filename|
15 file = GschemSchematic.new(filename)
16
17 file.components.each do |component|
18 refdes = component.refdes
19 slot = component[:slot]
20 if !refdes
21 if !component.is_power
22 puts "Warning: #{component.inspect} does not have a refdes."
23 end
24 elsif !seen.has_key? refdes
25 seen[refdes] = [[filename, slot]]
26 else
27 if seen[refdes][0][1] == nil && slot == nil
28 puts "Error: duplicate unslotted component #{refdes} in #{seen[refdes].collect { |a| a[0] }.inspect}."
29 elsif (seen[refdes][0][1] == nil) != (slot == nil)
30 puts "Error: slotted and unslotted component #{refdes} at #{seen[refdes].collect { |a| "#{a[1] || 'none'} in #{a[0]}" }.inspect}."
31 else
32 seen[refdes].each do |_, s|
33 if s == slot
34 puts "Error: duplicate slotted component #{refdes}:#{slot} in #{seen[refdes].collect { |a| a[0] if a[1] == slot }.compact.inspect}."
35 break
36 end
37 end
38 end
39 seen[refdes].push [filename, slot]
40 end
41 end
42end