diff -r f5050f1da672 -r 04becd199f91 build/buildutils/setpolicyfiles.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/build/buildutils/setpolicyfiles.py Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,162 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "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: +# +#!/usr/bin/python + +import datetime, os, os.path, sys, traceback +from optparse import OptionParser + +"""This script sets up S60 distribution policy files.""" + +class PolicyData: + def __init__(self): + self.root_policy = None + self.policies = [] + self.created_policies = 0 + self.existing_policies = 0 + self.warning_count = 0 + self.start_time = datetime.datetime.now() + self.stop_time = None + def __str__(self): + if self.stop_time is None: + self.stop_time = datetime.datetime.now() + msg = "Distribution policies generation time " + str(self.stop_time - self.start_time) + msg += "\nCreated policies: " + str(self.created_policies) + msg += "\nExisting policies: " + str(self.existing_policies) + if self.warning_count > 0: + msg += "\nWarnings: " + str(self.warning_count) + return msg + +policy_data = PolicyData() + +def main(): + parser = OptionParser(usage = "python -u %prog [options] ") + (opts, args) = parser.parse_args() + root_path = args[0] + if not os.path.isdir(root_path): + print "ERROR: %s is not a directory" % root_path + sys.exit(1); + + try: + global policy_data + print "Started " + str(policy_data.start_time) + parseConfigurationFile(policy_data) + print "Generating S60 distribution policies to", root_path + print "Policy config:", str(policy_data.policies) + print "Policy for root dir:", str(policy_data.root_policy) + writePolicies(root_path, policy_data) + policy_data.stop_time = datetime.datetime.now() + print "Finished " + str(policy_data.stop_time) + print str(policy_data) + except: + print "ERROR: Unexpected exception" + traceback.print_exc() + print str(policy_data) + sys.exit(1) + +def parseConfigurationFile(policy_data): + config_file = "distribution.policy.s60.configuration.txt" + f = open(config_file) + try: + default_policy = None + line_count = 0; + for line in f.readlines(): + line_count += 1 + line = line.strip() + if len(line) == 0 or line.find("#") == 0: + continue + tokens = line.split(':') + if len(tokens) != 2: + print "ERROR: Invalid line", line_count, "at file", config_file + sys.exit(1) + dir = tokens[0].strip() + dir = dir.replace("/", os.sep) + policy = tokens[1].strip() + if dir == "DEFAULT_POLICY": + default_policy = policy + elif dir == "ROOT_POLICY": + policy_data.root_policy = policy + else: + policy_data.policies += [(dir, policy)] + if default_policy is None: + print "ERROR: Default policy not defined at", config_file + sys.exit(1) + policy_data.policies += [("", default_policy)] + finally: + f.close() + +def writePolicies(root_path, policy_data): + # Write policy for the root directory. + if (not policy_data.root_policy is None) and \ + (policy_data.root_policy != "IGNORE"): + writePolicy(root_path, policy_data.root_policy) + # Write policies for the subdirectories. + for root, dirs, files in os.walk(root_path): + for dir in dirs: + path = os.path.join(root, dir) + policy = getPolicyForPath(path.replace(root_path, ""), policy_data) + if policy != "IGNORE": + writePolicy(path, policy) + +def writePolicy(path, policy): + global policy_data + policy_file = os.path.join(path, 'distribution.policy.s60') + + if os.path.exists(policy_file): + existing_policy = readPolicy(policy_file) + if policy == existing_policy: + print "Policy %s already exists in %s" % (existing_policy, policy_file) + else: + print "WARNING: Policy %s (should be %s) already exists in %s" % (existing_policy, policy, policy_file) + policy_data.warning_count += 1 + policy_data.existing_policies += 1 + return + + f = open(policy_file, "w+") + try: + print "Writing policy", policy, "to", policy_file + f.write(policy) + policy_data.created_policies += 1 + except IOError: + print "ERROR: Writing policy to", policy_file, "failed" + sys.exit(1) + finally: + f.close + +def readPolicy(policy_file): + policy = None + f = open(policy_file) + try: + for line in f.readlines(): + # Take the last line from the policy. + policy = line.strip() + finally: + f.close + return policy + +def getPolicyForPath(target_path, policy_data): + for path, policy in policy_data.policies: + match_path = target_path + if path.find("ROOT" + os.sep) == 0: + # Add keyword ROOT to target_path so that only + # paths in root directory will match. + match_path = "ROOT" + target_path + if match_path.find(path + os.sep) != -1 or \ + match_path.find(path, -len(path)) != -1: + return policy + return None + +if __name__ == "__main__": + main()