Changes for 1.6.0:

* Compilation is much faster and uses much less memory, especially
  when the constructor and destructor of a mock class are moved out of
  the class body.
* New matchers: Pointwise(), Each().
* New actions: ReturnPointee() and ReturnRefOfCopy().
* CMake support.
* Project files for Visual Studio 2010.
* AllOf() and AnyOf() can handle up-to 10 arguments now.
* Google Mock doctor understands Clang error messages now.
* SetArgPointee<> now accepts string literals.
* gmock_gen.py handles storage specifier macros and template return
  types now.
* Compatibility fixes.
* Bug fixes and implementation clean-ups.
* Potentially incompatible changes: disables the harmful 'make install'
  command in autotools.

Potentially breaking changes:

* The description string for MATCHER*() changes from Python-style
  interpolation to an ordinary C++ string expression.
* SetArgumentPointee is deprecated in favor of SetArgPointee.
* Some non-essential project files for Visual Studio 2005 are removed.

Changes for 1.5.0:

 * New feature: Google Mock can be safely used in multi-threaded tests
   on platforms having pthreads.
 * New feature: function for printing a value of arbitrary type.
 * New feature: function ExplainMatchResult() for easy definition of
   composite matchers.
 * The new matcher API lets user-defined matchers generate custom
   explanations more directly and efficiently.
 * Better failure messages all around.
 * NotNull() and IsNull() now work with smart pointers.
 * Field() and Property() now work when the matcher argument is a pointer
   passed by reference.
 * Regular expression matchers on all platforms.
 * Added GCC 4.0 support for Google Mock Doctor.
 * Added gmock_all_test.cc for compiling most Google Mock tests
   in a single file.
 * Significantly cleaned up compiler warnings.
 * Bug fixes, better test coverage, and implementation clean-ups.

 Potentially breaking changes:

 * Custom matchers defined using MatcherInterface or MakePolymorphicMatcher()
   need to be updated after upgrading to Google Mock 1.5.0; matchers defined
   using MATCHER or MATCHER_P* aren't affected.
 * Dropped support for 'make install'.

Changes for 1.4.0 (we skipped 1.2.* and 1.3.* to match the version of
Google Test):

 * Works in more environments: Symbian and minGW, Visual C++ 7.1.
 * Lighter weight: comes with our own implementation of TR1 tuple (no
   more dependency on Boost!).
 * New feature: --gmock_catch_leaked_mocks for detecting leaked mocks.
 * New feature: ACTION_TEMPLATE for defining templatized actions.
 * New feature: the .After() clause for specifying expectation order.
 * New feature: the .With() clause for for specifying inter-argument
   constraints.
 * New feature: actions ReturnArg<k>(), ReturnNew<T>(...), and
   DeleteArg<k>().
 * New feature: matchers Key(), Pair(), Args<...>(), AllArgs(), IsNull(),
   and Contains().
 * New feature: utility class MockFunction<F>, useful for checkpoints, etc.
 * New feature: functions Value(x, m) and SafeMatcherCast<T>(m).
 * New feature: copying a mock object is rejected at compile time.
 * New feature: a script for fusing all Google Mock and Google Test
   source files for easy deployment.
 * Improved the Google Mock doctor to diagnose more diseases.
 * Improved the Google Mock generator script.
 * Compatibility fixes for Mac OS X and gcc.
 * Bug fixes and implementation clean-ups.

Changes for 1.1.0:

 * New feature: ability to use Google Mock with any testing framework.
 * New feature: macros for easily defining new matchers
 * New feature: macros for easily defining new actions.
 * New feature: more container matchers.
 * New feature: actions for accessing function arguments and throwing
   exceptions.
 * Improved the Google Mock doctor script for diagnosing compiler errors.
 * Bug fixes and implementation clean-ups.

Changes for 1.0.0:

 * Initial Open Source release of Google Mock
