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) Bump the version number in configure.ac and meson.build. We seem
     to have settled for 2.4.x as the versioning scheme for libdrm, so
     just bump the  micro version.

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

  3) Verify that the code passes "make distcheck".  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.

  4) Push the updated master branch with the bumped version number:

	git push origin master

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

  5) Use the release.sh script from the xorg/util/modular repo to
     upload the tarballs to the freedesktop.org download area and
     create an announce email template.  The script takes one argument:
     the path to the libdrm checkout. So, if a checkout of modular is
     at the same level than the libdrm repo:

	./modular/release.sh libdrm

     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!
