On Mon, 20 Apr 2015, Pavel Kopyl wrote:
> Hi all,
>
>
> To build a GCC-4.9.2 ARM cross-compiler for my setting I need to configure it
> with "--with-sysroot=/ --with-gxx-include-dir=/usr/include/c++/4.9.2".
> But I found that gcc driver removes the leading slash from resulting paths:
>
> `gcc -print-prog-name=cc1plus` -v
> ...
> ignoring nonexistent directory "usr/include/c++/4.9.2" <- HERE
> ignoring nonexistent directory
> "usr/include/c++/4.9.2/armv7l-tizen-linux-gnueabi" <- AND HERE
> ignoring nonexistent directory "usr/include/c++/4.9.2/backward" <- AND HERE
> #include "..." search starts here:
> #include <...> search starts here:
> /usr/lib/gcc/armv7l-tizen-linux-gnueabi/4.9.2/include
> /usr/local/include
> /usr/lib/gcc/armv7l-tizen-linux-gnueabi/4.9.2/include-fixed
> /usr/include
>
> It's also reproducible on trunk.
>
> Attached patch fixes this bug.
You don't explain the rationale for this patch, in terms of the logical
semantics of the various variables involved, and why, in terms of those
logical semantics, this patch is the correct approach for fixing the
observed problems.
As I read the code, it's not the driver that removes the leading slash.
Rather, it's the code in configure.ac:
gcc_gxx_include_dir_add_sysroot=0
if test "${with_sysroot+set}" = set; then
gcc_gxx_without_sysroot=`expr "${gcc_gxx_include_dir}" :
"${with_sysroot}"'\(.*\)'`
if test "${gcc_gxx_without_sysroot}"; then
gcc_gxx_include_dir="${gcc_gxx_without_sysroot}"
gcc_gxx_include_dir_add_sysroot=1
fi
fi
What I'd say is that this code is mishandling the case of a --with-sysroot
path that ends with '/' (or, I suppose, '\', on hosts where that's a
directory separator). That is, it's producing a gcc_gxx_include_dir
setting with no leading '/'. I think it would be more appropriate for
this configure.ac code to remove (sysroot minus trailing directory
separator), so that the gcc_gxx_include_dir setting after this code still
has a leading directory separator whether or not the --with-sysroot
setting ended with such a separator. Given such a configure.ac change, I
wouldn't then expect changes elsewhere in the compiler to be needed. But
if that doesn't work to fix the bug, I think you need to elaborate further
on the semantics of the various variables involved (in configure.ac and in
the compiler).
--
Joseph S. Myers
[email protected]