Notes on making a new release of libarchive
===========================================

The following serves as a guide for libarchive developers on the general
process to be followed when making a new release of libarchive.

* Update build/version with the version number of the release to be made.
* If the library's ABI has changed, the library's soname major version *MUST*
  be updated. Update configure.ac and CMakeLists.txt appropriately.
  - For configure.ac, the variable ARCHIVE_INTERFACE needs to be updated.
  - For CMakeLists.txt, the variable INTERFACE_VERSION needs to be updated.
* Update the entries in the NEWS file accordingly.
* Run `build/makerelease.sh` from the top source directory. Running this script
  will do the following.
  - Removes all Makefile.am development build specific CFLAGS from
    Makefile.am.
  - Update configure scripts and header files with the appropriate version
    number from build/version.
  - Rebuild the documentation directory.
  - Runs a full cmake build and test.
  - Runs a full autotools build and test.
  - Builds the .tar.gz and .zip distribution files.
* Commit all changed files into git.
  - This should be build/version, NEWS, and the files edited by running
    build/makerelease.sh.
* Tag the release appropriately. The tag should also have an appropriate
  message.
  - The git command is as follows:
    $ git tag -m "Libarchive <version>" v<version>
    Replace <version> with the version to be released.
* Copy all the generated wiki files and commit them into the libarchive.wiki
  repository. Overwrite any preexisting files with the same name (these files
  are always autogenerated from the libarchive release after every release).
* Update the libarchive.org website accordingly.
* Make an announcement to the libarchive-announce mailing list.
