Merge html-office-public repo into src
[chromium-blink-merge.git] / chrome / test / chromedriver / cpp_source.py
blob498fd2549ab88cac0ca19f8c96ce8dfe76e98093
1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
5 """Writes C++ header/cc source files for embedding resources into C++."""
7 import datetime
8 import os
11 def WriteSource(base_name,
12 dir_from_src,
13 output_dir,
14 global_string_map):
15 """Writes C++ header/cc source files for the given map of string variables.
17 Args:
18 base_name: The basename of the file, without the extension.
19 dir_from_src: Path from src to the directory that will contain the file,
20 using forward slashes.
21 output_dir: Directory to output the sources to.
22 global_string_map: Map of variable names to their string values. These
23 variables will be available as globals.
24 """
25 copyright = '\n'.join([
26 '// Copyright %s The Chromium Authors. All rights reserved.',
27 '// Use of this source code is governed by a BSD-style license that '
28 'can be',
29 '// found in the LICENSE file.']) % datetime.date.today().year
31 # Write header file.
32 externs = []
33 for name in global_string_map.iterkeys():
34 externs += ['extern const char %s[];' % name]
36 temp = '_'.join(dir_from_src.split('/') + [base_name])
37 define = temp.upper() + '_H_'
38 header = '\n'.join([
39 copyright,
40 '',
41 '#ifndef ' + define,
42 '#define ' + define,
43 '',
44 '\n'.join(externs),
45 '',
46 '#endif // ' + define])
47 header += '\n'
49 with open(os.path.join(output_dir, base_name + '.h'), 'w') as f:
50 f.write(header)
52 # Write cc file.
53 def EscapeLine(line):
54 return line.replace('\\', '\\\\').replace('"', '\\"')
56 definitions = []
57 for name, contents in global_string_map.iteritems():
58 lines = []
59 if '\n' not in contents:
60 lines = [' "%s"' % EscapeLine(contents)]
61 else:
62 for line in contents.split('\n'):
63 lines += [' "%s\\n"' % EscapeLine(line)]
64 definitions += ['const char %s[] =\n%s;' % (name, '\n'.join(lines))]
66 cc = '\n'.join([
67 copyright,
68 '',
69 '#include "%s"' % (dir_from_src + '/' + base_name + '.h'),
70 '',
71 '\n'.join(definitions)])
72 cc += '\n'
74 with open(os.path.join(output_dir, base_name + '.cc'), 'w') as f:
75 f.write(cc)