Thu Mar 12 2015 Andreas Schneider <asn@cryptomilk.org>
    * cmocka: version 1.0.1
    * Added a macro for assert_ptr_equal().
    * Fixed test_realloc() if 0 size is passed.
    * Fixed objects packaging bug.
    * Fixed building with newer gcc versions.

Sun Feb 16 2015 Andreas Schneider <asn@cryptomilk.org>
    * cmocka: version 1.0.0
    * Added new test runner with group fixtures. The old runner is deprecated
    * Added an extensible message output formatter
    * Added jUnit XML message output
    * Added subunit message output
    * Added Test Anything Protocol message output
    * Added skip() command
    * Added test_realloc()
    * Added a cmockery compat header
    * Fixed a lot of bugs on Windows

Thu May 22 2014 Andreas Schneider <asn@cryptomilk.org>
    * cmocka: version 0.4.1
    * Added CMOCKA_TEST_ABORT env variable to leave threading apps.
    * Fixed count parameter of expect_check() macro.
    * Fixed reporting the number of tests.
    * Fixed cmake config files.

Fri Apr 11 2014 Andreas Schneider <asn@cryptomilk.org>
    * cmocka: version 0.4.0
    * Added support for group testing.
    * Added assert_return_code().
    * Added better messages for errors.
    * Added cmake config mode support.
    * Fixed bug with unit_test_setup and unit_test_teardown.
    * Fixed a lot of small bugs.

Wed Nov 06 2013 Andreas Schneider <asn@cryptomilk.org>
    * cmocka: version 0.3.2
    * Fixed FindNSIS detection.
    * Fixed unit_test_setup() and unit_test_teardown().
    * Fixed GTest and GCC message style conformance
    * Fixed stringification in will_return_always().

Wed Jul 10 15:24 2013 Andreas Schneider <asn@cryptomilk.org>
    * cmocka: version 0.3.1
    * Fixed pointer conversion on s390 and ppc (32bit big endian).
    * Fixed the customer_database test on big endian.

Wed Jun 05 08:14 2013 Andreas Schneider <asn@cryptomilk.org>
    * cmocka: version 0.3.0
    * Added a better mock object example.
    * Added pkgconfig file.
    * Added new macros mock_type() and mock_ptr_type().
    * Added more documentation.
    * Fixed installation problems on some platforms.

Mon Jan 14 11:16 2013 Andreas Schneider <asn@cryptomilk.org>
    * cmocka: version 0.2.0
    * Added doxygen api documentation.
    * Added new cmake build system.
    * Added support to create windows NSIS installer.
    * Fixed examples which didn't work.
    * Fixed a huge amount of bugs.

Mon Sep 15 17:21:22 2008 Google Inc. <opensource@google.com>
	* cmockery: version 0.12
	* Made it possible to specify additional compiler, lib tool and link 
	  flags on Windows.
	* Added Windows makefile to the tar ball.

Fri Aug 29 10:50:46 2008  Google Inc. <opensource@google.com>

	* cmockery: version 0.11
	* Made it possible to specify executable, library and object output 
	  directories.

Tue Aug 26 10:18:02 2008  Google Inc. <opensource@google.com>

	* cmockery: initial release:
	  A lightweight library to simplify and generalize the process of 
	  writing unit tests for C applications.
