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

Side by Side Diff: ppapi/generate_ppapi_include_tests.py

Issue 5674004: Add compile assertions to enforce the sizes of all structs and enums in the C... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years 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
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 # Copyright (c) 2010 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2010 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 # This script should be run manually on occasion to make sure the gyp file and 7 # This script should be run manually on occasion to make sure the gyp file and
8 # the includes tests are up to date. 8 # the includes tests are up to date.
9 # It does the following: 9 # It does the following:
10 # - Verifies that all source code is in ppapi.gyp 10 # - Verifies that all source code is in ppapi.gyp
11 # - Verifies that all sources in ppapi.gyp really do exist 11 # - Verifies that all sources in ppapi.gyp really do exist
12 # - Generates tests/test_c_includes.c 12 # - Generates tests/test_c_includes.c
13 # - Generates tests/test_cc_includes.cc 13 # - Generates tests/test_cpp_includes.cc
14 # These tests are checked in to SVN. 14 # These tests are checked in to SVN.
15 # TODO(dmichael): Make this script execute as a gyp action, move the include 15 # TODO(dmichael): Make this script execute as a gyp action, move the include
16 # tests to some 'generated' area, and remove them from version 16 # tests to some 'generated' area, and remove them from version
17 # control. 17 # control.
18 18
19 import re 19 import re
20 import os 20 import os
21 import sys 21 import sys
22 import posixpath 22 import posixpath
23 23
24 # A simple regular expression that should match source files for C++ and C. 24 # A simple regular expression that should match source files for C++ and C.
25 SOURCE_FILE_RE = re.compile('.+\.(cc|c|h)$') 25 SOURCE_FILE_RE = re.compile('.+\.(cc|c|h)$')
26 26
27 # IGNORE_RE is a regular expression that matches directories which contain 27 # IGNORE_RE is a regular expression that matches directories which contain
28 # source that we don't (currently) expect to be in ppapi.gyp. This script will 28 # source that we don't (currently) expect to be in ppapi.gyp. This script will
29 # not check whether source files under these directories are in the gyp file. 29 # not check whether source files under these directories are in the gyp file.
30 # TODO(dmichael): Put examples back in the build. 30 # TODO(dmichael): Put examples back in the build.
31 # TODO(brettw): Put proxy in the build when it's ready. 31 # TODO(brettw): Put proxy in the build when it's ready.
32 IGNORE_RE = re.compile('^(examples|GLES2|proxy).*') 32 IGNORE_RE = re.compile('^(examples|GLES2|proxy|tests\/clang).*')
33 33
34 GYP_TARGETS_KEY = 'targets' 34 GYP_TARGETS_KEY = 'targets'
35 GYP_SOURCES_KEY = 'sources' 35 GYP_SOURCES_KEY = 'sources'
36 GYP_TARGET_NAME_KEY = 'target_name' 36 GYP_TARGET_NAME_KEY = 'target_name'
37 37
38 38
39 # Return a set containing all source files found given an object read from a gyp 39 # Return a set containing all source files found given an object read from a gyp
40 # file. 40 # file.
41 def GetAllGypSources(gyp_file_data): 41 def GetAllGypSources(gyp_file_data):
42 sources = set([]) 42 sources = set([])
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 85
86 86
87 def WriteLines(filename, lines): 87 def WriteLines(filename, lines):
88 outfile = open(filename, 'w') 88 outfile = open(filename, 'w')
89 for line in lines: 89 for line in lines:
90 outfile.write(line) 90 outfile.write(line)
91 outfile.write('\n') 91 outfile.write('\n')
92 92
93 93
94 COPYRIGHT_STRING_C = \ 94 COPYRIGHT_STRING_C = \
95 """ 95 """/* Copyright (c) 2010 The Chromium Authors. All rights reserved.
96 /* Copyright (c) 2010 The Chromium Authors. All rights reserved.
97 * Use of this source code is governed by a BSD-style license that can be 96 * Use of this source code is governed by a BSD-style license that can be
98 * found in the LICENSE file. 97 * found in the LICENSE file.
99 * 98 *
100 * This test simply includes all the C headers to ensure they compile with a C 99 * This test simply includes all the C headers to ensure they compile with a C
101 * compiler. If it compiles, it passes. 100 * compiler. If it compiles, it passes.
102 */ 101 */
103 """ 102 """
104 103
105 COPYRIGHT_STRING_CC = \ 104 COPYRIGHT_STRING_CC = \
106 """ 105 """// Copyright (c) 2010 The Chromium Authors. All rights reserved.
107 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
108 // Use of this source code is governed by a BSD-style license that can be 106 // Use of this source code is governed by a BSD-style license that can be
109 // found in the LICENSE file. 107 // found in the LICENSE file.
110 // 108 //
111 // This test simply includes all the C++ headers to ensure they compile with a 109 // This test simply includes all the C++ headers to ensure they compile with a
112 // C++ compiler. If it compiles, it passes. 110 // C++ compiler. If it compiles, it passes.
113 // 111 //
114 """ 112 """
115 113
116 114
117 # Get the source file names out of the given gyp file data object (as evaluated 115 # Get the source file names out of the given gyp file data object (as evaluated
118 # from a gyp file) for the given target name. Return the string names in 116 # from a gyp file) for the given target name. Return the string names in
119 # sorted order. 117 # sorted order.
120 def GetSourcesForTarget(target_name, gyp_file_data): 118 def GetSourcesForTarget(target_name, gyp_file_data):
121 for target in gyp_file_data[GYP_TARGETS_KEY]: 119 for target in gyp_file_data[GYP_TARGETS_KEY]:
122 if target[GYP_TARGET_NAME_KEY] == target_name: 120 if target[GYP_TARGET_NAME_KEY] == target_name:
123 sources = target[GYP_SOURCES_KEY] 121 sources = target[GYP_SOURCES_KEY]
124 sources.sort() 122 sources.sort()
125 return sources 123 return sources
126 print 'Warning: no target named ', target, ' found.' 124 print 'Warning: no target named ', target, ' found.'
127 return [] 125 return []
128 126
129 127
130 # Generate test_c_includes.c, which is a test to ensure that all the headers in 128 # Generate all_c_includes.h, which includes all C headers. This is part of
131 # ppapi/c can be compiled with a C compiler. 129 # tests/test_c_sizes.c, which includes all C API files to ensure that all
130 # the headers in ppapi/c can be compiled with a C compiler, and also asserts
131 # (with compile-time assertions) that all structs and enums are a particular
132 # size.
132 def GenerateCIncludeTest(gyp_file_data): 133 def GenerateCIncludeTest(gyp_file_data):
133 c_sources = GetSourcesForTarget('ppapi_c', gyp_file_data) 134 c_sources = GetSourcesForTarget('ppapi_c', gyp_file_data)
134 lines = [COPYRIGHT_STRING_C] 135 lines = [COPYRIGHT_STRING_C]
136 lines.append('#ifndef PPAPI_TESTS_ALL_C_INCLUDES_H_\n')
137 lines.append('#define PPAPI_TESTS_ALL_C_INCLUDES_H_\n\n')
135 for source in c_sources: 138 for source in c_sources:
136 lines.append('#include "ppapi/' + source + '"\n') 139 lines.append('#include "ppapi/' + source + '"\n')
137 WriteLines('tests/test_c_includes.c', lines) 140 lines.append('\n#endif /* PPAPI_TESTS_ALL_C_INCLUDES_H_ */\n')
141 WriteLines('tests/all_c_includes.h', lines)
138 142
139 143
140 # Generate test_cc_includes.cc, which is a test to ensure that all the headers 144 # Generate all_cpp_includes.h, which is used by test_cpp_includes.cc to ensure
141 # in ppapi/cpp can be compiled with a C++ compiler. 145 # that all the headers in ppapi/cpp can be compiled with a C++ compiler.
142 def GenerateCCIncludeTest(gyp_file_data): 146 def GenerateCCIncludeTest(gyp_file_data):
143 cc_sources = GetSourcesForTarget('ppapi_cpp_objects', gyp_file_data) 147 cc_sources = GetSourcesForTarget('ppapi_cpp_objects', gyp_file_data)
144 header_re = re.compile('.+\.h$') 148 header_re = re.compile('.+\.h$')
145 lines = [COPYRIGHT_STRING_CC] 149 lines = [COPYRIGHT_STRING_CC]
150 lines.append('#ifndef PPAPI_TESTS_ALL_CPP_INCLUDES_H_\n')
151 lines.append('#define PPAPI_TESTS_ALL_CPP_INCLUDES_H_\n\n')
146 for source in cc_sources: 152 for source in cc_sources:
147 if header_re.match(source): 153 if header_re.match(source):
148 lines.append('#include "ppapi/' + source + '"\n') 154 lines.append('#include "ppapi/' + source + '"\n')
149 WriteLines('tests/test_cc_includes.cc', lines) 155 lines.append('\n#endif // PPAPI_TESTS_ALL_CPP_INCLUDES_H_\n')
156 WriteLines('tests/all_cpp_includes.h', lines)
150 157
151 158
152 def main(): 159 def main():
153 ppapi_gyp_file_name = 'ppapi.gyp' 160 ppapi_gyp_file_name = 'ppapi.gyp'
154 gyp_file_contents = open(ppapi_gyp_file_name).read() 161 gyp_file_contents = open(ppapi_gyp_file_name).read()
155 gyp_file_data = eval(gyp_file_contents) 162 gyp_file_data = eval(gyp_file_contents)
156 VerifyGypFile(gyp_file_data) 163 VerifyGypFile(gyp_file_data)
157 GenerateCIncludeTest(gyp_file_data) 164 GenerateCIncludeTest(gyp_file_data)
158 GenerateCCIncludeTest(gyp_file_data) 165 GenerateCCIncludeTest(gyp_file_data)
159 return 0 166 return 0
160 167
161 168
162 if __name__ == '__main__': 169 if __name__ == '__main__':
163 sys.exit(main()) 170 sys.exit(main())
164 171
OLDNEW
« ppapi/c/dev/pp_video_dev.h ('K') | « ppapi/c/ppb_var.h ('k') | ppapi/ppapi.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698