X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=doc%2Fmake-stds.texi;h=bd4df50d8605d2dc030f56510e91580608ab3e71;hb=0494ee29c036b7109c3c8a87cdd31d1ee34b820f;hp=8d60fe9bd09868848c566448bc309b4c2cb7e606;hpb=0ea920e6ae2f890c9ecb97578ef3bf582034b7a4;p=gnulib.git diff --git a/doc/make-stds.texi b/doc/make-stds.texi index 8d60fe9bd..bd4df50d8 100644 --- a/doc/make-stds.texi +++ b/doc/make-stds.texi @@ -9,7 +9,7 @@ @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 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. @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 @@ -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: @@ -159,14 +164,19 @@ 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 @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,8 @@ 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, such as +@code{bzip2} and @code{lzma}. 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