X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=doc%2Fmake-stds.texi;h=9fe29d3689bdf94294c57e13f9ca9e129e0e629b;hb=7521ea075f22293b395517a5d2f4ea213b63d4a9;hp=8d60fe9bd09868848c566448bc309b4c2cb7e606;hpb=0ea920e6ae2f890c9ecb97578ef3bf582034b7a4;p=gnulib.git diff --git a/doc/make-stds.texi b/doc/make-stds.texi index 8d60fe9bd..9fe29d368 100644 --- a/doc/make-stds.texi +++ b/doc/make-stds.texi @@ -8,11 +8,11 @@ @cindex conventions for makefiles @cindex standards for makefiles -@c Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, -@c 2004, 2005, 2006, 2007 Free Software Foundation, Inc. - +@c Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, +@c 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +@c @c Permission is granted to copy, distribute and/or modify this document -@c under the terms of the GNU Free Documentation License, Version 1.2 +@c under the terms of the GNU Free Documentation License, Version 1.3 @c or any later version published by the Free Software Foundation; @c with no Invariant Sections, with no @c Front-Cover Texts, and with no Back-Cover Texts. @@ -33,7 +33,10 @@ chapter @end iftex describes conventions for writing the Makefiles for GNU programs. Using Automake will help you write a Makefile that follows these -conventions. +conventions. For more information on portable Makefiles, see +@sc{posix} and @ref{Portable Make, Portable Make Programming,, autoconf, +Autoconf}. + @menu * Makefile Basics:: General conventions for Makefiles. @@ -144,8 +147,10 @@ subtargets) work correctly with a parallel @code{make}. @section Utilities in Makefiles Write the Makefile commands (and any shell scripts, such as -@code{configure}) to run in @code{sh}, not in @code{csh}. Don't use any -special features of @code{ksh} or @code{bash}. +@code{configure}) to run under @code{sh} (both the traditional Bourne +shell and the @sc{posix} shell), not @code{csh}. Don't use any +special features of @code{ksh} or @code{bash}, or @sc{posix} features +not widely supported in traditional Bourne @code{sh}. The @code{configure} script and the Makefile rules for building and installation should not use any utilities directly except these: @@ -156,17 +161,22 @@ installation should not use any utilities directly except these: @example awk cat cmp cp diff echo egrep expr false grep install-info -ln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch true +ln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch tr true @end example -The compression program @code{gzip} can be used in the @code{dist} rule. +Compression programs such as @code{gzip} can be used in the +@code{dist} rule. + +Generally, stick to the widely-supported (usually +@sc{posix}-specified) options and features of these programs. For +example, don't use @samp{mkdir -p}, convenient as it may be, because a +few systems don't support it at all and with others, it is not safe +for parallel execution. For a list of known incompatibilities, see +@ref{Portable Shell, Portable Shell Programming,, autoconf, Autoconf}. -Stick to the generally supported options for these programs. For -example, don't use @samp{mkdir -p}, convenient as it may be, because -most systems don't support it. It is a good idea to avoid creating symbolic links in makefiles, since a -few systems don't support them. +few file systems don't support them. The Makefile rules for building and installation can also use compilers and related programs, but should do so via @code{make} variables so that the @@ -275,10 +285,12 @@ $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a However, it is preferable to support a @code{DESTDIR} prefix on the target files, as explained in the next section. -@noindent -Always use a file name, not a directory name, as the second argument of -the installation commands. Use a separate command for each file to be -installed. +It is acceptable, but not required, to install multiple files in one +command, with the final argument being a directory, as in: + +@example +$(INSTALL_PROGRAM) foo bar baz $(bindir) +@end example @node DESTDIR @@ -956,6 +968,7 @@ then @code{tar} that subdirectory. Compress the tar file with @code{gzip}. For example, the actual distribution file for GCC version 1.40 is called @file{gcc-1.40.tar.gz}. +It is ok to support other free compression formats as well. The @code{dist} target should explicitly depend on all non-source files that are in the distribution, to make sure they are up to date in the