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.
