-*- outline -*-

These notes intend to help people working on the checked-out sources.
These requirements do not apply when building from a distribution
tarball.  Don't put this file into the distribution.  Don't mention it
in the ChangeLog.  You may want to also see HACKING for
maintainer-specific rules.

* Requirements

We've opted to keep only the highest-level sources in the GIT repository.
This eases our maintenance burden, (fewer merges etc.), but imposes more
requirements on anyone wishing to build from the just-checked-out sources.
For example, you have to use recent stable versions of the maintainer
tools we depend upon, including:

- Automake 1.11+ <https://www.gnu.org/software/automake/>
- Help2man 1.29+ <https://www.gnu.org/software/help2man/>
- M4 1.4.16+ <https://www.gnu.org/software/m4/>
- Perl 5.010+ <https://www.cpan.org/>
- Texinfo 4.11+ <https://www.gnu.org/software/texinfo/>

The following are useful as well, if you want to be able to run commands
like "make dist-xz" or "make distcheck":

- Gzip <https://www.gnu.org/software/gzip/>
- Tar <https://www.gnu.org/software/tar/>
- XZ Utils <https://tukaani.org/xz/>

Although we try to keep the CVS mirror of the git repository usable,
some of the tests in the testsuite will fail if git was not used to
generate the version string.  Therefore, we recommend:

- Git 1.4.4+ <https://git-scm.com/>

You may find it useful to install the git-merge-changelog merge driver:
https://git.savannah.gnu.org/cgit/gnulib.git/plain/lib/git-merge-changelog.c

then add the following to .git/config or ~/.gitconfig:
[merge "merge-changelog"]
	name = GNU ChangeLog merge driver
	driver = git-merge-changelog %O %A %B
[diff "texinfo"]
	funcname = ^@node[\t ][\t ]*\\([^,][^,]*\\)

Only building the initial full source tree will be a bit painful.
Later, a plain 'git pull && make' should be sufficient.

If you want to test Autoconf on a machine without git, it may be
easier to first bootstrap Autoconf on a different machine with git,
run 'make dist', and copy the tarball to the machine under test.  It
should always be possible to create a self-contained tarball which
does not rely on the bootstrap-only tools.

* First GIT checkout

You can get an anonymous copy of the source repository using any one
of these three methods, although the CVS mirror is less tested:

  $ git clone git://git.sv.gnu.org/autoconf
  $ git clone https://git.sv.gnu.org/r/autoconf.git
  $ cvs -d:pserver:anonymous@pserver.git.sv.gnu.org:/srv/git/autoconf.git \
      co -d autoconf HEAD

If you have a Savannah user name and commit rights to the Autoconf
project, you should use this instead:

  $ git clone <username>@git.sv.gnu.org:/srv/git/autoconf.git

The next step is to generate files like configure and Makefile.in:

  $ cd autoconf
  $ ./bootstrap

The bootstrap script generates the same files ‘autoreconf -vi’ would,
in a normal package, but it uses autoconf *from the git sources* to do
it.  This means you do not need autoconf installed already, and you do
not need to re-generate ‘configure’ after building Autoconf.

You can now build and test the package:

  $ ./configure
  $ make
  $ make check

At this point, there should be no difference between your local copy,
and the GIT master copy:

  $ git diff

should output no difference.

The testsuite is run by 'make check'.  You may find it useful to run a
subset of the testsuite; for example, all tests with the 'm4sugar'
keyword as well as test 10:

  $ make check TESTSUITEFLAGS='10 -k m4sugar'

You can pass options to configure scripts invoked by the testsuite by
setting the configure_options variable:

  $ make check TESTSUITEFLAGS='configure_options="CC=gcc-2.95"'

The test suite is not automatically parallelized by ‘make -j’.  If you
want to parallelize the testsuite, you need to use TESTSUITEFLAGS for
that, too:

  $ make check TESTSUITEFLAGS=-j8

* Submitting patches

All patches should be submitted to <autoconf-patches@gnu.org> for
review, in context or unified diff format against the latest sources.
In most cases, a patch should include a test case, to ensure that
regressions do not creep back in.  Remember to add documentation and a
NEWS entry for anything that is visible to the user.

If your change is significant (i.e., if it adds more than ~10 lines),
then you'll have to have a copyright assignment on file with the FSF.
Since that involves first an email exchange between you and the FSF,
and then the exchange (FSF to you, then back) of an actual sheet of paper
with your signature on it, and finally, some administrative processing
in Boston, the process can take a few weeks.

The forms to choose from are in gnulib's doc/Copyright/ directory.
If you want to assign a single change, you should use the file,
doc/Copyright/request-assign.changes:

    https://git.sv.gnu.org/cgit/gnulib.git/tree/doc/Copyright/request-assign.changes

If you would like to assign past and future autoconf work,
you'd use doc/Copyright/request-assign.future:

    https://git.sv.gnu.org/cgit/gnulib.git/tree/doc/Copyright/request-assign.future

Enjoy!

-----

Copyright (C) 2002-2017, 2020-2026 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.  This file is offered as-is,
without warranty of any kind.
