32 """fuse_gmock_files.py v0.1.0
33 Fuses Google Mock and Google Test source code into two .h files and a .cc file.
36 fuse_gmock_files.py [GMOCK_ROOT_DIR] OUTPUT_DIR
38 Scans GMOCK_ROOT_DIR for Google Mock and Google Test source
39 code, assuming Google Test is in the GMOCK_ROOT_DIR/../googletest
40 directory, and generates three files:
41 OUTPUT_DIR/gtest/gtest.h, OUTPUT_DIR/gmock/gmock.h, and
42 OUTPUT_DIR/gmock-gtest-all.cc. Then you can build your tests
43 by adding OUTPUT_DIR to the include search path and linking
44 with OUTPUT_DIR/gmock-gtest-all.cc. These three files contain
45 everything you need to use Google Mock. Hence you can
46 "install" Google Mock by copying them to wherever you want.
48 GMOCK_ROOT_DIR can be omitted and defaults to the parent
49 directory of the directory holding this script.
52 ./fuse_gmock_files.py fused_gmock
53 ./fuse_gmock_files.py path/to/unpacked/gmock fused_gmock
55 This tool is experimental. In particular, it assumes that there is no
56 conditional inclusion of Google Mock or Google Test headers. Please
57 report any problems to googlemock@googlegroups.com. You can read
58 http://code.google.com/p/googlemock/wiki/CookBook for more
62 __author__ =
'wan@google.com (Zhanyong Wan)'
71 DEFAULT_GMOCK_ROOT_DIR = os.path.join(os.path.dirname(__file__),
'..')
74 sys.path.append(os.path.join(DEFAULT_GMOCK_ROOT_DIR,
'../googletest/scripts'))
75 import fuse_gtest_files
76 gtest = fuse_gtest_files
79 INCLUDE_GMOCK_FILE_REGEX = re.compile(
r'^\s*#\s*include\s*"(gmock/.+)"')
82 GMOCK_H_SEED =
'include/gmock/gmock.h'
83 GMOCK_ALL_CC_SEED =
'src/gmock-all.cc'
86 GTEST_H_OUTPUT =
'gtest/gtest.h'
87 GMOCK_H_OUTPUT =
'gmock/gmock.h'
88 GMOCK_GTEST_ALL_CC_OUTPUT =
'gmock-gtest-all.cc'
92 """Returns the root directory of Google Test."""
94 return os.path.join(gmock_root,
'../googletest')
98 """Makes sure gmock_root points to a valid gmock root directory.
100 The function aborts the program on failure.
104 gtest.VerifyFileExists(gmock_root, GMOCK_H_SEED)
105 gtest.VerifyFileExists(gmock_root, GMOCK_ALL_CC_SEED)
109 """Makes sure output_dir points to a valid output directory.
111 The function aborts the program on failure.
114 gtest.VerifyOutputFile(output_dir, gtest.GTEST_H_OUTPUT)
115 gtest.VerifyOutputFile(output_dir, GMOCK_H_OUTPUT)
116 gtest.VerifyOutputFile(output_dir, GMOCK_GTEST_ALL_CC_OUTPUT)
120 """Scans folder gmock_root to generate gmock/gmock.h in output_dir."""
122 output_file =
file(os.path.join(output_dir, GMOCK_H_OUTPUT),
'w')
123 processed_files = sets.Set()
125 def ProcessFile(gmock_header_path):
126 """Processes the given gmock header file."""
129 if gmock_header_path
in processed_files:
132 processed_files.add(gmock_header_path)
135 for line
in file(os.path.join(gmock_root, gmock_header_path),
'r'):
136 m = INCLUDE_GMOCK_FILE_REGEX.match(line)
139 ProcessFile(
'include/' + m.group(1))
141 m = gtest.INCLUDE_GTEST_FILE_REGEX.match(line)
148 if not gtest.GTEST_H_SEED
in processed_files:
149 processed_files.add(gtest.GTEST_H_SEED)
150 output_file.write(
'#include "%s"\n' % (gtest.GTEST_H_OUTPUT,))
153 output_file.write(line)
155 ProcessFile(GMOCK_H_SEED)
160 """Scans folder gmock_root to fuse gmock-all.cc into output_file."""
162 processed_files = sets.Set()
164 def ProcessFile(gmock_source_file):
165 """Processes the given gmock source file."""
168 if gmock_source_file
in processed_files:
171 processed_files.add(gmock_source_file)
174 for line
in file(os.path.join(gmock_root, gmock_source_file),
'r'):
175 m = INCLUDE_GMOCK_FILE_REGEX.match(line)
182 if not GMOCK_H_SEED
in processed_files:
183 processed_files.add(GMOCK_H_SEED)
184 output_file.write(
'#include "%s"\n' % (GMOCK_H_OUTPUT,))
186 m = gtest.INCLUDE_GTEST_FILE_REGEX.match(line)
193 m = gtest.INCLUDE_SRC_FILE_REGEX.match(line)
196 ProcessFile(m.group(1))
199 output_file.write(line)
201 ProcessFile(GMOCK_ALL_CC_SEED)
205 """Scans folder gmock_root to generate gmock-gtest-all.cc in output_dir."""
207 output_file =
file(os.path.join(output_dir, GMOCK_GTEST_ALL_CC_OUTPUT),
'w')
216 """Fuses gtest.h, gmock.h, and gmock-gtest-all.h."""
230 FuseGMock(DEFAULT_GMOCK_ROOT_DIR, sys.argv[1])
239 if __name__ ==
'__main__':