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.
