This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Fix bad interaction between sysroot and C++ include dir
- From: Thomas Schwinge <thomas at codesourcery dot com>
- To: Eric Botcazou <ebotcazou at adacore dot com>, <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 12 Oct 2018 22:35:42 +0200
- Subject: Re: Fix bad interaction between sysroot and C++ include dir
- References: <1946944.q1On1cTmB7@polaris>
Hi!
Belatedly...
On Thu, 10 May 2018 11:36:01 +0200, Eric Botcazou <ebotcazou@adacore.com> wrote:
> This fixes an annyoing regression introduced in 2012 by [...]
> The result is that, if you configure --with-sysroot with a value that happens
> to be identical to the start of the default C++ path in the install tree, the
> mechanism triggers and the C++ include path is completely broken if you pass
> --sysroot to the compiler. IOW the same issue as the one meant to be fixed,
> but this time when --with-gxx-include-dir is not passed.
>
> So the attached patch restores the original implementation by doing the
> interpolation only when both --with-sysroot and --with-gxx-include-dir are
> specified on the configure line.
>
> Tested on x86-64/Linux, applied on the mainline as obvious.
Thanks for that. I had found and (at least partly) analyzed the same,
but had not yet prepared a patch. I'm confirming that this works as
expected when configuring with "--with-sysroot=" (that is, empty).
Can we get this onto release branches, too?
Grüße
Thomas
> 2018-05-10 Eric Botcazou <ebotcazou@adacore.com>
>
> * configure.ac (gcc_gxx_include_dir_add_sysroot): Set it to 1 only
> when --with-gxx-include-dir is also specified.
> * configure: Regenerate.
> Index: configure.ac
> ===================================================================
> --- configure.ac (revision 260071)
> +++ configure.ac (working copy)
> @@ -205,6 +205,11 @@ no) ;;
> *) gcc_gxx_include_dir=$with_gxx_include_dir ;;
> esac])
>
> +# If both --with-sysroot and --with-gxx-include-dir are passed, we interpolate
> +# the former in the latter and, upon success, compute gcc_gxx_include_dir as
> +# relative to the sysroot.
> +gcc_gxx_include_dir_add_sysroot=0
> +
> # This logic must match libstdc++-v3/acinclude.m4:GLIBCXX_EXPORT_INSTALL_INFO.
> if test x${gcc_gxx_include_dir} = x; then
> if test x${enable_version_specific_runtime_libs} = xyes; then
> @@ -216,15 +221,10 @@ if test x${gcc_gxx_include_dir} = x; the
> fi
> gcc_gxx_include_dir="\$(libsubdir)/\$(libsubdir_to_prefix)$libstdcxx_incdir"
> fi
> -fi
> -
> -gcc_gxx_include_dir_add_sysroot=0
> -if test "${with_sysroot+set}" = set; then
> +elif test "${with_sysroot+set}" = set; then
> gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" : "${with_sysroot}"'\(.*\)'`
> if test "${gcc_gxx_without_sysroot}"; then
> - if test x${with_sysroot} != x/; then
> - gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
> - fi
> + gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
> gcc_gxx_include_dir_add_sysroot=1
> fi
> fi