+2000-06-30 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ Re-enable the old behavior of --host and --build.
+
+ * acgeneral.m4 (build_alias): Set to host_alias if --build is not
+ given but --host is, and enable cross-compile auto-detection. If
+ both are, and are different, enable cross compilation.
+ (AC_CANONICAL_HOST): Adjust help message.
+ (cross_compiling): Enclose in quotes when testing.
+ * aclang.m4 (_AC_LANG_COMPILER_WORKS): If cross_compiling is
+ maybe, set it to yes or no depending on the result of the
+ execution test.
+ * doc/autoconf.texi: Document the change.
+ * doc/install.texi: Likewise.
+
2000-06-27 Jim Meyering <meyering@lucent.com>
* acspecific.m4 (_AC_LIBOBJ_GETLOADAVG): Put quotes around use of
ac_init_help=short ;;
-host | --host | --hos | --ho)
- cross_compiling=yes
ac_prev=host_alias ;;
-host=* | --host=* | --hos=* | --ho=*)
- cross_compiling=yes
host_alias=$ac_optarg ;;
-includedir | --includedir | --includedi | --included | --include \
export $ac_envvar ;;
*)
+ # FIXME: should be removed in autoconf 3.0.
AC_MSG_WARN([you should use --build, --host, --target])
expr "x$ac_option" : "[.*[^a-zA-Z0-9.]]" >/dev/null &&
AC_MSG_WARN([invalid host type: $ac_option])
host=$host_alias
target=$target_alias
+# FIXME: should be removed in autoconf 3.0.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ AC_MSG_WARN([Did you mean --build instead of --host? Assuming you did.])
+ AC_MSG_WARN([If not, please specify both --build and --host.])
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
ac_tool_prefix=
test -n "$host_alias" && ac_tool_prefix=$host_alias-
# configure --host=HOST --target=TARGET --build=BUILD
#
# The rules are:
-# 1. Build defaults to the current host, as determined by config.guess.
+# 1. Build defaults to the current platform, as determined by config.guess.
# 2. Host defaults to build.
# 3. Target defaults to host.
AC_DEFUN_ONCE([AC_CANONICAL_HOST],
[AC_REQUIRE([AC_CANONICAL_BUILD])dnl
AC_DIVERT([HELP_CANON],
-[[ --host=HOST cross-compile to build programs running on HOST [BUILD]]])dnl
+[[ --host=HOST build programs to run on HOST [BUILD]]])dnl
AC_CACHE_CHECK([host system type], [ac_cv_host],
[ac_cv_host_alias=$host_alias
test -z "$ac_cv_host_alias" &&
# [ACTION-IF-CROSS-COMPILING])
# --------------------------------------------------------
AC_DEFUN([AC_TRY_RUN],
-[if test $cross_compiling = yes; then
+[if test "$cross_compiling" = yes; then
m4_default([$4],
[AC_DIAGNOSE([cross],
[AC_TRY_RUN called without default to allow cross compiling])dnl
[AC_DIAGNOSE([cross],
[Cannot check for file existence when cross compiling])dnl
AC_VAR_PUSHDEF([ac_File], [ac_cv_file_$1])dnl
-dnl FIXME: why was there this line? AC_REQUIRE([AC_PROG_CC])dnl
AC_CACHE_CHECK([for $1], ac_File,
-[test $cross_compiling = yes &&
+[test "$cross_compiling" = yes &&
AC_MSG_ERROR([Cannot check for file existence when cross compiling])
-if test -r "[$1]"; then
+if test -r "$1"; then
AC_VAR_SET(ac_File, yes)
else
AC_VAR_SET(ac_File, no)
[AC_MSG_CHECKING([whether the _AC_LANG compiler works])
AC_LINK_IFELSE([AC_LANG_PROGRAM()],
[# If not cross compiling, check that we can run a simple program.
-if test $cross_compiling != yes; then
- if AC_TRY_COMMAND(./conftest); then :; else
+if test "$cross_compiling" != yes; then
+ if AC_TRY_COMMAND(./conftest); then
+ cross_compiling=no
+ else
AC_MSG_RESULT(no)
- AC_MSG_ERROR([cannot run _AC_LANG compiled programs.
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ AC_MSG_ERROR([cannot run _AC_LANG compiled programs.
To enable cross compilation, use `--host'.])
+ fi
fi
fi
AC_MSG_RESULT(yes)],
Alternately, the user can specify the system type with command line
arguments to @code{configure}. Doing so is necessary when
cross-compiling. In the most complex case of cross-compiling, three
-system types are involved. The options to specify them are:
+system types are involved. The options to specify them are@footnote{For
+backward compatibility, @code{configure} will accept a system type as an
+option by itself. Such an option will override the defaults for build,
+host and target system types. The following configure statement will
+configure a cross toolchain that will run on NetBSD/alpha but generate
+code for GNU Hurd/sparc, which is also the build platform.
+
+@example
+./configure --host=alpha-netbsd sparc-gnu
+@end example
+}:
@table @option
@item --build=@var{build-type}
the type of system on which the package is being configured and
-compiled (rarely needed).
+compiled.
@item --host=@var{host-type}
@ovindex cross_compiling
-the type of system on which the package will run. When this option is
-specified, @command{configure} enters the cross compilation mode
-(@code{cross_compiling} is set @samp{yes} instead of @samp{no}), i.e.,
-it can compile and link, but cannot run compiled programs to check the
-host system features.
+the type of system on which the package will run.
@item --target=@var{target-type}
the type of system for which any compiler tools in the package will
-produce code (rarely needed).
+produce code (rarely needed). By default, it is the same as host.
@end table
-By default, the build system type is guessed (by @code{config.guess}),
-the host system is the build system, and the target is the host system.
+They all default to the result of running @code{config.guess}, unless
+you specify either @samp{--build} or @samp{--host}. In this case, the
+default becomes the system type you specified. If you specify both, and
+they're different, @code{configure} will enter cross compilation mode,
+so it won't run any tests that require execution.
-Using @option{--host=@var{host-type}} enables cross-compilation.
-line, e.g.,
+Hint: if you mean to override the result of @code{config.guess}, prefer
+@samp{--build} over @samp{--host}. In the future, @samp{--host} will
+not override the name of the build system type. Also, when you specify
+@samp{--host}, but not @samp{--build}, when @code{configure} performs
+the first compiler test, it will try to run an executable produced by
+the compiler. If the execution fails, it will enter cross compilation
+mode. Note, however, that it won't guess the build system type, since
+this may require running test programs. Moreover, by the time the
+compiler test is performed, it may be too late to modify the build
+system type: other tests may have already been performed. Therefore,
+whenever you specify @code{--host}, be sure to specify @code{--build}
+too.
@example
-./configure --host=m68k-coff
+./configure --build=i686-pc-linux-gnu --host=m68k-coff
@end example
@noindent
-but @code{configure} will fail with unexpected cross-compilers:
+will enter cross compilation mode, but @code{configure} will fail if it
+can't run the code generated by the specified compiler if you configure
+as follows:
@example
./configure CC=m68k-coff-gcc
@end example
@code{configure} recognizes short aliases for many system types; for
-example, @samp{decstation} can be given on the command line instead of
+example, @samp{decstation} can be used instead of
@samp{mips-dec-ultrix4.2}. @code{configure} runs a script called
@code{config.sub} to canonicalize system type aliases.
+
+
@node Canonicalizing, Using System Type, Specifying Names, Manual Configuration
@section Getting the Canonical System Type
If @samp{--host} was specified, then @code{host} is the
canonicalization of @code{host_alias} by @command{config.sub},
otherwise it defaults to @code{build}.
+
+For temporary backward-compatibility, when @samp{--host} is specified
+by @samp{--build} isn't, the build system will be assumed to be the
+same as @samp{--host}, and @samp{build_alias} will be set to that
+value. Eventually, this historically incorrect behavior will go away.
+
@end defmac
@defmac AC_CANONICAL_TARGET
automatically, but needs to determine by the type of host the package
will run on. Usually @code{configure} can figure that out, but if it
prints a message saying it cannot guess the host type, give it the
-@option{--host=@var{type}} option. @var{type} can either be a short
+@option{--build=@var{type}} option. @var{type} can either be a short
name for the system type, such as @samp{sun4}, or a canonical name which
has the form:
If @file{config.sub} isn't included in this package, then this package
doesn't need to know the host type.
-If you are building compiler tools for cross-compiling, you can also use
-the @option{--target=@var{type}} option to select the type of system they
-will produce code for.
+If you are @emph{building} compiler tools for cross-compiling, you can
+also use the @option{--target=@var{type}} option to select the type of
+system they will produce code for.
+
+If you want to @emph{use} a cross compiler, that generates code for a
+platform different from the build platform, you should specify the host
+platform (i.e., that on which the generated programs will eventually be
+run) with @option{--host=@var{type}}. In this case, you should also
+specify the build platform with @option{--build=@var{type}}, because, in
+this case, it may not be possible to guess the build platform (it
+sometimes involves compiling and running simple test programs, and this
+can't be done if the compiler is a cross compiler).
@node Sharing Defaults
@section Sharing Defaults
[AC_MSG_CHECKING([whether the _AC_LANG compiler works])
AC_LINK_IFELSE([AC_LANG_PROGRAM()],
[# If not cross compiling, check that we can run a simple program.
-if test $cross_compiling != yes; then
- if AC_TRY_COMMAND(./conftest); then :; else
+if test "$cross_compiling" != yes; then
+ if AC_TRY_COMMAND(./conftest); then
+ cross_compiling=no
+ else
AC_MSG_RESULT(no)
- AC_MSG_ERROR([cannot run _AC_LANG compiled programs.
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ AC_MSG_ERROR([cannot run _AC_LANG compiled programs.
To enable cross compilation, use `--host'.])
+ fi
fi
fi
AC_MSG_RESULT(yes)],
[AC_MSG_CHECKING([whether the _AC_LANG compiler works])
AC_LINK_IFELSE([AC_LANG_PROGRAM()],
[# If not cross compiling, check that we can run a simple program.
-if test $cross_compiling != yes; then
- if AC_TRY_COMMAND(./conftest); then :; else
+if test "$cross_compiling" != yes; then
+ if AC_TRY_COMMAND(./conftest); then
+ cross_compiling=no
+ else
AC_MSG_RESULT(no)
- AC_MSG_ERROR([cannot run _AC_LANG compiled programs.
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ AC_MSG_ERROR([cannot run _AC_LANG compiled programs.
To enable cross compilation, use `--host'.])
+ fi
fi
fi
AC_MSG_RESULT(yes)],
ac_init_help=short ;;
-host | --host | --hos | --ho)
- cross_compiling=yes
ac_prev=host_alias ;;
-host=* | --host=* | --hos=* | --ho=*)
- cross_compiling=yes
host_alias=$ac_optarg ;;
-includedir | --includedir | --includedi | --included | --include \
export $ac_envvar ;;
*)
+ # FIXME: should be removed in autoconf 3.0.
AC_MSG_WARN([you should use --build, --host, --target])
expr "x$ac_option" : "[.*[^a-zA-Z0-9.]]" >/dev/null &&
AC_MSG_WARN([invalid host type: $ac_option])
host=$host_alias
target=$target_alias
+# FIXME: should be removed in autoconf 3.0.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ AC_MSG_WARN([Did you mean --build instead of --host? Assuming you did.])
+ AC_MSG_WARN([If not, please specify both --build and --host.])
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
ac_tool_prefix=
test -n "$host_alias" && ac_tool_prefix=$host_alias-
# configure --host=HOST --target=TARGET --build=BUILD
#
# The rules are:
-# 1. Build defaults to the current host, as determined by config.guess.
+# 1. Build defaults to the current platform, as determined by config.guess.
# 2. Host defaults to build.
# 3. Target defaults to host.
AC_DEFUN_ONCE([AC_CANONICAL_HOST],
[AC_REQUIRE([AC_CANONICAL_BUILD])dnl
AC_DIVERT([HELP_CANON],
-[[ --host=HOST cross-compile to build programs running on HOST [BUILD]]])dnl
+[[ --host=HOST build programs to run on HOST [BUILD]]])dnl
AC_CACHE_CHECK([host system type], [ac_cv_host],
[ac_cv_host_alias=$host_alias
test -z "$ac_cv_host_alias" &&
# [ACTION-IF-CROSS-COMPILING])
# --------------------------------------------------------
AC_DEFUN([AC_TRY_RUN],
-[if test $cross_compiling = yes; then
+[if test "$cross_compiling" = yes; then
m4_default([$4],
[AC_DIAGNOSE([cross],
[AC_TRY_RUN called without default to allow cross compiling])dnl
[AC_DIAGNOSE([cross],
[Cannot check for file existence when cross compiling])dnl
AC_VAR_PUSHDEF([ac_File], [ac_cv_file_$1])dnl
-dnl FIXME: why was there this line? AC_REQUIRE([AC_PROG_CC])dnl
AC_CACHE_CHECK([for $1], ac_File,
-[test $cross_compiling = yes &&
+[test "$cross_compiling" = yes &&
AC_MSG_ERROR([Cannot check for file existence when cross compiling])
-if test -r "[$1]"; then
+if test -r "$1"; then
AC_VAR_SET(ac_File, yes)
else
AC_VAR_SET(ac_File, no)
[AC_MSG_CHECKING([whether the _AC_LANG compiler works])
AC_LINK_IFELSE([AC_LANG_PROGRAM()],
[# If not cross compiling, check that we can run a simple program.
-if test $cross_compiling != yes; then
- if AC_TRY_COMMAND(./conftest); then :; else
+if test "$cross_compiling" != yes; then
+ if AC_TRY_COMMAND(./conftest); then
+ cross_compiling=no
+ else
AC_MSG_RESULT(no)
- AC_MSG_ERROR([cannot run _AC_LANG compiled programs.
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ AC_MSG_ERROR([cannot run _AC_LANG compiled programs.
To enable cross compilation, use `--host'.])
+ fi
fi
fi
AC_MSG_RESULT(yes)],