PR81878: fix --disable-bootstrap --enable-languages=ada
authorAlexandre Oliva <oliva@adacore.com>
Tue, 20 Nov 2018 00:07:47 +0000 (00:07 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Tue, 20 Nov 2018 00:07:47 +0000 (00:07 +0000)
gnattools build machinery uses just-build xgcc and xg++ as $(CC) and
$(CXX) in native builds.  However, if C and C++ languages are not
enabled, it won't find them.  So, enable C and C++ if Ada is enabled.
Most of the time, this is probably no big deal: C is always enabled
anyway, and C++ is already enabled for bootstraps.

We need not enable those for cross builds, however.  At first I just
took the logic from gnattools/configure, but found it to be lacking:
it would use the just-built tools even in cross-back settings, whose
tools just built for the host would not run on the build machine.  So
I've narrowed down the test to rely on autoconf-detected cross-ness
(build->host only), but also to ensure that host matches build, and
that target matches host.

I've considered sourcing ada/config-lang.in from within
gnattools/configure, and testing lang_requires as set by it, so as to
avoid a duplication of tests that ought to remain in sync, but decided
it would be too fragile, as ada/config-lang.in does not expect srcdir
to refer to gnattools.

for  gcc/ada/ChangeLog

PR ada/81878
* gcc-interface/config-lang.in (lang_requires): Set to "c c++"
when gnattools wants it.

for  gnattools/ChangeLog

PR ada/81878
* configure.ac (default_gnattools_target): Do not mistake
just-built host tools as native in cross-back toolchains.
* configure: Rebuilt.

From-SVN: r266290

gcc/ada/ChangeLog
gcc/ada/gcc-interface/config-lang.in
gnattools/ChangeLog
gnattools/configure
gnattools/configure.ac

index 082fe5aaa45a021e0047a0259de451cbd1b85651..733bfe006e2a67ab2b005efcfdffd93806d6a1f6 100644 (file)
@@ -1,3 +1,9 @@
+2018-11-19  Alexandre Oliva <oliva@adacore.com>
+
+       PR ada/81878
+       * gcc-interface/config-lang.in (lang_requires): Set to "c c++"
+       when gnattools wants it.
+
 2018-11-19  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/cuintp.c (UI_From_gnu): Remove code for 32-bit hosts.
index 5dc77df282ce45ee335f0c5f681271fa338d5085..8eacf7bb870e36e30ac31643b633ffc5719dbd07 100644 (file)
@@ -34,6 +34,15 @@ gtfiles="\$(srcdir)/ada/gcc-interface/ada-tree.h \$(srcdir)/ada/gcc-interface/gi
 
 outputs="ada/gcc-interface/Makefile ada/Makefile"
 
+# gnattools native builds use both $(CC) and $(CXX), see PR81878.
+# This is not too onerous: C is always enabled anyway, and C++ is
+# always enabled for bootstrapping.  Use here the same logic used in
+# gnattools/configure to decide whether to use -native or -cross tools
+# for the build.
+if test "x$cross_compiling/$build/$host" = "xno/$host/$target" ; then
+  lang_requires="c c++"
+fi
+
 target_libs="target-libada"
 lang_dirs="gnattools"
 
index ca75cf0023473b68ef0ae19e149a05623a401bd1..144cce05964245035fd50f1e87eab877d3805003 100644 (file)
@@ -1,3 +1,10 @@
+2018-11-19  Alexandre Oliva <oliva@adacore.com>
+
+       PR ada/81878
+       * configure.ac (default_gnattools_target): Do not mistake
+       just-built host tools as native in cross-back toolchains.
+       * configure: Rebuilt.
+
 2018-11-06  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR ada/81878
index ccb512e39b6b4ae1e7960783e21ad48c51fec10e..c2d755b723a9b958c3d97b96393661d8f8487db9 100755 (executable)
@@ -584,6 +584,7 @@ PACKAGE_URL=
 ac_unique_file="Makefile.in"
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
+default_gnattools_target
 warn_cflags
 OBJEXT
 EXEEXT
@@ -595,7 +596,6 @@ CC
 ADA_CFLAGS
 EXTRA_GNATTOOLS
 TOOLS_TARGET_PAIRS
-default_gnattools_target
 LN_S
 target_noncanonical
 host_noncanonical
@@ -2050,15 +2050,6 @@ $as_echo "no, using $LN_S" >&6; }
 fi
 
 
-# Determine what to build for 'gnattools'
-if test $build = $target ; then
-  # Note that build=target is almost certainly the wrong test; FIXME
-  default_gnattools_target="gnattools-native"
-else
-  default_gnattools_target="gnattools-cross"
-fi
-
-
 # Target-specific stuff (defaults)
 TOOLS_TARGET_PAIRS=
 
@@ -2134,6 +2125,8 @@ esac
 # From user or toplevel makefile.
 
 
+# This is testing the CC passed from the toplevel Makefile, not the
+# one we will select below.
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2929,6 +2922,25 @@ if test "x$GCC" = "xyes"; then
 fi
 
 
+# Determine what to build for 'gnattools'.  Test after the above,
+# because testing for CC sets the final value of cross_compiling, even
+# if we end up using a different CC.  We want to build
+# gnattools-native when: (a) this is a native build, i.e.,
+# cross_compiling=no, otherwise we know we cannot run binaries
+# produced by the toolchain used for the build, not even the binaries
+# created within ../gcc/; (b) build and host are the same, otherwise
+# this is to be regarded as a cross build environment even if it seems
+# that we can run host binaries; (c) host and target are the same,
+# otherwise the tools in ../gcc/ generate code for a different
+# platform.  If you change this test, be sure to adjust
+# ../gcc/ada/gcc-interface/config-lang.in as well.
+if test "x$cross_compiling/$build/$host" = "xno/$host/$target" ; then
+  default_gnattools_target="gnattools-native"
+else
+  default_gnattools_target="gnattools-cross"
+fi
+
+
 # Output: create a Makefile.
 ac_config_files="$ac_config_files Makefile"
 
index 0a94224a53629c5425f48716be99302d4aedf7f8..40d015ce8b0df76859340abe4882b76153acf91c 100644 (file)
@@ -51,15 +51,6 @@ ACX_NONCANONICAL_TARGET
 # Need to pass this down for now :-P
 AC_PROG_LN_S
 
-# Determine what to build for 'gnattools'
-if test $build = $target ; then
-  # Note that build=target is almost certainly the wrong test; FIXME
-  default_gnattools_target="gnattools-native"
-else
-  default_gnattools_target="gnattools-cross"
-fi
-AC_SUBST([default_gnattools_target])
-
 # Target-specific stuff (defaults)
 TOOLS_TARGET_PAIRS=
 AC_SUBST(TOOLS_TARGET_PAIRS)
@@ -135,6 +126,8 @@ esac
 # From user or toplevel makefile.
 AC_SUBST(ADA_CFLAGS)
 
+# This is testing the CC passed from the toplevel Makefile, not the
+# one we will select below.
 AC_PROG_CC
 warn_cflags=
 if test "x$GCC" = "xyes"; then
@@ -142,6 +135,25 @@ if test "x$GCC" = "xyes"; then
 fi
 AC_SUBST(warn_cflags)
 
+# Determine what to build for 'gnattools'.  Test after the above,
+# because testing for CC sets the final value of cross_compiling, even
+# if we end up using a different CC.  We want to build
+# gnattools-native when: (a) this is a native build, i.e.,
+# cross_compiling=no, otherwise we know we cannot run binaries
+# produced by the toolchain used for the build, not even the binaries
+# created within ../gcc/; (b) build and host are the same, otherwise
+# this is to be regarded as a cross build environment even if it seems
+# that we can run host binaries; (c) host and target are the same,
+# otherwise the tools in ../gcc/ generate code for a different
+# platform.  If you change this test, be sure to adjust
+# ../gcc/ada/gcc-interface/config-lang.in as well.
+if test "x$cross_compiling/$build/$host" = "xno/$host/$target" ; then
+  default_gnattools_target="gnattools-native"
+else
+  default_gnattools_target="gnattools-cross"
+fi
+AC_SUBST([default_gnattools_target])
+
 # Output: create a Makefile.
 AC_CONFIG_FILES([Makefile])