
The libqmi releases are generated using the GNU autotools.

0.1) For major releases:
     * Increment qmi_minor_version and reset qmi_micro_version.
     * Assuming API/ABI compatibility, increment both qmi_glib_lt_current and
       qmi_glib_lt_age.

0.2) For stable branch releases:
     * Increment qmi_micro_version.

1) Configure and build the whole project, making sure gtk-doc is enabled:

    $ NOCONFIGURE=1 ./autogen.sh
    $ ./configure --enable-gtk-doc
    $ make -j8

2) Run distcheck so that the source distribution tarball is generated, and the
   project test suite is run on it:

    $ make distcheck

3) Compute checksum of the tarball so that it can be referenced in the release
   email:

    $ sha256sum libqmi-${VERSION}.tar.xz

4) Sign release tarball, and verify it (*):

    $ gpg --detach-sign --armor libqmi-${VERSION}.tar.xz
    $ gpg --verify libqmi-${VERSION}.tar.xz.asc libqmi-${VERSION}.tar.xz

5) Upload source tarball (.tar.xz) and signature (.tar.xz.asc) to
   freedesktop.org.
    $ scp libqmi-${VERSION}.tar.xz* fd.o:${libqmi}/

6) Create directories for the manpages and gtk-doc documentation in
   freedesktop.org, and also update the 'latest' links:
    $ ssh fd.o
    [fd.o] $ cd ${libqmi}/man/
    [fd.o] $ rm latest
    [fd.o] $ mkdir -p ${VERSION}
    [fd.o] $ ln -s ${VERSION} latest
    [fd.o] $ cd ${libqmi}/libqmi-glib/
    [fd.o] $ rm latest
    [fd.o] $ mkdir -p ${VERSION}
    [fd.o] $ ln -s ${VERSION} latest

7) Generate HTML for the manpages:
    $ roffit < docs/man/qmicli.1 > qmicli.1.html
    $ roffit < docs/man/qmi-network.1 > qmi-network.1.html
    $ roffit < docs/man/qmi-firmware-update.1 > qmi-firmware-update.1.html

8) Upload manpages in HTML to freedesktop.org:
    $ scp *.1.html fd.o:${libqmi}/man/${VERSION}/

9) Upload the gtk-doc in HTML available inside the source tarball to
   freedesktop.org. It must be the one inside the tarball because it contains
   the correct fixed refs to the online documentation of the dependencies
   (e.g. the glib/gobject/gio documentation URLs in http://developer.gnome.org)
    $ tar -Jxvf libqmi-${VERSION}.tar.xz
    $ scp libqmi-${VERSION}/docs/reference/libqmi-glib/html/* fd.o:${libqmi}/libqmi-glib/${VERSION}/

10.1) For major releases:
     * Fork new stable branch (e.g. qmi-${MAJOR}-${MINOR})
     * Post-release version bump in the main branch, increment qmi_minor_version.
     * Post-release version bump in the stable branch, increment qmi_micro_version.

10.2) For stable branch releases:
     * Post-release version bump, increment qmi_micro_version.

-------------------------------------------------------------------------------

*) Verifying the release signature requires the public key of the person who
   signed it, e.g.:

    $ curl https://www.freedesktop.org/software/libqmi/0x3CAD53398973FFFA.asc | gpg --import
