1167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgGoogle C++ Testing Framework
2167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org============================
3167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
4167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orghttp://code.google.com/p/googletest/
5167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
6167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgOverview
7167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org--------
8167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
9167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgGoogle's framework for writing C++ tests on a variety of platforms
10167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org(Linux, Mac OS X, Windows, Windows CE, Symbian, etc).  Based on the
11167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgxUnit architecture.  Supports automatic test discovery, a rich set of
12167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgassertions, user-defined assertions, death tests, fatal and non-fatal
13167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgfailures, various options for running the tests, and XML test report
14167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orggeneration.
15167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
16167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgPlease see the project page above for more information as well as the
17167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgmailing list for questions, discussions, and development.  There is
18167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgalso an IRC channel on OFTC (irc.oftc.net) #gtest available.  Please
19167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgjoin us!
20167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
21167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgRequirements for End Users
22167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org--------------------------
23167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
24167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgGoogle Test is designed to have fairly minimal requirements to build
25167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.organd use with your projects, but there are some.  Currently, we support
26167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgLinux, Windows, Mac OS X, and Cygwin.  We will also make our best
27167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgeffort to support other platforms (e.g. Solaris, AIX, and z/OS).
28167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgHowever, since core members of the Google Test project have no access
29167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgto these platforms, Google Test may have outstanding issues there.  If
30167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgyou notice any problems on your platform, please notify
31167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orggoogletestframework@googlegroups.com.  Patches for fixing them are
32167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgeven more welcome!
33167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
34167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Linux Requirements ###
35167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
36167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgThese are the base requirements to build and use Google Test from a source
37167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgpackage (as described below):
38167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  * GNU-compatible Make or gmake
39167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  * POSIX-standard shell
40167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  * POSIX(-2) Regular Expressions (regex.h)
41167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  * A C++98-standard-compliant compiler
42167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
43167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Windows Requirements ###
44167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
45167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  * Microsoft Visual C++ 7.1 or newer
46167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
47167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Cygwin Requirements ###
48167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
49167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  * Cygwin 1.5.25-14 or newer
50167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
51167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Mac OS X Requirements ###
52167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
53167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  * Mac OS X 10.4 Tiger or newer
54167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  * Developer Tools Installed
55167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
56167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgAlso, you'll need CMake 2.6.4 or higher if you want to build the
57167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgsamples using the provided CMake script, regardless of the platform.
58167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
59167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgRequirements for Contributors
60167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org-----------------------------
61167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
62167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgWe welcome patches.  If you plan to contribute a patch, you need to
63167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgbuild Google Test and its own tests from an SVN checkout (described
64167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgbelow), which has further requirements:
65167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
66167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  * Python version 2.3 or newer (for running some of the tests and
67167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    re-generating certain source files from templates)
68167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  * CMake 2.6.4 or newer
69167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
70167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgGetting the Source
71167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org------------------
72167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
73167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgThere are two primary ways of getting Google Test's source code: you
74167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgcan download a stable source release in your preferred archive format,
75167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgor directly check out the source from our Subversion (SVN) repositary.
76167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgThe SVN checkout requires a few extra steps and some extra software
77167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgpackages on your system, but lets you track the latest development and
78167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgmake patches much more easily, so we highly encourage it.
79167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
80167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Source Package ###
81167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
82167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgGoogle Test is released in versioned source packages which can be
83167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgdownloaded from the download page [1].  Several different archive
84167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgformats are provided, but the only difference is the tools used to
85167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgmanipulate them, and the size of the resulting file.  Download
86167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgwhichever you are most comfortable with.
87167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
88167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  [1] http://code.google.com/p/googletest/downloads/list
89167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
90167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgOnce the package is downloaded, expand it using whichever tools you
91167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgprefer for that type.  This will result in a new directory with the
92167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgname "gtest-X.Y.Z" which contains all of the source code.  Here are
93167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgsome examples on Linux:
94167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
95167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  tar -xvzf gtest-X.Y.Z.tar.gz
96167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  tar -xvjf gtest-X.Y.Z.tar.bz2
97167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  unzip gtest-X.Y.Z.zip
98167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
99167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### SVN Checkout ###
100167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
101167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgTo check out the main branch (also known as the "trunk") of Google
102167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgTest, run the following Subversion command:
103167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
104167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn
105167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
106167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgSetting up the Build
107167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org--------------------
108167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
109167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgTo build Google Test and your tests that use it, you need to tell your
110167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgbuild system where to find its headers and source files.  The exact
111167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgway to do it depends on which build system you use, and is usually
112167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgstraightforward.
113167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
114167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Generic Build Instructions ###
115167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
116167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgSuppose you put Google Test in directory ${GTEST_DIR}.  To build it,
117167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgcreate a library build target (or a project as called by Visual Studio
118167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.organd Xcode) to compile
119167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
120167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  ${GTEST_DIR}/src/gtest-all.cc
121167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
1220d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.orgwith ${GTEST_DIR}/include in the system header search path and ${GTEST_DIR}
1230d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.orgin the normal header search path.  Assuming a Linux-like system and gcc,
124167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgsomething like the following will do:
125167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
1260d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org  g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
1270d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org      -pthread -c ${GTEST_DIR}/src/gtest-all.cc
128167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  ar -rv libgtest.a gtest-all.o
129167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
1300d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org(We need -pthread as Google Test uses threads.)
1310d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org
132167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgNext, you should compile your test source file with
1330d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org${GTEST_DIR}/include in the system header search path, and link it
1340d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.orgwith gtest and any other necessary libraries:
135167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
1360d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org  g++ -isystem ${GTEST_DIR}/include -pthread path/to/your_test.cc libgtest.a \
1370d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org      -o your_test
138167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
139167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgAs an example, the make/ directory contains a Makefile that you can
140167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orguse to build Google Test on systems where GNU make is available
141167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org(e.g. Linux, Mac OS X, and Cygwin).  It doesn't try to build Google
142167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgTest's own tests.  Instead, it just builds the Google Test library and
143167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orga sample test.  You can use it as a starting point for your own build
144167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgscript.
145167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
146167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgIf the default settings are correct for your environment, the
147167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgfollowing commands should succeed:
148167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
149167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  cd ${GTEST_DIR}/make
150167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  make
151167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  ./sample1_unittest
152167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
153167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgIf you see errors, try to tweak the contents of make/Makefile to make
154167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgthem go away.  There are instructions in make/Makefile on how to do
155167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgit.
156167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
157167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Using CMake ###
158167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
159167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgGoogle Test comes with a CMake build script (CMakeLists.txt) that can
160167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgbe used on a wide range of platforms ("C" stands for cross-platofrm.).
161167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgIf you don't have CMake installed already, you can download it for
162167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgfree from http://www.cmake.org/.
163167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
164167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgCMake works by generating native makefiles or build projects that can
165167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgbe used in the compiler environment of your choice.  The typical
166167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgworkflow starts with:
167167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
168167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  mkdir mybuild       # Create a directory to hold the build output.
169167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  cd mybuild
170167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  cmake ${GTEST_DIR}  # Generate native build scripts.
171167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
172167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgIf you want to build Google Test's samples, you should replace the
173167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orglast command with
174167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
175167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  cmake -Dgtest_build_samples=ON ${GTEST_DIR}
176167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
177167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgIf you are on a *nix system, you should now see a Makefile in the
178167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgcurrent directory.  Just type 'make' to build gtest.
179167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
180167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgIf you use Windows and have Vistual Studio installed, a gtest.sln file
181167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.organd several .vcproj files will be created.  You can then build them
182167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgusing Visual Studio.
183167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
184167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgOn Mac OS X with Xcode installed, a .xcodeproj file will be generated.
185167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
186167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Legacy Build Scripts ###
187167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
188167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgBefore settling on CMake, we have been providing hand-maintained build
189167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgprojects/scripts for Visual Studio, Xcode, and Autotools.  While we
190167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgcontinue to provide them for convenience, they are not actively
191167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgmaintained any more.  We highly recommend that you follow the
192167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orginstructions in the previous two sections to integrate Google Test
193167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgwith your existing build system.
194167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
195167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgIf you still need to use the legacy build scripts, here's how:
196167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
197167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgThe msvc\ folder contains two solutions with Visual C++ projects.
198167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgOpen the gtest.sln or gtest-md.sln file using Visual Studio, and you
199167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgare ready to build Google Test the same way you build any Visual
200167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgStudio project.  Files that have names ending with -md use DLL
201167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgversions of Microsoft runtime libraries (the /MD or the /MDd compiler
202167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgoption).  Files without that suffix use static versions of the runtime
203167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orglibraries (the /MT or the /MTd option).  Please note that one must use
204167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgthe same option to compile both gtest and the test code.  If you use
205167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgVisual Studio 2005 or above, we recommend the -md version as /MD is
206167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgthe default for new projects in these versions of Visual Studio.
207167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
208167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgOn Mac OS X, open the gtest.xcodeproj in the xcode/ folder using
209167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgXcode.  Build the "gtest" target.  The universal binary framework will
210167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgend up in your selected build directory (selected in the Xcode
211167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org"Preferences..." -> "Building" pane and defaults to xcode/build).
212167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgAlternatively, at the command line, enter:
213167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
214167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  xcodebuild
215167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
216167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgThis will build the "Release" configuration of gtest.framework in your
217167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgdefault build location.  See the "xcodebuild" man page for more
218167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orginformation about building different configurations and building in
219167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgdifferent locations.
220167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
2210d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.orgIf you wish to use the Google Test Xcode project with Xcode 4.x and
2220d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.orgabove, you need to either:
2230d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org * update the SDK configuration options in xcode/Config/General.xconfig.
2240d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org   Comment options SDKROOT, MACOS_DEPLOYMENT_TARGET, and GCC_VERSION. If
2250d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org   you choose this route you lose the ability to target earlier versions
2260d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org   of MacOS X.
2270d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org * Install an SDK for an earlier version. This doesn't appear to be
2280d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org   supported by Apple, but has been reported to work
2290d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org   (http://stackoverflow.com/questions/5378518).
2300d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org
231167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgTweaking Google Test
232167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org--------------------
233167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
234167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgGoogle Test can be used in diverse environments.  The default
235167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgconfiguration may not work (or may not work well) out of the box in
236167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgsome environments.  However, you can easily tweak Google Test by
237167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgdefining control macros on the compiler command line.  Generally,
238167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgthese macros are named like GTEST_XYZ and you define them to either 1
239167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgor 0 to enable or disable a certain feature.
240167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
241167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgWe list the most frequently used macros below.  For a complete list,
242167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgsee file include/gtest/internal/gtest-port.h.
243167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
244167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Choosing a TR1 Tuple Library ###
245167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
246167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgSome Google Test features require the C++ Technical Report 1 (TR1)
247167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgtuple library, which is not yet available with all compilers.  The
248167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orggood news is that Google Test implements a subset of TR1 tuple that's
249167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgenough for its own need, and will automatically use this when the
250167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgcompiler doesn't provide TR1 tuple.
251167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
252167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgUsually you don't need to care about which tuple library Google Test
253167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orguses.  However, if your project already uses TR1 tuple, you need to
254167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgtell Google Test to use the same TR1 tuple library the rest of your
255167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgproject uses, or the two tuple implementations will clash.  To do
256167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgthat, add
257167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
258167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  -DGTEST_USE_OWN_TR1_TUPLE=0
259167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
260167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgto the compiler flags while compiling Google Test and your tests.  If
261167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgyou want to force Google Test to use its own tuple library, just add
262167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
263167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  -DGTEST_USE_OWN_TR1_TUPLE=1
264167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
265167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgto the compiler flags instead.
266167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
267167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgIf you don't want Google Test to use tuple at all, add
268167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
269167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  -DGTEST_HAS_TR1_TUPLE=0
270167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
271167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.organd all features using tuple will be disabled.
272167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
273167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Multi-threaded Tests ###
274167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
275167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgGoogle Test is thread-safe where the pthread library is available.
276167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgAfter #include "gtest/gtest.h", you can check the GTEST_IS_THREADSAFE
277167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgmacro to see whether this is the case (yes if the macro is #defined to
278167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org1, no if it's undefined.).
279167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
280167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgIf Google Test doesn't correctly detect whether pthread is available
281167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgin your environment, you can force it with
282167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
283167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  -DGTEST_HAS_PTHREAD=1
284167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
285167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgor
286167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
287167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  -DGTEST_HAS_PTHREAD=0
288167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
289167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgWhen Google Test uses pthread, you may need to add flags to your
290167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgcompiler and/or linker to select the pthread library, or you'll get
291167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orglink errors.  If you use the CMake script or the deprecated Autotools
292167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgscript, this is taken care of for you.  If you use your own build
293167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgscript, you'll need to read your compiler and linker's manual to
294167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgfigure out what flags to add.
295167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
296167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### As a Shared Library (DLL) ###
297167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
298167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgGoogle Test is compact, so most users can build and link it as a
299167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgstatic library for the simplicity.  You can choose to use Google Test
300167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgas a shared library (known as a DLL on Windows) if you prefer.
301167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
302167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgTo compile *gtest* as a shared library, add
303167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
304167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  -DGTEST_CREATE_SHARED_LIBRARY=1
305167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
306167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgto the compiler flags.  You'll also need to tell the linker to produce
307167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orga shared library instead - consult your linker's manual for how to do
308167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgit.
309167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
310167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgTo compile your *tests* that use the gtest shared library, add
311167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
312167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  -DGTEST_LINKED_AS_SHARED_LIBRARY=1
313167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
314167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgto the compiler flags.
315167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
316167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgNote: while the above steps aren't technically necessary today when
317167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgusing some compilers (e.g. GCC), they may become necessary in the
318167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgfuture, if we decide to improve the speed of loading the library (see
319167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orghttp://gcc.gnu.org/wiki/Visibility for details).  Therefore you are
320167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgrecommended to always add the above flags when using Google Test as a
321167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgshared library.  Otherwise a future release of Google Test may break
322167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgyour build script.
323167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
324167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Avoiding Macro Name Clashes ###
325167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
326167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgIn C++, macros don't obey namespaces.  Therefore two libraries that
327167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgboth define a macro of the same name will clash if you #include both
328167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgdefinitions.  In case a Google Test macro clashes with another
329167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orglibrary, you can force Google Test to rename its macro to avoid the
330167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgconflict.
331167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
332167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgSpecifically, if both Google Test and some other code define macro
333167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgFOO, you can add
334167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
335167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  -DGTEST_DONT_DEFINE_FOO=1
336167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
337167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgto the compiler flags to tell Google Test to change the macro's name
338167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgfrom FOO to GTEST_FOO.  Currently FOO can be FAIL, SUCCEED, or TEST.
339167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgFor example, with -DGTEST_DONT_DEFINE_TEST=1, you'll need to write
340167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
341167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  GTEST_TEST(SomeTest, DoesThis) { ... }
342167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
343167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orginstead of
344167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
345167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  TEST(SomeTest, DoesThis) { ... }
346167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
347167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgin order to define a test.
348167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
349167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgUpgrating from an Earlier Version
350167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org---------------------------------
351167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
352167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgWe strive to keep Google Test releases backward compatible.
353167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgSometimes, though, we have to make some breaking changes for the
354167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgusers' long-term benefits.  This section describes what you'll need to
355167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgdo if you are upgrading from an earlier version of Google Test.
356167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
357167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Upgrading from 1.3.0 or Earlier ###
358167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
359167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgYou may need to explicitly enable or disable Google Test's own TR1
360167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgtuple library.  See the instructions in section "Choosing a TR1 Tuple
361167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgLibrary".
362167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
363167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Upgrading from 1.4.0 or Earlier ###
364167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
365167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgThe Autotools build script (configure + make) is no longer officially
366167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgsupportted.  You are encouraged to migrate to your own build system or
367167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orguse CMake.  If you still need to use Autotools, you can find
368167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orginstructions in the README file from Google Test 1.4.0.
369167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
370167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgOn platforms where the pthread library is available, Google Test uses
371167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgit in order to be thread-safe.  See the "Multi-threaded Tests" section
372167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgfor what this means to your build script.
373167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
374167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgIf you use Microsoft Visual C++ 7.1 with exceptions disabled, Google
375167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgTest will no longer compile.  This should affect very few people, as a
376167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orglarge portion of STL (including <string>) doesn't compile in this mode
377167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.organyway.  We decided to stop supporting it in order to greatly simplify
378167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgGoogle Test's implementation.
379167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
380167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgDeveloping Google Test
381167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org----------------------
382167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
383167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgThis section discusses how to make your own changes to Google Test.
384167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
385167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Testing Google Test Itself ###
386167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
387167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgTo make sure your changes work as intended and don't break existing
388167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgfunctionality, you'll want to compile and run Google Test's own tests.
389167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgFor that you can use CMake:
390167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
391167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  mkdir mybuild
392167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  cd mybuild
393167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  cmake -Dgtest_build_tests=ON ${GTEST_DIR}
394167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
395167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgMake sure you have Python installed, as some of Google Test's tests
396167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgare written in Python.  If the cmake command complains about not being
397167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgable to find Python ("Could NOT find PythonInterp (missing:
398167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgPYTHON_EXECUTABLE)"), try telling it explicitly where your Python
399167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgexecutable can be found:
400167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
401167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  cmake -DPYTHON_EXECUTABLE=path/to/python -Dgtest_build_tests=ON ${GTEST_DIR}
402167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
403167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgNext, you can build Google Test and all of its own tests.  On *nix,
404167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgthis is usually done by 'make'.  To run the tests, do
405167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
406167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  make test
407167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
408167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgAll tests should pass.
409167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
410167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Regenerating Source Files ###
411167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
412167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgSome of Google Test's source files are generated from templates (not
413167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgin the C++ sense) using a script.  A template file is named FOO.pump,
414167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgwhere FOO is the name of the file it will generate.  For example, the
415167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgfile include/gtest/internal/gtest-type-util.h.pump is used to generate
416167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orggtest-type-util.h in the same directory.
417167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
418167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgNormally you don't need to worry about regenerating the source files,
419167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgunless you need to modify them.  In that case, you should modify the
420167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgcorresponding .pump files instead and run the pump.py Python script to
421167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgregenerate them.  You can find pump.py in the scripts/ directory.
422167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgRead the Pump manual [2] for how to use it.
423167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
424167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  [2] http://code.google.com/p/googletest/wiki/PumpManual
425167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
426167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org### Contributing a Patch ###
427167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
428167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgWe welcome patches.  Please read the Google Test developer's guide [3]
429167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgfor how you can contribute.  In particular, make sure you have signed
430167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgthe Contributor License Agreement, or we won't be able to accept the
431167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgpatch.
432167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
433167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org  [3] http://code.google.com/p/googletest/wiki/GoogleTestDevGuide
434167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
435167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgHappy testing!
436