The directory at $target_header_dir is already inspected in
gcc/configure, for e.g. glibc version and stack protector
support, but not for setting inhibit_libc. This is just
inconsistent and the obvious resolution to me is to inhibit
inhibit_libc when a target *does* "have its own set of headers",
to quote the comment above the inhibit_libc setting. There is
nothing in the build log for "make all-gcc" that shows a
difference with/without --with-headers, if headers are actually
present anyway!
It may seem that libgcc/configure.ac would be the appropriate
place to patch and test, but it is gcc/configure.ac which tests
various things about target headers and makes the inhibit_libc
decision, exporting it through the generated obj/gcc/libgcc.mvars
that is included in libgcc/Makefile.
Tested before/after by "make all-gcc" on native x86_64-linux (*a) and
seeing it still set (for the peace of most users) in
gcc/Makefile, and cross to mipsel-linux "make all-gcc" with/without (*b,c) a
pre-installed set of headers just implied by --prefix and --target to
observe the intended difference and the same with (*d)
--with-sysroot (but no headers at the sysroot) and (*e)
--with-build-sysroot and both (*f) (note that
--with-build-sysroot=... without --with-sysroot also got
inhibit_libc) to observe no change for the --with-sysroot one
(still no inhibit_libc). The same with --with-headers
(*g). Also, I checked that nothing other than the inhibit_libc code
uses target_header_dir or sets the used variables in the block
of code involved in the move.
Ok to commit?
gcc:
* configure.ac (target_header_dir): Move block defining
this to before the block setting inhibit_libc.
(inhibit_libc): When considering $with_headers, just
check it it's explicitly "no". If not, also check if
$target_header_dir/stdio.h is present. If not, set
inhibit_libc=true.
* configure: Regenerate.
Index: gcc/configure.ac
===================================================================
--- gcc/configure.ac (revision 214736)
+++ gcc/configure.ac (working copy)
@@ -1924,6 +1924,22 @@ elif test "x$TARGET_SYSTEM_ROOT" != x; t
SYSTEM_HEADER_DIR=$build_system_header_dir
fi
+if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
+ if test "x$with_headers" != x; then
+ target_header_dir=$with_headers
+ elif test "x$with_sysroot" = x; then
+ target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-include"
+ elif test "x$with_build_sysroot" != "x"; then
+ target_header_dir="${with_build_sysroot}${native_system_header_dir}"
+ elif test "x$with_sysroot" = xyes; then
+
target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-root${native_system_header_dir}"
+ else
+ target_header_dir="${with_sysroot}${native_system_header_dir}"
+ fi
+else
+ target_header_dir=${native_system_header_dir}
+fi
+
# If this is a cross-compiler that does not
# have its own set of headers then define
# inhibit_libc
@@ -1935,7 +1951,7 @@ fi
: ${inhibit_libc=false}
if { { test x$host != x$target && test "x$with_sysroot" = x ; } ||
test x$with_newlib = xyes ; } &&
- { test "x$with_headers" = x || test "x$with_headers" = xno ; } ; then
+ { test "x$with_headers" = xno || test ! -f "$target_header_dir/stdio.h";
} ; then
inhibit_libc=true
fi
AC_SUBST(inhibit_libc)
@@ -4441,22 +4457,6 @@ if test x$with_sysroot = x && test x$hos
&& test "$prefix" != "NONE"; then
AC_DEFINE_UNQUOTED(PREFIX_INCLUDE_DIR, "$prefix/include",
[Define to PREFIX/include if cpp should also search that directory.])
-fi
-
-if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
- if test "x$with_headers" != x; then
- target_header_dir=$with_headers
- elif test "x$with_sysroot" = x; then
- target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-include"
- elif test "x$with_build_sysroot" != "x"; then
- target_header_dir="${with_build_sysroot}${native_system_header_dir}"
- elif test "x$with_sysroot" = xyes; then
-
target_header_dir="${test_exec_prefix}/${target_noncanonical}/sys-root${native_system_header_dir}"
- else
- target_header_dir="${with_sysroot}${native_system_header_dir}"
- fi
-else
- target_header_dir=${native_system_header_dir}
fi
# Determine the version of glibc, if any, used on the target.
brgds, H-P