diff options
author | danno@chromium.org <danno@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-27 12:07:08 +0000 |
---|---|---|
committer | danno@chromium.org <danno@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-27 12:07:08 +0000 |
commit | 150f43b345029c037176b4d23c2c32aacd8b6dfc (patch) | |
tree | 35ea50a24ae1ffc7997a84af592434b80b48dbef /chrome/tools | |
parent | 5b8bcd40e3f3b7426ddee939054913505f43156f (diff) | |
download | chromium_src-150f43b345029c037176b4d23c2c32aacd8b6dfc.zip chromium_src-150f43b345029c037176b4d23c2c32aacd8b6dfc.tar.gz chromium_src-150f43b345029c037176b4d23c2c32aacd8b6dfc.tar.bz2 |
Policy: generate boilerplate policy type and constant code.
This is the first step to being able to re-constitute policy from a non-generic protobuf in a policy request in a fully automated way (i.e. the code for the process can be generated). The non-generic protobuf is required for automatic merging of policy on the server-side.
BUG=68309
TEST=existing policy/provider tests
Review URL: http://codereview.chromium.org/6002015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72784 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/tools')
-rw-r--r-- | chrome/tools/build/generate_policy_source.py | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/chrome/tools/build/generate_policy_source.py b/chrome/tools/build/generate_policy_source.py new file mode 100644 index 0000000..1051092 --- /dev/null +++ b/chrome/tools/build/generate_policy_source.py @@ -0,0 +1,142 @@ +#!/usr/bin/python +# Copyright (c) 2011 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +'''python %prog [options] platform template + +platform specifies which platform source is being generated for + and can be one of (win, mac, linux). +template is the path to a .json policy template file.''' + +from __future__ import with_statement +from optparse import OptionParser +import sys; + + +CHROME_SUBKEY = 'SOFTWARE\\\\Policies\\\\Google\\\\Chrome'; +CHROMIUM_SUBKEY = 'SOFTWARE\\\\Policies\\\\Chromium'; + + +def main(): + parser = OptionParser(usage=__doc__); + parser.add_option("--pch", "--policy-constants-header", dest="header_path", + help="generate header file of policy constants", + metavar="FILE"); + parser.add_option("--pcc", "--policy-constants-source", dest="source_path", + help="generate source file of policy constants", + metavar="FILE"); + parser.add_option("--pth", "--policy-type-header", dest="type_path", + help="generate header file for policy type enumeration", + metavar="FILE"); + + (opts, args) = parser.parse_args(); + + if len(args) < 2 or len(args) > 2: + print "exactly one platform and input file must be specified." + parser.print_help() + sys.exit(2) + template_file_contents = _LoadJSONFile(args[1]); + if opts.header_path is not None: + _WritePolicyConstantHeader(template_file_contents, + args, + opts); + if opts.source_path is not None: + _WritePolicyConstantSource(template_file_contents, + args, + opts); + if opts.type_path is not None: + _WritePolicyTypeEnumerationHeader(template_file_contents, + args, + opts); + + +def _OutputGeneratedWarningForC(f, template_file_path): + f.write('//\n' + '// DO NOT MODIFY THIS FILE DIRECTLY!\n' + '// IT IS GENERATED BY generate_policy_source.py\n' + '// FROM ' + template_file_path + ' \n' + '//\n\n') + + +def _WritePolicyConstantHeader(template_file_contents, args, opts): + platform = args[0]; + with open(opts.header_path, "w") as f: + _OutputGeneratedWarningForC(f, args[1]) + f.write('#ifndef CHROME_COMMON_POLICY_CONSTANTS_H_\n' + '#define CHROME_COMMON_POLICY_CONSTANTS_H_\n' + '#pragma once\n' + '\n' + 'namespace policy {\n\n') + if platform == "win": + f.write('// The windows registry path where policy configuration ' + 'resides.\nextern const wchar_t kRegistrySubKey[];\n\n') + f.write('// Key names for the policy settings.\n' + 'namespace key {\n\n') + for policy_name in _GetPolicyNameList(template_file_contents): + f.write('extern const char k' + policy_name + '[];\n') + f.write('\n} // namespace key\n\n' + '} // namespace policy\n\n' + '#endif // CHROME_COMMON_POLICY_CONSTANTS_H_\n') + + +def _WritePolicyConstantSource(template_file_contents, args, opts): + platform = args[0]; + with open(opts.source_path, "w") as f: + _OutputGeneratedWarningForC(f, args[1]) + f.write('#include "policy/policy_constants.h"\n' + '\n' + 'namespace policy {\n' + '\n') + if platform == "win": + f.write('#if defined(GOOGLE_CHROME_BUILD)\n' + 'const wchar_t kRegistrySubKey[] = ' + 'L"' + CHROME_SUBKEY + '";\n' + '#else\n' + 'const wchar_t kRegistrySubKey[] = ' + 'L"' + CHROMIUM_SUBKEY + '";\n' + '#endif\n\n') + f.write('namespace key {\n\n') + for policy_name in _GetPolicyNameList(template_file_contents): + f.write('const char k%s[] = "%s";\n' % (policy_name, policy_name)) + f.write('\n} // namespace key\n\n' + '} // namespace policy\n') + + +def _WritePolicyTypeEnumerationHeader(template_file_contents, args, opts): + with open(opts.type_path, "w") as f: + _OutputGeneratedWarningForC(f, args[1]) + f.write('#ifndef CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_TYPE_H_\n' + '#define CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_TYPE_H_\n' + '#pragma once\n' + '\n' + 'namespace policy {\n' + '\n' + 'enum ConfigurationPolicyType {\n') + for policy_name in _GetPolicyNameList(template_file_contents): + f.write(' kPolicy' + policy_name + ",\n"); + f.write('};\n\n' + '} // namespace policy\n\n' + '#endif // CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_TYPE_H_\n') + + +def _GetPolicyNameList(template_file_contents): + policy_names = []; + for policy in template_file_contents['policy_definitions']: + if policy['type'] == 'group': + for sub_policy in policy['policies']: + policy_names.append(sub_policy['name']) + else: + policy_names.append(policy['name']) + policy_names.sort() + return policy_names + + +def _LoadJSONFile(json_file): + with open(json_file, "r") as f: + text = f.read() + return eval(text) + + +if __name__ == '__main__': + main(); |