The release criteria for libdrm is essentially "if you need a release,
make one".  There is no designated release engineer or maintainer.
Anybody is free to make a release if there's a certain feature or bug
fix they need in a released version of libdrm.

When new ioctl definitions are merged into drm-next, we will add
support to libdrm, at which point we typically create a new release.
However, this is up to whoever is driving the feature in question.

Follow these steps to release a new version of libdrm:

  1) Ensure that there are no local, uncommitted/unpushed
     modifications. You're probably in a good state if both "git diff
     HEAD" and "git log master..origin/master" give no output.

  3) Bump the version number in configure.ac. We seem to have settled
     for 2.4.x as the versioning scheme for libdrm, so just bump the
     micro version.

  4) Run autoconf and then re-run ./configure so the build system
     picks up the new version number.

  5) Verify that the code passes "make distcheck".  libdrm is tricky
     to distcheck since the test suite will need to become drm master.
     This means that you need to run it outside X, that is, in text
     mode (KMS or no KMS doesn't matter).

     Running "make distcheck" should result in no warnings or errors
     and end with a message of the form:

	=============================================
	libdrm-X.Y.Z archives ready for distribution:
	libdrm-X.Y.Z.tar.gz
	libdrm-X.Y.Z.tar.bz2
	=============================================

     Make sure that the version number reported by distcheck and in
     the tarball names matches the number you bumped to in configure.ac.

  6) Commit the configure.ac change and make an annotated tag for that
     commit with the version number of the release as the name and a
     message of "libdrm X.Y.Z".  For example, for the 2.4.16 release
     the command is:

	git tag -a 2.4.16 -m "libdrm 2.4.16"

  7) Push the commit and tag by saying

	git push --tags origin master

     assuming the remote for the upstream libdrm repo is called origin.

  6) Use the release.sh script from the xorg/util/modular repo to
     upload the tarballs to the freedesktop.org download area and
     create an annouce email template.  The script takes three
     arguments: a "section", the previous tag and the new tag we just
     created.  For 2.4.16 again, the command is:

	../modular/release.sh libdrm 2.4.15 2.4.16

     This copies the two tarballs to freedesktop.org and creates
     libdrm-2.4.16.announce which has a detailed summary of the
     changes, links to the tarballs, MD5 and SHA1 sums and pre-filled
     out email headers.  Fill out the blank between the email headers
     and the list of changes with a brief message of what changed or
     what prompted this release.  Send out the email and you're done!
