2006-12-19 Paolo Bonzini <bonzini@gnu.org>
* configure.texi: Fix botched commit.
This commit is contained in:
		| @@ -1,3 +1,7 @@ | |||||||
|  | 2006-12-19  Paolo Bonzini  <bonzini@gnu.org> | ||||||
|  |  | ||||||
|  | 	* configure.texi: Fix botched commit. | ||||||
|  |  | ||||||
| 2006-05-31  Daniel Jacobowitz  <dan@codesourcery.com> | 2006-05-31  Daniel Jacobowitz  <dan@codesourcery.com> | ||||||
|  |  | ||||||
| 	* texi2pod.pl: Correct handling of absolute @include. | 	* texi2pod.pl: Correct handling of absolute @include. | ||||||
|   | |||||||
| @@ -300,6 +300,12 @@ machine dependent files such as executables. | |||||||
| The default for @samp{--prefix} is @file{/usr/local}.  The default for | The default for @samp{--prefix} is @file{/usr/local}.  The default for | ||||||
| @samp{--exec-prefix} is the value used for @samp{--prefix}. | @samp{--exec-prefix} is the value used for @samp{--prefix}. | ||||||
|  |  | ||||||
|  | The convention used in Cygnus releases is to use a @samp{--prefix} | ||||||
|  | option of @file{/usr/cygnus/@var{release}}, where @var{release} is the | ||||||
|  | name of the release, and to use a @samp{--exec-prefix} option of | ||||||
|  | @file{/usr/cygnus/@var{release}/H-@var{host}}, where @var{host} is the | ||||||
|  | configuration name of the host system (@pxref{Configuration Names}). | ||||||
|  |  | ||||||
| Do not use either the source or the object directory as the installation | Do not use either the source or the object directory as the installation | ||||||
| directory.  That will just lead to confusion. | directory.  That will just lead to confusion. | ||||||
|  |  | ||||||
| @@ -1670,9 +1676,12 @@ the autoconf documentation for @samp{AC_ARG_PROGRAM}. | |||||||
| @section Cross Tools in the Cygnus Tree | @section Cross Tools in the Cygnus Tree | ||||||
|  |  | ||||||
| The Cygnus tree is used for various packages including gdb, the GNU | The Cygnus tree is used for various packages including gdb, the GNU | ||||||
| binutils, and egcs.  In the Cygnus tree, the top level @file{Makefile.in} | binutils, and egcs.  It is also, of course, used for Cygnus releases. | ||||||
|  |  | ||||||
|  | In the Cygnus tree, the top level @file{configure} script uses the old | ||||||
|  | Cygnus configure system, not autoconf.  The top level @file{Makefile.in} | ||||||
| is written to build packages based on what is in the source tree, and | is written to build packages based on what is in the source tree, and | ||||||
| supports building and bootstrapping a large number of tools in a single | supports building a large number of tools in a single | ||||||
| @samp{configure}/@samp{make} step. | @samp{configure}/@samp{make} step. | ||||||
|  |  | ||||||
| The Cygnus tree may be configured with a @samp{--target} option.  The | The Cygnus tree may be configured with a @samp{--target} option.  The | ||||||
| @@ -2123,26 +2132,27 @@ lines with a trailing backslash as a continuation character). | |||||||
| @example | @example | ||||||
| mkdir linux-x-cygwin32 | mkdir linux-x-cygwin32 | ||||||
| cd linux-x-cygwin32 | cd linux-x-cygwin32 | ||||||
| @var{srcdir}/configure --target i386-cygwin32 --prefix=@var{installdir} | @var{srcdir}/configure --target i386-cygwin32 --prefix=@var{installdir} \ | ||||||
|  |   --exec-prefix=@var{installdir}/H-i386-linux | ||||||
| make | make | ||||||
| make install | make install | ||||||
| cd .. | cd .. | ||||||
| mkdir linux-x-mips-elf | mkdir linux-x-mips-elf | ||||||
| cd linux-x-mips-elf | cd linux-x-mips-elf | ||||||
| @var{srcdir}/configure --target mips-elf --prefix=@var{installdir} | @var{srcdir}/configure --target mips-elf --prefix=@var{installdir} \ | ||||||
|  |   --exec-prefix=@var{installdir}/H-i386-linux | ||||||
| make | make | ||||||
| make install | make install | ||||||
| cd .. | cd .. | ||||||
| mkdir cygwin32-x-mips-elf | mkdir cygwin32-x-mips-elf | ||||||
| cd cygwin32-x-mips-elf | cd cygwin32-x-mips-elf | ||||||
| @var{srcdir}/configure --build=i386-linux-gnu --host=i386-cygwin32 \ | @var{srcdir}/configure --build=i386-linux-gnu --host=i386-cygwin32 \ | ||||||
|   --target=mips-elf --prefix=@var{wininstalldir} |   --target=mips-elf --prefix=@var{wininstalldir} \ | ||||||
|  |   --exec-prefix=@var{wininstalldir}/H-i386-cygwin32 | ||||||
| make | make | ||||||
| make install | make install | ||||||
| @end example | @end example | ||||||
|  |  | ||||||
| Note that we specify a different prefix in the last build, because this |  | ||||||
| does not contain Linux executables, but rather Windows executables. |  | ||||||
| You would then copy the contents of @var{wininstalldir} over to the | You would then copy the contents of @var{wininstalldir} over to the | ||||||
| Windows machine, and run the resulting programs. | Windows machine, and run the resulting programs. | ||||||
|  |  | ||||||
| @@ -2253,63 +2263,152 @@ crucial. | |||||||
| The gcc @file{Makefile.in} shows a complex situation in which certain | The gcc @file{Makefile.in} shows a complex situation in which certain | ||||||
| files, such as @file{rtl.c}, must be compiled into both subsidiary | files, such as @file{rtl.c}, must be compiled into both subsidiary | ||||||
| programs run on the build system and into the final program.  This | programs run on the build system and into the final program.  This | ||||||
| approach may be of interest for advanced build system hackers. | approach may be of interest for advanced build system hackers.  Note | ||||||
|  | that the build system compiler is rather confusingly called | ||||||
|  | @samp{HOST_CC}. | ||||||
|  |  | ||||||
| @node Top level Configure | @node Cygnus Configure | ||||||
| @chapter Top level Configure | @chapter Cygnus Configure | ||||||
| @cindex top level configure | @cindex cygnus configure | ||||||
|  |  | ||||||
| The top level configure script detects the tools that are used in the | The Cygnus configure script predates autoconf.  All of its interesting | ||||||
| Cygnus tree.  This script is a rewrite of the Cygnus configure script, | features have been incorporated into autoconf.  No new programs should | ||||||
| which predated autoconf. | be written to use the Cygnus configure script. | ||||||
|  |  | ||||||
| The script includes all the logic to detect the host and target tools, | However, the Cygnus configure script is still used in a few places: at | ||||||
| and to customize the @file{Makefile} to support the special needs of | the top of the Cygnus tree and in a few target libraries in the Cygnus | ||||||
| some systems. | tree.  Until those uses have been replaced with autoconf, some brief | ||||||
|  | notes are appropriate here.  This is not complete documentation, but it | ||||||
|  | should be possible to use this as a guide while examining the scripts | ||||||
|  | themselves. | ||||||
|  |  | ||||||
| A particularly delicate point is finding the target tools--these include | @menu | ||||||
| the assembler, the linker, and the other @command{binutils} such as | * Cygnus Configure Basics::		Cygnus Configure Basics. | ||||||
| @command{nm} or @command{ar}.  Some of these need to be invoked by GCC; | * Cygnus Configure in C++ Libraries::	Cygnus Configure in C++ Libraries. | ||||||
| others, such as @command{objdump}, are necessary during configuration, in | @end menu | ||||||
| order to detect the set of features supported by the assembler and linker. |  | ||||||
|  |  | ||||||
| In general, the top level configure tries to follow these lines in order | @node Cygnus Configure Basics | ||||||
| to detect the target tools: | @section Cygnus Configure Basics | ||||||
|  |  | ||||||
| @table @itemize | Cygnus configure does not use any generated files; there is no program | ||||||
| @item try to detect a consistent set of tools | corresponding to @samp{autoconf}.  Instead, there is a single shell | ||||||
|  | script named @samp{configure} which may be found at the top of the | ||||||
|  | Cygnus tree.  This shell script was written by hand; it was not | ||||||
|  | generated by autoconf, and it is incorrect, and indeed harmful, to run | ||||||
|  | @samp{autoconf} in the top level of a Cygnus tree. | ||||||
|  |  | ||||||
| @item try to detect the same tools that the installed GCC will use | Cygnus configure works in a particular directory by examining the file | ||||||
| @end table | @file{configure.in} in that directory.  That file is broken into four | ||||||
|  | separate shell scripts. | ||||||
|  |  | ||||||
| To achieve the first goal, we use the same search criterion for all tools, | The first is the contents of @file{configure.in} up to a line that | ||||||
| even those that the compiler never invokes. | starts with @samp{# per-host:}.  This is the common part. | ||||||
|  |  | ||||||
| To achieve the second goal when the @samp{build} and @samp{host} systems | The second is the rest of @file{configure.in} up to a line that starts | ||||||
| are the same, we search the same directories that the installed compiler | with @samp{# per-target:}.  This is the per host part. | ||||||
| will search.  This is overridden if the assembler and linker are being |  | ||||||
| compiled together with GCC, because after installation GCC |  | ||||||
| will find the tools that were just compiled. |  | ||||||
|  |  | ||||||
| To achieve the second goal when cross compiling (the @samp{build} and | The third is the rest of @file{configure.in} up to a line that starts | ||||||
| the @samp{host} systems are different, we ask the installed GCC for the | with @samp{# post-target:}.  This is the per target part. | ||||||
| name of the tool it uses.  This is because the only good choice for a |  | ||||||
| compiler is the same GCC version that is being installed (@pxref{Cross |  | ||||||
| Cygnus CCross: Building a Cross Program}), and we assume that on the |  | ||||||
| host system we'll have not only the same GCC version, but also the same |  | ||||||
| binutils version. |  | ||||||
|  |  | ||||||
| The location of the target tools can also be specified using the | The fourth is the remainder of @file{configure.in}.  This is the post | ||||||
| @option{--with-build-time-tools} option to the top level configure | target part. | ||||||
|  |  | ||||||
|  | If any of these comment lines are missing, the corresponding shell | ||||||
|  | script is empty. | ||||||
|  |  | ||||||
|  | Cygnus configure will first execute the common part.  This must set the | ||||||
|  | shell variable @samp{srctrigger} to the name of a source file, to | ||||||
|  | confirm that Cygnus configure is looking at the right directory.  This | ||||||
|  | may set the shell variables @samp{package_makefile_frag} and | ||||||
|  | @samp{package_makefile_rules_frag}. | ||||||
|  |  | ||||||
|  | Cygnus configure will next set the @samp{build} and @samp{host} shell | ||||||
|  | variables, and execute the per host part.  This may set the shell | ||||||
|  | variable @samp{host_makefile_frag}. | ||||||
|  |  | ||||||
|  | Cygnus configure will next set the @samp{target} variable, and execute | ||||||
|  | the per target part.  This may set the shell variable | ||||||
|  | @samp{target_makefile_frag}. | ||||||
|  |  | ||||||
|  | Any of these scripts may set the @samp{subdirs} shell variable.  This | ||||||
|  | variable is a list of subdirectories where a @file{Makefile.in} file may | ||||||
|  | be found.  Cygnus configure will automatically look for a | ||||||
|  | @file{Makefile.in} file in the current directory.  The @samp{subdirs} | ||||||
|  | shell variable is not normally used, and I believe that the only | ||||||
|  | directory which uses it at present is @file{newlib}. | ||||||
|  |  | ||||||
|  | For each @file{Makefile.in}, Cygnus configure will automatically create | ||||||
|  | a @file{Makefile} by adding definitions for @samp{make} variables such | ||||||
|  | as @samp{host} and @samp{target}, and automatically editing the values | ||||||
|  | of @samp{make} variables such as @samp{prefix} if they are present. | ||||||
|  |  | ||||||
|  | Also, if any of the @samp{makefile_frag} shell variables are set, Cygnus | ||||||
|  | configure will interpret them as file names relative to either the | ||||||
|  | working directory or the source directory, and will read the contents of | ||||||
|  | the file into the generated @file{Makefile}.  The file contents will be | ||||||
|  | read in after the first line in @file{Makefile.in} which starts with | ||||||
|  | @samp{####}. | ||||||
|  |  | ||||||
|  | These @file{Makefile} fragments are used to customize behaviour for a | ||||||
|  | particular host or target.  They serve to select particular files to | ||||||
|  | compile, and to define particular preprocessor macros by providing | ||||||
|  | values for @samp{make} variables which are then used during compilation. | ||||||
|  | Cygnus configure, unlike autoconf, normally does not do feature tests, | ||||||
|  | and normally requires support to be added manually for each new host. | ||||||
|  |  | ||||||
|  | The @file{Makefile} fragment support is similar to the autoconf | ||||||
|  | @samp{AC_SUBST_FILE} macro. | ||||||
|  |  | ||||||
|  | After creating each @file{Makefile}, the post target script will be run | ||||||
|  | (i.e., it may be run several times).  This script may further customize | ||||||
|  | the @file{Makefile}.  When it is run, the shell variable @samp{Makefile} | ||||||
|  | will hold the name of the @file{Makefile}, including the appropriate | ||||||
|  | directory component. | ||||||
|  |  | ||||||
|  | Like an autoconf generated @file{configure} script, Cygnus configure | ||||||
|  | will create a file named @file{config.status} which, when run, will | ||||||
|  | automatically recreate the configuration.  The @file{config.status} file | ||||||
|  | will simply execute the Cygnus configure script again with the | ||||||
|  | appropriate arguments. | ||||||
|  |  | ||||||
|  | Any of the parts of @file{configure.in} may set the shell variables | ||||||
|  | @samp{files} and @samp{links}.  Cygnus configure will set up symlinks | ||||||
|  | from the names in @samp{links} to the files named in @samp{files}.  This | ||||||
|  | is similar to the autoconf @samp{AC_LINK_FILES} macro. | ||||||
|  |  | ||||||
|  | Finally, any of the parts of @file{configure.in} may set the shell | ||||||
|  | variable @samp{configdirs} to a set of subdirectories.  If it is set, | ||||||
|  | Cygnus configure will recursively run the configure process in each | ||||||
|  | subdirectory.  If the subdirectory uses Cygnus configure, it will | ||||||
|  | contain a @file{configure.in} file but no @file{configure} file, in | ||||||
|  | which case Cygnus configure will invoke itself recursively.  If the | ||||||
|  | subdirectory has a @file{configure} file, Cygnus configure assumes that | ||||||
|  | it is an autoconf generated @file{configure} script, and simply invokes | ||||||
|  | it directly. | ||||||
|  |  | ||||||
|  | @node Cygnus Configure in C++ Libraries | ||||||
|  | @section Cygnus Configure in C++ Libraries | ||||||
|  | @cindex @file{libstdc++} configure | ||||||
|  | @cindex @file{libio} configure | ||||||
|  | @cindex @file{libg++} configure | ||||||
|  |  | ||||||
|  | The C++ library configure system, written by Per Bothner, deserves | ||||||
|  | special mention.  It uses Cygnus configure, but it does feature testing | ||||||
|  | like that done by autoconf generated @file{configure} scripts.  This | ||||||
|  | approach is used in the libraries @file{libio}, @file{libstdc++}, and | ||||||
|  | @file{libg++}. | ||||||
|  |  | ||||||
|  | Most of the @file{Makefile} information is written out by the shell | ||||||
|  | script @file{libio/config.shared}.  Each @file{configure.in} file sets | ||||||
|  | certain shell variables, and then invokes @file{config.shared} to create | ||||||
|  | two package @file{Makefile} fragments.  These fragments are then | ||||||
|  | incorporated into the resulting @file{Makefile} by the Cygnus configure | ||||||
| script. | script. | ||||||
|  |  | ||||||
| If no target-specific tools are found, the top level configure script | The file @file{_G_config.h} is created in the @file{libio} object | ||||||
| will try to use the host tools if suitable. | directory by running the shell script @file{libio/gen-params}.  This | ||||||
|  | shell script uses feature tests to define macros and typedefs in | ||||||
| The script and the accompanying Makefile support building programs | @file{_G_config.h}. | ||||||
| and libraries for either the build, the host or the target system. |  | ||||||
| The target libraries, however, need to help in order to support |  | ||||||
| @samp{multilibs}. |  | ||||||
|  |  | ||||||
| @node Multilibs | @node Multilibs | ||||||
| @chapter Multilibs | @chapter Multilibs | ||||||
| @@ -2329,9 +2428,7 @@ called @dfn{multilibs}. | |||||||
|  |  | ||||||
| Multilibs are not really part of the GNU configure and build system, but | Multilibs are not really part of the GNU configure and build system, but | ||||||
| we discuss them here since they require support in the @file{configure} | we discuss them here since they require support in the @file{configure} | ||||||
| scripts and @file{Makefile}s used for target libraries.  It is expected | scripts and @file{Makefile}s used for target libraries. | ||||||
| that in the future the toplevel will coordinate the building of the |  | ||||||
| various multilibs, but this has not been implemented yet. |  | ||||||
|  |  | ||||||
| @menu | @menu | ||||||
| * Multilibs in gcc::		        Multilibs in gcc. | * Multilibs in gcc::		        Multilibs in gcc. | ||||||
| @@ -2479,16 +2576,17 @@ not defined by @samp{autoconf}.  You may be using an old version of | |||||||
| newly installled @samp{autoconf} is first on your @samp{PATH}.  Also, | newly installled @samp{autoconf} is first on your @samp{PATH}.  Also, | ||||||
| see the next question. | see the next question. | ||||||
|  |  | ||||||
| @cindex @samp{AM_GNU_GETTEXT} in @file{configure} | @cindex @samp{CY_GNU_GETTEXT} in @file{configure} | ||||||
| @cindex @samp{AM_PROG_LIBTOOL} in @file{configure} | @cindex @samp{AM_PROG_LIBTOOL} in @file{configure} | ||||||
| @item My @file{configure} script has stuff like @samp{AM_GNU_GETTEXT} in it. | @item My @file{configure} script has stuff like @samp{CY_GNU_GETTEXT} in it. | ||||||
| This means that you have macros in your @file{configure.in} which should | This means that you have macros in your @file{configure.in} which should | ||||||
| be defined in your @file{aclocal.m4} file, but aren't.  This usually | be defined in your @file{aclocal.m4} file, but aren't.  This usually | ||||||
| means that @samp{aclocal} was not able to appropriate definitions of the | means that @samp{aclocal} was not able to appropriate definitions of the | ||||||
| macros.  Make sure that you have installed all the packages you need. | macros.  Make sure that you have installed all the packages you need. | ||||||
| In particular, make sure that you have installed libtool (this is where | In particular, make sure that you have installed libtool (this is where | ||||||
| @samp{AM_PROG_LIBTOOL} is defined) and gettext (this is where | @samp{AM_PROG_LIBTOOL} is defined) and gettext (this is where | ||||||
| @samp{AM_GNU_GETTEXT} is defined). | @samp{CY_GNU_GETTEXT} is defined, at least in the Cygnus version of | ||||||
|  | gettext). | ||||||
|  |  | ||||||
| @cindex @file{Makefile}, garbage characters | @cindex @file{Makefile}, garbage characters | ||||||
| @item My @file{Makefile} has @samp{@@} characters in it. | @item My @file{Makefile} has @samp{@@} characters in it. | ||||||
| @@ -2513,16 +2611,16 @@ regenerate all files (@file{Makefile}, @file{config.h}, etc.) based on | |||||||
| the results of the configure script.  The two cases are separate because | the results of the configure script.  The two cases are separate because | ||||||
| it isn't always necessary to regenerate all the files after running | it isn't always necessary to regenerate all the files after running | ||||||
| @samp{config.status --recheck}.  The @file{Makefile} targets generated | @samp{config.status --recheck}.  The @file{Makefile} targets generated | ||||||
| by automake will use command-line arguments to only regenerate files | by automake will use the environment variables @samp{CONFIG_FILES} and | ||||||
| as they are needed. | @samp{CONFIG_HEADERS} to only regenerate files as they are needed. | ||||||
|  |  | ||||||
| @item What is the Cygnus tree? | @item What is the Cygnus tree? | ||||||
| The Cygnus tree is used for various packages including gdb, the GNU | The Cygnus tree is used for various packages including gdb, the GNU | ||||||
| binutils, and egcs.  It is a derivative of the build system which was | binutils, and egcs.  It is also, of course, used for Cygnus releases. | ||||||
| developed at Cygnus, using the Cygnus configure script.  It permits | It is the build system which was developed at Cygnus, using the Cygnus | ||||||
| building and bootstrapping many different packages with a single configure | configure script.  It permits building many different packages with a | ||||||
| and make.  The configure scripts in the tree have been converted to | single configure and make.  The configure scripts in the tree are being | ||||||
| autoconf, but the general build structure remains intact. | converted to autoconf, but the general build structure remains intact. | ||||||
|  |  | ||||||
| @item Why do I have to keep rebuilding and reinstalling the tools? | @item Why do I have to keep rebuilding and reinstalling the tools? | ||||||
| I know, it's a pain.  Unfortunately, there are bugs in the tools | I know, it's a pain.  Unfortunately, there are bugs in the tools | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user