-
Notifications
You must be signed in to change notification settings - Fork 22
/
README-hacking
145 lines (103 loc) · 5.28 KB
/
README-hacking
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
-*- 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:https://git.sv.gnu.org/autoconf
$ git clone https://git.sv.gnu.org/r/autoconf.git
$ cvs -d:pserver:[email protected]:/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 <[email protected]> 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-2024 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.