Here are the steps to follow to create a new pixman release:

1) Ensure that there are no uncommitted changes or unpushed commits,
   and that you are up to date with the latest commits in the central
   repository. Here are a couple of useful commands:

	git diff			(no output)
	
	git status			(should report "nothing to commit")

	git log master...origin		(no output; note: *3* dots)

2) Increment pixman_(major|minor|micro) in configure.ac according to
   the directions in that file.

3) Run 

	make PREV=<last version> release-check

   and fix things until it passes. If your freedesktop username is
   different from your local username, then also set the variable
   USERNAME on the commandline.

   A very useful thing to do is to run the cairo test suite
   against pixman. This can be done by running the following
   commands in the "test" directory of the latest cairo release:

	tar xzf cairo-X.Y.Z.tar.gz
	cd cairo
	CAIRO_TEST_TARGET=image make test

4) Use "git commit" to record any changes made in steps 2 and 3.

5) Generate the final tar files with

	make distcheck

   and publish the tar files by running 

	make PREV=<last version> GPGKEY=<your gpg key id> release-publish

6) Run 

	make release-publish-message

   to generate a draft release announcement. Edit it as appropriate and
   send it to 

	cairo-announce@cairographics.org

   and 

	xorg-announce@lists.freedesktop.org


7) Increment pixman_micro to the next larger (odd) number in
   configure.ac. Commit this change, and push all commits created
   during this process using

	git push --tags

   You must use "--tags" here; otherwise the new tag will not
   be pushed out. This is because technobabble.

