--- a/sbsv2/raptor/python/plugins/filter_what.py Sun May 16 13:06:27 2010 +0100
+++ b/sbsv2/raptor/python/plugins/filter_what.py Mon May 17 20:20:32 2010 +0100
@@ -1,128 +1,198 @@
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# Filter class for doing --what and --check operations
-#
-
-import os
-import sys
-import re
-import filter_interface
-
-class FilterWhat(filter_interface.Filter):
-
-
- def print_file(self, line, start, end):
- "Ensure DOS slashes on Windows"
-
- """Use chars between enclosing tags ("<>", "''", etc)
- start = opening tag, so the line we need
- actually starts at 'start + 1' """
- if "win" in self.buildparameters.platform:
- filename = line[(start + 1):end].replace("/","\\")
- else:
- filename = line[(start + 1):end]
-
- if self.check:
- if not os.path.isfile(filename):
- print "MISSING:", filename
- self.ok = False
- else:
- self.outfile.write(filename+"\n")
-
-
- def open(self, build_parameters):
- "initialise"
-
- self.buildparameters = build_parameters
- self.check = build_parameters.doCheck
- self.what = build_parameters.doWhat
-
- self.outfile = sys.stdout
- self.outfile_close = False
-
- if "FILTERWHAT_FILE" in os.environ:
- try:
- self.outfile = open(os.environ['FILTERWHAT_FILE'],"w+")
- self.outfile_close = True
- except Exception,e:
- raise Exception("The 'What Filter' could not open the output file specified in the FILTER_WHAT environment variable: " + os.environ['FILTERWHAT_FILE'])
-
- # repetitions is for tracking repeated lines in the output log
- # when --check and --what are called
- self.repetitions = {}
-
- "Regex for old what output"
- if "win" in self.buildparameters.platform:
- self.regex = re.compile("^[a-zA-Z]:\S+$")
- else:
- self.regex = re.compile("^/\S+$")
-
- "Regex for targets"
- self.target_regex = re.compile("^<(build|stringtable|resource|bitmap)>.*")
-
- "Regex for exports"
- self.export_regex = re.compile("^<export destination.*")
-
- "Regex for zip exports"
- self.zip_export_regex = re.compile("^<member>.*")
-
- self.ok = True
- return self.ok
-
- def write(self, text):
- "process some log text"
-
- for line in text.splitlines():
- line = line.rstrip()
-
- if not line in self.repetitions:
- self.repetitions[line] = 0
-
- if self.repetitions[line] == 0:
- if self.regex.match(line) and (self.what or self.check):
- "Print the whole line"
- self.print_file(line, (-1), len(line))
-
- if self.target_regex.match(line):
- "Grab the filename between <build> and </build>"
- start = line.find(">")
- end = line.rfind("<")
-
- self.print_file(line, start, end)
-
- elif self.export_regex.match(line):
- "Grab the filename between the first set of '' chars"
- start = line.find("'")
- end = line.find("'", (start + 1))
-
- self.print_file(line, start, end)
-
- elif self.zip_export_regex.match(line):
- "Grab the filename between <member> and </member>"
- start = line.find(">")
- end = line.rfind("<")
-
- self.print_file(line, start, end)
-
- self.repetitions[line] += 1
-
- return self.ok
-
- def close(self):
- if self.outfile_close:
- self.outfile.close()
- return self.ok
-
-
+#
+# Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Filter class for doing --what and --check operations
+#
+
+import os
+import sys
+import re
+import filter_interface
+
+class FilterWhat(filter_interface.Filter):
+
+ def __init__(self):
+ super(filter_interface.Filter,self).__init__()
+ self.path_prefix_to_strip = None
+ self.path_prefix_to_add_on = None
+ self.check = False
+
+ def print_file(self, line, start, end):
+ "Ensure DOS slashes on Windows"
+
+ """Use chars between enclosing tags ("<>", "''", etc)
+ start = opening tag, so the line we need
+ actually starts at 'start + 1' """
+
+ abs_filename = line[(start + 1):end]
+ filename = abs_filename
+
+ # Adjust drive letters for case insensitivity on windows
+
+ path_prefix_to_strip = self.path_prefix_to_strip
+ if "win" in self.buildparameters.platform:
+ filename = filename[0].upper()+filename[1:]
+ filename = filename.replace("/","\\")
+
+ if path_prefix_to_strip:
+ if "win" in self.buildparameters.platform:
+ path_prefix_to_strip = path_prefix_to_strip[0].upper()+path_prefix_to_strip[1:].replace("/","\\")
+ if filename.startswith(path_prefix_to_strip):
+ filename = filename[len(path_prefix_to_strip):]
+ if self.path_prefix_to_add_on != None:
+ filename = self.path_prefix_to_add_on + filename
+
+ if self.check:
+ if not os.path.isfile(abs_filename):
+ print "MISSING:", filename
+ self.ok = False
+ else:
+ self.outfile.write(filename+"\n")
+
+ self.prints += 1
+
+ def start_bldinf(self, bldinf):
+ pass
+
+ def end_bldinf(self):
+ pass
+
+
+ def open(self, build_parameters):
+ "initialise"
+
+
+ self.buildparameters = build_parameters
+ if build_parameters.doCheck:
+ self.check = True
+ self.what = build_parameters.doWhat
+
+ self.outfile = sys.stdout
+ self.outfile_close = False
+
+ if "FILTERWHAT_FILE" in os.environ:
+ try:
+ self.outfile = open(os.environ['FILTERWHAT_FILE'],"w+")
+ self.outfile_close = True
+ except Exception,e:
+ raise Exception("The 'What Filter' could not open the output file specified in the FILTER_WHAT environment variable: " + os.environ['FILTERWHAT_FILE'])
+
+ # repetitions is for tracking repeated lines in the output log
+ # when --check and --what are called
+ self.repetitions = {}
+
+ "Regex for old what output"
+ if "win" in self.buildparameters.platform:
+ self.regex = re.compile("^[a-zA-Z]:\S+$")
+ else:
+ self.regex = re.compile("^/\S+$")
+
+ "Regex for targets"
+ self.target_regex = re.compile("^<(build|stringtable|resource|bitmap)>.*")
+
+ "Regex for exports"
+ self.export_regex = re.compile("^<export destination.*")
+
+ "Regex for zip exports"
+ self.zip_export_regex = re.compile("^<member>.*")
+
+ "Regex for determining bld.inf name"
+ self.whatlog_regex = re.compile("^<whatlog *bldinf='(?P<bldinf>[^']*)'.*")
+ self.current_bldinf = ''
+
+ self.prints = 0
+ self.ok = True
+ return self.ok
+
+ def write(self, text):
+ "process some log text"
+
+ for line in text.splitlines():
+ line = line.rstrip()
+
+ # we are normally the ONLY filter running so we have to pass on
+ # any errors and warnings that emerge
+ #
+ if line.startswith("<error"):
+ sys.stderr.write(self.formatError(line))
+ self.ok = False
+ continue
+ if line.startswith("<warning"):
+ sys.stderr.write(self.formatWarning(line))
+ continue
+
+ if not line in self.repetitions:
+ self.repetitions[line] = 0
+
+ if self.repetitions[line] == 0:
+
+ if self.regex.match(line) and (self.what or self.check):
+ "Print the whole line"
+ self.print_file(line, (-1), len(line))
+
+ if self.target_regex.match(line):
+ "Grab the filename between <build> and </build>"
+ start = line.find(">")
+ end = line.rfind("<")
+
+ self.print_file(line, start, end)
+
+ elif self.export_regex.match(line):
+ "Grab the filename between the first set of '' chars"
+ start = line.find("'")
+ end = line.find("'", (start + 1))
+
+ self.print_file(line, start, end)
+
+ elif self.zip_export_regex.match(line):
+ "Grab the filename between <member> and </member>"
+ start = line.find(">")
+ end = line.rfind("<")
+
+ self.print_file(line, start, end)
+
+ "work out what the 'current' bldinf file is"
+ m = self.whatlog_regex.match(line)
+ if m:
+ bi = m.groupdict()['bldinf']
+ if self.current_bldinf != bi:
+ if self.current_bldinf != '':
+ self.end_bldinf()
+ self.current_bldinf = bi
+ if bi != '':
+ self.start_bldinf(bi)
+
+
+
+ self.repetitions[line] += 1
+
+ return self.ok
+
+ def summary(self):
+ if self.prints == 0:
+ if self.what:
+ message = "no WHAT information found"
+ else:
+ message = "no CHECK information found"
+
+ sys.stderr.write(self.formatError(message))
+ self.ok = False
+ return self.ok
+
+ def close(self):
+ if self.outfile_close:
+ self.outfile.close()
+ return self.ok
+
+