summaryrefslogtreecommitdiff
path: root/README-hacking
blob: 743dd0397cb83405a05b532a27260e8aea4bb0d9 (plain)
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
Building from a Git repository				-*- outline -*-

These notes intend to help people working on the checked-out sources.
These requirements do not apply when building from a distribution tarball.
If this package has a file HACKING, please also read that file for
more detailed contribution guidelines.

* 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.
(The requirements to build from a release are much less and are just
the requirements of the standard './configure && make' procedure.)
Specific development tools and versions will be checked for and listed by
the bootstrap script.  See README-prereq for specific notes on obtaining
these prerequisite tools.

Valgrind <https://valgrind.org/> is also highly recommended, if
Valgrind supports your architecture.  See also README-valgrind
(if present).

While building from a just-cloned source tree may require installing a
few prerequisites, later, a plain 'git pull && make' typically suffices.

* First Git checkout

You can get a copy of the source repository like this:

        $ git clone git://git.sv.gnu.org/<packagename>
        $ cd <packagename>

where '<packagename>' stands for 'coreutils' or whatever other package
you are building.

To use the most-recent Gnulib (as opposed to the Gnulib version that
the package last synchronized to), do this next:

        $ git submodule foreach git pull origin master
        $ git commit -m 'build: update gnulib submodule to latest' gnulib

As an optional step, if you already have a copy of the Gnulib Git
repository, then you can use it as a reference to reduce download
time and file system space requirements:

        $ export GNULIB_SRCDIR=/path/to/gnulib

The next step is to get and check other files needed to build,
which are extracted from other source packages:

        $ ./bootstrap

And there you are!  Just

        $ ./configure --quiet #[--disable-gcc-warnings] [*]
        $ 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.

Instead of running ./bootstrap you can run its two phases:

        $ # 1. Fetch auxiliary files from the network.
        $ ./autopull.sh
        $
        $ # 2. Generate files locally.
        $ ./autogen.sh

Separating the phases can be useful for reproducible builds,
and for applying local modifications between the two phases.

Enjoy!

[*] By default GCC warnings are enabled when building from Git.
If you get warnings with recent GCC and Glibc with default
configure-time options, please report the warnings to the bug
reporting address of this package instead of to bug-gnulib,
even if the problem seems to originate in a Gnulib-provided file.
If you get warnings with other configurations, you can run
'./configure --disable-gcc-warnings' or 'make WERROR_CFLAGS='
to build quietly or verbosely, respectively.
-----

* Submitting patches

If you develop a fix or a new feature, please send it to the
appropriate bug-reporting address as reported by the --help option of
each program.  One way to do this is to use vc-dwim
<https://www.gnu.org/software/vc-dwim/>), as follows.

  Run the command "vc-dwim --initialize" from the top-level directory
  of this package's git-cloned hierarchy.

  Edit the (empty) ChangeLog file that this command creates, creating a
  properly-formatted entry according to the GNU coding standards
  <https://www.gnu.org/prep/standards/html_node/Change-Logs.html>.

  Make your changes.

  Run the command "vc-dwim" and make sure its output (the diff of all
  your changes) looks good.

  Run "vc-dwim --commit".

  Run the command "git format-patch --stdout -1", and email its output
  in, using the output's subject line.

-----

Copyright (C) 2002-2022 Free Software Foundation, Inc.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.