1\input texinfo
2@c %**start of header
3@setfilename configure.info
4@settitle The GNU configure and build system
5@setchapternewpage off
6@c %**end of header
7
8@dircategory GNU admin
9@direntry
10* configure: (configure).	The GNU configure and build system
11@end direntry
12
13@ifinfo
14This file documents the GNU configure and build system.
15
16Copyright (C) 1998 Cygnus Solutions.
17
18Permission is granted to make and distribute verbatim copies of
19this manual provided the copyright notice and this permission notice
20are preserved on all copies.
21
22@ignore
23Permission is granted to process this file through TeX and print the
24results, provided the printed document carries copying permission
25notice identical to this one except for the removal of this paragraph
26
27
28@end ignore
29Permission is granted to copy and distribute modified versions of this
30manual under the conditions for verbatim copying, provided that the entire
31resulting derived work is distributed under the terms of a permission
32notice identical to this one.
33
34Permission is granted to copy and distribute translations of this manual
35into another language, under the above conditions for modified versions,
36except that this permission notice may be stated in a translation approved
37by the Foundation.
38@end ifinfo
39
40@titlepage
41@title The GNU configure and build system
42@author Ian Lance Taylor
43
44@page
45@vskip 0pt plus 1filll
46Copyright @copyright{} 1998 Cygnus Solutions
47
48Permission is granted to make and distribute verbatim copies of
49this manual provided the copyright notice and this permission notice
50are preserved on all copies.
51
52Permission is granted to copy and distribute modified versions of this
53manual under the conditions for verbatim copying, provided that the entire
54resulting derived work is distributed under the terms of a permission
55notice identical to this one.
56
57Permission is granted to copy and distribute translations of this manual
58into another language, under the above conditions for modified versions,
59except that this permission notice may be stated in a translation
60approved by the Free Software Foundation.
61@end titlepage
62
63@ifinfo
64@node Top
65@top GNU configure and build system
66
67The GNU configure and build system.
68
69@menu
70* Introduction::		Introduction.
71* Getting Started::		Getting Started.
72* Files::			Files.
73* Configuration Names::		Configuration Names.
74* Cross Compilation Tools::	Cross Compilation Tools.
75* Canadian Cross::		Canadian Cross.
76* Cygnus Configure::		Cygnus Configure.
77* Multilibs::			Multilibs.
78* FAQ::				Frequently Asked Questions.
79* Index::			Index.
80@end menu
81
82@end ifinfo
83
84@node Introduction
85@chapter Introduction
86
87This document describes the GNU configure and build systems.  It
88describes how autoconf, automake, libtool, and make fit together.  It
89also includes a discussion of the older Cygnus configure system.
90
91This document does not describe in detail how to use each of the tools;
92see the respective manuals for that.  Instead, it describes which files
93the developer must write, which files are machine generated and how they
94are generated, and where certain common problems should be addressed.
95
96@ifnothtml
97This document draws on several sources, including the autoconf manual by
98David MacKenzie (@pxref{Top, , autoconf overview, autoconf, Autoconf}),
99the automake manual by David MacKenzie and Tom Tromey (@pxref{Top, ,
100automake overview, automake, GNU Automake}), the libtool manual by
101Gordon Matzigkeit (@pxref{Top, , libtool overview, libtool, GNU
102libtool}), and the Cygnus configure manual by K. Richard Pixley.
103@end ifnothtml
104@ifhtml
105This document draws on several sources, including
106@uref{http://www.delorie.com/gnu/docs/autoconf/autoconf_toc.html, the
107autoconf manual} by David MacKenzie,
108@uref{http://www.delorie.com/gnu/docs/automake/automake_toc.html, the
109automake manual} by David MacKenzie and Tom Tromey,
110@uref{http://www.delorie.com/gnu/docs/libtool/libtool_toc.html, the
111libtool manual} by Gordon Matzigkeit, and the Cygnus configure manual by
112K. Richard Pixley.
113@end ifhtml
114
115@menu
116* Goals::			Goals.
117* Tools::			The tools.
118* History::			History.
119* Building::			Building.
120@end menu
121
122@node Goals
123@section Goals
124@cindex goals
125
126The GNU configure and build system has two main goals.
127
128The first is to simplify the development of portable programs.  The
129system permits the developer to concentrate on writing the program,
130simplifying many details of portability across Unix and even Windows
131systems, and permitting the developer to describe how to build the
132program using simple rules rather than complex Makefiles.
133
134The second is to simplify the building of programs distributed as source
135code.  All programs are built using a simple, standardized, two step
136process.  The program builder need not install any special tools in
137order to build the program.
138
139@node Tools
140@section Tools
141
142The GNU configure and build system is comprised of several different
143tools.  Program developers must build and install all of these tools.
144
145People who just want to build programs from distributed sources normally
146do not need any special tools beyond a Unix shell, a make program, and a
147C compiler.
148
149@table @asis
150@item autoconf
151provides a general portability framework, based on testing the features
152of the host system at build time.
153@item automake
154a system for describing how to build a program, permitting the developer
155to write a simplified @file{Makefile}.
156@item libtool
157a standardized approach to building shared libraries.
158@item gettext
159provides a framework for translation of text messages into other
160languages; not really discussed in this document.
161@item m4
162autoconf requires the GNU version of m4; the standard Unix m4 does not
163suffice.
164@item perl
165automake requires perl.
166@end table
167
168@node History
169@section History
170@cindex history
171
172This is a very brief and probably inaccurate history.
173
174As the number of Unix variants increased during the 1980s, it became
175harder to write programs which could run on all variants.  While it was
176often possible to use @code{#ifdef} to identify particular systems,
177developers frequently did not have access to every system, and the
178characteristics of some systems changed from version to version.
179
180By 1992, at least three different approaches had been developed:
181@itemize @bullet
182@item
183The Metaconfig program, by Larry Wall, Harlan Stenn, and Raphael
184Manfredi.
185@item
186The Cygnus configure script, by K. Richard Pixley, and the gcc configure
187script, by Richard Stallman.  These use essentially the same approach,
188and the developers communicated regularly.
189@item
190The autoconf program, by David MacKenzie.
191@end itemize
192
193The Metaconfig program is still used for Perl and a few other programs.
194It is part of the Dist package.  I do not know if it is being developed.
195
196In 1994, David MacKenzie and others modified autoconf to incorporate all
197the features of Cygnus configure.  Since then, there has been a slow but
198steady conversion of GNU programs from Cygnus configure to autoconf. gcc
199has been converted, eliminating the gcc configure script.
200
201GNU autoconf was regularly maintained until late 1996.  As of this
202writing in June, 1998, it has no public maintainer.
203
204Most programs are built using the make program, which requires the
205developer to write Makefiles describing how to build the programs.
206Since most programs are built in pretty much the same way, this led to a
207lot of duplication.
208
209The X Window system is built using the imake tool, which uses a database
210of rules to eliminate the duplication.  However, building a tool which
211was developed using imake requires that the builder have imake
212installed, violating one of the goals of the GNU system.
213
214The new BSD make provides a standard library of Makefile fragments,
215which permits developers to write very simple Makefiles.  However, this
216requires that the builder install the new BSD make program.
217
218In 1994, David MacKenzie wrote the first version of automake, which
219permitted writing a simple build description which was converted into a
220Makefile which could be used by the standard make program.  In 1995, Tom
221Tromey completely rewrote automake in Perl, and he continues to enhance
222it.
223
224Various free packages built libraries, and by around 1995 several
225included support to build shared libraries on various platforms.
226However, there was no consistent approach.  In early 1996, Gordon
227Matzigkeit began working on libtool, which provided a standardized
228approach to building shared libraries.  This was integrated into
229automake from the start.
230
231The development of automake and libtool was driven by the GNITS project,
232a group of GNU maintainers who designed standardized tools to help meet
233the GNU coding standards.
234
235@node Building
236@section Building
237
238Most readers of this document should already know how to build a tool by
239running @samp{configure} and @samp{make}.  This section may serve as a
240quick introduction or reminder.
241
242Building a tool is normally as simple as running @samp{configure}
243followed by @samp{make}.  You should normally run @samp{configure} from
244an empty directory, using some path to refer to the @samp{configure}
245script in the source directory.  The directory in which you run
246@samp{configure} is called the @dfn{object directory}.
247
248In order to use a object directory which is different from the source
249directory, you must be using the GNU version of @samp{make}, which has
250the required @samp{VPATH} support.  Despite this restriction, using a
251different object directory is highly recommended:
252@itemize @bullet
253@item
254It keeps the files generated during the build from cluttering up your
255sources.
256@item
257It permits you to remove the built files by simply removing the entire
258build directory.
259@item
260It permits you to build from the same sources with several sets of
261configure options simultaneously.
262@end itemize
263
264If you don't have GNU @samp{make}, you will have to run @samp{configure}
265in the source directory.  All GNU packages should support this; in
266particular, GNU packages should not assume the presence of GNU
267@samp{make}.
268
269After running @samp{configure}, you can build the tools by running
270@samp{make}.
271
272To install the tools, run @samp{make install}.  Installing the tools
273will copy the programs and any required support files to the
274@dfn{installation directory}.  The location of the installation
275directory is controlled by @samp{configure} options, as described below.
276
277In the Cygnus tree at present, the info files are built and installed as
278a separate step.  To build them, run @samp{make info}.  To install them,
279run @samp{make install-info}.
280
281All @samp{configure} scripts support a wide variety of options.  The
282most interesting ones are @samp{--with} and @samp{--enable} options
283which are generally specific to particular tools.  You can usually use
284the @samp{--help} option to get a list of interesting options for a
285particular configure script.
286
287The only generic options you are likely to use are the @samp{--prefix}
288and @samp{--exec-prefix} options.  These options are used to specify the
289installation directory.
290
291The directory named by the @samp{--prefix} option will hold machine
292independent files such as info files.
293
294The directory named by the @samp{--exec-prefix} option, which is
295normally a subdirectory of the @samp{--prefix} directory, will hold
296machine dependent files such as executables.
297
298The default for @samp{--prefix} is @file{/usr/local}.  The default for
299@samp{--exec-prefix} is the value used for @samp{--prefix}.
300
301The convention used in Cygnus releases is to use a @samp{--prefix}
302option of @file{/usr/cygnus/@var{release}}, where @var{release} is the
303name of the release, and to use a @samp{--exec-prefix} option of
304@file{/usr/cygnus/@var{release}/H-@var{host}}, where @var{host} is the
305configuration name of the host system (@pxref{Configuration Names}).
306
307Do not use either the source or the object directory as the installation
308directory.  That will just lead to confusion.
309
310@node Getting Started
311@chapter Getting Started
312
313To start using the GNU configure and build system with your software
314package, you must write three files, and you must run some tools to
315manually generate additional files.
316
317@menu
318* Write configure.in::		Write configure.in.
319* Write Makefile.am::		Write Makefile.am.
320* Write acconfig.h::		Write acconfig.h.
321* Generate files::		Generate files.
322* Getting Started Example::	Example.
323@end menu
324
325@node Write configure.in
326@section Write configure.in
327@cindex @file{configure.in}, writing
328
329You must first write the file @file{configure.in}.  This is an autoconf
330input file, and the autoconf manual describes in detail what this file
331should look like.
332
333You will write tests in your @file{configure.in} file to check for
334conditions that may change from one system to another, such as the
335presence of particular header files or functions.
336
337For example, not all systems support the @samp{gettimeofday} function.
338If you want to use the @samp{gettimeofday} function when it is
339available, and to use some other function when it is not, you would
340check for this by putting @samp{AC_CHECK_FUNCS(gettimeofday)} in
341@file{configure.in}.
342
343When the configure script is run at build time, this will arrange to
344define the preprocessor macro @samp{HAVE_GETTIMEOFDAY} to the value 1 if
345the @samp{gettimeofday} function is available, and to not define the
346macro at all if the function is not available.  Your code can then use
347@samp{#ifdef} to test whether it is safe to call @samp{gettimeofday}.
348
349If you have an existing body of code, the @samp{autoscan} program may
350help identify potential portability problems, and hence configure tests
351that you will want to use.
352@ifnothtml
353@xref{Invoking autoscan, , , autoconf, the autoconf manual}.
354@end ifnothtml
355@ifhtml
356See @uref{http://www.delorie.com/gnu/docs/autoconf/autoconf_4.html, the
357autoscan documentation}.
358@end ifhtml
359
360Another handy tool for an existing body of code is @samp{ifnames}.  This
361will show you all the preprocessor conditionals that the code already
362uses.
363@ifnothtml
364@xref{Invoking ifnames, , , autoconf, the autoconf manual}.
365@end ifnothtml
366@ifhtml
367See @uref{http://www.delorie.com/gnu/docs/autoconf/autoconf_5.html, the
368ifnames documentation}.
369@end ifhtml
370
371Besides the portability tests which are specific to your particular
372package, every @file{configure.in} file should contain the following
373macros.
374
375@table @samp
376@item AC_INIT
377@cindex @samp{AC_INIT}
378This macro takes a single argument, which is the name of a file in your
379package.  For example, @samp{AC_INIT(foo.c)}.
380
381@item AC_PREREQ(@var{VERSION})
382@cindex @samp{AC_PREREQ}
383This macro is optional.  It may be used to indicate the version of
384@samp{autoconf} that you are using.  This will prevent users from
385running an earlier version of @samp{autoconf} and perhaps getting an
386invalid @file{configure} script.  For example, @samp{AC_PREREQ(2.12)}.
387
388@item AM_INIT_AUTOMAKE
389@cindex @samp{AM_INIT_AUTOMAKE}
390This macro takes two arguments: the name of the package, and a version
391number.  For example, @samp{AM_INIT_AUTOMAKE(foo, 1.0)}.  (This macro is
392not needed if you are not using automake).
393
394@item AM_CONFIG_HEADER
395@cindex @samp{AM_CONFIG_HEADER}
396This macro names the header file which will hold the preprocessor macro
397definitions at run time.  Normally this should be @file{config.h}.  Your
398sources would then use @samp{#include "config.h"} to include it.
399
400This macro may optionally name the input file for that header file; by
401default, this is @file{config.h.in}, but that file name works poorly on
402DOS filesystems.  Therefore, it is often better to name it explicitly as
403@file{config.in}.
404
405This is what you should normally put in @file{configure.in}:
406@example
407AM_CONFIG_HEADER(config.h:config.in)
408@end example
409
410@cindex @samp{AC_CONFIG_HEADER}
411(If you are not using automake, use @samp{AC_CONFIG_HEADER} rather than
412@samp{AM_CONFIG_HEADER}).
413
414@item AM_MAINTAINER_MODE
415@cindex @samp{AM_MAINTAINER_MODE}
416This macro always appears in Cygnus configure scripts.  Other programs
417may or may not use it.
418
419If this macro is used, the @samp{--enable-maintainer-mode} option is
420required to enable automatic rebuilding of generated files used by the
421configure system.  This of course requires that developers be aware of,
422and use, that option.
423
424If this macro is not used, then the generated files will always be
425rebuilt automatically.  This will cause problems if the wrong versions
426of autoconf, automake, or others are in the builder's @samp{PATH}.
427
428(If you are not using automake, you do not need to use this macro).
429
430@item AC_EXEEXT
431@cindex @samp{AC_EXEEXT}
432@cindex @samp{AM_EXEEXT}
433Either this macro or @samp{AM_EXEEXT} always appears in Cygnus configure
434files.  Other programs may or may not use one of them.
435
436This macro looks for the executable suffix used on the host system.  On
437Unix systems, this is the empty string.  On Windows systems, this is
438@samp{.exe}.  This macro directs automake to use the executable suffix
439as appropriate when creating programs.  This macro does not take any
440arguments.
441
442The @samp{AC_EXEEXT} form is new, and is part of a Cygnus patch to
443autoconf to support compiling with Visual C++.  Older programs use
444@samp{AM_EXEEXT} instead.
445
446(Programs which do not use automake use neither @samp{AC_EXEEXT} nor
447@samp{AM_EXEEXT}).
448
449@item AC_PROG_CC
450@cindex @samp{AC_PROG_CC}
451If you are writing C code, you will normally want to use this macro.  It
452locates the C compiler to use.  It does not take any arguments.
453
454However, if this @file{configure.in} file is for a library which is to
455be compiled by a cross compiler which may not fully work, then you will
456not want to use @samp{AC_PROG_CC}.  Instead, you will want to use a
457variant which does not call the macro @samp{AC_PROG_CC_WORKS}.  Examples
458can be found in various @file{configure.in} files for libraries that are
459compiled with cross compilers, such as libiberty or libgloss.  This is
460essentially a bug in autoconf, and there will probably be a better
461workaround at some point.
462
463@item AC_PROG_CXX
464@cindex @samp{AC_PROG_CXX}
465If you are writing C++ code, you will want to use this macro.  It
466locates the C++ compiler to use.  It does not take any arguments.  The
467same cross compiler comments apply as for @samp{AC_PROG_CC}.
468
469@item AM_PROG_LIBTOOL
470@cindex @samp{AM_PROG_LIBTOOL}
471If you want to build libraries, and you want to permit them to be
472shared, or you want to link against libraries which were built using
473libtool, then you will need this macro.  This macro is required in order
474to use libtool.
475
476@cindex @samp{AM_DISABLE_SHARED}
477By default, this will cause all libraries to be built as shared
478libraries.  To prevent this--to change the default--use
479@samp{AM_DISABLE_SHARED} before @samp{AM_PROG_LIBTOOL}.  The configure
480options @samp{--enable-shared} and @samp{--disable-shared} may be used
481to override the default at build time.
482
483@item AC_DEFINE(_GNU_SOURCE)
484@cindex @samp{_GNU_SOURCE}
485GNU packages should normally include this line before any other feature
486tests.  This defines the macro @samp{_GNU_SOURCE} when compiling, which
487directs the libc header files to provide the standard GNU system
488interfaces including all GNU extensions.  If this macro is not defined,
489certain GNU extensions may not be available.
490
491@item AC_OUTPUT
492@cindex @samp{AC_OUTPUT}
493This macro takes a list of file names which the configure process should
494produce.  This is normally a list of one or more @file{Makefile} files
495in different directories.  If your package lives entirely in a single
496directory, you would use simply @samp{AC_OUTPUT(Makefile)}.  If you also
497have, for example, a @file{lib} subdirectory, you would use
498@samp{AC_OUTPUT(Makefile lib/Makefile)}.
499@end table
500
501If you want to use locally defined macros in your @file{configure.in}
502file, then you will need to write a @file{acinclude.m4} file which
503defines them (if not using automake, this file is called
504@file{aclocal.m4}).  Alternatively, you can put separate macros in an
505@file{m4} subdirectory, and put @samp{ACLOCAL_AMFLAGS = -I m4} in your
506@file{Makefile.am} file so that the @samp{aclocal} program will be able
507to find them.
508
509The different macro prefixes indicate which tool defines the macro.
510Macros which start with @samp{AC_} are part of autoconf.  Macros which
511start with @samp{AM_} are provided by automake or libtool.
512
513@node Write Makefile.am
514@section Write Makefile.am
515@cindex @file{Makefile.am}, writing
516
517You must write the file @file{Makefile.am}.  This is an automake input
518file, and the automake manual describes in detail what this file should
519look like.
520
521The automake commands in @file{Makefile.am} mostly look like variable
522assignments in a @file{Makefile}.  automake recognizes special variable
523names, and automatically add make rules to the output as needed.
524
525There will be one @file{Makefile.am} file for each directory in your
526package.  For each directory with subdirectories, the @file{Makefile.am}
527file should contain the line
528@smallexample
529SUBDIRS = @var{dir} @var{dir} @dots{}
530@end smallexample
531@noindent
532where each @var{dir} is the name of a subdirectory.
533
534For each @file{Makefile.am}, there should be a corresponding
535@file{Makefile} in the @samp{AC_OUTPUT} macro in @file{configure.in}.
536
537Every @file{Makefile.am} written at Cygnus should contain the line
538@smallexample
539AUTOMAKE_OPTIONS = cygnus
540@end smallexample
541@noindent
542This puts automake into Cygnus mode.  See the automake manual for
543details.
544
545You may to include the version number of @samp{automake} that you are
546using on the @samp{AUTOMAKE_OPTIONS} line.  For example,
547@smallexample
548AUTOMAKE_OPTIONS = cygnus 1.3
549@end smallexample
550@noindent
551This will prevent users from running an earlier version of
552@samp{automake} and perhaps getting an invalid @file{Makefile.in}.
553
554If your package builds a program, then in the directory where that
555program is built you will normally want a line like
556@smallexample
557bin_PROGRAMS = @var{program}
558@end smallexample
559@noindent
560where @var{program} is the name of the program.  You will then want a
561line like
562@smallexample
563@var{program}_SOURCES = @var{file} @var{file} @dots{}
564@end smallexample
565@noindent
566where each @var{file} is the name of a source file to link into the
567program (e.g., @samp{foo.c}).
568
569If your package builds a library, and you do not want the library to
570ever be built as a shared library, then in the directory where that
571library is built you will normally want a line like
572@smallexample
573lib_LIBRARIES = lib@var{name}.a
574@end smallexample
575@noindent
576where @samp{lib@var{name}.a} is the name of the library.  You will then
577want a line like
578@smallexample
579lib@var{name}_a_SOURCES = @var{file} @var{file} @dots{}
580@end smallexample
581@noindent
582where each @var{file} is the name of a source file to add to the
583library.
584
585If your package builds a library, and you want to permit building the
586library as a shared library, then in the directory where that library is
587built you will normally want a line like
588@smallexample
589lib_LTLIBRARIES = lib@var{name}.la
590@end smallexample
591The use of @samp{LTLIBRARIES}, and the @samp{.la} extension, indicate a
592library to be built using libtool.  As usual, you will then want a line
593like
594@smallexample
595lib@var{name}_la_SOURCES = @var{file} @var{file} @dots{}
596@end smallexample
597
598The strings @samp{bin} and @samp{lib} that appear above in
599@samp{bin_PROGRAMS} and @samp{lib_LIBRARIES} are not arbitrary.  They
600refer to particular directories, which may be set by the @samp{--bindir}
601and @samp{--libdir} options to @file{configure}.  If those options are
602not used, the default values are based on the @samp{--prefix} or
603@samp{--exec-prefix} options to @file{configure}.  It is possible to use
604other names if the program or library should be installed in some other
605directory.
606
607The @file{Makefile.am} file may also contain almost anything that may
608appear in a normal @file{Makefile}.  automake also supports many other
609special variables, as well as conditionals.
610
611See the automake manual for more information.
612
613@node Write acconfig.h
614@section Write acconfig.h
615@cindex @file{acconfig.h}, writing
616
617If you are generating a portability header file, (i.e., you are using
618@samp{AM_CONFIG_HEADER} in @file{configure.in}), then you will have to
619write a @file{acconfig.h} file.  It will have to contain the following
620lines.
621
622@smallexample
623/* Name of package.  */
624#undef PACKAGE
625
626/* Version of package.  */
627#undef VERSION
628@end smallexample
629
630This requirement is really a bug in the system, and the requirement may
631be eliminated at some later date.
632
633The @file{acconfig.h} file will also similar comment and @samp{#undef}
634lines for any unusual macros in the @file{configure.in} file, including
635any macro which appears in a @samp{AC_DEFINE} macro.
636
637In particular, if you are writing a GNU package and therefore include
638@samp{AC_DEFINE(_GNU_SOURCE)} in @file{configure.in} as suggested above,
639you will need lines like this in @file{acconfig.h}:
640@smallexample
641/* Enable GNU extensions.  */
642#undef _GNU_SOURCE
643@end smallexample
644
645Normally the @samp{autoheader} program will inform you of any such
646requirements by printing an error message when it is run.  However, if
647you do anything particular odd in your @file{configure.in} file, you
648will have to make sure that the right entries appear in
649@file{acconfig.h}, since otherwise the results of the tests may not be
650available in the @file{config.h} file which your code will use.
651
652(Thee @samp{PACKAGE} and @samp{VERSION} lines are not required if you
653are not using automake, and in that case you may not need a
654@file{acconfig.h} file at all).
655
656@node Generate files
657@section Generate files
658
659Once you have written @file{configure.in}, @file{Makefile.am},
660@file{acconfig.h}, and possibly @file{acinclude.m4}, you must use
661autoconf and automake programs to produce the first versions of the
662generated files.  This is done by executing the following sequence of
663commands.
664
665@smallexample
666aclocal
667autoconf
668autoheader
669automake
670@end smallexample
671
672The @samp{aclocal} and @samp{automake} commands are part of the automake
673package, and the @samp{autoconf} and @samp{autoheader} commands are part
674of the autoconf package.
675
676If you are using a @file{m4} subdirectory for your macros, you will need
677to use the @samp{-I m4} option when you run @samp{aclocal}.
678
679If you are not using the Cygnus tree, use the @samp{-a} option when
680running @samp{automake} command in order to copy the required support
681files into your source directory.
682
683If you are using libtool, you must build and install the libtool package
684with the same @samp{--prefix} and @samp{--exec-prefix} options as you
685used with the autoconf and automake packages.  You must do this before
686running any of the above commands.  If you are not using the Cygnus
687tree, you will need to run the @samp{libtoolize} program to copy the
688libtool support files into your directory.
689
690Once you have managed to run these commands without getting any errors,
691you should create a new empty directory, and run the @samp{configure}
692script which will have been created by @samp{autoconf} with the
693@samp{--enable-maintainer-mode} option.  This will give you a set of
694Makefiles which will include rules to automatically rebuild all the
695generated files.
696
697After doing that, whenever you have changed some of the input files and
698want to regenerated the other files, go to your object directory and run
699@samp{make}.  Doing this is more reliable than trying to rebuild the
700files manually, because there are complex order dependencies and it is
701easy to forget something.
702
703@node Getting Started Example
704@section Example
705
706Let's consider a trivial example.
707
708Suppose we want to write a simple version of @samp{touch}.  Our program,
709which we will call @samp{poke}, will take a single file name argument,
710and use the @samp{utime} system call to set the modification and access
711times of the file to the current time.  We want this program to be
712highly portable.
713
714We'll first see what this looks like without using autoconf and
715automake, and then see what it looks like with them.
716
717@menu
718* Getting Started Example 1::		First Try.
719* Getting Started Example 2::		Second Try.
720* Getting Started Example 3::		Third Try.
721* Generate Files in Example::		Generate Files.
722@end menu
723
724@node Getting Started Example 1
725@subsection First Try
726
727Here is our first try at @samp{poke.c}.  Note that we've written it
728without ANSI/ISO C prototypes, since we want it to be highly portable.
729
730@example
731#include <stdio.h>
732#include <stdlib.h>
733#include <sys/types.h>
734#include <utime.h>
735
736int
737main (argc, argv)
738     int argc;
739     char **argv;
740@{
741  if (argc != 2)
742    @{
743      fprintf (stderr, "Usage: poke file\n");
744      exit (1);
745    @}
746
747  if (utime (argv[1], NULL) < 0)
748    @{
749      perror ("utime");
750      exit (1);
751    @}
752
753  exit (0);
754@}
755@end example
756
757We also write a simple @file{Makefile}.
758
759@example
760CC = gcc
761CFLAGS = -g -O2
762
763all: poke
764
765poke: poke.o
766	$(CC) -o poke $(CFLAGS) $(LDFLAGS) poke.o
767@end example
768
769So far, so good.
770
771Unfortunately, there are a few problems.
772
773On older Unix systems derived from BSD 4.3, the @samp{utime} system call
774does not accept a second argument of @samp{NULL}.  On those systems, we
775need to pass a pointer to @samp{struct utimbuf} structure.
776Unfortunately, even older systems don't define that structure; on those
777systems, we need to pass an array of two @samp{long} values.
778
779The header file @file{stdlib.h} was invented by ANSI C, and older
780systems don't have a copy.  We included it above to get a declaration of
781@samp{exit}.
782
783We can find some of these portability problems by running
784@samp{autoscan}, which will create a @file{configure.scan} file which we
785can use as a prototype for our @file{configure.in} file.  I won't show
786the output, but it will notice the potential problems with @samp{utime}
787and @file{stdlib.h}.
788
789In our @file{Makefile}, we don't provide any way to install the program.
790This doesn't matter much for such a simple example, but a real program
791will need an @samp{install} target.  For that matter, we will also want
792a @samp{clean} target.
793
794@node Getting Started Example 2
795@subsection Second Try
796
797Here is our second try at this program.
798
799We modify @file{poke.c} to use preprocessor macros to control what
800features are available.  (I've cheated a bit by using the same macro
801names which autoconf will use).
802
803@example
804#include <stdio.h>
805
806#ifdef STDC_HEADERS
807#include <stdlib.h>
808#endif
809
810#include <sys/types.h>
811
812#ifdef HAVE_UTIME_H
813#include <utime.h>
814#endif
815
816#ifndef HAVE_UTIME_NULL
817
818#include <time.h>
819
820#ifndef HAVE_STRUCT_UTIMBUF
821
822struct utimbuf
823@{
824  long actime;
825  long modtime;
826@};
827
828#endif
829
830static int
831utime_now (file)
832     char *file;
833@{
834  struct utimbuf now;
835
836  now.actime = now.modtime = time (NULL);
837  return utime (file, &now);
838@}
839
840#define utime(f, p) utime_now (f)
841
842#endif /* HAVE_UTIME_NULL  */
843
844int
845main (argc, argv)
846     int argc;
847     char **argv;
848@{
849  if (argc != 2)
850    @{
851      fprintf (stderr, "Usage: poke file\n");
852      exit (1);
853    @}
854
855  if (utime (argv[1], NULL) < 0)
856    @{
857      perror ("utime");
858      exit (1);
859    @}
860
861  exit (0);
862@}
863@end example
864
865Here is the associated @file{Makefile}.  We've added support for the
866preprocessor flags we use.  We've also added @samp{install} and
867@samp{clean} targets.
868
869@example
870# Set this to your installation directory.
871bindir = /usr/local/bin
872
873# Uncomment this if you have the standard ANSI/ISO C header files.
874# STDC_HDRS = -DSTDC_HEADERS
875
876# Uncomment this if you have utime.h.
877# UTIME_H = -DHAVE_UTIME_H
878
879# Uncomment this if utime (FILE, NULL) works on your system.
880# UTIME_NULL = -DHAVE_UTIME_NULL
881
882# Uncomment this if struct utimbuf is defined in utime.h.
883# UTIMBUF = -DHAVE_STRUCT_UTIMBUF
884
885CC = gcc
886CFLAGS = -g -O2
887
888ALL_CFLAGS = $(STDC_HDRS) $(UTIME_H) $(UTIME_NULL) $(UTIMBUF) $(CFLAGS)
889
890all: poke
891
892poke: poke.o
893	$(CC) -o poke $(ALL_CFLAGS) $(LDFLAGS) poke.o
894
895.c.o:
896	$(CC) -c $(ALL_CFLAGS) poke.c
897
898install: poke
899	cp poke $(bindir)/poke
900
901clean:
902	rm poke poke.o
903@end example
904
905Some problems with this approach should be clear.
906
907Users who want to compile poke will have to know how @samp{utime} works
908on their systems, so that they can uncomment the @file{Makefile}
909correctly.
910
911The installation is done using @samp{cp}, but many systems have an
912@samp{install} program which may be used, and which supports optional
913features such as stripping debugging information out of the installed
914binary.
915
916The use of @file{Makefile} variables like @samp{CC}, @samp{CFLAGS} and
917@samp{LDFLAGS} follows the requirements of the GNU standards.  This is
918convenient for all packages, since it reduces surprises for users.
919However, it is easy to get the details wrong, and wind up with a
920slightly nonstandard distribution.
921
922@node Getting Started Example 3
923@subsection Third Try
924
925For our third try at this program, we will write a @file{configure.in}
926script to discover the configuration features on the host system, rather
927than requiring the user to edit the @file{Makefile}.  We will also write
928a @file{Makefile.am} rather than a @file{Makefile}.
929
930The only change to @file{poke.c} is to add a line at the start of the
931file:
932@smallexample
933#include "config.h"
934@end smallexample
935
936The new @file{configure.in} file is as follows.
937
938@example
939AC_INIT(poke.c)
940AM_INIT_AUTOMAKE(poke, 1.0)
941AM_CONFIG_HEADER(config.h:config.in)
942AC_PROG_CC
943AC_HEADER_STDC
944AC_CHECK_HEADERS(utime.h)
945AC_EGREP_HEADER(utimbuf, utime.h, AC_DEFINE(HAVE_STRUCT_UTIMBUF))
946AC_FUNC_UTIME_NULL
947AC_OUTPUT(Makefile)
948@end example
949
950The first four macros in this file, and the last one, were described
951above; see @ref{Write configure.in}.  If we omit these macros, then when
952we run @samp{automake} we will get a reminder that we need them.
953
954The other macros are standard autoconf macros.
955
956@table @samp
957@item AC_HEADER_STDC
958Check for standard C headers.
959@item AC_CHECK_HEADERS
960Check whether a particular header file exists.
961@item AC_EGREP_HEADER
962Check for a particular string in a particular header file, in this case
963checking for @samp{utimbuf} in @file{utime.h}.
964@item AC_FUNC_UTIME_NULL
965Check whether @samp{utime} accepts a NULL second argument to set the
966file change time to the current time.
967@end table
968
969See the autoconf manual for a more complete description.
970
971The new @file{Makefile.am} file is as follows.  Note how simple this is
972compared to our earlier @file{Makefile}.
973
974@example
975bin_PROGRAMS = poke
976
977poke_SOURCES = poke.c
978@end example
979
980This means that we should build a single program name @samp{poke}.  It
981should be installed in the binary directory, which we called
982@samp{bindir} earlier.  The program @samp{poke} is built from the source
983file @file{poke.c}.
984
985We must also write a @file{acconfig.h} file.  Besides @samp{PACKAGE} and
986@samp{VERSION}, which must be mentioned for all packages which use
987automake, we must include @samp{HAVE_STRUCT_UTIMBUF}, since we mentioned
988it in an @samp{AC_DEFINE}.
989
990@example
991/* Name of package.  */
992#undef PACKAGE
993
994/* Version of package.  */
995#undef VERSION
996
997/* Whether utime.h defines struct utimbuf.  */
998#undef HAVE_STRUCT_UTIMBUF
999@end example
1000
1001@node Generate Files in Example
1002@subsection Generate Files
1003
1004We must now generate the other files, using the following commands.
1005
1006@smallexample
1007aclocal
1008autoconf
1009autoheader
1010automake
1011@end smallexample
1012
1013When we run @samp{autoheader}, it will remind us of any macros we forgot
1014to add to @file{acconfig.h}.
1015
1016When we run @samp{automake}, it will want to add some files to our
1017distribution.  It will add them automatically if we use the
1018@samp{--add-missing} option.
1019
1020By default, @samp{automake} will run in GNU mode, which means that it
1021will want us to create certain additional files; as of this writing, it
1022will want @file{NEWS}, @file{README}, @file{AUTHORS}, and
1023@file{ChangeLog}, all of which are files which should appear in a
1024standard GNU distribution.  We can either add those files, or run
1025@samp{automake} with the @samp{--foreign} option.
1026
1027Running these tools will generate the following files, all of which are
1028described in the next chapter.
1029
1030@itemize @bullet
1031@item
1032@file{aclocal.m4}
1033@item
1034@file{configure}
1035@item
1036@file{config.in}
1037@item
1038@file{Makefile.in}
1039@item
1040@file{stamp-h.in}
1041@end itemize
1042
1043@node Files
1044@chapter Files
1045
1046As was seen in the previous chapter, the GNU configure and build system
1047uses a number of different files.  The developer must write a few files.
1048The others are generated by various tools.
1049
1050The system is rather flexible, and can be used in many different ways.
1051In describing the files that it uses, I will describe the common case,
1052and mention some other cases that may arise.
1053
1054@menu
1055* Developer Files::		Developer Files.
1056* Build Files::			Build Files.
1057* Support Files::		Support Files.
1058@end menu
1059
1060@node Developer Files
1061@section Developer Files
1062
1063This section describes the files written or generated by the developer
1064of a package.
1065
1066@menu
1067* Developer Files Picture::	Developer Files Picture.
1068* Written Developer Files::	Written Developer Files.
1069* Generated Developer Files::	Generated Developer Files.
1070@end menu
1071
1072@node Developer Files Picture
1073@subsection Developer Files Picture
1074
1075Here is a picture of the files which are written by the developer, the
1076generated files which would be included with a complete source
1077distribution, and the tools which create those files.
1078@ifinfo
1079The file names are plain text and the tool names are enclosed by
1080@samp{*} characters
1081@end ifinfo
1082@ifnotinfo
1083The file names are in rectangles with square corners and the tool names
1084are in rectangles with rounded corners
1085@end ifnotinfo
1086(e.g., @samp{autoheader} is the name of a tool, not the name of a file).
1087
1088@image{configdev}
1089
1090@node Written Developer Files
1091@subsection Written Developer Files
1092
1093The following files would be written by the developer.
1094
1095@table @file
1096@item configure.in
1097@cindex @file{configure.in}
1098This is the configuration script.  This script contains invocations of
1099autoconf macros.  It may also contain ordinary shell script code.  This
1100file will contain feature tests for portability issues.  The last thing
1101in the file will normally be an @samp{AC_OUTPUT} macro listing which
1102files to create when the builder runs the configure script.  This file
1103is always required when using the GNU configure system.  @xref{Write
1104configure.in}.
1105
1106@item Makefile.am
1107@cindex @file{Makefile.am}
1108This is the automake input file.  It describes how the code should be
1109built.  It consists of definitions of automake variables.  It may also
1110contain ordinary Makefile targets.  This file is only needed when using
1111automake (newer tools normally use automake, but there are still older
1112tools which have not been converted, in which the developer writes
1113@file{Makefile.in} directly).  @xref{Write Makefile.am}.
1114
1115@item acconfig.h
1116@cindex @file{acconfig.h}
1117When the configure script creates a portability header file, by using
1118@samp{AM_CONFIG_HEADER} (or, if not using automake,
1119@samp{AC_CONFIG_HEADER}), this file is used to describe macros which are
1120not recognized by the @samp{autoheader} command.  This is normally a
1121fairly uninteresting file, consisting of a collection of @samp{#undef}
1122lines with comments.  Normally any call to @samp{AC_DEFINE} in
1123@file{configure.in} will require a line in this file. @xref{Write
1124acconfig.h}.
1125
1126@item acinclude.m4
1127@cindex @file{acinclude.m4}
1128This file is not always required.  It defines local autoconf macros.
1129These macros may then be used in @file{configure.in}.  If you don't need
1130any local autoconf macros, then you don't need this file at all.  In
1131fact, in general, you never need local autoconf macros, since you can
1132put everything in @file{configure.in}, but sometimes a local macro is
1133convenient.
1134
1135Newer tools may omit @file{acinclude.m4}, and instead use a
1136subdirectory, typically named @file{m4}, and define
1137@samp{ACLOCAL_AMFLAGS = -I m4} in @file{Makefile.am} to force
1138@samp{aclocal} to look there for macro definitions.  The macro
1139definitions are then placed in separate files in that directory.
1140
1141The @file{acinclude.m4} file is only used when using automake; in older
1142tools, the developer writes @file{aclocal.m4} directly, if it is needed.
1143@end table
1144
1145@node Generated Developer Files
1146@subsection Generated Developer Files
1147
1148The following files would be generated by the developer.
1149
1150When using automake, these files are normally not generated manually
1151after the first time.  Instead, the generated @file{Makefile} contains
1152rules to automatically rebuild the files as required.  When
1153@samp{AM_MAINTAINER_MODE} is used in @file{configure.in} (the normal
1154case in Cygnus code), the automatic rebuilding rules will only be
1155defined if you configure using the @samp{--enable-maintainer-mode}
1156option.
1157
1158When using automatic rebuilding, it is important to ensure that all the
1159various tools have been built and installed on your @samp{PATH}.  Using
1160automatic rebuilding is highly recommended, so much so that I'm not
1161going to explain what you have to do if you don't use it.
1162
1163@table @file
1164@item configure
1165@cindex @file{configure}
1166This is the configure script which will be run when building the
1167package.  This is generated by @samp{autoconf} from @file{configure.in}
1168and @file{aclocal.m4}.  This is a shell script.
1169
1170@item Makefile.in
1171@cindex @file{Makefile.in}
1172This is the file which the configure script will turn into the
1173@file{Makefile} at build time.  This file is generated by
1174@samp{automake} from @file{Makefile.am}.  If you aren't using automake,
1175you must write this file yourself.  This file is pretty much a normal
1176@file{Makefile}, with some configure substitutions for certain
1177variables.
1178
1179@item aclocal.m4
1180@cindex @file{aclocal.m4}
1181This file is created by the @samp{aclocal} program, based on the
1182contents of @file{configure.in} and @file{acinclude.m4} (or, as noted in
1183the description of @file{acinclude.m4} above, on the contents of an
1184@file{m4} subdirectory).  This file contains definitions of autoconf
1185macros which @samp{autoconf} will use when generating the file
1186@file{configure}.  These autoconf macros may be defined by you in
1187@file{acinclude.m4} or they may be defined by other packages such as
1188automake, libtool or gettext.  If you aren't using automake, you will
1189normally write this file yourself; in that case, if @file{configure.in}
1190uses only standard autoconf macros, this file will not be needed at all.
1191
1192@item config.in
1193@cindex @file{config.in}
1194@cindex @file{config.h.in}
1195This file is created by @samp{autoheader} based on @file{acconfig.h} and
1196@file{configure.in}.  At build time, the configure script will define
1197some of the macros in it to create @file{config.h}, which may then be
1198included by your program.  This permits your C code to use preprocessor
1199conditionals to change its behaviour based on the characteristics of the
1200host system.  This file may also be called @file{config.h.in}.
1201
1202@item stamp.h-in
1203@cindex @file{stamp-h.in}
1204This rather uninteresting file, which I omitted from the picture, is
1205generated by @samp{automake}.  It always contains the string
1206@samp{timestamp}.  It is used as a timestamp file indicating whether
1207@file{config.in} is up to date.  Using a timestamp file means that
1208@file{config.in} can be marked as up to date without actually changing
1209its modification time.  This is useful since @file{config.in} depends
1210upon @file{configure.in}, but it is easy to change @file{configure.in}
1211in a way which does not affect @file{config.in}.
1212@end table
1213
1214@node Build Files
1215@section Build Files
1216
1217This section describes the files which are created at configure and
1218build time.  These are the files which somebody who builds the package
1219will see.
1220
1221Of course, the developer will also build the package.  The distinction
1222between developer files and build files is not that the developer does
1223not see the build files, but that somebody who only builds the package
1224does not have to worry about the developer files.
1225
1226@menu
1227* Build Files Picture::		Build Files Picture.
1228* Build Files Description::	Build Files Description.
1229@end menu
1230
1231@node Build Files Picture
1232@subsection Build Files Picture
1233
1234Here is a picture of the files which will be created at build time.
1235@file{config.status} is both a created file and a shell script which is
1236run to create other files, and the picture attempts to show that.
1237
1238@image{configbuild}
1239
1240@node Build Files Description
1241@subsection Build Files Description
1242
1243This is a description of the files which are created at build time.
1244
1245@table @file
1246@item config.status
1247@cindex @file{config.status}
1248The first step in building a package is to run the @file{configure}
1249script.  The @file{configure} script will create the file
1250@file{config.status}, which is itself a shell script.  When you first
1251run @file{configure}, it will automatically run @file{config.status}.
1252An @file{Makefile} derived from an automake generated @file{Makefile.in}
1253will contain rules to automatically run @file{config.status} again when
1254necessary to recreate certain files if their inputs change.
1255
1256@item Makefile
1257@cindex @file{Makefile}
1258This is the file which make will read to build the program.  The
1259@file{config.status} script will transform @file{Makefile.in} into
1260@file{Makefile}.
1261
1262@item config.h
1263@cindex @file{config.h}
1264This file defines C preprocessor macros which C code can use to adjust
1265its behaviour on different systems.  The @file{config.status} script
1266will transform @file{config.in} into @file{config.h}.
1267
1268@item config.cache
1269@cindex @file{config.cache}
1270This file did not fit neatly into the picture, and I omitted it.  It is
1271used by the @file{configure} script to cache results between runs.  This
1272can be an important speedup.  If you modify @file{configure.in} in such
1273a way that the results of old tests should change (perhaps you have
1274added a new library to @samp{LDFLAGS}), then you will have to remove
1275@file{config.cache} to force the tests to be rerun.
1276
1277The autoconf manual explains how to set up a site specific cache file.
1278This can speed up running @file{configure} scripts on your system.
1279
1280@item stamp.h
1281@cindex @file{stamp-h}
1282This file, which I omitted from the picture, is similar to
1283@file{stamp-h.in}.  It is used as a timestamp file indicating whether
1284@file{config.h} is up to date.  This is useful since @file{config.h}
1285depends upon @file{config.status}, but it is easy for
1286@file{config.status} to change in a way which does not affect
1287@file{config.h}.
1288@end table
1289
1290@node Support Files
1291@section Support Files
1292
1293The GNU configure and build system requires several support files to be
1294included with your distribution.  You do not normally need to concern
1295yourself with these.  If you are using the Cygnus tree, most are already
1296present.  Otherwise, they will be installed with your source by
1297@samp{automake} (with the @samp{--add-missing} option) and
1298@samp{libtoolize}.
1299
1300You don't have to put the support files in the top level directory.  You
1301can put them in a subdirectory, and use the @samp{AC_CONFIG_AUX_DIR}
1302macro in @file{configure.in} to tell @samp{automake} and the
1303@file{configure} script where they are.
1304
1305In this section, I describe the support files, so that you can know what
1306they are and why they are there.
1307
1308@table @file
1309@item ABOUT-NLS
1310Added by automake if you are using gettext.  This is a documentation
1311file about the gettext project.
1312@item ansi2knr.c
1313Used by an automake generated @file{Makefile} if you put @samp{ansi2knr}
1314in @samp{AUTOMAKE_OPTIONS} in @file{Makefile.am}.  This permits
1315compiling ANSI C code with a K&R C compiler.
1316@item ansi2knr.1
1317The man page which goes with @file{ansi2knr.c}.
1318@item config.guess
1319A shell script which determines the configuration name for the system on
1320which it is run.
1321@item config.sub
1322A shell script which canonicalizes a configuration name entered by a
1323user.
1324@item elisp-comp
1325Used to compile Emacs LISP files.
1326@item install-sh
1327A shell script which installs a program.  This is used if the configure
1328script can not find an install binary.
1329@item ltconfig
1330Used by libtool.  This is a shell script which configures libtool for
1331the particular system on which it is used.
1332@item ltmain.sh
1333Used by libtool.  This is the actual libtool script which is used, after
1334it is configured by @file{ltconfig} to build a library.
1335@item mdate-sh
1336A shell script used by an automake generated @file{Makefile} to pretty
1337print the modification time of a file.  This is used to maintain version
1338numbers for texinfo files.
1339@item missing
1340A shell script used if some tool is missing entirely.  This is used by
1341an automake generated @file{Makefile} to avoid certain sorts of
1342timestamp problems.
1343@item mkinstalldirs
1344A shell script which creates a directory, including all parent
1345directories.  This is used by an automake generated @file{Makefile}
1346during installation.
1347@item texinfo.tex
1348Required if you have any texinfo files.  This is used when converting
1349Texinfo files into DVI using @samp{texi2dvi} and @TeX{}.
1350@item ylwrap
1351A shell script used by an automake generated @file{Makefile} to run
1352programs like @samp{bison}, @samp{yacc}, @samp{flex}, and @samp{lex}.
1353These programs default to producing output files with a fixed name, and
1354the @file{ylwrap} script runs them in a subdirectory to avoid file name
1355conflicts when using a parallel make program.
1356@end table
1357
1358@node Configuration Names
1359@chapter Configuration Names
1360@cindex configuration names
1361@cindex configuration triplets
1362@cindex triplets
1363@cindex host names
1364@cindex host triplets
1365@cindex canonical system names
1366@cindex system names
1367@cindex system types
1368
1369The GNU configure system names all systems using a @dfn{configuration
1370name}.  All such names used to be triplets (they may now contain four
1371parts in certain cases), and the term @dfn{configuration triplet} is
1372still seen.
1373
1374@menu
1375* Configuration Name Definition::	Configuration Name Definition.
1376* Using Configuration Names::		Using Configuration Names.
1377@end menu
1378
1379@node Configuration Name Definition
1380@section Configuration Name Definition
1381
1382This is a string of the form
1383@var{cpu}-@var{manufacturer}-@var{operating_system}.  In some cases,
1384this is extended to a four part form:
1385@var{cpu}-@var{manufacturer}-@var{kernel}-@var{operating_system}.
1386
1387When using a configuration name in a configure option, it is normally
1388not necessary to specify an entire name.  In particular, the
1389@var{manufacturer} field is often omitted, leading to strings such as
1390@samp{i386-linux} or @samp{sparc-sunos}.  The shell script
1391@file{config.sub} will translate these shortened strings into the
1392canonical form.  autoconf will arrange for @file{config.sub} to be run
1393automatically when it is needed.
1394
1395The fields of a configuration name are as follows:
1396
1397@table @var
1398@item cpu
1399The type of processor.  This is typically something like @samp{i386} or
1400@samp{sparc}.  More specific variants are used as well, such as
1401@samp{mipsel} to indicate a little endian MIPS processor.
1402@item manufacturer
1403A somewhat freeform field which indicates the manufacturer of the
1404system.  This is often simply @samp{unknown}.  Other common strings are
1405@samp{pc} for an IBM PC compatible system, or the name of a workstation
1406vendor, such as @samp{sun}.
1407@item operating_system
1408The name of the operating system which is run on the system.  This will
1409be something like @samp{solaris2.5} or @samp{irix6.3}.  There is no
1410particular restriction on the version number, and strings like
1411@samp{aix4.1.4.0} are seen.  For an embedded system, which has no
1412operating system, this field normally indicates the type of object file
1413format, such as @samp{elf} or @samp{coff}.
1414@item kernel
1415This is used mainly for GNU/Linux.  A typical GNU/Linux configuration
1416name is @samp{i586-pc-linux-gnulibc1}.  In this case the kernel,
1417@samp{linux}, is separated from the operating system, @samp{gnulibc1}.
1418@end table
1419
1420The shell script @file{config.guess} will normally print the correct
1421configuration name for the system on which it is run.  It does by
1422running @samp{uname} and by examining other characteristics of the
1423system.
1424
1425Because @file{config.guess} can normally determine the configuration
1426name for a machine, it is normally only necessary to specify a
1427configuration name when building a cross-compiler or when building using
1428a cross-compiler.
1429
1430@node Using Configuration Names
1431@section Using Configuration Names
1432
1433A configure script will sometimes have to make a decision based on a
1434configuration name.  You will need to do this if you have to compile
1435code differently based on something which can not be tested using a
1436standard autoconf feature test.
1437
1438It is normally better to test for particular features, rather than to
1439test for a particular system.  This is because as Unix evolves,
1440different systems copy features from one another.  Even if you need to
1441determine whether the feature is supported based on a configuration
1442name, you should define a macro which describes the feature, rather than
1443defining a macro which describes the particular system you are on.
1444
1445Testing for a particular system is normally done using a case statement
1446in @file{configure.in}.  The case statement might look something like
1447the following, assuming that @samp{host} is a shell variable holding a
1448canonical configuration name (which will be the case if
1449@file{configure.in} uses the @samp{AC_CANONICAL_HOST} or
1450@samp{AC_CANONICAL_SYSTEM} macro).
1451
1452@smallexample
1453case "$@{host@}" in
1454i[3-7]86-*-linux-gnu*) do something ;;
1455sparc*-sun-solaris2.[56789]*) do something ;;
1456sparc*-sun-solaris*) do something ;;
1457mips*-*-elf*) do something ;;
1458esac
1459@end smallexample
1460
1461It is particularly important to use @samp{*} after the operating system
1462field, in order to match the version number which will be generated by
1463@file{config.guess}.
1464
1465In most cases you must be careful to match a range of processor types.
1466For most processor families, a trailing @samp{*} suffices, as in
1467@samp{mips*} above.  For the i386 family, something along the lines of
1468@samp{i[3-7]86} suffices at present.  For the m68k family, you will
1469need something like @samp{m68*}.  Of course, if you do not need to match
1470on the processor, it is simpler to just replace the entire field by a
1471@samp{*}, as in @samp{*-*-irix*}.
1472
1473@node Cross Compilation Tools
1474@chapter Cross Compilation Tools
1475@cindex cross tools
1476
1477The GNU configure and build system can be used to build @dfn{cross
1478compilation} tools.  A cross compilation tool is a tool which runs on
1479one system and produces code which runs on another system.
1480
1481@menu
1482* Cross Compilation Concepts::		Cross Compilation Concepts.
1483* Host and Target::			Host and Target.
1484* Using the Host Type::			Using the Host Type.
1485* Specifying the Target::       	Specifying the Target.
1486* Using the Target Type::		Using the Target Type.
1487* Cross Tools in the Cygnus Tree::	Cross Tools in the Cygnus Tree
1488@end menu
1489
1490@node Cross Compilation Concepts
1491@section Cross Compilation Concepts
1492
1493@cindex cross compiler
1494A compiler which produces programs which run on a different system is a
1495cross compilation compiler, or simply a @dfn{cross compiler}.
1496Similarly, we speak of cross assemblers, cross linkers, etc.
1497
1498In the normal case, a compiler produces code which runs on the same
1499system as the one on which the compiler runs.  When it is necessary to
1500distinguish this case from the cross compilation case, such a compiler
1501is called a @dfn{native compiler}.  Similarly, we speak of native
1502assemblers, etc.
1503
1504Although the debugger is not strictly speaking a compilation tool, it is
1505nevertheless meaningful to speak of a cross debugger: a debugger which
1506is used to debug code which runs on another system.  Everything that is
1507said below about configuring cross compilation tools applies to the
1508debugger as well.
1509
1510@node Host and Target
1511@section Host and Target
1512@cindex host system
1513@cindex target system
1514
1515When building cross compilation tools, there are two different systems
1516involved: the system on which the tools will run, and the system for
1517which the tools generate code.
1518
1519The system on which the tools will run is called the @dfn{host} system.
1520
1521The system for which the tools generate code is called the @dfn{target}
1522system.
1523
1524For example, suppose you have a compiler which runs on a GNU/Linux
1525system and generates ELF programs for a MIPS embedded system.  In this
1526case the GNU/Linux system is the host, and the MIPS ELF system is the
1527target.  Such a compiler could be called a GNU/Linux cross MIPS ELF
1528compiler, or, equivalently, a @samp{i386-linux-gnu} cross
1529@samp{mips-elf} compiler.
1530
1531Naturally, most programs are not cross compilation tools.  For those
1532programs, it does not make sense to speak of a target.  It only makes
1533sense to speak of a target for tools like @samp{gcc} or the
1534@samp{binutils} which actually produce running code.  For example, it
1535does not make sense to speak of the target of a tool like @samp{bison}
1536or @samp{make}.
1537
1538Most cross compilation tools can also serve as native tools.  For a
1539native compilation tool, it is still meaningful to speak of a target.
1540For a native tool, the target is the same as the host.  For example, for
1541a GNU/Linux native compiler, the host is GNU/Linux, and the target is
1542also GNU/Linux.
1543
1544@node Using the Host Type
1545@section Using the Host Type
1546
1547In almost all cases the host system is the system on which you run the
1548@samp{configure} script, and on which you build the tools (for the case
1549when they differ, @pxref{Canadian Cross}).
1550
1551@cindex @samp{AC_CANONICAL_HOST}
1552If your configure script needs to know the configuration name of the
1553host system, and the package is not a cross compilation tool and
1554therefore does not have a target, put @samp{AC_CANONICAL_HOST} in
1555@file{configure.in}.  This macro will arrange to define a few shell
1556variables when the @samp{configure} script is run.
1557
1558@table @samp
1559@item host
1560The canonical configuration name of the host.  This will normally be
1561determined by running the @file{config.guess} shell script, although the
1562user is permitted to override this by using an explicit @samp{--host}
1563option.
1564@item host_alias
1565In the unusual case that the user used an explicit @samp{--host} option,
1566this will be the argument to @samp{--host}.  In the normal case, this
1567will be the same as the @samp{host} variable.
1568@item host_cpu
1569@itemx host_vendor
1570@itemx host_os
1571The first three parts of the canonical configuration name.
1572@end table
1573
1574The shell variables may be used by putting shell code in
1575@file{configure.in}.  For an example, see @ref{Using Configuration
1576Names}.
1577
1578@node Specifying the Target
1579@section Specifying the Target
1580
1581By default, the @samp{configure} script will assume that the target is
1582the same as the host.  This is the more common case; for example, it
1583leads to a native compiler rather than a cross compiler.
1584
1585@cindex @samp{--target} option
1586@cindex target option
1587@cindex configure target
1588If you want to build a cross compilation tool, you must specify the
1589target explicitly by using the @samp{--target} option when you run
1590@samp{configure}.  The argument to @samp{--target} is the configuration
1591name of the system for which you wish to generate code.
1592@xref{Configuration Names}.
1593
1594For example, to build tools which generate code for a MIPS ELF embedded
1595system, you would use @samp{--target mips-elf}.
1596
1597@node Using the Target Type
1598@section Using the Target Type
1599
1600@cindex @samp{AC_CANONICAL_SYSTEM}
1601When writing @file{configure.in} for a cross compilation tool, you will
1602need to use information about the target.  To do this, put
1603@samp{AC_CANONICAL_SYSTEM} in @file{configure.in}.
1604
1605@samp{AC_CANONICAL_SYSTEM} will look for a @samp{--target} option and
1606canonicalize it using the @file{config.sub} shell script.  It will also
1607run @samp{AC_CANONICAL_HOST} (@pxref{Using the Host Type}).
1608
1609The target type will be recorded in the following shell variables.  Note
1610that the host versions of these variables will also be defined by
1611@samp{AC_CANONICAL_HOST}.
1612
1613@table @samp
1614@item target
1615The canonical configuration name of the target.
1616@item target_alias
1617The argument to the @samp{--target} option.  If the user did not specify
1618a @samp{--target} option, this will be the same as @samp{host_alias}.
1619@item target_cpu
1620@itemx target_vendor
1621@itemx target_os
1622The first three parts of the canonical target configuration name.
1623@end table
1624
1625Note that if @samp{host} and @samp{target} are the same string, you can
1626assume a native configuration.  If they are different, you can assume a
1627cross configuration.
1628
1629It is arguably possible for @samp{host} and @samp{target} to represent
1630the same system, but for the strings to not be identical.  For example,
1631if @samp{config.guess} returns @samp{sparc-sun-sunos4.1.4}, and somebody
1632configures with @samp{--target sparc-sun-sunos4.1}, then the slight
1633differences between the two versions of SunOS may be unimportant for
1634your tool.  However, in the general case it can be quite difficult to
1635determine whether the differences between two configuration names are
1636significant or not.  Therefore, by convention, if the user specifies a
1637@samp{--target} option without specifying a @samp{--host} option, it is
1638assumed that the user wants to configure a cross compilation tool.
1639
1640The variables @samp{target} and @samp{target_alias} should be handled
1641differently.
1642
1643In general, whenever the user may actually see a string,
1644@samp{target_alias} should be used.  This includes anything which may
1645appear in the file system, such as a directory name or part of a tool
1646name.  It also includes any tool output, unless it is clearly labelled
1647as the canonical target configuration name.  This permits the user to
1648use the @samp{--target} option to specify how the tool will appear to
1649the outside world.
1650
1651On the other hand, when checking for characteristics of the target
1652system, @samp{target} should be used.  This is because a wide variety of
1653@samp{--target} options may map into the same canonical configuration
1654name.  You should not attempt to duplicate the canonicalization done by
1655@samp{config.sub} in your own code.
1656
1657By convention, cross tools are installed with a prefix of the argument
1658used with the @samp{--target} option, also known as @samp{target_alias}
1659(@pxref{Using the Target Type}).  If the user does not use the
1660@samp{--target} option, and thus is building a native tool, no prefix is
1661used.
1662
1663For example, if gcc is configured with @samp{--target mips-elf}, then
1664the installed binary will be named @samp{mips-elf-gcc}.  If gcc is
1665configured without a @samp{--target} option, then the installed binary
1666will be named @samp{gcc}.
1667
1668The autoconf macro @samp{AC_ARG_PROGRAM} will handle this for you.  If
1669you are using automake, no more need be done; the programs will
1670automatically be installed with the correct prefixes.  Otherwise, see
1671the autoconf documentation for @samp{AC_ARG_PROGRAM}.
1672
1673@node Cross Tools in the Cygnus Tree
1674@section Cross Tools in the Cygnus Tree
1675
1676The Cygnus tree is used for various packages including gdb, the GNU
1677binutils, and egcs.  It is also, of course, used for Cygnus releases.
1678
1679In the Cygnus tree, the top level @file{configure} script uses the old
1680Cygnus configure system, not autoconf.  The top level @file{Makefile.in}
1681is written to build packages based on what is in the source tree, and
1682supports building a large number of tools in a single
1683@samp{configure}/@samp{make} step.
1684
1685The Cygnus tree may be configured with a @samp{--target} option.  The
1686@samp{--target} option applies recursively to every subdirectory, and
1687permits building an entire set of cross tools at once.
1688
1689@menu
1690* Host and Target Libraries::		Host and Target Libraries.
1691* Target Library Configure Scripts::	Target Library Configure Scripts.
1692* Make Targets in Cygnus Tree::         Make Targets in Cygnus Tree.
1693* Target libiberty::			Target libiberty
1694@end menu
1695
1696@node Host and Target Libraries
1697@subsection Host and Target Libraries
1698
1699The Cygnus tree distinguishes host libraries from target libraries.
1700
1701Host libraries are built with the compiler used to build the programs
1702which run on the host, which is called the host compiler.  This includes
1703libraries such as @samp{bfd} and @samp{tcl}.  These libraries are built
1704with the host compiler, and are linked into programs like the binutils
1705or gcc which run on the host.
1706
1707Target libraries are built with the target compiler.  If gcc is present
1708in the source tree, then the target compiler is the gcc that is built
1709using the host compiler.  Target libraries are libraries such as
1710@samp{newlib} and @samp{libstdc++}.  These libraries are not linked into
1711the host programs, but are instead made available for use with programs
1712built with the target compiler.
1713
1714For the rest of this section, assume that gcc is present in the source
1715tree, so that it will be used to build the target libraries.
1716
1717There is a complication here.  The configure process needs to know which
1718compiler you are going to use to build a tool; otherwise, the feature
1719tests will not work correctly.  The Cygnus tree handles this by not
1720configuring the target libraries until the target compiler is built.  In
1721order to permit everything to build using a single
1722@samp{configure}/@samp{make}, the configuration of the target libraries
1723is actually triggered during the make step.
1724
1725When the target libraries are configured, the @samp{--target} option is
1726not used.  Instead, the @samp{--host} option is used with the argument
1727of the @samp{--target} option for the overall configuration.  If no
1728@samp{--target} option was used for the overall configuration, the
1729@samp{--host} option will be passed with the output of the
1730@file{config.guess} shell script.  Any @samp{--build} option is passed
1731down unchanged.
1732
1733This translation of configuration options is done because since the
1734target libraries are compiled with the target compiler, they are being
1735built in order to run on the target of the overall configuration.  By
1736the definition of host, this means that their host system is the same as
1737the target system of the overall configuration.
1738
1739The same process is used for both a native configuration and a cross
1740configuration.  Even when using a native configuration, the target
1741libraries will be configured and built using the newly built compiler.
1742This is particularly important for the C++ libraries, since there is no
1743reason to assume that the C++ compiler used to build the host tools (if
1744there even is one) uses the same ABI as the g++ compiler which will be
1745used to build the target libraries.
1746
1747There is one difference between a native configuration and a cross
1748configuration.  In a native configuration, the target libraries are
1749normally configured and built as siblings of the host tools.  In a cross
1750configuration, the target libraries are normally built in a subdirectory
1751whose name is the argument to @samp{--target}.  This is mainly for
1752historical reasons.
1753
1754To summarize, running @samp{configure} in the Cygnus tree configures all
1755the host libraries and tools, but does not configure any of the target
1756libraries.  Running @samp{make} then does the following steps:
1757
1758@itemize @bullet
1759@item
1760Build the host libraries.
1761@item
1762Build the host programs, including gcc.  Note that we call gcc both a
1763host program (since it runs on the host) and a target compiler (since it
1764generates code for the target).
1765@item
1766Using the newly built target compiler, configure the target libraries.
1767@item
1768Build the target libraries.
1769@end itemize
1770
1771The steps need not be done in precisely this order, since they are
1772actually controlled by @file{Makefile} targets.
1773
1774@node Target Library Configure Scripts
1775@subsection Target Library Configure Scripts
1776
1777There are a few things you must know in order to write a configure
1778script for a target library.  This is just a quick sketch, and beginners
1779shouldn't worry if they don't follow everything here.
1780
1781The target libraries are configured and built using a newly built target
1782compiler.  There may not be any startup files or libraries for this
1783target compiler.  In fact, those files will probably be built as part of
1784some target library, which naturally means that they will not exist when
1785your target library is configured.
1786
1787This means that the configure script for a target library may not use
1788any test which requires doing a link.  This unfortunately includes many
1789useful autoconf macros, such as @samp{AC_CHECK_FUNCS}.  autoconf macros
1790which do a compile but not a link, such as @samp{AC_CHECK_HEADERS}, may
1791be used.
1792
1793This is a severe restriction, but normally not a fatal one, as target
1794libraries can often assume the presence of other target libraries, and
1795thus know which functions will be available.
1796
1797As of this writing, the autoconf macro @samp{AC_PROG_CC} does a link to
1798make sure that the compiler works.  This may fail in a target library,
1799so target libraries must use a different set of macros to locate the
1800compiler.  See the @file{configure.in} file in a directory like
1801@file{libiberty} or @file{libgloss} for an example.
1802
1803As noted in the previous section, target libraries are sometimes built
1804in directories which are siblings to the host tools, and are sometimes
1805built in a subdirectory.  The @samp{--with-target-subdir} configure
1806option will be passed when the library is configured.  Its value will be
1807an empty string if the target library is a sibling.  Its value will be
1808the name of the subdirectory if the target library is in a subdirectory.
1809
1810If the overall build is not a native build (i.e., the overall configure
1811used the @samp{--target} option), then the library will be configured
1812with the @samp{--with-cross-host} option.  The value of this option will
1813be the host system of the overall build.  Recall that the host system of
1814the library will be the target of the overall build.  If the overall
1815build is a native build, the @samp{--with-cross-host} option will not be
1816used.
1817
1818A library which can be built both standalone and as a target library may
1819want to install itself into different directories depending upon the
1820case.  When built standalone, or when built native, the library should
1821be installed in @samp{$(libdir)}.  When built as a target library which
1822is not native, the library should be installed in @samp{$(tooldir)/lib}.
1823The @samp{--with-cross-host} option may be used to distinguish these
1824cases.
1825
1826This same test of @samp{--with-cross-host} may be used to see whether it
1827is OK to use link tests in the configure script.  If the
1828@samp{--with-cross-host} option is not used, then the library is being
1829built either standalone or native, and a link should work.
1830
1831@node Make Targets in Cygnus Tree
1832@subsection Make Targets in Cygnus Tree
1833
1834The top level @file{Makefile} in the Cygnus tree defines targets for
1835every known subdirectory.
1836
1837For every subdirectory @var{dir} which holds a host library or program,
1838the @file{Makefile} target @samp{all-@var{dir}} will build that library
1839or program.
1840
1841There are dependencies among host tools.  For example, building gcc
1842requires first building gas, because the gcc build process invokes the
1843target assembler.  These dependencies are reflected in the top level
1844@file{Makefile}.
1845
1846For every subdirectory @var{dir} which holds a target library, the
1847@file{Makefile} target @samp{configure-target-@var{dir}} will configure
1848that library.  The @file{Makefile} target @samp{all-target-@var{dir}}
1849will build that library.
1850
1851Every @samp{configure-target-@var{dir}} target depends upon
1852@samp{all-gcc}, since gcc, the target compiler, is required to configure
1853the tool.  Every @samp{all-target-@var{dir}} target depends upon the
1854corresponding @samp{configure-target-@var{dir}} target.
1855
1856There are several other targets which may be of interest for each
1857directory: @samp{install-@var{dir}}, @samp{clean-@var{dir}}, and
1858@samp{check-@var{dir}}.  There are also corresponding @samp{target}
1859versions of these for the target libraries , such as
1860@samp{install-target-@var{dir}}.
1861
1862@node Target libiberty
1863@subsection Target libiberty
1864
1865The @file{libiberty} subdirectory is currently a special case, in that
1866it is the only directory which is built both using the host compiler and
1867using the target compiler.
1868
1869This is because the files in @file{libiberty} are used when building the
1870host tools, and they are also incorporated into the @file{libstdc++}
1871target library as support code.
1872
1873This duality does not pose any particular difficulties.  It means that
1874there are targets for both @samp{all-libiberty} and
1875@samp{all-target-libiberty}.
1876
1877In a native configuration, when target libraries are not built in a
1878subdirectory, the same objects are normally used as both the host build
1879and the target build.  This is normally OK, since libiberty contains
1880only C code, and in a native configuration the results of the host
1881compiler and the target compiler are normally interoperable.
1882
1883Irix 6 is again an exception here, since the SGI native compiler
1884defaults to using the @samp{O32} ABI, and gcc defaults to using the
1885@samp{N32} ABI.  On Irix 6, the target libraries are built in a
1886subdirectory even for a native configuration, avoiding this problem.
1887
1888There are currently no other libraries built for both the host and the
1889target, but there is no conceptual problem with adding more.
1890
1891@node Canadian Cross
1892@chapter Canadian Cross
1893@cindex canadian cross
1894@cindex building with a cross compiler
1895@cindex cross compiler, building with
1896
1897It is possible to use the GNU configure and build system to build a
1898program which will run on a system which is different from the system on
1899which the tools are built.  In other words, it is possible to build
1900programs using a cross compiler.
1901
1902This is referred to as a @dfn{Canadian Cross}.
1903
1904@menu
1905* Canadian Cross Example::		Canadian Cross Example.
1906* Canadian Cross Concepts::		Canadian Cross Concepts.
1907* Build Cross Host Tools::		Build Cross Host Tools.
1908* Build and Host Options::		Build and Host Options.
1909* CCross not in Cygnus Tree::		Canadian Cross not in Cygnus Tree.
1910* CCross in Cygnus Tree::		Canadian Cross in Cygnus Tree.
1911* Supporting Canadian Cross::		Supporting Canadian Cross.
1912@end menu
1913
1914@node Canadian Cross Example
1915@section Canadian Cross Example
1916
1917Here is an example of a Canadian Cross.
1918
1919While running on a GNU/Linux, you can build a program which will run on
1920a Solaris system.  You would use a GNU/Linux cross Solaris compiler to
1921build the program.
1922
1923Of course, you could not run the resulting program on your GNU/Linux
1924system.  You would have to copy it over to a Solaris system before you
1925would run it.
1926
1927Of course, you could also simply build the programs on the Solaris
1928system in the first place.  However, perhaps the Solaris system is not
1929available for some reason; perhaps you actually don't have one, but you
1930want to build the tools for somebody else to use.  Or perhaps your
1931GNU/Linux system is much faster than your Solaris system.
1932
1933A Canadian Cross build is most frequently used when building programs to
1934run on a non-Unix system, such as DOS or Windows.  It may be simpler to
1935configure and build on a Unix system than to support the configuration
1936machinery on a non-Unix system.
1937
1938@node Canadian Cross Concepts
1939@section Canadian Cross Concepts
1940
1941When building a Canadian Cross, there are at least two different systems
1942involved: the system on which the tools are being built, and the system
1943on which the tools will run.
1944
1945The system on which the tools are being built is called the @dfn{build}
1946system.
1947
1948The system on which the tools will run is called the host system.
1949
1950For example, if you are building a Solaris program on a GNU/Linux
1951system, as in the previous section, the build system would be GNU/Linux,
1952and the host system would be Solaris.
1953
1954It is, of course, possible to build a cross compiler using a Canadian
1955Cross (i.e., build a cross compiler using a cross compiler).  In this
1956case, the system for which the resulting cross compiler generates code
1957is called the target system.  (For a more complete discussion of host
1958and target systems, @pxref{Host and Target}).
1959
1960An example of building a cross compiler using a Canadian Cross would be
1961building a Windows cross MIPS ELF compiler on a GNU/Linux system.  In
1962this case the build system would be GNU/Linux, the host system would be
1963Windows, and the target system would be MIPS ELF.
1964
1965The name Canadian Cross comes from the case when the build, host, and
1966target systems are all different.  At the time that these issues were
1967all being hashed out, Canada had three national political parties.
1968
1969@node Build Cross Host Tools
1970@section Build Cross Host Tools
1971
1972In order to configure a program for a Canadian Cross build, you must
1973first build and install the set of cross tools you will use to build the
1974program.
1975
1976These tools will be build cross host tools.  That is, they will run on
1977the build system, and will produce code that runs on the host system.
1978
1979It is easy to confuse the meaning of build and host here.  Always
1980remember that the build system is where you are doing the build, and the
1981host system is where the resulting program will run.  Therefore, you
1982need a build cross host compiler.
1983
1984In general, you must have a complete cross environment in order to do
1985the build.  This normally means a cross compiler, cross assembler, and
1986so forth, as well as libraries and include files for the host system.
1987
1988@node Build and Host Options
1989@section Build and Host Options
1990@cindex configuring a canadian cross
1991@cindex canadian cross, configuring
1992
1993When you run @file{configure}, you must use both the @samp{--build} and
1994@samp{--host} options.
1995
1996@cindex @samp{--build} option
1997@cindex build option
1998@cindex configure build system
1999The @samp{--build} option is used to specify the configuration name of
2000the build system.  This can normally be the result of running the
2001@file{config.guess} shell script, and it is reasonable to use
2002@samp{--build=`config.guess`}.
2003
2004@cindex @samp{--host} option
2005@cindex host option
2006@cindex configure host
2007The @samp{--host} option is used to specify the configuration name of
2008the host system.
2009
2010As we explained earlier, @file{config.guess} is used to set the default
2011value for the @samp{--host} option (@pxref{Using the Host Type}).  We
2012can now see that since @file{config.guess} returns the type of system on
2013which it is run, it really identifies the build system.  Since the host
2014system is normally the same as the build system (i.e., people do not
2015normally build using a cross compiler), it is reasonable to use the
2016result of @file{config.guess} as the default for the host system when
2017the @samp{--host} option is not used.
2018
2019It might seem that if the @samp{--host} option were used without the
2020@samp{--build} option that the configure script could run
2021@file{config.guess} to determine the build system, and presume a
2022Canadian Cross if the result of @file{config.guess} differed from the
2023@samp{--host} option.  However, for historical reasons, some configure
2024scripts are routinely run using an explicit @samp{--host} option, rather
2025than using the default from @file{config.guess}.  As noted earlier, it
2026is difficult or impossible to reliably compare configuration names
2027(@pxref{Using the Target Type}).  Therefore, by convention, if the
2028@samp{--host} option is used, but the @samp{--build} option is not used,
2029then the build system defaults to the host system.
2030
2031@node CCross not in Cygnus Tree
2032@section Canadian Cross not in Cygnus Tree.
2033
2034If you are not using the Cygnus tree, you must explicitly specify the
2035cross tools which you want to use to build the program.  This is done by
2036setting environment variables before running the @file{configure}
2037script.
2038
2039You must normally set at least the environment variables @samp{CC},
2040@samp{AR}, and @samp{RANLIB} to the cross tools which you want to use to
2041build.
2042
2043For some programs, you must set additional cross tools as well, such as
2044@samp{AS}, @samp{LD}, or @samp{NM}.
2045
2046You would set these environment variables to the build cross tools which
2047you are going to use.
2048
2049For example, if you are building a Solaris program on a GNU/Linux
2050system, and your GNU/Linux cross Solaris compiler were named
2051@samp{solaris-gcc}, then you would set the environment variable
2052@samp{CC} to @samp{solaris-gcc}.
2053
2054@node CCross in Cygnus Tree
2055@section Canadian Cross in Cygnus Tree
2056@cindex canadian cross in cygnus tree
2057
2058This section describes configuring and building a Canadian Cross when
2059using the Cygnus tree.
2060
2061@menu
2062* Standard Cygnus CCross::	Building a Normal Program.
2063* Cross Cygnus CCross::		Building a Cross Program.
2064@end menu
2065
2066@node Standard Cygnus CCross
2067@subsection Building a Normal Program
2068
2069When configuring a Canadian Cross in the Cygnus tree, all the
2070appropriate environment variables are automatically set to
2071@samp{@var{host}-@var{tool}}, where @var{host} is the value used for the
2072@samp{--host} option, and @var{tool} is the name of the tool (e.g.,
2073@samp{gcc}, @samp{as}, etc.).  These tools must be on your @samp{PATH}.
2074
2075Adding a prefix of @var{host} will give the usual name for the build
2076cross host tools.  To see this, consider that when these cross tools
2077were built, they were configured to run on the build system and to
2078produce code for the host system.  That is, they were configured with a
2079@samp{--target} option that is the same as the system which we are now
2080calling the host.  Recall that the default name for installed cross
2081tools uses the target system as a prefix (@pxref{Using the Target
2082Type}).  Since that is the system which we are now calling the host,
2083@var{host} is the right prefix to use.
2084
2085For example, if you configure with @samp{--build=i386-linux-gnu} and
2086@samp{--host=solaris}, then the Cygnus tree will automatically default
2087to using the compiler @samp{solaris-gcc}.  You must have previously
2088built and installed this compiler, probably by doing a build with no
2089@samp{--host} option and with a @samp{--target} option of
2090@samp{solaris}.
2091
2092@node Cross Cygnus CCross
2093@subsection Building a Cross Program
2094
2095There are additional considerations if you want to build a cross
2096compiler, rather than a native compiler, in the Cygnus tree using a
2097Canadian Cross.
2098
2099When you build a cross compiler using the Cygnus tree, then the target
2100libraries will normally be built with the newly built target compiler
2101(@pxref{Host and Target Libraries}).  However, this will not work when
2102building with a Canadian Cross.  This is because the newly built target
2103compiler will be a program which runs on the host system, and therefore
2104will not be able to run on the build system.
2105
2106Therefore, when building a cross compiler with the Cygnus tree, you must
2107first install a set of build cross target tools.  These tools will be
2108used when building the target libraries.
2109
2110Note that this is not a requirement of a Canadian Cross in general.  For
2111example, it would be possible to build just the host cross target tools
2112on the build system, to copy the tools to the host system, and to build
2113the target libraries on the host system.  The requirement for build
2114cross target tools is imposed by the Cygnus tree, which expects to be
2115able to build both host programs and target libraries in a single
2116@samp{configure}/@samp{make} step.  Because it builds these in a single
2117step, it expects to be able to build the target libraries on the build
2118system, which means that it must use a build cross target toolchain.
2119
2120For example, suppose you want to build a Windows cross MIPS ELF compiler
2121on a GNU/Linux system.  You must have previously installed both a
2122GNU/Linux cross Windows compiler and a GNU/Linux cross MIPS ELF
2123compiler.
2124
2125In order to build the Windows (configuration name @samp{i386-cygwin32})
2126cross MIPS ELF (configure name @samp{mips-elf}) compiler, you might
2127execute the following commands (long command lines are broken across
2128lines with a trailing backslash as a continuation character).
2129
2130@example
2131mkdir linux-x-cygwin32
2132cd linux-x-cygwin32
2133@var{srcdir}/configure --target i386-cygwin32 --prefix=@var{installdir} \
2134  --exec-prefix=@var{installdir}/H-i386-linux
2135make
2136make install
2137cd ..
2138mkdir linux-x-mips-elf
2139cd linux-x-mips-elf
2140@var{srcdir}/configure --target mips-elf --prefix=@var{installdir} \
2141  --exec-prefix=@var{installdir}/H-i386-linux
2142make
2143make install
2144cd ..
2145mkdir cygwin32-x-mips-elf
2146cd cygwin32-x-mips-elf
2147@var{srcdir}/configure --build=i386-linux-gnu --host=i386-cygwin32 \
2148  --target=mips-elf --prefix=@var{wininstalldir} \
2149  --exec-prefix=@var{wininstalldir}/H-i386-cygwin32
2150make
2151make install
2152@end example
2153
2154You would then copy the contents of @var{wininstalldir} over to the
2155Windows machine, and run the resulting programs.
2156
2157@node Supporting Canadian Cross
2158@section Supporting Canadian Cross
2159
2160If you want to make it possible to build a program you are developing
2161using a Canadian Cross, you must take some care when writing your
2162configure and make rules.  Simple cases will normally work correctly.
2163However, it is not hard to write configure and make tests which will
2164fail in a Canadian Cross.
2165
2166@menu
2167* CCross in Configure::		Supporting Canadian Cross in Configure Scripts.
2168* CCross in Make::		Supporting Canadian Cross in Makefiles.
2169@end menu
2170
2171@node CCross in Configure
2172@subsection Supporting Canadian Cross in Configure Scripts
2173@cindex canadian cross in configure
2174
2175In a @file{configure.in} file, after calling @samp{AC_PROG_CC}, you can
2176find out whether this is a Canadian Cross configure by examining the
2177shell variable @samp{cross_compiling}.  In a Canadian Cross, which means
2178that the compiler is a cross compiler, @samp{cross_compiling} will be
2179@samp{yes}.  In a normal configuration, @samp{cross_compiling} will be
2180@samp{no}.
2181
2182You ordinarily do not need to know the type of the build system in a
2183configure script.  However, if you do need that information, you can get
2184it by using the macro @samp{AC_CANONICAL_SYSTEM}, the same macro that is
2185used to determine the target system.  This macro will set the variables
2186@samp{build}, @samp{build_alias}, @samp{build_cpu}, @samp{build_vendor},
2187and @samp{build_os}, which correspond to the similar @samp{target} and
2188@samp{host} variables, except that they describe the build system.
2189
2190When writing tests in @file{configure.in}, you must remember that you
2191want to test the host environment, not the build environment.
2192
2193Macros like @samp{AC_CHECK_FUNCS} which use the compiler will test the
2194host environment.  That is because the tests will be done by running the
2195compiler, which is actually a build cross host compiler.  If the
2196compiler can find the function, that means that the function is present
2197in the host environment.
2198
2199Tests like @samp{test -f /dev/ptyp0}, on the other hand, will test the
2200build environment.  Remember that the configure script is running on the
2201build system, not the host system.  If your configure scripts examines
2202files, those files will be on the build system.  Whatever you determine
2203based on those files may or may not be the case on the host system.
2204
2205Most autoconf macros will work correctly for a Canadian Cross.  The main
2206exception is @samp{AC_TRY_RUN}.  This macro tries to compile and run a
2207test program.  This will fail in a Canadian Cross, because the program
2208will be compiled for the host system, which means that it will not run
2209on the build system.
2210
2211The @samp{AC_TRY_RUN} macro provides an optional argument to tell the
2212configure script what to do in a Canadian Cross.  If that argument is
2213not present, you will get a warning when you run @samp{autoconf}:
2214@smallexample
2215warning: AC_TRY_RUN called without default to allow cross compiling
2216@end smallexample
2217@noindent
2218This tells you that the resulting @file{configure} script will not work
2219with a Canadian Cross.
2220
2221In some cases while it may better to perform a test at configure time,
2222it is also possible to perform the test at run time.  In such a case you
2223can use the cross compiling argument to @samp{AC_TRY_RUN} to tell your
2224program that the test could not be performed at configure time.
2225
2226There are a few other autoconf macros which will not work correctly with
2227a Canadian Cross: a partial list is @samp{AC_FUNC_GETPGRP},
2228@samp{AC_FUNC_SETPGRP}, @samp{AC_FUNC_SETVBUF_REVERSED}, and
2229@samp{AC_SYS_RESTARTABLE_SYSCALLS}.  The @samp{AC_CHECK_SIZEOF} macro is
2230generally not very useful with a Canadian Cross; it permits an optional
2231argument indicating the default size, but there is no way to know what
2232the correct default should be.
2233
2234@node CCross in Make
2235@subsection Supporting Canadian Cross in Makefiles.
2236@cindex canadian cross in makefile
2237
2238The main Canadian Cross issue in a @file{Makefile} arises when you want
2239to use a subsidiary program to generate code or data which you will then
2240include in your real program.
2241
2242If you compile this subsidiary program using @samp{$(CC)} in the usual
2243way, you will not be able to run it.  This is because @samp{$(CC)} will
2244build a program for the host system, but the program is being built on
2245the build system.
2246
2247You must instead use a compiler for the build system, rather than the
2248host system.  In the Cygnus tree, this make variable
2249@samp{$(CC_FOR_BUILD)} will hold a compiler for the build system.
2250
2251Note that you should not include @file{config.h} in a file you are
2252compiling with @samp{$(CC_FOR_BUILD)}.  The @file{configure} script will
2253build @file{config.h} with information for the host system.  However,
2254you are compiling the file using a compiler for the build system (a
2255native compiler).  Subsidiary programs are normally simple filters which
2256do no user interaction, and it is normally possible to write them in a
2257highly portable fashion so that the absence of @file{config.h} is not
2258crucial.
2259
2260@cindex @samp{HOST_CC}
2261The gcc @file{Makefile.in} shows a complex situation in which certain
2262files, such as @file{rtl.c}, must be compiled into both subsidiary
2263programs run on the build system and into the final program.  This
2264approach may be of interest for advanced build system hackers.  Note
2265that the build system compiler is rather confusingly called
2266@samp{HOST_CC}.
2267
2268@node Cygnus Configure
2269@chapter Cygnus Configure
2270@cindex cygnus configure
2271
2272The Cygnus configure script predates autoconf.  All of its interesting
2273features have been incorporated into autoconf.  No new programs should
2274be written to use the Cygnus configure script.
2275
2276However, the Cygnus configure script is still used in a few places: at
2277the top of the Cygnus tree and in a few target libraries in the Cygnus
2278tree.  Until those uses have been replaced with autoconf, some brief
2279notes are appropriate here.  This is not complete documentation, but it
2280should be possible to use this as a guide while examining the scripts
2281themselves.
2282
2283@menu
2284* Cygnus Configure Basics::		Cygnus Configure Basics.
2285* Cygnus Configure in C++ Libraries::	Cygnus Configure in C++ Libraries.
2286@end menu
2287
2288@node Cygnus Configure Basics
2289@section Cygnus Configure Basics
2290
2291Cygnus configure does not use any generated files; there is no program
2292corresponding to @samp{autoconf}.  Instead, there is a single shell
2293script named @samp{configure} which may be found at the top of the
2294Cygnus tree.  This shell script was written by hand; it was not
2295generated by autoconf, and it is incorrect, and indeed harmful, to run
2296@samp{autoconf} in the top level of a Cygnus tree.
2297
2298Cygnus configure works in a particular directory by examining the file
2299@file{configure.in} in that directory.  That file is broken into four
2300separate shell scripts.
2301
2302The first is the contents of @file{configure.in} up to a line that
2303starts with @samp{# per-host:}.  This is the common part.
2304
2305The second is the rest of @file{configure.in} up to a line that starts
2306with @samp{# per-target:}.  This is the per host part.
2307
2308The third is the rest of @file{configure.in} up to a line that starts
2309with @samp{# post-target:}.  This is the per target part.
2310
2311The fourth is the remainder of @file{configure.in}.  This is the post
2312target part.
2313
2314If any of these comment lines are missing, the corresponding shell
2315script is empty.
2316
2317Cygnus configure will first execute the common part.  This must set the
2318shell variable @samp{srctrigger} to the name of a source file, to
2319confirm that Cygnus configure is looking at the right directory.  This
2320may set the shell variables @samp{package_makefile_frag} and
2321@samp{package_makefile_rules_frag}.
2322
2323Cygnus configure will next set the @samp{build} and @samp{host} shell
2324variables, and execute the per host part.  This may set the shell
2325variable @samp{host_makefile_frag}.
2326
2327Cygnus configure will next set the @samp{target} variable, and execute
2328the per target part.  This may set the shell variable
2329@samp{target_makefile_frag}.
2330
2331Any of these scripts may set the @samp{subdirs} shell variable.  This
2332variable is a list of subdirectories where a @file{Makefile.in} file may
2333be found.  Cygnus configure will automatically look for a
2334@file{Makefile.in} file in the current directory.  The @samp{subdirs}
2335shell variable is not normally used, and I believe that the only
2336directory which uses it at present is @file{newlib}.
2337
2338For each @file{Makefile.in}, Cygnus configure will automatically create
2339a @file{Makefile} by adding definitions for @samp{make} variables such
2340as @samp{host} and @samp{target}, and automatically editing the values
2341of @samp{make} variables such as @samp{prefix} if they are present.
2342
2343Also, if any of the @samp{makefile_frag} shell variables are set, Cygnus
2344configure will interpret them as file names relative to either the
2345working directory or the source directory, and will read the contents of
2346the file into the generated @file{Makefile}.  The file contents will be
2347read in after the first line in @file{Makefile.in} which starts with
2348@samp{####}.
2349
2350These @file{Makefile} fragments are used to customize behaviour for a
2351particular host or target.  They serve to select particular files to
2352compile, and to define particular preprocessor macros by providing
2353values for @samp{make} variables which are then used during compilation.
2354Cygnus configure, unlike autoconf, normally does not do feature tests,
2355and normally requires support to be added manually for each new host.
2356
2357The @file{Makefile} fragment support is similar to the autoconf
2358@samp{AC_SUBST_FILE} macro.
2359
2360After creating each @file{Makefile}, the post target script will be run
2361(i.e., it may be run several times).  This script may further customize
2362the @file{Makefile}.  When it is run, the shell variable @samp{Makefile}
2363will hold the name of the @file{Makefile}, including the appropriate
2364directory component.
2365
2366Like an autoconf generated @file{configure} script, Cygnus configure
2367will create a file named @file{config.status} which, when run, will
2368automatically recreate the configuration.  The @file{config.status} file
2369will simply execute the Cygnus configure script again with the
2370appropriate arguments.
2371
2372Any of the parts of @file{configure.in} may set the shell variables
2373@samp{files} and @samp{links}.  Cygnus configure will set up symlinks
2374from the names in @samp{links} to the files named in @samp{files}.  This
2375is similar to the autoconf @samp{AC_LINK_FILES} macro.
2376
2377Finally, any of the parts of @file{configure.in} may set the shell
2378variable @samp{configdirs} to a set of subdirectories.  If it is set,
2379Cygnus configure will recursively run the configure process in each
2380subdirectory.  If the subdirectory uses Cygnus configure, it will
2381contain a @file{configure.in} file but no @file{configure} file, in
2382which case Cygnus configure will invoke itself recursively.  If the
2383subdirectory has a @file{configure} file, Cygnus configure assumes that
2384it is an autoconf generated @file{configure} script, and simply invokes
2385it directly.
2386
2387@node Cygnus Configure in C++ Libraries
2388@section Cygnus Configure in C++ Libraries
2389@cindex @file{libstdc++} configure
2390@cindex @file{libio} configure
2391@cindex @file{libg++} configure
2392
2393The C++ library configure system, written by Per Bothner, deserves
2394special mention.  It uses Cygnus configure, but it does feature testing
2395like that done by autoconf generated @file{configure} scripts.  This
2396approach is used in the libraries @file{libio}, @file{libstdc++}, and
2397@file{libg++}.
2398
2399Most of the @file{Makefile} information is written out by the shell
2400script @file{libio/config.shared}.  Each @file{configure.in} file sets
2401certain shell variables, and then invokes @file{config.shared} to create
2402two package @file{Makefile} fragments.  These fragments are then
2403incorporated into the resulting @file{Makefile} by the Cygnus configure
2404script.
2405
2406The file @file{_G_config.h} is created in the @file{libio} object
2407directory by running the shell script @file{libio/gen-params}.  This
2408shell script uses feature tests to define macros and typedefs in
2409@file{_G_config.h}.
2410
2411@node Multilibs
2412@chapter Multilibs
2413@cindex multilibs
2414
2415For some targets gcc may have different processor requirements depending
2416upon command line options.  An obvious example is the
2417@samp{-msoft-float} option supported on several processors.  This option
2418means that the floating point registers are not available, which means
2419that floating point operations must be done by calling an emulation
2420subroutine rather than by using machine instructions.
2421
2422For such options, gcc is often configured to compile target libraries
2423twice: once with @samp{-msoft-float} and once without.  When gcc
2424compiles target libraries more than once, the resulting libraries are
2425called @dfn{multilibs}.
2426
2427Multilibs are not really part of the GNU configure and build system, but
2428we discuss them here since they require support in the @file{configure}
2429scripts and @file{Makefile}s used for target libraries.
2430
2431@menu
2432* Multilibs in gcc::		        Multilibs in gcc.
2433* Multilibs in Target Libraries::	Multilibs in Target Libraries.
2434@end menu
2435
2436@node Multilibs in gcc
2437@section Multilibs in gcc
2438
2439In gcc, multilibs are defined by setting the variable
2440@samp{MULTILIB_OPTIONS} in the target @file{Makefile} fragment.  Several
2441other @samp{MULTILIB} variables may also be defined there.  @xref{Target
2442Fragment, , The Target Makefile Fragment, gcc, Using and Porting GNU
2443CC}.
2444
2445If you have built gcc, you can see what multilibs it uses by running it
2446with the @samp{-print-multi-lib} option.  The output @samp{.;} means
2447that no multilibs are used.  In general, the output is a sequence of
2448lines, one per multilib.  The first part of each line, up to the
2449@samp{;}, is the name of the multilib directory.  The second part is a
2450list of compiler options separated by @samp{@@} characters.
2451
2452Multilibs are built in a tree of directories.  The top of the tree,
2453represented by @samp{.} in the list of multilib directories, is the
2454default library to use when no special compiler options are used.  The
2455subdirectories of the tree hold versions of the library to use when
2456particular compiler options are used.
2457
2458@node Multilibs in Target Libraries
2459@section Multilibs in Target Libraries
2460
2461The target libraries in the Cygnus tree are automatically built with
2462multilibs.  That means that each library is built multiple times.
2463
2464This default is set in the top level @file{configure.in} file, by adding
2465@samp{--enable-multilib} to the list of arguments passed to configure
2466when it is run for the target libraries (@pxref{Host and Target
2467Libraries}).
2468
2469Each target library uses the shell script @file{config-ml.in}, written
2470by Doug Evans, to prepare to build target libraries.  This shell script
2471is invoked after the @file{Makefile} has been created by the
2472@file{configure} script.  If multilibs are not enabled, it does nothing,
2473otherwise it modifies the @file{Makefile} to support multilibs.
2474
2475The @file{config-ml.in} script makes one copy of the @file{Makefile} for
2476each multilib in the appropriate subdirectory.  When configuring in the
2477source directory (which is not recommended), it will build a symlink
2478tree of the sources in each subdirectory.
2479
2480The @file{config-ml.in} script sets several variables in the various
2481@file{Makefile}s.  The @file{Makefile.in} must have definitions for
2482these variables already; @file{config-ml.in} simply changes the existing
2483values.  The @file{Makefile} should use default values for these
2484variables which will do the right thing in the subdirectories.
2485
2486@table @samp
2487@item MULTISRCTOP
2488@file{config-ml.in} will set this to a sequence of @samp{../} strings,
2489where the number of strings is the number of multilib levels in the
2490source tree.  The default value should be the empty string.
2491@item MULTIBUILDTOP
2492@file{config-ml.in} will set this to a sequence of @samp{../} strings,
2493where the number of strings is number of multilib levels in the object
2494directory.  The default value should be the empty string.  This will
2495differ from @samp{MULTISRCTOP} when configuring in the source tree
2496(which is not recommended).
2497@item MULTIDIRS
2498In the top level @file{Makefile} only, @file{config-ml.in} will set this
2499to the list of multilib subdirectories.  The default value should be the
2500empty string.
2501@item MULTISUBDIR
2502@file{config-ml.in} will set this to the installed subdirectory name to
2503use for this subdirectory, with a leading @samp{/}.  The default value
2504shold be the empty string.
2505@item MULTIDO
2506@itemx MULTICLEAN
2507In the top level @file{Makefile} only, @file{config-ml.in} will set
2508these variables to commands to use when doing a recursive make.  These
2509variables should both default to the string @samp{true}, so that by
2510default nothing happens.
2511@end table
2512
2513All references to the parent of the source directory should use the
2514variable @samp{MULTISRCTOP}.  Instead of writing @samp{$(srcdir)/..},
2515you must write @samp{$(srcdir)/$(MULTISRCTOP)..}.
2516
2517Similarly, references to the parent of the object directory should use
2518the variable @samp{MULTIBUILDTOP}.
2519
2520In the installation target, the libraries should be installed in the
2521subdirectory @samp{MULTISUBDIR}.  Instead of installing
2522@samp{$(libdir)/libfoo.a}, install
2523@samp{$(libdir)$(MULTISUBDIR)/libfoo.a}.
2524
2525The @file{config-ml.in} script also modifies the top level
2526@file{Makefile} to add @samp{multi-do} and @samp{multi-clean} targets
2527which are used when building multilibs.
2528
2529The default target of the @file{Makefile} should include the following
2530command:
2531@smallexample
2532@@$(MULTIDO) $(FLAGS_TO_PASS) DO=all multi-do
2533@end smallexample
2534@noindent
2535This assumes that @samp{$(FLAGS_TO_PASS)} is defined as a set of
2536variables to pass to a recursive invocation of @samp{make}.  This will
2537build all the multilibs.  Note that the default value of @samp{MULTIDO}
2538is @samp{true}, so by default this command will do nothing.  It will
2539only do something in the top level @file{Makefile} if multilibs were
2540enabled.
2541
2542The @samp{install} target of the @file{Makefile} should include the
2543following command:
2544@smallexample
2545@@$(MULTIDO) $(FLAGS_TO_PASS) DO=install multi-do
2546@end smallexample
2547
2548In general, any operation, other than clean, which should be performed
2549on all the multilibs should use a @samp{$(MULTIDO)} line, setting the
2550variable @samp{DO} to the target of each recursive call to @samp{make}.
2551
2552The @samp{clean} targets (@samp{clean}, @samp{mostlyclean}, etc.) should
2553use @samp{$(MULTICLEAN)}.  For example, the @samp{clean} target should
2554do this:
2555@smallexample
2556@@$(MULTICLEAN) DO=clean multi-clean
2557@end smallexample
2558
2559@node FAQ
2560@chapter Frequently Asked Questions
2561
2562@table @asis
2563@item Which do I run first, @samp{autoconf} or @samp{automake}?
2564Except when you first add autoconf or automake support to a package, you
2565shouldn't run either by hand.  Instead, configure with the
2566@samp{--enable-maintainer-mode} option, and let @samp{make} take care of
2567it.
2568
2569@cindex undefined macros
2570@item @samp{autoconf} says something about undefined macros.
2571This means that you have macros in your @file{configure.in} which are
2572not defined by @samp{autoconf}.  You may be using an old version of
2573@samp{autoconf}; try building and installing a newer one.  Make sure the
2574newly installled @samp{autoconf} is first on your @samp{PATH}.  Also,
2575see the next question.
2576
2577@cindex @samp{CY_GNU_GETTEXT} in @file{configure}
2578@cindex @samp{AM_PROG_LIBTOOL} in @file{configure}
2579@item My @file{configure} script has stuff like @samp{CY_GNU_GETTEXT} in it.
2580This means that you have macros in your @file{configure.in} which should
2581be defined in your @file{aclocal.m4} file, but aren't.  This usually
2582means that @samp{aclocal} was not able to appropriate definitions of the
2583macros.  Make sure that you have installed all the packages you need.
2584In particular, make sure that you have installed libtool (this is where
2585@samp{AM_PROG_LIBTOOL} is defined) and gettext (this is where
2586@samp{CY_GNU_GETTEXT} is defined, at least in the Cygnus version of
2587gettext).
2588
2589@cindex @file{Makefile}, garbage characters
2590@item My @file{Makefile} has @samp{@@} characters in it.
2591This may mean that you tried to use an autoconf substitution in your
2592@file{Makefile.in} without adding the appropriate @samp{AC_SUBST} call
2593to your @file{configure} script.  Or it may just mean that you need to
2594rebuild @file{Makefile} in your build directory.  To rebuild
2595@file{Makefile} from @file{Makefile.in}, run the shell script
2596@file{config.status} with no arguments.  If you need to force
2597@file{configure} to run again, first run @samp{config.status --recheck}.
2598These runs are normally done automatically by @file{Makefile} targets,
2599but if your @file{Makefile} has gotten messed up you'll need to help
2600them along.
2601
2602@cindex @samp{config.status --recheck}
2603@item Why do I have to run both @samp{config.status --recheck} and @samp{config.status}?
2604Normally, you don't; they will be run automatically by @file{Makefile}
2605targets.  If you do need to run them, use @samp{config.status --recheck}
2606to run the @file{configure} script again with the same arguments as the
2607first time you ran it.  Use @samp{config.status} (with no arguments) to
2608regenerate all files (@file{Makefile}, @file{config.h}, etc.) based on
2609the results of the configure script.  The two cases are separate because
2610it isn't always necessary to regenerate all the files after running
2611@samp{config.status --recheck}.  The @file{Makefile} targets generated
2612by automake will use the environment variables @samp{CONFIG_FILES} and
2613@samp{CONFIG_HEADERS} to only regenerate files as they are needed.
2614
2615@item What is the Cygnus tree?
2616The Cygnus tree is used for various packages including gdb, the GNU
2617binutils, and egcs.  It is also, of course, used for Cygnus releases.
2618It is the build system which was developed at Cygnus, using the Cygnus
2619configure script.  It permits building many different packages with a
2620single configure and make.  The configure scripts in the tree are being
2621converted to autoconf, but the general build structure remains intact.
2622
2623@item Why do I have to keep rebuilding and reinstalling the tools?
2624I know, it's a pain.  Unfortunately, there are bugs in the tools
2625themselves which need to be fixed, and each time that happens everybody
2626who uses the tools need to reinstall new versions of them.  I don't know
2627if there is going to be a clever fix until the tools stabilize.
2628
2629@item Why not just have a Cygnus tree @samp{make} target to update the tools?
2630The tools unfortunately need to be installed before they can be used.
2631That means that they must be built using an appropriate prefix, and it
2632seems unwise to assume that every configuration uses an appropriate
2633prefix.  It might be possible to make them work in place, or it might be
2634possible to install them in some subdirectory; so far these approaches
2635have not been implemented.
2636@end table
2637
2638@node Index
2639@unnumbered Index
2640
2641@printindex cp
2642
2643@contents
2644@bye
2645