1@comment This file is included by both standards.texi and make.texinfo. 2@comment It was broken out of standards.texi on 1/6/93 by roland. 3 4@node Makefile Conventions 5@chapter Makefile Conventions 6@cindex makefile, conventions for 7@cindex conventions for makefiles 8@cindex standards for makefiles 9 10@c Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 11@c 2004, 2005, 2006, 2007, 2008, 2010 Free Software Foundation, Inc. 12@c 13@c Permission is granted to copy, distribute and/or modify this document 14@c under the terms of the GNU Free Documentation License, Version 1.3 15@c or any later version published by the Free Software Foundation; 16@c with no Invariant Sections, with no 17@c Front-Cover Texts, and with no Back-Cover Texts. 18@c A copy of the license is included in the section entitled ``GNU 19@c Free Documentation License''. 20 21This 22@ifinfo 23node 24@end ifinfo 25@iftex 26@ifset CODESTD 27section 28@end ifset 29@ifclear CODESTD 30chapter 31@end ifclear 32@end iftex 33describes conventions for writing the Makefiles for GNU programs. 34Using Automake will help you write a Makefile that follows these 35conventions. For more information on portable Makefiles, see 36@sc{posix} and @ref{Portable Make, Portable Make Programming,, autoconf, 37Autoconf}. 38 39 40@menu 41* Makefile Basics:: General conventions for Makefiles. 42* Utilities in Makefiles:: Utilities to be used in Makefiles. 43* Command Variables:: Variables for specifying commands. 44* DESTDIR:: Supporting staged installs. 45* Directory Variables:: Variables for installation directories. 46* Standard Targets:: Standard targets for users. 47* Install Command Categories:: Three categories of commands in the `install' 48 rule: normal, pre-install and post-install. 49@end menu 50 51@node Makefile Basics 52@section General Conventions for Makefiles 53 54Every Makefile should contain this line: 55 56@example 57SHELL = /bin/sh 58@end example 59 60@noindent 61to avoid trouble on systems where the @code{SHELL} variable might be 62inherited from the environment. (This is never a problem with GNU 63@code{make}.) 64 65Different @code{make} programs have incompatible suffix lists and 66implicit rules, and this sometimes creates confusion or misbehavior. So 67it is a good idea to set the suffix list explicitly using only the 68suffixes you need in the particular Makefile, like this: 69 70@example 71.SUFFIXES: 72.SUFFIXES: .c .o 73@end example 74 75@noindent 76The first line clears out the suffix list, the second introduces all 77suffixes which may be subject to implicit rules in this Makefile. 78 79Don't assume that @file{.} is in the path for command execution. When 80you need to run programs that are a part of your package during the 81make, please make sure that it uses @file{./} if the program is built as 82part of the make or @file{$(srcdir)/} if the file is an unchanging part 83of the source code. Without one of these prefixes, the current search 84path is used. 85 86The distinction between @file{./} (the @dfn{build directory}) and 87@file{$(srcdir)/} (the @dfn{source directory}) is important because 88users can build in a separate directory using the @samp{--srcdir} option 89to @file{configure}. A rule of the form: 90 91@smallexample 92foo.1 : foo.man sedscript 93 sed -f sedscript foo.man > foo.1 94@end smallexample 95 96@noindent 97will fail when the build directory is not the source directory, because 98@file{foo.man} and @file{sedscript} are in the source directory. 99 100When using GNU @code{make}, relying on @samp{VPATH} to find the source 101file will work in the case where there is a single dependency file, 102since the @code{make} automatic variable @samp{$<} will represent the 103source file wherever it is. (Many versions of @code{make} set @samp{$<} 104only in implicit rules.) A Makefile target like 105 106@smallexample 107foo.o : bar.c 108 $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o 109@end smallexample 110 111@noindent 112should instead be written as 113 114@smallexample 115foo.o : bar.c 116 $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@@ 117@end smallexample 118 119@noindent 120in order to allow @samp{VPATH} to work correctly. When the target has 121multiple dependencies, using an explicit @samp{$(srcdir)} is the easiest 122way to make the rule work well. For example, the target above for 123@file{foo.1} is best written as: 124 125@smallexample 126foo.1 : foo.man sedscript 127 sed -f $(srcdir)/sedscript $(srcdir)/foo.man > $@@ 128@end smallexample 129 130GNU distributions usually contain some files which are not source 131files---for example, Info files, and the output from Autoconf, Automake, 132Bison or Flex. Since these files normally appear in the source 133directory, they should always appear in the source directory, not in the 134build directory. So Makefile rules to update them should put the 135updated files in the source directory. 136 137However, if a file does not appear in the distribution, then the 138Makefile should not put it in the source directory, because building a 139program in ordinary circumstances should not modify the source directory 140in any way. 141 142Try to make the build and installation targets, at least (and all their 143subtargets) work correctly with a parallel @code{make}. 144 145@node Utilities in Makefiles 146@section Utilities in Makefiles 147 148Write the Makefile commands (and any shell scripts, such as 149@code{configure}) to run under @code{sh} (both the traditional Bourne 150shell and the @sc{posix} shell), not @code{csh}. Don't use any 151special features of @code{ksh} or @code{bash}, or @sc{posix} features 152not widely supported in traditional Bourne @code{sh}. 153 154The @code{configure} script and the Makefile rules for building and 155installation should not use any utilities directly except these: 156 157@c dd find 158@c gunzip gzip md5sum 159@c mkfifo mknod tee uname 160 161@example 162awk cat cmp cp diff echo egrep expr false grep install-info ln ls 163mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true 164@end example 165 166Compression programs such as @code{gzip} can be used in the 167@code{dist} rule. 168 169Generally, stick to the widely-supported (usually 170@sc{posix}-specified) options and features of these programs. For 171example, don't use @samp{mkdir -p}, convenient as it may be, because a 172few systems don't support it at all and with others, it is not safe 173for parallel execution. For a list of known incompatibilities, see 174@ref{Portable Shell, Portable Shell Programming,, autoconf, Autoconf}. 175 176 177It is a good idea to avoid creating symbolic links in makefiles, since a 178few file systems don't support them. 179 180The Makefile rules for building and installation can also use compilers 181and related programs, but should do so via @code{make} variables so that the 182user can substitute alternatives. Here are some of the programs we 183mean: 184 185@example 186ar bison cc flex install ld ldconfig lex 187make makeinfo ranlib texi2dvi yacc 188@end example 189 190Use the following @code{make} variables to run those programs: 191 192@example 193$(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX) 194$(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC) 195@end example 196 197When you use @code{ranlib} or @code{ldconfig}, you should make sure 198nothing bad happens if the system does not have the program in question. 199Arrange to ignore an error from that command, and print a message before 200the command to tell the user that failure of this command does not mean 201a problem. (The Autoconf @samp{AC_PROG_RANLIB} macro can help with 202this.) 203 204If you use symbolic links, you should implement a fallback for systems 205that don't have symbolic links. 206 207Additional utilities that can be used via Make variables are: 208 209@example 210chgrp chmod chown mknod 211@end example 212 213It is ok to use other utilities in Makefile portions (or scripts) 214intended only for particular systems where you know those utilities 215exist. 216 217@node Command Variables 218@section Variables for Specifying Commands 219 220Makefiles should provide variables for overriding certain commands, options, 221and so on. 222 223In particular, you should run most utility programs via variables. 224Thus, if you use Bison, have a variable named @code{BISON} whose default 225value is set with @samp{BISON = bison}, and refer to it with 226@code{$(BISON)} whenever you need to use Bison. 227 228File management utilities such as @code{ln}, @code{rm}, @code{mv}, and 229so on, need not be referred to through variables in this way, since users 230don't need to replace them with other programs. 231 232Each program-name variable should come with an options variable that is 233used to supply options to the program. Append @samp{FLAGS} to the 234program-name variable name to get the options variable name---for 235example, @code{BISONFLAGS}. (The names @code{CFLAGS} for the C 236compiler, @code{YFLAGS} for yacc, and @code{LFLAGS} for lex, are 237exceptions to this rule, but we keep them because they are standard.) 238Use @code{CPPFLAGS} in any compilation command that runs the 239preprocessor, and use @code{LDFLAGS} in any compilation command that 240does linking as well as in any direct use of @code{ld}. 241 242If there are C compiler options that @emph{must} be used for proper 243compilation of certain files, do not include them in @code{CFLAGS}. 244Users expect to be able to specify @code{CFLAGS} freely themselves. 245Instead, arrange to pass the necessary options to the C compiler 246independently of @code{CFLAGS}, by writing them explicitly in the 247compilation commands or by defining an implicit rule, like this: 248 249@smallexample 250CFLAGS = -g 251ALL_CFLAGS = -I. $(CFLAGS) 252.c.o: 253 $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< 254@end smallexample 255 256Do include the @samp{-g} option in @code{CFLAGS}, because that is not 257@emph{required} for proper compilation. You can consider it a default 258that is only recommended. If the package is set up so that it is 259compiled with GCC by default, then you might as well include @samp{-O} 260in the default value of @code{CFLAGS} as well. 261 262Put @code{CFLAGS} last in the compilation command, after other variables 263containing compiler options, so the user can use @code{CFLAGS} to 264override the others. 265 266@code{CFLAGS} should be used in every invocation of the C compiler, 267both those which do compilation and those which do linking. 268 269Every Makefile should define the variable @code{INSTALL}, which is the 270basic command for installing a file into the system. 271 272Every Makefile should also define the variables @code{INSTALL_PROGRAM} 273and @code{INSTALL_DATA}. (The default for @code{INSTALL_PROGRAM} should 274be @code{$(INSTALL)}; the default for @code{INSTALL_DATA} should be 275@code{$@{INSTALL@} -m 644}.) Then it should use those variables as the 276commands for actual installation, for executables and non-executables 277respectively. Minimal use of these variables is as follows: 278 279@example 280$(INSTALL_PROGRAM) foo $(bindir)/foo 281$(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a 282@end example 283 284However, it is preferable to support a @code{DESTDIR} prefix on the 285target files, as explained in the next section. 286 287It is acceptable, but not required, to install multiple files in one 288command, with the final argument being a directory, as in: 289 290@example 291$(INSTALL_PROGRAM) foo bar baz $(bindir) 292@end example 293 294 295@node DESTDIR 296@section @code{DESTDIR}: Support for Staged Installs 297 298@vindex DESTDIR 299@cindex staged installs 300@cindex installations, staged 301 302@code{DESTDIR} is a variable prepended to each installed target file, 303like this: 304 305@example 306$(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo 307$(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a 308@end example 309 310The @code{DESTDIR} variable is specified by the user on the @code{make} 311command line as an absolute file name. For example: 312 313@example 314make DESTDIR=/tmp/stage install 315@end example 316 317@noindent 318@code{DESTDIR} should be supported only in the @code{install*} and 319@code{uninstall*} targets, as those are the only targets where it is 320useful. 321 322If your installation step would normally install 323@file{/usr/local/bin/foo} and @file{/usr/@/local/@/lib/@/libfoo.a}, then an 324installation invoked as in the example above would install 325@file{/tmp/stage/usr/local/bin/foo} and 326@file{/tmp/stage/usr/local/lib/libfoo.a} instead. 327 328Prepending the variable @code{DESTDIR} to each target in this way 329provides for @dfn{staged installs}, where the installed files are not 330placed directly into their expected location but are instead copied 331into a temporary location (@code{DESTDIR}). However, installed files 332maintain their relative directory structure and any embedded file names 333will not be modified. 334 335You should not set the value of @code{DESTDIR} in your @file{Makefile} 336at all; then the files are installed into their expected locations by 337default. Also, specifying @code{DESTDIR} should not change the 338operation of the software in any way, so its value should not be 339included in any file contents. 340 341@code{DESTDIR} support is commonly used in package creation. It is 342also helpful to users who want to understand what a given package will 343install where, and to allow users who don't normally have permissions 344to install into protected areas to build and install before gaining 345those permissions. Finally, it can be useful with tools such as 346@code{stow}, where code is installed in one place but made to appear 347to be installed somewhere else using symbolic links or special mount 348operations. So, we strongly recommend GNU packages support 349@code{DESTDIR}, though it is not an absolute requirement. 350 351 352@node Directory Variables 353@section Variables for Installation Directories 354 355Installation directories should always be named by variables, so it is 356easy to install in a nonstandard place. The standard names for these 357variables and the values they should have in GNU packages are 358described below. They are based on a standard file system layout; 359variants of it are used in GNU/Linux and other modern operating 360systems. 361 362Installers are expected to override these values when calling 363@command{make} (e.g., @kbd{make prefix=/usr install} or 364@command{configure} (e.g., @kbd{configure --prefix=/usr}). GNU 365packages should not try to guess which value should be appropriate for 366these variables on the system they are being installed onto: use the 367default settings specified here so that all GNU packages behave 368identically, allowing the installer to achieve any desired layout. 369 370@cindex directories, creating installation 371@cindex installation directories, creating 372All installation directories, and their parent directories, should be 373created (if necessary) before they are installed into. 374 375These first two variables set the root for the installation. All the 376other installation directories should be subdirectories of one of 377these two, and nothing should be directly installed into these two 378directories. 379 380@table @code 381@item prefix 382@vindex prefix 383A prefix used in constructing the default values of the variables listed 384below. The default value of @code{prefix} should be @file{/usr/local}. 385When building the complete GNU system, the prefix will be empty and 386@file{/usr} will be a symbolic link to @file{/}. 387(If you are using Autoconf, write it as @samp{@@prefix@@}.) 388 389Running @samp{make install} with a different value of @code{prefix} from 390the one used to build the program should @emph{not} recompile the 391program. 392 393@item exec_prefix 394@vindex exec_prefix 395A prefix used in constructing the default values of some of the 396variables listed below. The default value of @code{exec_prefix} should 397be @code{$(prefix)}. 398(If you are using Autoconf, write it as @samp{@@exec_prefix@@}.) 399 400Generally, @code{$(exec_prefix)} is used for directories that contain 401machine-specific files (such as executables and subroutine libraries), 402while @code{$(prefix)} is used directly for other directories. 403 404Running @samp{make install} with a different value of @code{exec_prefix} 405from the one used to build the program should @emph{not} recompile the 406program. 407@end table 408 409Executable programs are installed in one of the following directories. 410 411@table @code 412@item bindir 413@vindex bindir 414The directory for installing executable programs that users can run. 415This should normally be @file{/usr/local/bin}, but write it as 416@file{$(exec_prefix)/bin}. 417(If you are using Autoconf, write it as @samp{@@bindir@@}.) 418 419@item sbindir 420@vindex sbindir 421The directory for installing executable programs that can be run from 422the shell, but are only generally useful to system administrators. This 423should normally be @file{/usr/local/sbin}, but write it as 424@file{$(exec_prefix)/sbin}. 425(If you are using Autoconf, write it as @samp{@@sbindir@@}.) 426 427@item libexecdir 428@vindex libexecdir 429@comment This paragraph adjusted to avoid overfull hbox --roland 5jul94 430The directory for installing executable programs to be run by other 431programs rather than by users. This directory should normally be 432@file{/usr/local/libexec}, but write it as @file{$(exec_prefix)/libexec}. 433(If you are using Autoconf, write it as @samp{@@libexecdir@@}.) 434 435The definition of @samp{libexecdir} is the same for all packages, so 436you should install your data in a subdirectory thereof. Most packages 437install their data under @file{$(libexecdir)/@var{package-name}/}, 438possibly within additional subdirectories thereof, such as 439@file{$(libexecdir)/@var{package-name}/@var{machine}/@var{version}}. 440@end table 441 442Data files used by the program during its execution are divided into 443categories in two ways. 444 445@itemize @bullet 446@item 447Some files are normally modified by programs; others are never normally 448modified (though users may edit some of these). 449 450@item 451Some files are architecture-independent and can be shared by all 452machines at a site; some are architecture-dependent and can be shared 453only by machines of the same kind and operating system; others may never 454be shared between two machines. 455@end itemize 456 457This makes for six different possibilities. However, we want to 458discourage the use of architecture-dependent files, aside from object 459files and libraries. It is much cleaner to make other data files 460architecture-independent, and it is generally not hard. 461 462Here are the variables Makefiles should use to specify directories 463to put these various kinds of files in: 464 465@table @samp 466@item datarootdir 467The root of the directory tree for read-only architecture-independent 468data files. This should normally be @file{/usr/local/share}, but 469write it as @file{$(prefix)/share}. (If you are using Autoconf, write 470it as @samp{@@datarootdir@@}.) @samp{datadir}'s default value is 471based on this variable; so are @samp{infodir}, @samp{mandir}, and 472others. 473 474@item datadir 475The directory for installing idiosyncratic read-only 476architecture-independent data files for this program. This is usually 477the same place as @samp{datarootdir}, but we use the two separate 478variables so that you can move these program-specific files without 479altering the location for Info files, man pages, etc. 480 481@c raggedright (not until next Texinfo release) 482This should normally be @file{/usr/local/share}, but write it as 483@file{$(datarootdir)}. (If you are using Autoconf, write it as 484@samp{@@datadir@@}.) 485@c end raggedright 486 487The definition of @samp{datadir} is the same for all packages, so you 488should install your data in a subdirectory thereof. Most packages 489install their data under @file{$(datadir)/@var{package-name}/}. 490 491@item sysconfdir 492The directory for installing read-only data files that pertain to a 493single machine--that is to say, files for configuring a host. Mailer 494and network configuration files, @file{/etc/passwd}, and so forth belong 495here. All the files in this directory should be ordinary ASCII text 496files. This directory should normally be @file{/usr/local/etc}, but 497write it as @file{$(prefix)/etc}. 498(If you are using Autoconf, write it as @samp{@@sysconfdir@@}.) 499 500Do not install executables here in this directory (they probably belong 501in @file{$(libexecdir)} or @file{$(sbindir)}). Also do not install 502files that are modified in the normal course of their use (programs 503whose purpose is to change the configuration of the system excluded). 504Those probably belong in @file{$(localstatedir)}. 505 506@item sharedstatedir 507The directory for installing architecture-independent data files which 508the programs modify while they run. This should normally be 509@file{/usr/local/com}, but write it as @file{$(prefix)/com}. 510(If you are using Autoconf, write it as @samp{@@sharedstatedir@@}.) 511 512@item localstatedir 513The directory for installing data files which the programs modify while 514they run, and that pertain to one specific machine. Users should never 515need to modify files in this directory to configure the package's 516operation; put such configuration information in separate files that go 517in @file{$(datadir)} or @file{$(sysconfdir)}. @file{$(localstatedir)} 518should normally be @file{/usr/local/var}, but write it as 519@file{$(prefix)/var}. 520(If you are using Autoconf, write it as @samp{@@localstatedir@@}.) 521@end table 522 523These variables specify the directory for installing certain specific 524types of files, if your program has them. Every GNU package should 525have Info files, so every program needs @samp{infodir}, but not all 526need @samp{libdir} or @samp{lispdir}. 527 528@table @samp 529@item includedir 530The directory for installing header files to be included by user 531programs with the C @samp{#include} preprocessor directive. This 532should normally be @file{/usr/local/include}, but write it as 533@file{$(prefix)/include}. 534(If you are using Autoconf, write it as @samp{@@includedir@@}.) 535 536Most compilers other than GCC do not look for header files in directory 537@file{/usr/local/include}. So installing the header files this way is 538only useful with GCC. Sometimes this is not a problem because some 539libraries are only really intended to work with GCC. But some libraries 540are intended to work with other compilers. They should install their 541header files in two places, one specified by @code{includedir} and one 542specified by @code{oldincludedir}. 543 544@item oldincludedir 545The directory for installing @samp{#include} header files for use with 546compilers other than GCC. This should normally be @file{/usr/include}. 547(If you are using Autoconf, you can write it as @samp{@@oldincludedir@@}.) 548 549The Makefile commands should check whether the value of 550@code{oldincludedir} is empty. If it is, they should not try to use 551it; they should cancel the second installation of the header files. 552 553A package should not replace an existing header in this directory unless 554the header came from the same package. Thus, if your Foo package 555provides a header file @file{foo.h}, then it should install the header 556file in the @code{oldincludedir} directory if either (1) there is no 557@file{foo.h} there or (2) the @file{foo.h} that exists came from the Foo 558package. 559 560To tell whether @file{foo.h} came from the Foo package, put a magic 561string in the file---part of a comment---and @code{grep} for that string. 562 563@item docdir 564The directory for installing documentation files (other than Info) for 565this package. By default, it should be 566@file{/usr/local/share/doc/@var{yourpkg}}, but it should be written as 567@file{$(datarootdir)/doc/@var{yourpkg}}. (If you are using Autoconf, 568write it as @samp{@@docdir@@}.) The @var{yourpkg} subdirectory, which 569may include a version number, prevents collisions among files with 570common names, such as @file{README}. 571 572@item infodir 573The directory for installing the Info files for this package. By 574default, it should be @file{/usr/local/share/info}, but it should be 575written as @file{$(datarootdir)/info}. (If you are using Autoconf, 576write it as @samp{@@infodir@@}.) @code{infodir} is separate from 577@code{docdir} for compatibility with existing practice. 578 579@item htmldir 580@itemx dvidir 581@itemx pdfdir 582@itemx psdir 583Directories for installing documentation files in the particular 584format. They should all be set to @code{$(docdir)} by default. (If 585you are using Autoconf, write them as @samp{@@htmldir@@}, 586@samp{@@dvidir@@}, etc.) Packages which supply several translations 587of their documentation should install them in 588@samp{$(htmldir)/}@var{ll}, @samp{$(pdfdir)/}@var{ll}, etc. where 589@var{ll} is a locale abbreviation such as @samp{en} or @samp{pt_BR}. 590 591@item libdir 592The directory for object files and libraries of object code. Do not 593install executables here, they probably ought to go in @file{$(libexecdir)} 594instead. The value of @code{libdir} should normally be 595@file{/usr/local/lib}, but write it as @file{$(exec_prefix)/lib}. 596(If you are using Autoconf, write it as @samp{@@libdir@@}.) 597 598@item lispdir 599The directory for installing any Emacs Lisp files in this package. By 600default, it should be @file{/usr/local/share/emacs/site-lisp}, but it 601should be written as @file{$(datarootdir)/emacs/site-lisp}. 602 603If you are using Autoconf, write the default as @samp{@@lispdir@@}. 604In order to make @samp{@@lispdir@@} work, you need the following lines 605in your @file{configure.in} file: 606 607@example 608lispdir='$@{datarootdir@}/emacs/site-lisp' 609AC_SUBST(lispdir) 610@end example 611 612@item localedir 613The directory for installing locale-specific message catalogs for this 614package. By default, it should be @file{/usr/local/share/locale}, but 615it should be written as @file{$(datarootdir)/locale}. (If you are 616using Autoconf, write it as @samp{@@localedir@@}.) This directory 617usually has a subdirectory per locale. 618@end table 619 620Unix-style man pages are installed in one of the following: 621 622@table @samp 623@item mandir 624The top-level directory for installing the man pages (if any) for this 625package. It will normally be @file{/usr/local/share/man}, but you 626should write it as @file{$(datarootdir)/man}. (If you are using 627Autoconf, write it as @samp{@@mandir@@}.) 628 629@item man1dir 630The directory for installing section 1 man pages. Write it as 631@file{$(mandir)/man1}. 632@item man2dir 633The directory for installing section 2 man pages. Write it as 634@file{$(mandir)/man2} 635@item @dots{} 636 637@strong{Don't make the primary documentation for any GNU software be a 638man page. Write a manual in Texinfo instead. Man pages are just for 639the sake of people running GNU software on Unix, which is a secondary 640application only.} 641 642@item manext 643The file name extension for the installed man page. This should contain 644a period followed by the appropriate digit; it should normally be @samp{.1}. 645 646@item man1ext 647The file name extension for installed section 1 man pages. 648@item man2ext 649The file name extension for installed section 2 man pages. 650@item @dots{} 651Use these names instead of @samp{manext} if the package needs to install man 652pages in more than one section of the manual. 653@end table 654 655And finally, you should set the following variable: 656 657@table @samp 658@item srcdir 659The directory for the sources being compiled. The value of this 660variable is normally inserted by the @code{configure} shell script. 661(If you are using Autoconf, use @samp{srcdir = @@srcdir@@}.) 662@end table 663 664For example: 665 666@smallexample 667@c I have changed some of the comments here slightly to fix an overfull 668@c hbox, so the make manual can format correctly. --roland 669# Common prefix for installation directories. 670# NOTE: This directory must exist when you start the install. 671prefix = /usr/local 672datarootdir = $(prefix)/share 673datadir = $(datarootdir) 674exec_prefix = $(prefix) 675# Where to put the executable for the command `gcc'. 676bindir = $(exec_prefix)/bin 677# Where to put the directories used by the compiler. 678libexecdir = $(exec_prefix)/libexec 679# Where to put the Info files. 680infodir = $(datarootdir)/info 681@end smallexample 682 683If your program installs a large number of files into one of the 684standard user-specified directories, it might be useful to group them 685into a subdirectory particular to that program. If you do this, you 686should write the @code{install} rule to create these subdirectories. 687 688Do not expect the user to include the subdirectory name in the value of 689any of the variables listed above. The idea of having a uniform set of 690variable names for installation directories is to enable the user to 691specify the exact same values for several different GNU packages. In 692order for this to be useful, all the packages must be designed so that 693they will work sensibly when the user does so. 694 695At times, not all of these variables may be implemented in the current 696release of Autoconf and/or Automake; but as of Autoconf@tie{}2.60, we 697believe all of them are. When any are missing, the descriptions here 698serve as specifications for what Autoconf will implement. As a 699programmer, you can either use a development version of Autoconf or 700avoid using these variables until a stable release is made which 701supports them. 702 703 704@node Standard Targets 705@section Standard Targets for Users 706 707All GNU programs should have the following targets in their Makefiles: 708 709@table @samp 710@item all 711Compile the entire program. This should be the default target. This 712target need not rebuild any documentation files; Info files should 713normally be included in the distribution, and DVI (and other 714documentation format) files should be made only when explicitly asked 715for. 716 717By default, the Make rules should compile and link with @samp{-g}, so 718that executable programs have debugging symbols. Otherwise, you are 719essentially helpless in the face of a crash, and it is often far from 720easy to reproduce with a fresh build. 721 722@item install 723Compile the program and copy the executables, libraries, and so on to 724the file names where they should reside for actual use. If there is a 725simple test to verify that a program is properly installed, this target 726should run that test. 727 728Do not strip executables when installing them. This helps eventual 729debugging that may be needed later, and nowadays disk space is cheap 730and dynamic loaders typically ensure debug sections are not loaded during 731normal execution. Users that need stripped binaries may invoke the 732@code{install-strip} target to do that. 733 734If possible, write the @code{install} target rule so that it does not 735modify anything in the directory where the program was built, provided 736@samp{make all} has just been done. This is convenient for building the 737program under one user name and installing it under another. 738 739The commands should create all the directories in which files are to be 740installed, if they don't already exist. This includes the directories 741specified as the values of the variables @code{prefix} and 742@code{exec_prefix}, as well as all subdirectories that are needed. 743One way to do this is by means of an @code{installdirs} target 744as described below. 745 746Use @samp{-} before any command for installing a man page, so that 747@code{make} will ignore any errors. This is in case there are systems 748that don't have the Unix man page documentation system installed. 749 750The way to install Info files is to copy them into @file{$(infodir)} 751with @code{$(INSTALL_DATA)} (@pxref{Command Variables}), and then run 752the @code{install-info} program if it is present. @code{install-info} 753is a program that edits the Info @file{dir} file to add or update the 754menu entry for the given Info file; it is part of the Texinfo package. 755 756Here is a sample rule to install an Info file that also tries to 757handle some additional situations, such as @code{install-info} not 758being present. 759 760@comment This example has been carefully formatted for the Make manual. 761@comment Please do not reformat it without talking to bug-make@gnu.org. 762@smallexample 763do-install-info: foo.info installdirs 764 $(NORMAL_INSTALL) 765# Prefer an info file in . to one in srcdir. 766 if test -f foo.info; then d=.; \ 767 else d="$(srcdir)"; fi; \ 768 $(INSTALL_DATA) $$d/foo.info \ 769 "$(DESTDIR)$(infodir)/foo.info" 770# Run install-info only if it exists. 771# Use `if' instead of just prepending `-' to the 772# line so we notice real errors from install-info. 773# Use `$(SHELL) -c' because some shells do not 774# fail gracefully when there is an unknown command. 775 $(POST_INSTALL) 776 if $(SHELL) -c 'install-info --version' \ 777 >/dev/null 2>&1; then \ 778 install-info --dir-file="$(DESTDIR)$(infodir)/dir" \ 779 "$(DESTDIR)$(infodir)/foo.info"; \ 780 else true; fi 781@end smallexample 782 783When writing the @code{install} target, you must classify all the 784commands into three categories: normal ones, @dfn{pre-installation} 785commands and @dfn{post-installation} commands. @xref{Install Command 786Categories}. 787 788@item install-html 789@itemx install-dvi 790@itemx install-pdf 791@itemx install-ps 792These targets install documentation in formats other than Info; 793they're intended to be called explicitly by the person installing the 794package, if that format is desired. GNU prefers Info files, so these 795must be installed by the @code{install} target. 796 797When you have many documentation files to install, we recommend that 798you avoid collisions and clutter by arranging for these targets to 799install in subdirectories of the appropriate installation directory, 800such as @code{htmldir}. As one example, if your package has multiple 801manuals, and you wish to install HTML documentation with many files 802(such as the ``split'' mode output by @code{makeinfo --html}), you'll 803certainly want to use subdirectories, or two nodes with the same name 804in different manuals will overwrite each other. 805 806Please make these @code{install-@var{format}} targets invoke the 807commands for the @var{format} target, for example, by making 808@var{format} a dependency. 809 810@item uninstall 811Delete all the installed files---the copies that the @samp{install} 812and @samp{install-*} targets create. 813 814This rule should not modify the directories where compilation is done, 815only the directories where files are installed. 816 817The uninstallation commands are divided into three categories, just like 818the installation commands. @xref{Install Command Categories}. 819 820@item install-strip 821Like @code{install}, but strip the executable files while installing 822them. In simple cases, this target can use the @code{install} target in 823a simple way: 824 825@smallexample 826install-strip: 827 $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \ 828 install 829@end smallexample 830 831But if the package installs scripts as well as real executables, the 832@code{install-strip} target can't just refer to the @code{install} 833target; it has to strip the executables but not the scripts. 834 835@code{install-strip} should not strip the executables in the build 836directory which are being copied for installation. It should only strip 837the copies that are installed. 838 839Normally we do not recommend stripping an executable unless you are sure 840the program has no bugs. However, it can be reasonable to install a 841stripped executable for actual execution while saving the unstripped 842executable elsewhere in case there is a bug. 843 844@item clean 845Delete all files in the current directory that are normally created by 846building the program. Also delete files in other directories if they 847are created by this makefile. However, don't delete the files that 848record the configuration. Also preserve files that could be made by 849building, but normally aren't because the distribution comes with 850them. There is no need to delete parent directories that were created 851with @samp{mkdir -p}, since they could have existed anyway. 852 853Delete @file{.dvi} files here if they are not part of the distribution. 854 855@item distclean 856Delete all files in the current directory (or created by this 857makefile) that are created by configuring or building the program. If 858you have unpacked the source and built the program without creating 859any other files, @samp{make distclean} should leave only the files 860that were in the distribution. However, there is no need to delete 861parent directories that were created with @samp{mkdir -p}, since they 862could have existed anyway. 863 864@item mostlyclean 865Like @samp{clean}, but may refrain from deleting a few files that people 866normally don't want to recompile. For example, the @samp{mostlyclean} 867target for GCC does not delete @file{libgcc.a}, because recompiling it 868is rarely necessary and takes a lot of time. 869 870@item maintainer-clean 871Delete almost everything that can be reconstructed with this Makefile. 872This typically includes everything deleted by @code{distclean}, plus 873more: C source files produced by Bison, tags tables, Info files, and 874so on. 875 876The reason we say ``almost everything'' is that running the command 877@samp{make maintainer-clean} should not delete @file{configure} even 878if @file{configure} can be remade using a rule in the Makefile. More 879generally, @samp{make maintainer-clean} should not delete anything 880that needs to exist in order to run @file{configure} and then begin to 881build the program. Also, there is no need to delete parent 882directories that were created with @samp{mkdir -p}, since they could 883have existed anyway. These are the only exceptions; 884@code{maintainer-clean} should delete everything else that can be 885rebuilt. 886 887The @samp{maintainer-clean} target is intended to be used by a maintainer of 888the package, not by ordinary users. You may need special tools to 889reconstruct some of the files that @samp{make maintainer-clean} deletes. 890Since these files are normally included in the distribution, we don't 891take care to make them easy to reconstruct. If you find you need to 892unpack the full distribution again, don't blame us. 893 894To help make users aware of this, the commands for the special 895@code{maintainer-clean} target should start with these two: 896 897@smallexample 898@@echo 'This command is intended for maintainers to use; it' 899@@echo 'deletes files that may need special tools to rebuild.' 900@end smallexample 901 902@item TAGS 903Update a tags table for this program. 904@c ADR: how? 905 906@item info 907Generate any Info files needed. The best way to write the rules is as 908follows: 909 910@smallexample 911info: foo.info 912 913foo.info: foo.texi chap1.texi chap2.texi 914 $(MAKEINFO) $(srcdir)/foo.texi 915@end smallexample 916 917@noindent 918You must define the variable @code{MAKEINFO} in the Makefile. It should 919run the @code{makeinfo} program, which is part of the Texinfo 920distribution. 921 922Normally a GNU distribution comes with Info files, and that means the 923Info files are present in the source directory. Therefore, the Make 924rule for an info file should update it in the source directory. When 925users build the package, ordinarily Make will not update the Info files 926because they will already be up to date. 927 928@item dvi 929@itemx html 930@itemx pdf 931@itemx ps 932Generate documentation files in the given format. These targets 933should always exist, but any or all can be a no-op if the given output 934format cannot be generated. These targets should not be dependencies 935of the @code{all} target; the user must manually invoke them. 936 937Here's an example rule for generating DVI files from Texinfo: 938 939@smallexample 940dvi: foo.dvi 941 942foo.dvi: foo.texi chap1.texi chap2.texi 943 $(TEXI2DVI) $(srcdir)/foo.texi 944@end smallexample 945 946@noindent 947You must define the variable @code{TEXI2DVI} in the Makefile. It 948should run the program @code{texi2dvi}, which is part of the Texinfo 949distribution. (@code{texi2dvi} uses @TeX{} to do the real work of 950formatting. @TeX{} is not distributed with Texinfo.) Alternatively, 951write only the dependencies, and allow GNU @code{make} to provide the 952command. 953 954Here's another example, this one for generating HTML from Texinfo: 955 956@smallexample 957html: foo.html 958 959foo.html: foo.texi chap1.texi chap2.texi 960 $(TEXI2HTML) $(srcdir)/foo.texi 961@end smallexample 962 963@noindent 964Again, you would define the variable @code{TEXI2HTML} in the Makefile; 965for example, it might run @code{makeinfo --no-split --html} 966(@command{makeinfo} is part of the Texinfo distribution). 967 968@item dist 969Create a distribution tar file for this program. The tar file should be 970set up so that the file names in the tar file start with a subdirectory 971name which is the name of the package it is a distribution for. This 972name can include the version number. 973 974For example, the distribution tar file of GCC version 1.40 unpacks into 975a subdirectory named @file{gcc-1.40}. 976 977The easiest way to do this is to create a subdirectory appropriately 978named, use @code{ln} or @code{cp} to install the proper files in it, and 979then @code{tar} that subdirectory. 980 981Compress the tar file with @code{gzip}. For example, the actual 982distribution file for GCC version 1.40 is called @file{gcc-1.40.tar.gz}. 983It is ok to support other free compression formats as well. 984 985The @code{dist} target should explicitly depend on all non-source files 986that are in the distribution, to make sure they are up to date in the 987distribution. 988@ifset CODESTD 989@xref{Releases, , Making Releases}. 990@end ifset 991@ifclear CODESTD 992@xref{Releases, , Making Releases, standards, GNU Coding Standards}. 993@end ifclear 994 995@item check 996Perform self-tests (if any). The user must build the program before 997running the tests, but need not install the program; you should write 998the self-tests so that they work when the program is built but not 999installed. 1000@end table 1001 1002The following targets are suggested as conventional names, for programs 1003in which they are useful. 1004 1005@table @code 1006@item installcheck 1007Perform installation tests (if any). The user must build and install 1008the program before running the tests. You should not assume that 1009@file{$(bindir)} is in the search path. 1010 1011@item installdirs 1012It's useful to add a target named @samp{installdirs} to create the 1013directories where files are installed, and their parent directories. 1014There is a script called @file{mkinstalldirs} which is convenient for 1015this; you can find it in the Gnulib package. 1016You can use a rule like this: 1017 1018@comment This has been carefully formatted to look decent in the Make manual. 1019@comment Please be sure not to make it extend any further to the right.--roland 1020@smallexample 1021# Make sure all installation directories (e.g. $(bindir)) 1022# actually exist by making them if necessary. 1023installdirs: mkinstalldirs 1024 $(srcdir)/mkinstalldirs $(bindir) $(datadir) \ 1025 $(libdir) $(infodir) \ 1026 $(mandir) 1027@end smallexample 1028 1029@noindent 1030or, if you wish to support @env{DESTDIR} (strongly encouraged), 1031 1032@smallexample 1033# Make sure all installation directories (e.g. $(bindir)) 1034# actually exist by making them if necessary. 1035installdirs: mkinstalldirs 1036 $(srcdir)/mkinstalldirs \ 1037 $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \ 1038 $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \ 1039 $(DESTDIR)$(mandir) 1040@end smallexample 1041 1042This rule should not modify the directories where compilation is done. 1043It should do nothing but create installation directories. 1044@end table 1045 1046@node Install Command Categories 1047@section Install Command Categories 1048 1049@cindex pre-installation commands 1050@cindex post-installation commands 1051When writing the @code{install} target, you must classify all the 1052commands into three categories: normal ones, @dfn{pre-installation} 1053commands and @dfn{post-installation} commands. 1054 1055Normal commands move files into their proper places, and set their 1056modes. They may not alter any files except the ones that come entirely 1057from the package they belong to. 1058 1059Pre-installation and post-installation commands may alter other files; 1060in particular, they can edit global configuration files or data bases. 1061 1062Pre-installation commands are typically executed before the normal 1063commands, and post-installation commands are typically run after the 1064normal commands. 1065 1066The most common use for a post-installation command is to run 1067@code{install-info}. This cannot be done with a normal command, since 1068it alters a file (the Info directory) which does not come entirely and 1069solely from the package being installed. It is a post-installation 1070command because it needs to be done after the normal command which 1071installs the package's Info files. 1072 1073Most programs don't need any pre-installation commands, but we have the 1074feature just in case it is needed. 1075 1076To classify the commands in the @code{install} rule into these three 1077categories, insert @dfn{category lines} among them. A category line 1078specifies the category for the commands that follow. 1079 1080A category line consists of a tab and a reference to a special Make 1081variable, plus an optional comment at the end. There are three 1082variables you can use, one for each category; the variable name 1083specifies the category. Category lines are no-ops in ordinary execution 1084because these three Make variables are normally undefined (and you 1085@emph{should not} define them in the makefile). 1086 1087Here are the three possible category lines, each with a comment that 1088explains what it means: 1089 1090@smallexample 1091 $(PRE_INSTALL) # @r{Pre-install commands follow.} 1092 $(POST_INSTALL) # @r{Post-install commands follow.} 1093 $(NORMAL_INSTALL) # @r{Normal commands follow.} 1094@end smallexample 1095 1096If you don't use a category line at the beginning of the @code{install} 1097rule, all the commands are classified as normal until the first category 1098line. If you don't use any category lines, all the commands are 1099classified as normal. 1100 1101These are the category lines for @code{uninstall}: 1102 1103@smallexample 1104 $(PRE_UNINSTALL) # @r{Pre-uninstall commands follow.} 1105 $(POST_UNINSTALL) # @r{Post-uninstall commands follow.} 1106 $(NORMAL_UNINSTALL) # @r{Normal commands follow.} 1107@end smallexample 1108 1109Typically, a pre-uninstall command would be used for deleting entries 1110from the Info directory. 1111 1112If the @code{install} or @code{uninstall} target has any dependencies 1113which act as subroutines of installation, then you should start 1114@emph{each} dependency's commands with a category line, and start the 1115main target's commands with a category line also. This way, you can 1116ensure that each command is placed in the right category regardless of 1117which of the dependencies actually run. 1118 1119Pre-installation and post-installation commands should not run any 1120programs except for these: 1121 1122@example 1123[ basename bash cat chgrp chmod chown cmp cp dd diff echo 1124egrep expand expr false fgrep find getopt grep gunzip gzip 1125hostname install install-info kill ldconfig ln ls md5sum 1126mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee 1127test touch true uname xargs yes 1128@end example 1129 1130@cindex binary packages 1131The reason for distinguishing the commands in this way is for the sake 1132of making binary packages. Typically a binary package contains all the 1133executables and other files that need to be installed, and has its own 1134method of installing them---so it does not need to run the normal 1135installation commands. But installing the binary package does need to 1136execute the pre-installation and post-installation commands. 1137 1138Programs to build binary packages work by extracting the 1139pre-installation and post-installation commands. Here is one way of 1140extracting the pre-installation commands (the @option{-s} option to 1141@command{make} is needed to silence messages about entering 1142subdirectories): 1143 1144@smallexample 1145make -s -n install -o all \ 1146 PRE_INSTALL=pre-install \ 1147 POST_INSTALL=post-install \ 1148 NORMAL_INSTALL=normal-install \ 1149 | gawk -f pre-install.awk 1150@end smallexample 1151 1152@noindent 1153where the file @file{pre-install.awk} could contain this: 1154 1155@smallexample 1156$0 ~ /^(normal-install|post-install)[ \t]*$/ @{on = 0@} 1157on @{print $0@} 1158$0 ~ /^pre-install[ \t]*$/ @{on = 1@} 1159@end smallexample 1160