2002-04-22 02:11:31 +00:00
|
|
|
-*-text-*-
|
|
|
|
|
2006-02-11 19:02:21 +00:00
|
|
|
-------------------------------------------------------------------------------
|
2013-05-17 05:46:11 +00:00
|
|
|
Copyright (C) 2002-2013 Free Software Foundation, Inc.
|
2012-01-16 02:29:20 +00:00
|
|
|
This file is part of GNU Make.
|
2006-02-11 19:02:21 +00:00
|
|
|
|
|
|
|
GNU Make 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
|
2007-07-04 19:35:15 +00:00
|
|
|
Foundation; either version 3 of the License, or (at your option) any later
|
|
|
|
version.
|
2006-02-11 19:02:21 +00:00
|
|
|
|
|
|
|
GNU Make 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
|
2007-07-04 19:35:15 +00:00
|
|
|
this program. If not, see <http://www.gnu.org/licenses/>.
|
2006-02-11 19:02:21 +00:00
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
|
2013-01-13 00:31:13 +00:00
|
|
|
Obtaining Git Code
|
2002-04-22 02:11:31 +00:00
|
|
|
------------------
|
|
|
|
|
|
|
|
This seems redundant, since if you're reading this you most likely have
|
2013-01-13 00:31:13 +00:00
|
|
|
already performed this step; however, for completeness, you can obtain the GNU
|
|
|
|
make source code via Git from the FSF's Savannah project
|
|
|
|
<http://savannah.gnu.org/projects/make/>:
|
2002-04-22 02:11:31 +00:00
|
|
|
|
2013-01-13 00:31:13 +00:00
|
|
|
$ git clone git://git.savannah.gnu.org/make.git
|
2002-04-22 02:11:31 +00:00
|
|
|
|
|
|
|
|
2013-01-19 22:11:23 +00:00
|
|
|
Changes using Git
|
|
|
|
-----------------
|
|
|
|
|
2013-10-13 14:54:32 +00:00
|
|
|
For non-developers, you can continue to provide patches as before, or if you
|
2013-01-19 22:11:23 +00:00
|
|
|
make a public repository I can pull from that if you prefer.
|
|
|
|
|
2013-10-13 14:54:32 +00:00
|
|
|
Starting with GNU make 4.0 we no longer keep a separate ChangeLog file in
|
|
|
|
source control. We use the Gnulib git-to-changelog conversion script to
|
|
|
|
convert the Git comments into ChangeLog-style entries for release. As a
|
|
|
|
result, please format your Git comments carefully so they will look clean
|
|
|
|
after conversion. In particular, each line of your comment will have a TAB
|
|
|
|
added before it so be sure your comment lines are not longer than 72
|
|
|
|
characters; prefer 70 or less.
|
2013-01-19 22:11:23 +00:00
|
|
|
|
|
|
|
Rule #1: Don't rewrite pushed history (don't use "git push --force").
|
|
|
|
|
|
|
|
Typical simple workflow might be:
|
|
|
|
|
|
|
|
* Edit files
|
|
|
|
* Use "git status" and "git diff" to verify your changes
|
|
|
|
* Use "git add" to stage the changes you want to make
|
|
|
|
* Use "git commit" to commit the staged changes to your local repository
|
|
|
|
* Use "git pull" to accept & merge new changes from the Savannah repository
|
|
|
|
* Use "git push" to push your commits back to the Savannah repository
|
|
|
|
|
|
|
|
For Emacs users, there are many options for Git integration but I strongly
|
|
|
|
recommend the Magit package: http://www.emacswiki.org/emacs/Magit
|
|
|
|
It makes the workflow much clearer, and has advanced features such as
|
|
|
|
constructing multiple commits from various files and even from different
|
|
|
|
diff chunks in the same file. There is a video available which helps a lot.
|
|
|
|
|
|
|
|
|
2013-05-17 06:29:46 +00:00
|
|
|
Coding Standards
|
|
|
|
----------------
|
|
|
|
|
|
|
|
GNU make code adheres to the GNU Coding Standards. Additionally, GNU make is
|
|
|
|
a foundational bootstrap package for the GNU project; as such it is very
|
|
|
|
conservative about language features it expects. It should build with any C
|
|
|
|
compiler conforming to the ANSI C89 / ISO C90 standard.
|
|
|
|
|
|
|
|
Please use only spaces and no TAB characters in source code.
|
|
|
|
|
|
|
|
|
2013-01-13 00:31:13 +00:00
|
|
|
Building From Git
|
2002-04-22 02:11:31 +00:00
|
|
|
-----------------
|
|
|
|
|
2013-01-13 00:31:13 +00:00
|
|
|
To build GNU make from Git, you will need Autoconf, Automake, and
|
2004-03-04 13:42:51 +00:00
|
|
|
Gettext, and any tools that those utilities require (GNU m4, Perl,
|
2013-04-20 20:18:16 +00:00
|
|
|
etc.). See the configure.ac file to find the minimum versions of each
|
2013-10-13 14:54:32 +00:00
|
|
|
of these tools. You will also need a copy of wget and gnulib.
|
2002-04-22 02:11:31 +00:00
|
|
|
|
2013-01-13 00:31:13 +00:00
|
|
|
When building from Git you must build in the source directory: "VPATH
|
2006-04-01 06:36:40 +00:00
|
|
|
builds" from remote directories are not supported. Once you've created
|
|
|
|
a distribution, of course, you can unpack it and do a VPATH build from
|
|
|
|
there.
|
|
|
|
|
2002-04-22 02:11:31 +00:00
|
|
|
After checking out the code, you will need to perform these steps to get
|
2002-07-08 13:05:02 +00:00
|
|
|
to the point where you can run "make".
|
2002-04-22 02:11:31 +00:00
|
|
|
|
|
|
|
|
2006-03-17 18:55:26 +00:00
|
|
|
1) $ autoreconf -i
|
2002-04-22 02:11:31 +00:00
|
|
|
|
2003-03-25 00:15:25 +00:00
|
|
|
This rebuilds all the things that need rebuilding, installing
|
|
|
|
missing files as symbolic links.
|
2002-04-22 02:11:31 +00:00
|
|
|
|
2003-10-22 04:35:27 +00:00
|
|
|
You may get warnings here about missing files like README, etc.
|
|
|
|
Ignore them, they are harmless.
|
|
|
|
|
2002-04-22 02:11:31 +00:00
|
|
|
|
2003-03-25 00:15:25 +00:00
|
|
|
2) $ ./configure
|
2002-07-08 13:05:02 +00:00
|
|
|
|
|
|
|
Generate a Makefile
|
|
|
|
|
|
|
|
|
2003-03-25 00:15:25 +00:00
|
|
|
3) $ make update
|
2002-07-08 13:05:02 +00:00
|
|
|
|
|
|
|
Use wget to retrieve various other files that GNU make relies on,
|
|
|
|
but does not keep in its own source tree.
|
|
|
|
|
2003-05-02 01:44:59 +00:00
|
|
|
NB: You may need GNU make to correctly perform this step; if you use
|
|
|
|
a platform-local make you may get problems with missing files in doc/.
|
|
|
|
|
2002-07-08 13:05:02 +00:00
|
|
|
|
2013-01-13 00:31:13 +00:00
|
|
|
At this point you have successfully brought your Git copy of the GNU
|
2002-04-22 02:11:31 +00:00
|
|
|
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:
|
|
|
|
|
2002-07-08 13:05:02 +00:00
|
|
|
$ make && make check && make install
|
2002-04-22 02:11:31 +00:00
|
|
|
|
|
|
|
to build and install GNU make.
|
|
|
|
|
|
|
|
|
2013-01-13 00:31:13 +00:00
|
|
|
Windows builds from Git
|
2006-03-20 02:36:36 +00:00
|
|
|
-----------------------
|
|
|
|
|
|
|
|
If you have a UNIX emulation like CYGWIN you can opt to run the general
|
|
|
|
build procedure above; it will work. Be sure to read
|
|
|
|
README.W32.template for information on options you might want to use
|
|
|
|
when running ./configure.
|
|
|
|
|
|
|
|
If you can't or don't want to do that, then rename the file
|
|
|
|
README.W32.template to README.W32 and follow those instructions.
|
|
|
|
|
|
|
|
|
2002-04-22 02:11:31 +00:00
|
|
|
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
|
|
|
|
|
2002-04-22 04:35:19 +00:00
|
|
|
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!
|
|
|
|
|
|
|
|
|
2006-03-20 02:36:36 +00:00
|
|
|
Steps to Release
|
|
|
|
----------------
|
2002-04-22 04:35:19 +00:00
|
|
|
|
2006-03-20 02:36:36 +00:00
|
|
|
Here are the things that need to be done (in more or less this order)
|
2013-10-13 18:42:23 +00:00
|
|
|
before making an official release. If something breaks such that you need to
|
|
|
|
change code, be sure to start over again sufficiently that everything is
|
|
|
|
consistent (that's why we don't finalize the Git tag, etc. until the end).
|
2002-04-22 04:35:19 +00:00
|
|
|
|
2013-04-20 20:18:16 +00:00
|
|
|
* Update the configure.ac file with the new release number.
|
2013-10-13 18:42:23 +00:00
|
|
|
* Update the EDITION value in the doc/make.texi file.
|
2006-03-20 02:36:36 +00:00
|
|
|
* Update the NEWS file with the release number and date.
|
2013-10-13 18:42:23 +00:00
|
|
|
* Ensure the Savannah bug list URL in the NEWS file uses the correct
|
|
|
|
"Fixed Release" ID number.
|
|
|
|
* Run "make distcheck" to be sure it all works.
|
|
|
|
* Run "make update-www" to get a copy of the GNU make web pages
|
|
|
|
* Update the web page boilerplate if necessary
|
|
|
|
* Run "make gendocs" (requires gnulib) to generate the manual files for
|
|
|
|
the GNU make web pages.
|
|
|
|
* Follow the directions from gendocs for the web page repository
|
|
|
|
* run "make tag-release" to create a Git tag for the release
|
|
|
|
* Push everything:
|
|
|
|
git push --tags origin master
|
|
|
|
|
|
|
|
Manage the Savannah project for GNU make:
|
|
|
|
|
2013-01-13 00:31:13 +00:00
|
|
|
* In Savannah modify the "Value", "Rank", and "Description" values for the
|
|
|
|
current "SCM" entry in both "Component Version" and "Fix Release" fields
|
|
|
|
to refer to the new release, for "Bugs" and "Patches".
|
|
|
|
* In Savannah create a new entry for the "Component Version" and "Fix
|
|
|
|
Release" fields:
|
|
|
|
- Value: SCM
|
|
|
|
- Rank: 20
|
|
|
|
- Descr: Fixed in Git; will be available in the next version of Make.
|
2006-03-20 02:36:36 +00:00
|
|
|
* Create the new release in the Savannah "Bugs" Administration for
|
|
|
|
both the "Component Version" and "Fixed Release" fields.
|
2013-10-13 18:42:23 +00:00
|
|
|
|
|
|
|
Start the next release:
|
|
|
|
|
|
|
|
* Update configure.ac and add a ".90" to the release number.
|
|
|
|
* Update the NEWS file with a new section for the release / date.
|
|
|
|
* Update the Savannah URL for the bugs fixed in the NEWS section.
|
2006-02-01 07:54:22 +00:00
|
|
|
|
|
|
|
|
2006-03-20 02:36:36 +00:00
|
|
|
Publishing a Package
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
In order to publish a package on the FSF FTP site, either the release
|
|
|
|
site ftp://ftp.gnu.org, or the prerelease site ftp://alpha.gnu.org, you
|
|
|
|
first need to have my GPG private key and my passphrase to unlock it.
|
|
|
|
And, you can't have them! So there! But, just so I remember here's
|
2013-01-13 00:31:13 +00:00
|
|
|
what to do:
|
2006-03-20 02:36:36 +00:00
|
|
|
|
|
|
|
Make sure the "Steps to Release" are complete and committed and tagged.
|
|
|
|
|
2013-01-13 00:31:13 +00:00
|
|
|
git clone git://git.savannah.gnu.org/make.git make-release
|
2006-03-20 02:36:36 +00:00
|
|
|
|
|
|
|
cd make-release
|
|
|
|
|
|
|
|
<run the commands above to build the release>
|
|
|
|
|
|
|
|
make upload-alpha # for alpha.gnu.org (pre-releases)
|
|
|
|
-OR-
|
|
|
|
make upload-ftp # for ftp.gnu.org (official releases)
|
|
|
|
|
2013-01-13 00:31:13 +00:00
|
|
|
Depending on your distribution (whether GnuPG is integrated with your keyring
|
|
|
|
etc.) it will either pop up a window asking for your GPG key passphrase one
|
|
|
|
time, or else it will use the CLI to ask for the GPG passphrase _THREE_ times.
|
|
|
|
Sigh.
|
2006-03-20 02:36:36 +00:00
|
|
|
|
|
|
|
|
2006-10-01 05:38:38 +00:00
|
|
|
For both final releases and pre-releases, send an email with the URL of
|
|
|
|
the package to the GNU translation robot to allow the translators to
|
|
|
|
work on it:
|
|
|
|
|
2013-05-27 17:52:15 +00:00
|
|
|
<coordinator@translationproject.org>
|
2006-10-01 05:38:38 +00:00
|
|
|
|
|
|
|
|
2006-03-20 02:36:36 +00:00
|
|
|
Where to Announce
|
|
|
|
-----------------
|
|
|
|
|
2006-04-01 06:36:40 +00:00
|
|
|
Create the announcement in a text file, then sign it with GPG.
|
|
|
|
|
|
|
|
gpg --clearsign <announcement.txt>
|
|
|
|
|
|
|
|
Upload to gnu.org, then login and send from my account there.
|
2006-03-20 02:36:36 +00:00
|
|
|
|
2013-01-13 00:31:13 +00:00
|
|
|
To: bug-make@gnu.org, help-make@gnu.org, make-w32@gnu.org
|
|
|
|
CC: info-gnu@gnu.org
|
|
|
|
BCC: make-alpha@gnu.org
|
2006-03-20 02:36:36 +00:00
|
|
|
|
|
|
|
Add a news item to the Savannah project site.
|
|
|
|
|
|
|
|
Add an update to freshmeat.net.
|
2006-02-01 07:54:22 +00:00
|
|
|
|
|
|
|
|
2002-04-22 04:35:19 +00:00
|
|
|
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
|
2013-01-13 00:31:13 +00:00
|
|
|
distribution package from a virgin Git source checkout (assuming all the
|
2002-04-22 04:35:19 +00:00
|
|
|
prerequisites are available of course).
|
|
|
|
|
2002-08-10 01:27:16 +00:00
|
|
|
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!
|
2002-04-22 04:35:19 +00:00
|
|
|
|
2006-03-17 18:55:26 +00:00
|
|
|
autoreconf -i
|
2002-04-22 04:35:19 +00:00
|
|
|
./configure
|
2002-07-08 13:05:02 +00:00
|
|
|
make update
|
2002-04-22 04:35:19 +00:00
|
|
|
make
|
|
|
|
make check
|
2006-03-17 18:55:26 +00:00
|
|
|
|
2010-07-13 01:20:10 +00:00
|
|
|
Or, for a debugging version:
|
|
|
|
|
|
|
|
autoreconf -i && ./configure CFLAGS=-g && make update && make && make check
|
|
|
|
|
2006-03-17 18:55:26 +00:00
|
|
|
Or, all-in-one:
|
|
|
|
|
|
|
|
autoreconf -i && ./configure && make update && make && make check
|