Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(532)

Side by Side Diff: chrome/tools/build/generate_policy_source.py

Issue 6002015: Policy: generate boilerplate policy type and constant code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix build Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 #!/usr/bin/python2.4
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 '''
7 Usage: pyhton generate_policy_source.py [switches] input_file output_file
8 -h generate header file of policy constants
gfeher 2011/01/04 12:58:06 Nit: turn this into --something?
danno 2011/01/11 13:03:48 Done.
9 --cc generate source file of policy constants
10 --pte generate header file for policy type enumeration
11 --proto generate .proto file containing all template_file_contents
12 '''
13
14 import getopt;
15 import sys;
16
17 def main():
18 try:
19 opts, args = getopt.getopt(sys.argv[1:], "h", ["cc", "proto", "pte", "help"] )
20 except getopt.GetoptError, err:
21 print str(err) # will print something like "option -a not recognized"
22 usage()
23 sys.exit(2)
24 if len(opts) < 1 or len(opts) > 1:
25 print "one and only one option must be specified."
26 usage()
27 sys.exit(2)
28 if len(args) < 2 or len(args) > 2:
29 print "both an input and output file must be specified."
30 usage()
31 sys.exit(2)
32 template_file_contents = _LoadJSONFile(args[0]);
33 option, arg = opts[0]
34 if option == "--help":
35 usage()
36 elif option == "-h":
37 _WritePolicyConstantHeader(template_file_contents, args[1]);
38 elif option == "--cc":
39 _WritePolicyConstantSource(template_file_contents, args[1]);
40 elif option == "--pte":
41 _WritePolicyTypeEnumerationHeader(template_file_contents, args[1]);
42 elif option == "--proto":
43 # TODO(danno): generate the protobuffer.
44 print "not implemented"
45 sys.exit(2)
46
47 def usage():
48 print __doc__
49
50 def _WritePolicyConstantHeader(template_file_contents, header_path):
51 with open(header_path, "w") as f:
52 f.write('''#ifndef CHROME_COMMON_POLICY_CONSTANTS_H_
53 #define CHROME_COMMON_POLICY_CONSTANTS_H_
54 #pragma once
55
56 // WARNING: This file is generated, to not modify it directly.
57
58 #include "build/build_config.h"
59
60 namespace policy {
61
62 #if defined(OS_WIN)
63 // The windows registry path we read the policy configuration from.
64 extern const wchar_t kRegistrySubKey[];
65 #endif
66
67 // Key names for the policy settings.
68 namespace key {
69
70 ''')
gfeher 2011/01/04 12:58:06 These multi-line string constants make it difficul
danno 2011/01/11 13:03:48 Done.
71 for policy_name in _GetPolicyNameList(template_file_contents):
72 f.write('extern const char k' + policy_name + '[];\n')
73 f.write('''
74 } // namespace key
75
76 } // namespace policy
77
78 #endif // CHROME_COMMON_POLICY_CONSTANTS_H_
79 ''')
80 f.closed
gfeher 2011/01/04 12:58:06 f.close() ?
danno 2011/01/11 13:03:48 Done.
81
82 def _WritePolicyConstantSource(template_file_contents, header_path):
83 with open(header_path, "w") as f:
84 f.write('''#include "chrome/common/policy_constants.h"
85
86 // WARNING: This file is generated, to not modify it directly.
87
88 namespace policy {
89
90 #if defined(OS_WIN)
91 #if defined(GOOGLE_CHROME_BUILD)
92 const wchar_t kRegistrySubKey[] = L"SOFTWARE\\Policies\\Google\\Chrome";
93 #else
94 const wchar_t kRegistrySubKey[] = L"SOFTWARE\\Policies\\Chromium";
95 #endif
96 #endif
97
98 namespace key {
99
100 ''')
101 for policy_name in _GetPolicyNameList(template_file_contents):
102 f.write('const char k' + policy_name)
103 f.write('[] = "' + policy_name + '";\n')
gfeher 2011/01/04 12:58:06 I suggest the following for the above two lines: f
danno 2011/01/11 13:03:48 Done.
104 f.write('''
105 } // namespace key
106
107 } // namespace policy
108 ''')
109 f.closed
110
111 def _WritePolicyTypeEnumerationHeader(template_file_contents, header_path):
112 with open(header_path, "w") as f:
113 f.write('''#ifndef CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_TYPE_H_
114 #define CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_TYPE_H_
115 #pragma once
116
117 // WARNING: This file is generated, to not modify it directly.
118
119 namespace policy {
120
121 enum ConfigurationPolicyType {
122 ''')
123 for policy_name in _GetPolicyNameList(template_file_contents):
124 f.write(' kPolicy' + policy_name + ",\n");
125 f.write('''};
126
127 } // namespace policy
128
129 #endif // CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_TYPE_H_
130 ''')
131 f.closed
132
133 def _GetPolicyNameList(template_file_contents):
134 policy_names = [];
135 for policy in template_file_contents['policy_definitions']:
136 if policy['type'] == 'group':
137 for sub_policy in policy['policies']:
138 policy_names.append(sub_policy['name'])
139 else:
140 policy_names.append(policy['name'])
141 policy_names.sort()
142 return policy_names
143
144 def _LoadJSONFile(json_file):
145 with open(json_file, "r") as f:
146 text = f.read()
147 f.closed
gfeher 2011/01/04 12:58:06 Didn't you mean f.close() ?
gfeher 2011/01/04 13:13:17 Okay, sorry, now I've looked up the with statement
danno 2011/01/11 13:03:48 Done.
danno 2011/01/11 13:03:48 Done.
148 globs = {}
149 exec('data = ' + text, globs)
150 return globs['data']
151
152 if __name__ == '__main__':
153 main();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698