| Index: chrome/tools/build/generate_policy_source.py
|
| diff --git a/chrome/tools/build/generate_policy_source.py b/chrome/tools/build/generate_policy_source.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1051092ece054d10ab6d4524bdecdef07fd38091
|
| --- /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();
|
|
|