--- /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] <path>")
+ (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()