156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan#!/usr/bin/env python 256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# 356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# Copyright 2009, Google Inc. 456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# All rights reserved. 556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# 656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# Redistribution and use in source and binary forms, with or without 756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# modification, are permitted provided that the following conditions are 856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# met: 956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# 1056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# * Redistributions of source code must retain the above copyright 1156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# notice, this list of conditions and the following disclaimer. 1256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# * Redistributions in binary form must reproduce the above 1356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# copyright notice, this list of conditions and the following disclaimer 1456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# in the documentation and/or other materials provided with the 1556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# distribution. 1656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# * Neither the name of Google Inc. nor the names of its 1756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# contributors may be used to endorse or promote products derived from 1856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# this software without specific prior written permission. 1956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# 2056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 3256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan"""fuse_gmock_files.py v0.1.0 3356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanFuses Google Mock and Google Test source code into two .h files and a .cc file. 3456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 3556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanSYNOPSIS 3656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan fuse_gmock_files.py [GMOCK_ROOT_DIR] OUTPUT_DIR 3756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 3856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan Scans GMOCK_ROOT_DIR for Google Mock and Google Test source 3939062f4e3005cac0b919d3dbe83b3d1e6b61a8aeSimon Newton code, assuming Google Test is in the GMOCK_ROOT_DIR/../googletest 4039062f4e3005cac0b919d3dbe83b3d1e6b61a8aeSimon Newton directory, and generates three files: 4156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan OUTPUT_DIR/gtest/gtest.h, OUTPUT_DIR/gmock/gmock.h, and 4256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan OUTPUT_DIR/gmock-gtest-all.cc. Then you can build your tests 4356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan by adding OUTPUT_DIR to the include search path and linking 4456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan with OUTPUT_DIR/gmock-gtest-all.cc. These three files contain 4556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan everything you need to use Google Mock. Hence you can 4656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan "install" Google Mock by copying them to wherever you want. 4756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 4856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan GMOCK_ROOT_DIR can be omitted and defaults to the parent 4956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan directory of the directory holding this script. 5056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 5156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanEXAMPLES 5256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan ./fuse_gmock_files.py fused_gmock 5356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan ./fuse_gmock_files.py path/to/unpacked/gmock fused_gmock 5456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 5556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanThis tool is experimental. In particular, it assumes that there is no 5656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanconditional inclusion of Google Mock or Google Test headers. Please 5756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanreport any problems to googlemock@googlegroups.com. You can read 5856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanhttp://code.google.com/p/googlemock/wiki/CookBook for more 5956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.waninformation. 6056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan""" 6156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 6256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan__author__ = 'wan@google.com (Zhanyong Wan)' 6356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 6456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanimport os 6556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanimport re 6656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanimport sets 6756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanimport sys 6856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 6956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# We assume that this file is in the scripts/ directory in the Google 7056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# Mock root directory. 7156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanDEFAULT_GMOCK_ROOT_DIR = os.path.join(os.path.dirname(__file__), '..') 7256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 7339062f4e3005cac0b919d3dbe83b3d1e6b61a8aeSimon Newton# We need to call into googletest/scripts/fuse_gtest_files.py. 7439062f4e3005cac0b919d3dbe83b3d1e6b61a8aeSimon Newtonsys.path.append(os.path.join(DEFAULT_GMOCK_ROOT_DIR, '../googletest/scripts')) 7556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanimport fuse_gtest_files 7656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wangtest = fuse_gtest_files 7756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 7853e08c44dd34857ba57581d7c5774d6c96a8d0e1zhanyong.wan# Regex for matching '#include "gmock/..."'. 7953e08c44dd34857ba57581d7c5774d6c96a8d0e1zhanyong.wanINCLUDE_GMOCK_FILE_REGEX = re.compile(r'^\s*#\s*include\s*"(gmock/.+)"') 8056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 8156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# Where to find the source seed files. 8256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanGMOCK_H_SEED = 'include/gmock/gmock.h' 8356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanGMOCK_ALL_CC_SEED = 'src/gmock-all.cc' 8456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 8556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan# Where to put the generated files. 8656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanGTEST_H_OUTPUT = 'gtest/gtest.h' 8756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanGMOCK_H_OUTPUT = 'gmock/gmock.h' 8856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanGMOCK_GTEST_ALL_CC_OUTPUT = 'gmock-gtest-all.cc' 8956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 9056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 9156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wandef GetGTestRootDir(gmock_root): 9256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan """Returns the root directory of Google Test.""" 9356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 9439062f4e3005cac0b919d3dbe83b3d1e6b61a8aeSimon Newton return os.path.join(gmock_root, '../googletest') 9556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 9656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 9756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wandef ValidateGMockRootDir(gmock_root): 9856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan """Makes sure gmock_root points to a valid gmock root directory. 9956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 10056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan The function aborts the program on failure. 10156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan """ 10256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 10356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan gtest.ValidateGTestRootDir(GetGTestRootDir(gmock_root)) 10456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan gtest.VerifyFileExists(gmock_root, GMOCK_H_SEED) 10556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan gtest.VerifyFileExists(gmock_root, GMOCK_ALL_CC_SEED) 10656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 10756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 10856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wandef ValidateOutputDir(output_dir): 10956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan """Makes sure output_dir points to a valid output directory. 11056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 11156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan The function aborts the program on failure. 11256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan """ 11356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 11456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan gtest.VerifyOutputFile(output_dir, gtest.GTEST_H_OUTPUT) 11556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan gtest.VerifyOutputFile(output_dir, GMOCK_H_OUTPUT) 11656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan gtest.VerifyOutputFile(output_dir, GMOCK_GTEST_ALL_CC_OUTPUT) 11756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 11856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 11956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wandef FuseGMockH(gmock_root, output_dir): 12056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan """Scans folder gmock_root to generate gmock/gmock.h in output_dir.""" 12156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 12256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan output_file = file(os.path.join(output_dir, GMOCK_H_OUTPUT), 'w') 12356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan processed_files = sets.Set() # Holds all gmock headers we've processed. 12456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 12556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan def ProcessFile(gmock_header_path): 12656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan """Processes the given gmock header file.""" 12756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 12856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # We don't process the same header twice. 12956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan if gmock_header_path in processed_files: 13056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan return 13156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 13256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan processed_files.add(gmock_header_path) 13356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 13456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # Reads each line in the given gmock header. 13556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan for line in file(os.path.join(gmock_root, gmock_header_path), 'r'): 13656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan m = INCLUDE_GMOCK_FILE_REGEX.match(line) 13756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan if m: 13853e08c44dd34857ba57581d7c5774d6c96a8d0e1zhanyong.wan # It's '#include "gmock/..."' - let's process it recursively. 13956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan ProcessFile('include/' + m.group(1)) 14056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan else: 14156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan m = gtest.INCLUDE_GTEST_FILE_REGEX.match(line) 14256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan if m: 14353e08c44dd34857ba57581d7c5774d6c96a8d0e1zhanyong.wan # It's '#include "gtest/foo.h"'. We translate it to 14453e08c44dd34857ba57581d7c5774d6c96a8d0e1zhanyong.wan # "gtest/gtest.h", regardless of what foo is, since all 14556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # gtest headers are fused into gtest/gtest.h. 14656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 14756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # There is no need to #include gtest.h twice. 14856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan if not gtest.GTEST_H_SEED in processed_files: 14956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan processed_files.add(gtest.GTEST_H_SEED) 15053e08c44dd34857ba57581d7c5774d6c96a8d0e1zhanyong.wan output_file.write('#include "%s"\n' % (gtest.GTEST_H_OUTPUT,)) 15156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan else: 15256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # Otherwise we copy the line unchanged to the output file. 15356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan output_file.write(line) 15456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 15556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan ProcessFile(GMOCK_H_SEED) 15656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan output_file.close() 15756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 15856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 15956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wandef FuseGMockAllCcToFile(gmock_root, output_file): 16056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan """Scans folder gmock_root to fuse gmock-all.cc into output_file.""" 16156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 16256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan processed_files = sets.Set() 16356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 16456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan def ProcessFile(gmock_source_file): 16556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan """Processes the given gmock source file.""" 16656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 16756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # We don't process the same #included file twice. 16856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan if gmock_source_file in processed_files: 16956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan return 17056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 17156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan processed_files.add(gmock_source_file) 17256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 17356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # Reads each line in the given gmock source file. 17456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan for line in file(os.path.join(gmock_root, gmock_source_file), 'r'): 17556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan m = INCLUDE_GMOCK_FILE_REGEX.match(line) 17656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan if m: 17753e08c44dd34857ba57581d7c5774d6c96a8d0e1zhanyong.wan # It's '#include "gmock/foo.h"'. We treat it as '#include 17853e08c44dd34857ba57581d7c5774d6c96a8d0e1zhanyong.wan # "gmock/gmock.h"', as all other gmock headers are being fused 17956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # into gmock.h and cannot be #included directly. 18056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 18153e08c44dd34857ba57581d7c5774d6c96a8d0e1zhanyong.wan # There is no need to #include "gmock/gmock.h" more than once. 18256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan if not GMOCK_H_SEED in processed_files: 18356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan processed_files.add(GMOCK_H_SEED) 18453e08c44dd34857ba57581d7c5774d6c96a8d0e1zhanyong.wan output_file.write('#include "%s"\n' % (GMOCK_H_OUTPUT,)) 18556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan else: 18656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan m = gtest.INCLUDE_GTEST_FILE_REGEX.match(line) 18756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan if m: 18853e08c44dd34857ba57581d7c5774d6c96a8d0e1zhanyong.wan # It's '#include "gtest/..."'. 18956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # There is no need to #include gtest.h as it has been 19056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # #included by gtest-all.cc. 19156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan pass 19256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan else: 19356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan m = gtest.INCLUDE_SRC_FILE_REGEX.match(line) 19456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan if m: 19556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # It's '#include "src/foo"' - let's process it recursively. 19656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan ProcessFile(m.group(1)) 19756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan else: 19856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # Otherwise we copy the line unchanged to the output file. 19956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan output_file.write(line) 20056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 20156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan ProcessFile(GMOCK_ALL_CC_SEED) 20256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 20356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 20456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wandef FuseGMockGTestAllCc(gmock_root, output_dir): 20556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan """Scans folder gmock_root to generate gmock-gtest-all.cc in output_dir.""" 20656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 20756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan output_file = file(os.path.join(output_dir, GMOCK_GTEST_ALL_CC_OUTPUT), 'w') 20856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # First, fuse gtest-all.cc into gmock-gtest-all.cc. 20956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan gtest.FuseGTestAllCcToFile(GetGTestRootDir(gmock_root), output_file) 21056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # Next, append fused gmock-all.cc to gmock-gtest-all.cc. 21156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan FuseGMockAllCcToFile(gmock_root, output_file) 21256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan output_file.close() 21356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 21456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 21556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wandef FuseGMock(gmock_root, output_dir): 21656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan """Fuses gtest.h, gmock.h, and gmock-gtest-all.h.""" 21756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 21856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan ValidateGMockRootDir(gmock_root) 21956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan ValidateOutputDir(output_dir) 22056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 22156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan gtest.FuseGTestH(GetGTestRootDir(gmock_root), output_dir) 22256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan FuseGMockH(gmock_root, output_dir) 22356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan FuseGMockGTestAllCc(gmock_root, output_dir) 22456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 22556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 22656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wandef main(): 22756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan argc = len(sys.argv) 22856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan if argc == 2: 22956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # fuse_gmock_files.py OUTPUT_DIR 23056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan FuseGMock(DEFAULT_GMOCK_ROOT_DIR, sys.argv[1]) 23156fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan elif argc == 3: 23256fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan # fuse_gmock_files.py GMOCK_ROOT_DIR OUTPUT_DIR 23356fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan FuseGMock(sys.argv[1], sys.argv[2]) 23456fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan else: 23556fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan print __doc__ 23656fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan sys.exit(1) 23756fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 23856fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan 23956fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wanif __name__ == '__main__': 24056fe7460a898f8d0dea4869ab4ff9c598ba90085zhanyong.wan main() 241