                                                                     -*-text-*-

Obtaining CVS Code
------------------

This seems redundant, since if you're reading this you most likely have
already performed this step; however, for completeness, you can obtain
the GNU make source code via anonymous CVS from the FSF's Savannah
project <http://savannah.gnu.org/projects/make/>:

  $ cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/make co make

You might want to use the "-z3" option to get compression, and you most
certainly will want the -P option to avoid unneeded directories
cluttering up your source.  Personally I add these (as well as -dP for
update) to my ~/.cvsrc file.


If you have an older version of CVS, you might have to login first.
There is no password; just hit the ENTER key if you are asked for one.


Building From CVS
-----------------

To build GNU make from CVS, you will need Autoconf 2.53 (or better),
Automake 1.6.3 (or better), and Gettext 0.11.5 (or better), and any
tools that those utilities require (GNU m4, Perl, etc.).  You will also
need a copy of wget.

After checking out the code, you will need to perform these steps to get
to the point where you can run "make".


 1) $ autopoint

    This will instantiate various m4 macros files, etc. in the config
    and po directories.


 2) $ aclocal -I config

    Generate the proper aclocal.m4 file.


 3) $ autoheader

    Generate a "config.h.in" file from the contents of configure.in,
    etc.


 4) $ automake --add-missing

    Add (symlink) missing files into the distribution, and generate
    Makefile.in's from Makefile.am's.

    You will see these perhaps unexpected messages (among others which
    you should be expecting :)); just ignore them--I know what I'm doing
    :).

      Makefile.am: required file `./README' not found
      configure.in:xxx: required file `./build.sh.in' not found
      Makefile.am:xxx: automatically discovered file `getloadavg.c' should not be explicitly mentioned


 5) $ autoconf

    Generate a "configure" script from configure.in and acinclude.m4.


 6) $ ./configure

    Generate a Makefile


 7) $ make update

    Use wget to retrieve various other files that GNU make relies on,
    but does not keep in its own source tree.


At this point you have successfully brought your CVS copy of the GNU
make source directory up to the point where it can be treated
more-or-less like the official package you would get from ftp.gnu.org.
That is, you can just run:

  $ make && make check && make install

to build and install GNU make.


Creating a Package
------------------

Once you have performed the above steps (including the configuration and
build) you can create a GNU make package.  This is very simple, just
run:

  $ make dist-gzip

and, if you like:

  $ make dist-bzip2

Even better, you should run this:

  $ make distcheck

Which will build both .gz and .bz2 package files, then unpack them into
a temporary location, try to build them, and repack them, verifying that
everything works, you get the same results, _and_ no extraneous files
are left over after the "distclean" rule--whew!!  Now, _that_ is why
converting to Automake is worth the trouble!  A big "huzzah!" to Tom
T. and the AutoToolers!


That's it, you're done!


Appendix A - For The Brave
--------------------------

For those of you who trust me implicitly, or are just brave (or
foolhardy), here is a canned sequence of commands to build a GNU make
distribution package from a virgin CVS source checkout (assuming all the
prerequisites are available of course).

This list is eminently suitable for a quick swipe o' the mouse and a
swift click o' mouse-2 into an xterm.  Go for it!


autopoint
aclocal -I config
autoheader
automake --add-missing
autoconf
./configure
make update
make
make check
make distcheck
