Maintainer Release Instructions
*******************************

Official releases are made by creating a dist-bundle as supported by
the autotools framework. This is not a normal target for users building
the library to use, and as such it may introduce extra tool requirements.
For example, 'makeinfo' is required to generate some documentation before
a bundle can be created.


Official Releases
=================

Releases use a version tuple of pattern MAJOR.MINOR.POINT and changing
the version is accomplished by editing the corresponding values in:

    project/project.m4sugar

And all releases follow this repository URL convention:

    https://github.com/enzo1982/mp4v2/releases/vMAJOR.MINOR.POINT

Thus, releases will produce dist bundles of this pattern:

    mp4v2-MAJOR.MINOR.POINT.tar.bz2

MAJOR-RELEASE. This kind of release has a major impact to the public
interface and/or other aspects of the project. You must increment
MAJOR and reset MINOR and reset POINT. Typically used when API
components are modified or removed.

MINOR-RELEASE. This kind of release has some minor but significant
changes to the public interface. You must increment MINOR and
reset POINT. Typically used when API components are added.

POINT-RELEASE. This kind of release is usually for bugfix/maintenance
purposes and does not adversely effect the public interface. You
must increment POINT.

A release is branched from either the trunk or an earlier release.
If branched from the trunk, it will naturally be the "chase-version"
which the trunk has been developing. For example, on a new project
trunk might work towards a 1.0.0 release. When that project is
deemed ready, trunk is branched to 1.0.0. Any final changes are
then applied on the new branch, while trunk continues development,
chasing it's next release, which might be 1.1.0.


WORKFLOW - MINOR-RELEASE
------------------------

    # branch release from trunk (head)
    svn cp -m "BRANCHED: RELEASE 1.0.0" \
        https://mp4v2.googlecode.com/svn/trunk \
        https://mp4v2.googlecode.com/svn/releases/1.0.0

    # cd to your favorite work area for mp4v2
    cd /work/mp4v2/
    
    # checkout release, local workdir 1.0.0 default is good
    svn co https://mp4v2.googlecode.com/svn/releases/1.0.0
    cd 1.0.0/

    # if needed, edit version, checkin, update, autoreconf.
    vi project/project.m4sugar
    svn ci
    svn update
    autoreconf -fiv

    # clean-room discipline
    #   at this point there should be no pending changes in working dir
    #   if there are, you're probably just working out kinks in the
    #   autotool system but in the final run, all files should be
    #   checked in at this point.
    #
    # make distcheck || make dist (the latter if you're in a hurry)
    rm -fr build/
    mkdir build/
    cd build/
    ../configure
    make distcheck

    # upload bundle somewhere
    mkdir -p ~/OUTGOING
    cp mp4v2-1.0.0.tar.bz2 ~/OUTGOING/.

    # FINISHED - CLOSED: https://mp4v2.googlecode.com/svn/releases/1.0.0
    # Once the bundle is published, no more changes allowed!

    # TRUNK - now go back to trunk, edit version, checkin, update, autoreconf.
    # note that we bump trunk automatically to the next anticpated
    # major-release or minor-release, as point-releases do not belong here.
    cd /work/mp4v2/
    svn co https://mp4v2.googlecode.com/svn/trunk/
    cd trunk/
    vi project/project.m4sugar # bump version to 1.1.0
    svn ci -m "BUMP: TRUNK 1.1.0"
    svn update
    autoreconf -fiv


WORKFLOW - POINT-RELEASE
------------------------

If a point release such as 1.0.1 needs to be done, then it is important
to branch from 1.0.0 (not trunk!). Here is an example 1.0.1 point-release.

    svn cp -m "BRANCHED: RELEASE 1.0.1" \
        https://mp4v2.googlecode.com/svn/releases/1.0.0 \
        https://mp4v2.googlecode.com/svn/releases/1.0.1
    svn co https://mp4v2.googlecode.com/svn/releases/1.0.1
    cd 1.0.1/
    vi project/project.m4sugar # bump version to 1.0.1
    svn ci
    svn update
    autoreconf -fiv
    .
    .
    .
    # *** APPLY CODE CHANGES ***
    # *** TEST ***
    .
    .
    .
    svn ci
    svn update
    autoreconf -fiv
    rm -fr build/
    mkdir build/
    cd build/
    ../configure
    make distcheck
    cp mp4v2-1.0.1.tar.bz2 ~/OUTGOING/.
    # FINISHED - CLOSED: https://mp4v2.googlecode.com/svn/releases/1.0.1
