name
====

PATCHES - track and distribute your code changes

description
===========

This page documents how to distribute your changes to GNU lilypond

abstract
========

We would like to have unified context diffs with full pathnames.  A script automating supplied with Lily.

Distributing a change normally goes like this:

  * make your fix/add your code

  * Add changes to NEWS, and add yourself to Documentation/topdocs/AUTHORS.yo

  * generate a patch,

  * e-mail your patch to one of the mailing lists gnu-music-discuss@gnu.org or bug-gnu-music@gnu.org

Generating a patch
==================

In VERSION, set MY_PATCH_LEVEL:

         VERSION:
     	...
     	MY_PATCH_LEVEL=jcn1

In CHANGES, enter a summary of changes:

     	pl 0.1.73.jcn1
     		- added PATCHES.texi

Then, from the top of Lily's source tree, type

         make dist
         make diff

which rolls the tarball ../releases/lilypond-0.1.73.tar.gz and leaves your patch as ./lilypond-0.1.73.jcn1.diff. ('Make diff' generates a patch between two tarballs.  For more info type 'make diff help=='.)  We assume that there is a tarball lilypond-0.1.73.tar.gz in the directory ../releases.

If you didn't configure Lily using --srcdir, you can do:

         make release

         tar-ball: ../patches/lilypond-0.1.73.jcn1.gz
         patch: ../patches/lilypond-0.1.73.jcn1.gz

Prerequisites
=============

For creating a patch you need

  * All items mentioned in INSTALL.  You're not going to send a patch that you haven't even built, right?

  * GNU diff

              make distclean
              cd ..
              diff -urN lilypond-0.1.73 lilypond-0.1.73.jcn1 > lilypond-0.1.73.jcn1

     but there are handy python scripts available.  If you're doing development, you'll need Python for other LilyPond scripts anyway.

  * The Lily directory structure, which looks like:

              doos/                        # gnu/windows32 build and binary releases
              harmonia -> harmonia-x.y.z
              harmonia-x.y.z/
              lilypond -> lilypond-x.y.z   # symlink to development directory
              lilypond-x.y.z/              # current development
              patches/ 		         # patches between different releases
              RedHat/BUILD                 # RedHat build and binary releases
              RedHat/RPMS
              RedHat/SPECS
              releases/                    # .tar.gz releases
              test/                        # tarballs and diffs from current version

     with prefix $HOME/usr/src and (for building rpms only) in $HOME/.rpmrc:

              topdir: /home/fred/usr/src/RedHat

Applying patches
================

If you're following LilyPond development regularly, you probably want to download just the patch for each subsequent release. After downloading the patch (into the patches directory, of course), simply apply it:

         gzip -dc ../patches/lilypond-0.1.74.diff.gz | patch -p1 -E

and don't forget to make automatically generated files:

         autoconf footnote(patches don't include automatically generated files,
         i.e. file(configure) and files generated by file(configure).)

         configure

Synchronise
===========

If you're not very quick with sending your patch, there's a good chance that an new release of LilyPond comes available.  In such a case, the maintainer will probably ask you to make a new patch against the latest release.  Your best bet is to download the latest release, and apply your patch against this new source tree:

         cd lilypond-0.1.74
         gzip -dc ../patches/lilypond-0.1.73.jcn1.diff.gz | patch -p1 -E
         autoconf
         configure

Then, make a patch as shown above.

See also
========

stepmake/INSTALL.txt

maintainer
==========

Han-Wen Nienhuys

Just keep on sending those patches!