1                                                                     -*-text-*-
2
3-------------------------------------------------------------------------------
4Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
5Software Foundation, Inc.  This file is part of GNU Make.
6
7GNU Make is free software; you can redistribute it and/or modify it under the
8terms of the GNU General Public License as published by the Free Software
9Foundation; either version 3 of the License, or (at your option) any later
10version.
11
12GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License along with
17this program.  If not, see <http://www.gnu.org/licenses/>.
18-------------------------------------------------------------------------------
19
20Obtaining CVS Code
21------------------
22
23This seems redundant, since if you're reading this you most likely have
24already performed this step; however, for completeness, you can obtain
25the GNU make source code via anonymous CVS from the FSF's Savannah
26project <http://savannah.gnu.org/projects/make/>:
27
28  $ cvs -d:pserver:anoncvs@cvs.savannah.gnu.org:/sources/make co make
29
30You might want to use the "-z3" option to get compression, and you most
31certainly will want the -P option to avoid unneeded directories
32cluttering up your source.  Personally I add these (as well as -dP for
33update) to my ~/.cvsrc file.
34
35
36If you have an older version of CVS, you might have to login first.
37There is no password; just hit the ENTER key if you are asked for one.
38
39
40Building From CVS
41-----------------
42
43To build GNU make from CVS, you will need Autoconf, Automake, and
44Gettext, and any tools that those utilities require (GNU m4, Perl,
45etc.).  See the configure.in file to find the minimum versions of each
46of these tools.  You will also need a copy of wget.
47
48When building from CVS you must build in the source directory: "VPATH
49builds" from remote directories are not supported.  Once you've created
50a distribution, of course, you can unpack it and do a VPATH build from
51there.
52
53After checking out the code, you will need to perform these steps to get
54to the point where you can run "make".
55
56
57 1) $ autoreconf -i
58
59    This rebuilds all the things that need rebuilding, installing
60    missing files as symbolic links.
61
62    You may get warnings here about missing files like README, etc.
63    Ignore them, they are harmless.
64
65
66 2) $ ./configure
67
68    Generate a Makefile
69
70
71 3) $ make update
72
73    Use wget to retrieve various other files that GNU make relies on,
74    but does not keep in its own source tree.
75
76    NB: You may need GNU make to correctly perform this step; if you use
77    a platform-local make you may get problems with missing files in doc/.
78
79
80At this point you have successfully brought your CVS copy of the GNU
81make source directory up to the point where it can be treated
82more-or-less like the official package you would get from ftp.gnu.org.
83That is, you can just run:
84
85  $ make && make check && make install
86
87to build and install GNU make.
88
89
90Windows builds from CVS
91-----------------------
92
93If you have a UNIX emulation like CYGWIN you can opt to run the general
94build procedure above; it will work.  Be sure to read
95README.W32.template for information on options you might want to use
96when running ./configure.
97
98If you can't or don't want to do that, then rename the file
99README.W32.template to README.W32 and follow those instructions.
100
101
102Creating a Package
103------------------
104
105Once you have performed the above steps (including the configuration and
106build) you can create a GNU make package.  This is very simple, just
107run:
108
109  $ make dist-gzip
110
111and, if you like:
112
113  $ make dist-bzip2
114
115Even better, you should run this:
116
117  $ make distcheck
118
119Which will build both .gz and .bz2 package files, then unpack them into
120a temporary location, try to build them, and repack them, verifying that
121everything works, you get the same results, _and_ no extraneous files
122are left over after the "distclean" rule--whew!!  Now, _that_ is why
123converting to Automake is worth the trouble!  A big "huzzah!" to Tom
124T. and the AutoToolers!
125
126
127Steps to Release
128----------------
129
130Here are the things that need to be done (in more or less this order)
131before making an official release:
132
133  * Update the configure.in file with the new release number.
134  * Update the NEWS file with the release number and date.
135  * Create the new release in the Savannah "Bugs" Administration for
136    both the "Component Version" and "Fixed Release" fields.
137  * Create the new release in the Savannah "Patches" Administration for
138    the "Fixed Release" field.
139  * Update the Savannah bug list URL in the NEWS file to use the correct
140    "Fixed Release" ID number.
141  * Run "make distcheck" to be sure it all works.
142  * Commit everything.
143  * cvs tag <RTAG> where RTAG is constructed by replacing each "." in
144    the version with "-" and prefixing it with "make-".
145
146
147Publishing a Package
148--------------------
149
150In order to publish a package on the FSF FTP site, either the release
151site ftp://ftp.gnu.org, or the prerelease site ftp://alpha.gnu.org, you
152first need to have my GPG private key and my passphrase to unlock it.
153And, you can't have them!  So there!  But, just so I remember here's
154what you do:
155
156  Make sure the "Steps to Release" are complete and committed and tagged.
157
158  cvs -d :pserver:anonymous@cvs.savannah.gnu.org:/sources/make \
159     export -r<RTAG> -d make-release make
160
161  cd make-release
162
163  <run the commands above to build the release>
164
165  make upload-alpha             # for alpha.gnu.org (pre-releases)
166       -OR-
167  make upload-ftp               # for ftp.gnu.org (official releases)
168
169It will ask for the GPG passphrase _THREE_ times.  Sigh.
170
171
172For both final releases and pre-releases, send an email with the URL of
173the package to the GNU translation robot to allow the translators to
174work on it:
175
176     <translation@iro.umontreal.ca>
177
178
179Where to Announce
180-----------------
181
182Create the announcement in a text file, then sign it with GPG.
183
184  gpg --clearsign <announcement.txt>
185
186Upload to gnu.org, then login and send from my account there.
187
188Email to: make-alpha@gnu.org, bug-make@gnu.org, help-make@gnu.org, make-w32@gnu.org.
189Email to: info-gnu@gnu.org
190
191Add a news item to the Savannah project site.
192
193Add an update to freshmeat.net.
194
195
196Appendix A - For The Brave
197--------------------------
198
199For those of you who trust me implicitly, or are just brave (or
200foolhardy), here is a canned sequence of commands to build a GNU make
201distribution package from a virgin CVS source checkout (assuming all the
202prerequisites are available of course).
203
204This list is eminently suitable for a quick swipe o' the mouse and a
205swift click o' mouse-2 into an xterm.  Go for it!
206
207autoreconf -i
208./configure
209make update
210make
211make check
212
213Or, for a debugging version:
214
215autoreconf -i && ./configure CFLAGS=-g && make update && make && make check
216
217Or, all-in-one:
218
219autoreconf -i && ./configure && make update && make && make check
220