sbsv2/raptor/bin/sbs_check_exports.py
author Daniel Jacobs <daniel.jacobs@nokia.com>
Tue, 30 Mar 2010 15:34:13 +0100
branchwip
changeset 445 28f0ff4c401c
parent 37 d806416fc9bf
child 598 0a541d1f13c3
permissions -rw-r--r--
Ensure that delete on failed compile is used only with RVCT 2.2.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     1
#!/usr/bin/python
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     2
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     3
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     4
# All rights reserved.
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     5
# This component and the accompanying materials are made available
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     6
# under the terms of the License "Symbian Foundation License v1.0"
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     7
# which accompanies this distribution, and is available
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     8
# at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
     9
#
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    10
# Initial Contributors:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    11
# Nokia Corporation - initial contribution.
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    12
#
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    13
# Contributors:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    14
#
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    15
# Description:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    16
#
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    17
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    18
import re
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    19
import sys
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    20
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    21
# there are no options, so print help if any are passed
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    22
if len(sys.argv) > 1:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    23
	print "usage:", sys.argv[0], "(The log data is read from stdin)"
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    24
	sys.exit(0)
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    25
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    26
whatlogRE = re.compile("<whatlog.*bldinf='([^']*)'")
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    27
exportRE = re.compile("<export destination='(.*)' source='(.*)'")
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    28
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    29
bldinf = "unknown"
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    30
sources = {}		# lookup from source to destination
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    31
destinations = {}	# lookup from destination to source
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    32
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    33
chains = 0
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    34
repeats = 0
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    35
conflicts = []
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    36
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    37
# read stdin a line at a time and soak up all the exports
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    38
line = " "
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    39
while line:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    40
	line = sys.stdin.readline()
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    41
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    42
	whatlogMatch = whatlogRE.search(line)
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    43
	if whatlogMatch:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    44
		bldinf = whatlogMatch.group(1).lower()
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    45
		continue
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    46
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    47
	exportMatch = exportRE.search(line)
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    48
	if exportMatch:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    49
		destination = exportMatch.group(1).lower()
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    50
		source = exportMatch.group(2).lower()
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    51
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    52
		if destination in destinations:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    53
			(otherSource, otherBldinf) = destinations[destination]
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    54
			
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    55
			# same source and destination but different bld.inf => repeat	
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    56
			if source == otherSource and bldinf != otherBldinf:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    57
				# only interested in the number for now
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    58
				repeats += 1
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    59
				
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    60
			# different source but same destination => conflict
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    61
			if source != otherSource:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    62
				conflict = (source, destination, bldinf, otherSource, otherBldinf)
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    63
				tcilfnoc = (otherSource, destination, otherBldinf, source, bldinf)
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    64
				
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    65
				if conflict in conflicts or tcilfnoc in conflicts:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    66
					# seen this conflict before
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    67
					pass
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    68
				else:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    69
					print "CONFLICT:", destination, \
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    70
						"FROM", source, \
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    71
						"IN", bldinf, \
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    72
						"AND FROM", otherSource, \
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    73
						"IN", otherBldinf
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    74
					conflicts.append(conflict)
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    75
		else:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    76
			sources[source] = [destination, bldinf]
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    77
			destinations[destination] = [source, bldinf]
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    78
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    79
# now check for destinations which were also sources => chains
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    80
for destination in destinations:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    81
	if destination in sources:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    82
		(nextDestination, inf2) = sources[destination]
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    83
		(source, inf1) = destinations[destination]
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    84
		print "CHAIN:", source, \
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    85
			"TO", destination, \
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    86
			"IN", inf1, \
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    87
			"THEN TO", nextDestination, \
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    88
			"IN", inf2
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    89
		chains += 1
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    90
		
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    91
# print a summary
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    92
print "Total exports = ", len(destinations.keys())
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    93
print "Chained exports = ", chains
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    94
print "Repeated exports = ", repeats
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    95
print "Conflicting exports = ", len(conflicts)
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    96
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    97
# return the error code
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    98
if conflicts:
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
    99
	sys.exit(1)
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
   100
sys.exit(0)
d806416fc9bf added scipt for checking exports across multiple logs
Richard Taylor <richard.i.taylor@nokia.com>
parents:
diff changeset
   101