			Living with CVS and Autoconf                 -*-text-*-
			----------------------------

These notes are intended for code developers.

You will need to install several GNU tools to be able to use the cvs
sources.  If you do not have these tools available, build from the tar
file distribution instead, available from ftp.fvwm.org.

To build from the CVS sources, you will need:
  * GNU gcc
  * GNU make
  * autoconf (version >= 2.13)
  * automake (version >= 1.4)


Changing a Makefile
-------------------

First of all, NEVER edit anything named Makefile, or Makefile.in.  These
are both derived from the corresponding Makefile.am.  The most common
reason for editing is to change the list of sources.

Steps: 1. edit foo/blah/Makefile.am
       2. re-run "make" from the top of the build directory

Step 2 will take care of rebuilding the Makefile.in and Makefile from your
changed Makefile.am.

Makefile.am has a simple format, basically:

        bin_PROGRAMS = fvwm2

        fvmw2_SOURCES = blah.c blah.h foo.c foo.h ...

Notice that you have to add all files, C-code *and* headers, to the
_SOURCES line.  This is vital, because this is the list of files that are
packed into the distribution.  If you leave one out, nobody will be able
to build the distributed tar file!


Changing configure.in
---------------------

The most common reason to do this is to change the version string.  If
you're editing it for any other reason, I will assume you know what you're
doing.

Steps: 1. edit configure.in, and find the line containing
          AM_INIT_AUTOMAKE(fvwm, x.y.z) at the top of the file
       2. change x.y.z to the new version string
       3. re-run "make" from the top of the build directory

Step 3 will take care of rebuilding the configure script, and usually all
the other Makefiles.


Building a distribution
-----------------------

By this, I mean the file "fvwm-x.y.z.tar.gz".

Steps: 1. make sure you have XPM and a C++ compiler
       2. configure with the flag --enable-extras
       3. make
       4. make distcheck
       5. ensure that you see the message
          "fvwm-x.y.z.tar.gz ready for distribution"

If this is to be an "official" release, then do also the following:

       6. tag the CVS tree:
          cvs tag version-x_y_z
       7. increase the version number in configure.in (see above)
       8. upload the file fvwm-x.y.z.tar.gz to
	  ftp://ftp.fvwm.org/pub/incoming/fvwm
       9. notify fvwm-owner@fvwm.org of the upload


One thing I've learned the hard way:

        You have to configure with ALL THE OPTIONAL SUBDIRECTORIES
        in order to build a distribution!

In short: this means you need Xpm, and a C++ compiler, AND you have to
configure using the flag --enable-extras.  The reason for this is that
a couple of subdirectories are only built when using Xpm (xpmroot, for
example) or C++ (extras/FvwmConfig).  It is fine for end users to not
build these.  However, the distribution-maker has to have all the
directories enabled, else the files don't make it into the
distribution tar file.

Similarly, you need to have actually built everything before packing
the distribution, hence step #4.  Among other things, this puts into
the Makefile.in's the proper dependency information.

Step 5 will create the tar file, then unpack it and attempt a build &
install (to a scratch directory, not /usr/local).  This makes sure
that you really DID include all the files necessary to build the
package into the tar file. It may be hard to appreciate how useful
this is, until it has reminded you that you forgot file "foo.h" in
some _SOURCES line.  But trust me, it will save your bacon in this way
some day!


Modules and Extras
------------------

There are short notes at the top of all the extras/*/Makefile.am files
about what may have differed vis-a-vis the old Imakefiles.  Some of
the modules, for example (currently fvwmpython and fvwmperl) have no
install rules at all.


