[PATCH] Fix fixincludes for canadian cross builds

2017-02-06 Thread Bernd Edlinger
Hi,

I noticed that there is a subtle problem with build!=host
configurations.

That is, the fixinclude machinery is using the path that would
work on the target system to find the headers that need to be
fixed, but the build machine can have different header files than
the target machine, even if th are at the same location.  This can 
theoretically cause a mis-compilation of the target libraries.

However the mkheaders script works on the target, and would fix it up,
but the target libraries are not rebuilt, and they may have used the
wrong fixed headers.

To fix this inconsistency I would like to introduce a new make
variable BUILD_SYSTEM_HEADER_DIR that is identical to SYSTEM_HEADER_DIR
if build==host and which is CROSS_SYSTEM_HEADER_DIR for canadian cross
configs.

Only mkheaders.conf uses SYSTEM_HEADER_DIR because it runs on the
host system, all other places should use BUILD_SYSTEM_HEADER_DIR.

I tested this change with different arm-linux-gnueabihf cross
compilers, and verified that mkheaders still works on the host system.

Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
Is it OK for trunk?


Thanks
Bernd.
2017-02-06  Bernd Edlinger  

* Makefile.in (BUILD_SYSTEM_HEADER_DIR): New make variabe.
	(LIMITS_H_TEST, if_multiarch, stmp-fixinc): Use BUILD_SYSTEM_HEADER_DIR
	instead of SYSTEM_HEADER_DIR.

Index: gcc/Makefile.in
===
--- gcc/Makefile.in	(revision 245184)
+++ gcc/Makefile.in	(working copy)
@@ -517,11 +517,18 @@
 # macro is also used in a double-quoted context.
 SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER_DIR@ | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`
 
+# Path to the system headers on the build machine
+ifeq ($(build),$(host))
+BUILD_SYSTEM_HEADER_DIR = $(SYSTEM_HEADER_DIR)
+else
+BUILD_SYSTEM_HEADER_DIR = `echo $(CROSS_SYSTEM_HEADER_DIR) | sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`
+endif
+
 # Control whether to run fixincludes.
 STMP_FIXINC = @STMP_FIXINC@
 
 # Test to see whether  exists in the system header files.
-LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
+LIMITS_H_TEST = [ -f $(BUILD_SYSTEM_HEADER_DIR)/limits.h ]
 
 # Directory for prefix to system directories, for
 # each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
@@ -572,7 +579,7 @@
 else
   ifeq ($(enable_multiarch),auto)
 # SYSTEM_HEADER_DIR is makefile syntax, cannot be evaluated in configure.ac
-if_multiarch = $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib/*/crti.o),$(1))
+if_multiarch = $(if $(wildcard $(shell echo $(BUILD_SYSTEM_HEADER_DIR))/../../usr/lib/*/crti.o),$(1))
   else
 if_multiarch =
   endif
@@ -2990,11 +2997,11 @@
 	sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \
 	multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
 	fix_dir=include-fixed$${multi_dir}; \
-	if ! $(inhibit_libc) && test ! -d ${SYSTEM_HEADER_DIR}; then \
+	if ! $(inhibit_libc) && test ! -d ${BUILD_SYSTEM_HEADER_DIR}; then \
 	  echo The directory that should contain system headers does not exist: >&2 ; \
-	  echo "  ${SYSTEM_HEADER_DIR}" >&2 ; \
+	  echo "  ${BUILD_SYSTEM_HEADER_DIR}" >&2 ; \
 	  tooldir_sysinc=`echo "${gcc_tooldir}/sys-include" | sed -e :a -e "s,[^/]*/\.\.\/,," -e ta`; \
-	  if test "x${SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \
+	  if test "x${BUILD_SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \
 	  then sleep 1; else exit 1; fi; \
 	fi; \
 	$(mkinstalldirs) $${fix_dir}; \
@@ -3005,7 +3012,7 @@
 	  export TARGET_MACHINE srcdir SHELL MACRO_LIST && \
 	  cd $(build_objdir)/fixincludes && \
 	  $(SHELL) ./fixinc.sh "$${gcc_dir}/$${fix_dir}" \
-	$(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \
+	$(BUILD_SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \
 	rm -f $${fix_dir}/syslimits.h; \
 	if [ -f $${fix_dir}/limits.h ]; then \
 	  mv $${fix_dir}/limits.h $${fix_dir}/syslimits.h; \


Re: [PATCH] Fix fixincludes for canadian cross builds

2017-02-17 Thread Bruce Korb
On 02/06/17 10:44, Bernd Edlinger wrote:
> I tested this change with different arm-linux-gnueabihf cross
> compilers, and verified that mkheaders still works on the host system.
> 
> Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
> Is it OK for trunk?

As long as you certify that this is correct for all systems we care about:

+BUILD_SYSTEM_HEADER_DIR = `
+echo $(CROSS_SYSTEM_HEADER_DIR) | \
+sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`

that is pretty obtuse sed-speak to me.  I suggest a comment
explaining what sed is supposed to be doing.  What should
"$(CROSS_SYSTEM_HEADER_DIR)" look like?


Re: [PATCH] Fix fixincludes for canadian cross builds

2017-02-18 Thread Bernd Edlinger
On 02/18/17 00:37, Bruce Korb wrote:
> On 02/06/17 10:44, Bernd Edlinger wrote:
>> I tested this change with different arm-linux-gnueabihf cross
>> compilers, and verified that mkheaders still works on the host system.
>>
>> Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
>> Is it OK for trunk?
>
> As long as you certify that this is correct for all systems we care about:
>
> +BUILD_SYSTEM_HEADER_DIR = `
> +echo $(CROSS_SYSTEM_HEADER_DIR) | \
> +sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`
>
> that is pretty obtuse sed-speak to me.  I suggest a comment
> explaining what sed is supposed to be doing.  What should
> "$(CROSS_SYSTEM_HEADER_DIR)" look like?
>

I took it just from a few lines above, so I thought that comment would
sufficiently explain the syntax:

# autoconf sets SYSTEM_HEADER_DIR to one of the above.
# Purge it of unnecessary internal relative paths
# to directories that might not exist yet.
# The sed idiom for this is to repeat the search-and-replace until it 
doesn't match, using :a ... ta.
# Use single quotes here to avoid nested double- and backquotes, this
# macro is also used in a double-quoted context.
SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER_DIR@ | sed -e :a -e 
's,[^/]*/\.\.\/,,' -e ta`

But I guess it would not hurt to just repeat "Purge it of unnecessary
internal relative paths" here as well.

CROSS_SYSTEM_HEADER_DIR is where the target system headers are located
on the build system (IOW the system root), that can be something like
"CROSS_SYSTEM_HEADER_DIR = $(gcc_tooldir)/sys-include"

Which may expand to something like that:
"/home/ed/gnu/arm-linux-gnueabihf-cross/lib/gcc/arm-linux-gnueabihf/7.0.1/../../../../arm-linux-gnueabihf/sys-include"

which the sed script changes then to
"/home/ed/gnu/arm-linux-gnueabihf-cross/arm-linux-gnueabihf/sys-include"

And in deed, I have put the target header files there on the build
machine.

But on the target system the include files are simply at "/usr/include"
which is the value of SYSTEM_HEADER_DIR, thus SYSTEM_HEADER_DIR is not
a path where the headers are visible at the build system, only code
that executes on the target system should use SYSTEM_HEADER_DIR.


Thanks
Bernd.


Re: [PATCH] Fix fixincludes for canadian cross builds

2017-02-20 Thread Bruce Korb
On 02/18/17 01:01, Bernd Edlinger wrote:
> On 02/18/17 00:37, Bruce Korb wrote:
>> On 02/06/17 10:44, Bernd Edlinger wrote:
>>> I tested this change with different arm-linux-gnueabihf cross
>>> compilers, and verified that mkheaders still works on the host system.
>>>
>>> Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
>>> Is it OK for trunk?
>>
>> As long as you certify that this is correct for all systems we care about:
>>
>> +BUILD_SYSTEM_HEADER_DIR = `
>> +echo $(CROSS_SYSTEM_HEADER_DIR) | \
>> +sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`
>>
>> that is pretty obtuse sed-speak to me.  I suggest a comment
>> explaining what sed is supposed to be doing.  What should
>> "$(CROSS_SYSTEM_HEADER_DIR)" look like?
>>
> 
> I took it just from a few lines above, so I thought that comment would
> sufficiently explain the syntax:

I confess, I didn't pull a new copy of gcc, sorry.
So it looks good to me.


Re: [PATCH] Fix fixincludes for canadian cross builds

2017-04-12 Thread Yvan Roux
Hi,

On 20 February 2017 at 18:53, Bruce Korb  wrote:
> On 02/18/17 01:01, Bernd Edlinger wrote:
>> On 02/18/17 00:37, Bruce Korb wrote:
>>> On 02/06/17 10:44, Bernd Edlinger wrote:
 I tested this change with different arm-linux-gnueabihf cross
 compilers, and verified that mkheaders still works on the host system.

 Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
 Is it OK for trunk?
>>>
>>> As long as you certify that this is correct for all systems we care about:
>>>
>>> +BUILD_SYSTEM_HEADER_DIR = `
>>> +echo $(CROSS_SYSTEM_HEADER_DIR) | \
>>> +sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`
>>>
>>> that is pretty obtuse sed-speak to me.  I suggest a comment
>>> explaining what sed is supposed to be doing.  What should
>>> "$(CROSS_SYSTEM_HEADER_DIR)" look like?
>>>
>>
>> I took it just from a few lines above, so I thought that comment would
>> sufficiently explain the syntax:
>
> I confess, I didn't pull a new copy of gcc, sorry.
> So it looks good to me.


We just noticed that this patch brakes canadian cross builds when
configured with --with-build-sysroot, since headers are searched into
the target sysroot instead of the one specified for builds.

Maybe there's a cleaner way to fix this and avoid the duplication but
I didn't find another to test if --with-build-sysroot is used.  The
attached patch fixes the issue.  Tested with a Full canadian cross
build for i686-w64-mingw32 host and arm-linux-gnueabihf.

Thanks
Yvan

2017-04-12  Yvan Roux  

   * Makefile.in (BUILD_SYSTEM_HEADER_DIR): Set to SYSTEM_HEADER_DIR
   when configured with --with-build-sysroot.
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index e38b726..7aed942 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -520,6 +520,8 @@ SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER_DIR@ | sed -e :a 
-e 's,[^/]*/\.\.\/,,'
 # Path to the system headers on the build machine
 ifeq ($(build),$(host))
 BUILD_SYSTEM_HEADER_DIR = $(SYSTEM_HEADER_DIR)
+else ifdef SYSROOT_CFLAGS_FOR_TARGET
+BUILD_SYSTEM_HEADER_DIR = $(SYSTEM_HEADER_DIR)
 else
 BUILD_SYSTEM_HEADER_DIR = `echo $(CROSS_SYSTEM_HEADER_DIR) | sed -e :a -e 
's,[^/]*/\.\.\/,,' -e ta`
 endif


Re: [PATCH] Fix fixincludes for canadian cross builds

2017-04-12 Thread Bruce Korb
I will be unable to look at this for a couple of weeks, so I leave
this to others to look at.

On Wed, Apr 12, 2017 at 8:58 AM, Yvan Roux  wrote:
> Hi,
>
> On 20 February 2017 at 18:53, Bruce Korb  wrote:
>> On 02/18/17 01:01, Bernd Edlinger wrote:
>>> On 02/18/17 00:37, Bruce Korb wrote:
 On 02/06/17 10:44, Bernd Edlinger wrote:
> I tested this change with different arm-linux-gnueabihf cross
> compilers, and verified that mkheaders still works on the host system.
>
> Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
> Is it OK for trunk?

 As long as you certify that this is correct for all systems we care about:

 +BUILD_SYSTEM_HEADER_DIR = `
 +echo $(CROSS_SYSTEM_HEADER_DIR) | \
 +sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`

 that is pretty obtuse sed-speak to me.  I suggest a comment
 explaining what sed is supposed to be doing.  What should
 "$(CROSS_SYSTEM_HEADER_DIR)" look like?

>>>
>>> I took it just from a few lines above, so I thought that comment would
>>> sufficiently explain the syntax:
>>
>> I confess, I didn't pull a new copy of gcc, sorry.
>> So it looks good to me.
>
>
> We just noticed that this patch brakes canadian cross builds when
> configured with --with-build-sysroot, since headers are searched into
> the target sysroot instead of the one specified for builds.
>
> Maybe there's a cleaner way to fix this and avoid the duplication but
> I didn't find another to test if --with-build-sysroot is used.  The
> attached patch fixes the issue.  Tested with a Full canadian cross
> build for i686-w64-mingw32 host and arm-linux-gnueabihf.
>
> Thanks
> Yvan
>
> 2017-04-12  Yvan Roux  
>
>* Makefile.in (BUILD_SYSTEM_HEADER_DIR): Set to SYSTEM_HEADER_DIR
>when configured with --with-build-sysroot.


Re: [PATCH] Fix fixincludes for canadian cross builds

2017-04-13 Thread Bernd Edlinger
On 04/12/17 17:58, Yvan Roux wrote:
> Hi,
>
> On 20 February 2017 at 18:53, Bruce Korb  wrote:
>> On 02/18/17 01:01, Bernd Edlinger wrote:
>>> On 02/18/17 00:37, Bruce Korb wrote:
 On 02/06/17 10:44, Bernd Edlinger wrote:
> I tested this change with different arm-linux-gnueabihf cross
> compilers, and verified that mkheaders still works on the host system.
>
> Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
> Is it OK for trunk?

 As long as you certify that this is correct for all systems we care about:

 +BUILD_SYSTEM_HEADER_DIR = `
 +echo $(CROSS_SYSTEM_HEADER_DIR) | \
 +sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`

 that is pretty obtuse sed-speak to me.  I suggest a comment
 explaining what sed is supposed to be doing.  What should
 "$(CROSS_SYSTEM_HEADER_DIR)" look like?

>>>
>>> I took it just from a few lines above, so I thought that comment would
>>> sufficiently explain the syntax:
>>
>> I confess, I didn't pull a new copy of gcc, sorry.
>> So it looks good to me.
>
>
> We just noticed that this patch brakes canadian cross builds when
> configured with --with-build-sysroot, since headers are searched into
> the target sysroot instead of the one specified for builds.
>
> Maybe there's a cleaner way to fix this and avoid the duplication but
> I didn't find another to test if --with-build-sysroot is used.  The
> attached patch fixes the issue.  Tested with a Full canadian cross
> build for i686-w64-mingw32 host and arm-linux-gnueabihf.
>
> Thanks
> Yvan
>
> 2017-04-12  Yvan Roux  
>
>* Makefile.in (BUILD_SYSTEM_HEADER_DIR): Set to SYSTEM_HEADER_DIR
>when configured with --with-build-sysroot.
>

Oops, sorry for the breakage...

However I think the patch simply restores the previous behavior, because
ifdef SYSROOT_CFLAGS_FOR_TARGET is always true, even if it's empty,
but it does still not work correctly.

I tried to build a cross with your patch and a --with-build-sysroot
but the target compiler does fix the wrong includes for me:

../gcc-trunk/configure --prefix=/home/ed/gnu/arm-linux-gnueabihf-cross 
--host=arm-linux-gnueabihf --target=arm-linux-gnueabihf 
--enable-languages=c,c++,ada,fortran --with-arch=armv7-a 
--with-tune=cortex-a9 --with-fpu=vfpv3-d16 --with-float=hard 
--with-build-sysroot=/home/ed/gnu/arm-linux-gnueabihf-3
=>
Fixing headers into 
/home/ed/gnu/gcc-build-arm-linux-gnueabihf-2/gcc/include-fixed for 
arm-unknown-linux-gnueabihf target
Forbidden identifiers: linux unix
Finding directories and links to directories
  Searching /usr/include/.
  Searching /usr/include/./c++/4.8.4
  Searching /usr/include/./numpy
  Searching /usr/include/./python2.7/numpy
Making symbolic directory links
Fixing directory /usr/include into 
/home/ed/gnu/gcc-build-arm-linux-gnueabihf-2/gcc/include-fixed

but it should fix headers in .../arm-linux-gnueabihf-3/usr/include

I think it would work if I use --with-sysroot together with
--with-build-sysroot in the config above, but why should the
target compiler use --with-sysroot ?
There is no need for that on the target, just the cross-compiler
might need to support that.

I tried to fix some possible combinations of --with-sysroot/
--with-build-sysroot, and moved the logic to the configure
script.  When I did that I noticed also some more glitches
when grabbing the TARGET_GLIBC_MAJOR/MINOR defines from sysroot
files.

This updated patch seems to work for me, could you give it a try?




Thanks
Bernd.
2017-04-14  Bernd Edlinger  

	* configure.ac (SYSTEM_HEADER_DIR, BUILD_SYSTEM_HEADER_DIR,
	target_header_dir): Set correctly.
	* configure: Regenerated.
	* Makefile.in (BUILD_SYSTEM_HEADER_DIR): Use directly.

Index: gcc/configure
===
--- gcc/configure	(revision 246899)
+++ gcc/configure	(working copy)
@@ -719,6 +719,7 @@ BUILD_CFLAGS
 CXX_FOR_BUILD
 CC_FOR_BUILD
 inhibit_libc
+BUILD_SYSTEM_HEADER_DIR
 SYSTEM_HEADER_DIR
 ALL
 CROSS
@@ -12214,14 +12215,15 @@ done
 CROSS=
 ALL=all.internal
 SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)'
+BUILD_SYSTEM_HEADER_DIR=$SYSTEM_HEADER_DIR
 
 if test "x$with_build_sysroot" != x; then
-  build_system_header_dir=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
-else
+  BUILD_SYSTEM_HEADER_DIR=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
+elif test x$host != x$target; then
   # This value is used, even on a native system, because
   # CROSS_SYSTEM_HEADER_DIR is just
   # $(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR).
-  build_system_header_dir='$(CROSS_SYSTEM_HEADER_DIR)'
+  BUILD_SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
 fi
 
 if test x$host != x$target
@@ -12228,7 +12230,7 @@ if test x$host != x$target
 then
 	CROSS="-DCROSS_DIRECTORY_STRUCTURE"
 	ALL=all.cross
-	SYSTEM_HEADER_DIR=$build_system_header_dir
+	SYSTEM_HEADER_DIR=$BUILD_SYSTEM_HEADER_DIR
 	case $target in
 		*-*-mingw*)
 			if test "x$with_head

Re: [PATCH] Fix fixincludes for canadian cross builds

2017-04-14 Thread Yvan Roux
Hi Bernd,

On 14 April 2017 at 06:18, Bernd Edlinger  wrote:
> On 04/12/17 17:58, Yvan Roux wrote:
>> Hi,
>>
>> On 20 February 2017 at 18:53, Bruce Korb  wrote:
>>> On 02/18/17 01:01, Bernd Edlinger wrote:
 On 02/18/17 00:37, Bruce Korb wrote:
> On 02/06/17 10:44, Bernd Edlinger wrote:
>> I tested this change with different arm-linux-gnueabihf cross
>> compilers, and verified that mkheaders still works on the host system.
>>
>> Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
>> Is it OK for trunk?
>
> As long as you certify that this is correct for all systems we care about:
>
> +BUILD_SYSTEM_HEADER_DIR = `
> +echo $(CROSS_SYSTEM_HEADER_DIR) | \
> +sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`
>
> that is pretty obtuse sed-speak to me.  I suggest a comment
> explaining what sed is supposed to be doing.  What should
> "$(CROSS_SYSTEM_HEADER_DIR)" look like?
>

 I took it just from a few lines above, so I thought that comment would
 sufficiently explain the syntax:
>>>
>>> I confess, I didn't pull a new copy of gcc, sorry.
>>> So it looks good to me.
>>
>>
>> We just noticed that this patch brakes canadian cross builds when
>> configured with --with-build-sysroot, since headers are searched into
>> the target sysroot instead of the one specified for builds.
>>
>> Maybe there's a cleaner way to fix this and avoid the duplication but
>> I didn't find another to test if --with-build-sysroot is used.  The
>> attached patch fixes the issue.  Tested with a Full canadian cross
>> build for i686-w64-mingw32 host and arm-linux-gnueabihf.
>>
>> Thanks
>> Yvan
>>
>> 2017-04-12  Yvan Roux  
>>
>>* Makefile.in (BUILD_SYSTEM_HEADER_DIR): Set to SYSTEM_HEADER_DIR
>>when configured with --with-build-sysroot.
>>
>
> Oops, sorry for the breakage...
>
> However I think the patch simply restores the previous behavior, because
> ifdef SYSROOT_CFLAGS_FOR_TARGET is always true, even if it's empty,
> but it does still not work correctly.

hmm, according to Makefile manual ifdef VAR is true if VAR is
non-empty, but maybe SYSROOT_CFLAGS_FOR_TARGET is set to an empty
string when --with-build-sysroot is not used, sorry for not having
tested this case :/

> I tried to build a cross with your patch and a --with-build-sysroot
> but the target compiler does fix the wrong includes for me:
>
> ../gcc-trunk/configure --prefix=/home/ed/gnu/arm-linux-gnueabihf-cross
> --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
> --enable-languages=c,c++,ada,fortran --with-arch=armv7-a
> --with-tune=cortex-a9 --with-fpu=vfpv3-d16 --with-float=hard
> --with-build-sysroot=/home/ed/gnu/arm-linux-gnueabihf-3
> =>
> Fixing headers into
> /home/ed/gnu/gcc-build-arm-linux-gnueabihf-2/gcc/include-fixed for
> arm-unknown-linux-gnueabihf target
> Forbidden identifiers: linux unix
> Finding directories and links to directories
>   Searching /usr/include/.
>   Searching /usr/include/./c++/4.8.4
>   Searching /usr/include/./numpy
>   Searching /usr/include/./python2.7/numpy
> Making symbolic directory links
> Fixing directory /usr/include into
> /home/ed/gnu/gcc-build-arm-linux-gnueabihf-2/gcc/include-fixed
>
> but it should fix headers in .../arm-linux-gnueabihf-3/usr/include
>
> I think it would work if I use --with-sysroot together with
> --with-build-sysroot in the config above, but why should the
> target compiler use --with-sysroot ?
> There is no need for that on the target, just the cross-compiler
> might need to support that.

Ah yes, sorry ! we use both together, my understanding was that
--with-build-sysroot only makes sense we --with-sysroot is used.

> I tried to fix some possible combinations of --with-sysroot/
> --with-build-sysroot, and moved the logic to the configure
> script.  When I did that I noticed also some more glitches
> when grabbing the TARGET_GLIBC_MAJOR/MINOR defines from sysroot
> files.
>
> This updated patch seems to work for me, could you give it a try?

The patch looks good to me, and works fine.

Thanks a lot Bernd.

Cheers,
Yvan


Re: [PATCH] Fix fixincludes for canadian cross builds

2017-04-14 Thread Bernd Edlinger
Hi Yvan,

On 04/14/17 10:24, Yvan Roux wrote:
> Hi Bernd,
>
> On 14 April 2017 at 06:18, Bernd Edlinger  wrote:
>> On 04/12/17 17:58, Yvan Roux wrote:
>>> Hi,
>>>
>>> On 20 February 2017 at 18:53, Bruce Korb  wrote:
 On 02/18/17 01:01, Bernd Edlinger wrote:
> On 02/18/17 00:37, Bruce Korb wrote:
>> On 02/06/17 10:44, Bernd Edlinger wrote:
>>> I tested this change with different arm-linux-gnueabihf cross
>>> compilers, and verified that mkheaders still works on the host system.
>>>
>>> Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
>>> Is it OK for trunk?
>>
>> As long as you certify that this is correct for all systems we care 
>> about:
>>
>> +BUILD_SYSTEM_HEADER_DIR = `
>> +echo $(CROSS_SYSTEM_HEADER_DIR) | \
>> +sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`
>>
>> that is pretty obtuse sed-speak to me.  I suggest a comment
>> explaining what sed is supposed to be doing.  What should
>> "$(CROSS_SYSTEM_HEADER_DIR)" look like?
>>
>
> I took it just from a few lines above, so I thought that comment would
> sufficiently explain the syntax:

 I confess, I didn't pull a new copy of gcc, sorry.
 So it looks good to me.
>>>
>>>
>>> We just noticed that this patch brakes canadian cross builds when
>>> configured with --with-build-sysroot, since headers are searched into
>>> the target sysroot instead of the one specified for builds.
>>>
>>> Maybe there's a cleaner way to fix this and avoid the duplication but
>>> I didn't find another to test if --with-build-sysroot is used.  The
>>> attached patch fixes the issue.  Tested with a Full canadian cross
>>> build for i686-w64-mingw32 host and arm-linux-gnueabihf.
>>>
>>> Thanks
>>> Yvan
>>>
>>> 2017-04-12  Yvan Roux  
>>>
>>>* Makefile.in (BUILD_SYSTEM_HEADER_DIR): Set to SYSTEM_HEADER_DIR
>>>when configured with --with-build-sysroot.
>>>
>>
>> Oops, sorry for the breakage...
>>
>> However I think the patch simply restores the previous behavior, because
>> ifdef SYSROOT_CFLAGS_FOR_TARGET is always true, even if it's empty,
>> but it does still not work correctly.
>
> hmm, according to Makefile manual ifdef VAR is true if VAR is
> non-empty, but maybe SYSROOT_CFLAGS_FOR_TARGET is set to an empty
> string when --with-build-sysroot is not used, sorry for not having
> tested this case :/
>

Yes, interesting point, the reason must have been somewhere else then.
Actually the "else ifdef" syntax appears to be working to my surprise:
I use gnu make 3.81 here.  But the manual says "else" has to be on a
line of it's own, and I have never seen that syntax being used before.

>> I tried to build a cross with your patch and a --with-build-sysroot
>> but the target compiler does fix the wrong includes for me:
>>
>> ../gcc-trunk/configure --prefix=/home/ed/gnu/arm-linux-gnueabihf-cross
>> --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
>> --enable-languages=c,c++,ada,fortran --with-arch=armv7-a
>> --with-tune=cortex-a9 --with-fpu=vfpv3-d16 --with-float=hard
>> --with-build-sysroot=/home/ed/gnu/arm-linux-gnueabihf-3
>> =>
>> Fixing headers into
>> /home/ed/gnu/gcc-build-arm-linux-gnueabihf-2/gcc/include-fixed for
>> arm-unknown-linux-gnueabihf target
>> Forbidden identifiers: linux unix
>> Finding directories and links to directories
>>   Searching /usr/include/.
>>   Searching /usr/include/./c++/4.8.4
>>   Searching /usr/include/./numpy
>>   Searching /usr/include/./python2.7/numpy
>> Making symbolic directory links
>> Fixing directory /usr/include into
>> /home/ed/gnu/gcc-build-arm-linux-gnueabihf-2/gcc/include-fixed
>>
>> but it should fix headers in .../arm-linux-gnueabihf-3/usr/include
>>
>> I think it would work if I use --with-sysroot together with
>> --with-build-sysroot in the config above, but why should the
>> target compiler use --with-sysroot ?
>> There is no need for that on the target, just the cross-compiler
>> might need to support that.
>
> Ah yes, sorry ! we use both together, my understanding was that
> --with-build-sysroot only makes sense we --with-sysroot is used.
>

No problem, there are certainly many situations when that is true.

>> I tried to fix some possible combinations of --with-sysroot/
>> --with-build-sysroot, and moved the logic to the configure
>> script.  When I did that I noticed also some more glitches
>> when grabbing the TARGET_GLIBC_MAJOR/MINOR defines from sysroot
>> files.
>>
>> This updated patch seems to work for me, could you give it a try?
>
> The patch looks good to me, and works fine.
>
> Thanks a lot Bernd.
>
> Cheers,
> Yvan
>

Hi RMs:

I am sorry that this happened so close to the imminent gcc-7 release
date.

To my best knowledge it would be fine to apply this update patch on the
trunk: https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00649.html

But if you decide otherwise, I am also ready to revert my original
commit: https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=245613


Thanks
Bernd.

Re: [PATCH] Fix fixincludes for canadian cross builds

2017-04-14 Thread Yvan Roux
On 14 April 2017 at 12:29, Bernd Edlinger  wrote:
> Hi Yvan,
>
> On 04/14/17 10:24, Yvan Roux wrote:
>> Hi Bernd,
>>
>> On 14 April 2017 at 06:18, Bernd Edlinger  wrote:
>>> On 04/12/17 17:58, Yvan Roux wrote:
 Hi,

 On 20 February 2017 at 18:53, Bruce Korb  wrote:
> On 02/18/17 01:01, Bernd Edlinger wrote:
>> On 02/18/17 00:37, Bruce Korb wrote:
>>> On 02/06/17 10:44, Bernd Edlinger wrote:
 I tested this change with different arm-linux-gnueabihf cross
 compilers, and verified that mkheaders still works on the host system.

 Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
 Is it OK for trunk?
>>>
>>> As long as you certify that this is correct for all systems we care 
>>> about:
>>>
>>> +BUILD_SYSTEM_HEADER_DIR = `
>>> +echo $(CROSS_SYSTEM_HEADER_DIR) | \
>>> +sed -e :a -e 's,[^/]*/\.\.\/,,' -e ta`
>>>
>>> that is pretty obtuse sed-speak to me.  I suggest a comment
>>> explaining what sed is supposed to be doing.  What should
>>> "$(CROSS_SYSTEM_HEADER_DIR)" look like?
>>>
>>
>> I took it just from a few lines above, so I thought that comment would
>> sufficiently explain the syntax:
>
> I confess, I didn't pull a new copy of gcc, sorry.
> So it looks good to me.


 We just noticed that this patch brakes canadian cross builds when
 configured with --with-build-sysroot, since headers are searched into
 the target sysroot instead of the one specified for builds.

 Maybe there's a cleaner way to fix this and avoid the duplication but
 I didn't find another to test if --with-build-sysroot is used.  The
 attached patch fixes the issue.  Tested with a Full canadian cross
 build for i686-w64-mingw32 host and arm-linux-gnueabihf.

 Thanks
 Yvan

 2017-04-12  Yvan Roux  

* Makefile.in (BUILD_SYSTEM_HEADER_DIR): Set to SYSTEM_HEADER_DIR
when configured with --with-build-sysroot.

>>>
>>> Oops, sorry for the breakage...
>>>
>>> However I think the patch simply restores the previous behavior, because
>>> ifdef SYSROOT_CFLAGS_FOR_TARGET is always true, even if it's empty,
>>> but it does still not work correctly.
>>
>> hmm, according to Makefile manual ifdef VAR is true if VAR is
>> non-empty, but maybe SYSROOT_CFLAGS_FOR_TARGET is set to an empty
>> string when --with-build-sysroot is not used, sorry for not having
>> tested this case :/
>>
>
> Yes, interesting point, the reason must have been somewhere else then.
> Actually the "else ifdef" syntax appears to be working to my surprise:
> I use gnu make 3.81 here.  But the manual says "else" has to be on a
> line of it's own, and I have never seen that syntax being used before.

Oh, maybe the syntax was changed, I use gnu make 4.2 and the syntax
for complex conditional in the manual
(https://www.gnu.org/software/make/manual/make.html#Conditional-Syntax)
contains:

conditional-directive-one
text-if-one-is-true
else conditional-directive-two
...

I made more tests, and when configured without --with-build-sysroot,
SYSROOT_CFLAGS_FOR_TARGET really is empty in gcc/Makefile, so I don't
understand why my patch didn't work... But anyway, your version is
better than mine ;)

>>> I tried to build a cross with your patch and a --with-build-sysroot
>>> but the target compiler does fix the wrong includes for me:
>>>
>>> ../gcc-trunk/configure --prefix=/home/ed/gnu/arm-linux-gnueabihf-cross
>>> --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
>>> --enable-languages=c,c++,ada,fortran --with-arch=armv7-a
>>> --with-tune=cortex-a9 --with-fpu=vfpv3-d16 --with-float=hard
>>> --with-build-sysroot=/home/ed/gnu/arm-linux-gnueabihf-3
>>> =>
>>> Fixing headers into
>>> /home/ed/gnu/gcc-build-arm-linux-gnueabihf-2/gcc/include-fixed for
>>> arm-unknown-linux-gnueabihf target
>>> Forbidden identifiers: linux unix
>>> Finding directories and links to directories
>>>   Searching /usr/include/.
>>>   Searching /usr/include/./c++/4.8.4
>>>   Searching /usr/include/./numpy
>>>   Searching /usr/include/./python2.7/numpy
>>> Making symbolic directory links
>>> Fixing directory /usr/include into
>>> /home/ed/gnu/gcc-build-arm-linux-gnueabihf-2/gcc/include-fixed
>>>
>>> but it should fix headers in .../arm-linux-gnueabihf-3/usr/include
>>>
>>> I think it would work if I use --with-sysroot together with
>>> --with-build-sysroot in the config above, but why should the
>>> target compiler use --with-sysroot ?
>>> There is no need for that on the target, just the cross-compiler
>>> might need to support that.
>>
>> Ah yes, sorry ! we use both together, my understanding was that
>> --with-build-sysroot only makes sense we --with-sysroot is used.
>>
>
> No problem, there are certainly many situations when that is true.
>
>>> I tried to fix some possible combinations of --with-sysroot/
>>> --with-build-sysroot, and moved the logic to the configure
>>> script.  Wh

Re: [PATCH] Fix fixincludes for canadian cross builds

2017-04-18 Thread Bernd Edlinger
On 04/14/17 12:29, Bernd Edlinger wrote:
> Hi RMs:
>
> I am sorry that this happened so close to the imminent gcc-7 release
> date.
>
> To my best knowledge it would be fine to apply this update patch on the
> trunk: https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00649.html
>
> But if you decide otherwise, I am also ready to revert my original
> commit: https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=245613
>
>
> Thanks
> Bernd.

Aehm, Sorry.

I just realized that the updated patch did still not yet work correctly
in all possible configurations...

I think this part of the configure.ac needs some more rework,
but that is probably not the right time for it.

Therefore I reverted r245613 for now.


I will post an updated patch at a later time.


Thanks
Bernd.


Index: gcc/ChangeLog
===
--- gcc/ChangeLog   (Revision 246978)
+++ gcc/ChangeLog   (Revision 246979)
@@ -1,3 +1,11 @@
+2017-04-18  Bernd Edlinger  
+
+   Revert:
+   2017-02-20  Bernd Edlinger  
+   * Makefile.in (BUILD_SYSTEM_HEADER_DIR): New make variabe.
+   (LIMITS_H_TEST, if_multiarch, stmp-fixinc): Use BUILD_SYSTEM_HEADER_DIR
+   instead of SYSTEM_HEADER_DIR.
+
  2017-04-18  Jeff Law  

PR middle-end/80422
Index: gcc/Makefile.in
===
--- gcc/Makefile.in (Revision 246978)
+++ gcc/Makefile.in (Revision 246979)
@@ -517,18 +517,11 @@
  # macro is also used in a double-quoted context.
  SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER_DIR@ | sed -e :a -e 
's,[^/]*/\.\.\/,,' -e ta`

-# Path to the system headers on the build machine
-ifeq ($(build),$(host))
-BUILD_SYSTEM_HEADER_DIR = $(SYSTEM_HEADER_DIR)
-else
-BUILD_SYSTEM_HEADER_DIR = `echo $(CROSS_SYSTEM_HEADER_DIR) | sed -e :a 
-e 's,[^/]*/\.\.\/,,' -e ta`
-endif
-
  # Control whether to run fixincludes.
  STMP_FIXINC = @STMP_FIXINC@

  # Test to see whether  exists in the system header files.
-LIMITS_H_TEST = [ -f $(BUILD_SYSTEM_HEADER_DIR)/limits.h ]
+LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]

  # Directory for prefix to system directories, for
  # each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
@@ -579,7 +572,7 @@
  else
ifeq ($(enable_multiarch),auto)
  # SYSTEM_HEADER_DIR is makefile syntax, cannot be evaluated in 
configure.ac
-if_multiarch = $(if $(wildcard $(shell echo 
$(BUILD_SYSTEM_HEADER_DIR))/../../usr/lib/*/crti.o),$(1))
+if_multiarch = $(if $(wildcard $(shell echo 
$(SYSTEM_HEADER_DIR))/../../usr/lib/*/crti.o),$(1))
else
  if_multiarch =
endif
@@ -2999,11 +2992,11 @@
sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \
multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
fix_dir=include-fixed$${multi_dir}; \
-   if ! $(inhibit_libc) && test ! -d ${BUILD_SYSTEM_HEADER_DIR}; then \
+   if ! $(inhibit_libc) && test ! -d ${SYSTEM_HEADER_DIR}; then \
  echo The directory that should contain system headers does not 
exist: >&2 ; \
- echo "  ${BUILD_SYSTEM_HEADER_DIR}" >&2 ; \
+ echo "  ${SYSTEM_HEADER_DIR}" >&2 ; \
  tooldir_sysinc=`echo "${gcc_tooldir}/sys-include" | sed -e :a 
-e "s,[^/]*/\.\.\/,," -e ta`; \
- if test "x${BUILD_SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \
+ if test "x${SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \
  then sleep 1; else exit 1; fi; \
fi; \
$(mkinstalldirs) $${fix_dir}; \
@@ -3014,7 +3007,7 @@
  export TARGET_MACHINE srcdir SHELL MACRO_LIST && \
  cd $(build_objdir)/fixincludes && \
  $(SHELL) ./fixinc.sh "$${gcc_dir}/$${fix_dir}" \
-   $(BUILD_SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \
+   $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \
rm -f $${fix_dir}/syslimits.h; \
if [ -f $${fix_dir}/limits.h ]; then \
  mv $${fix_dir}/limits.h $${fix_dir}/syslimits.h; \


Re: [PATCH] Fix fixincludes for canadian cross builds

2017-04-18 Thread Yvan Roux
On 18 April 2017 at 20:17, Bernd Edlinger  wrote:
> On 04/14/17 12:29, Bernd Edlinger wrote:
>> Hi RMs:
>>
>> I am sorry that this happened so close to the imminent gcc-7 release
>> date.
>>
>> To my best knowledge it would be fine to apply this update patch on the
>> trunk: https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00649.html
>>
>> But if you decide otherwise, I am also ready to revert my original
>> commit: https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=245613
>>
>>
>> Thanks
>> Bernd.
>
> Aehm, Sorry.
>
> I just realized that the updated patch did still not yet work correctly
> in all possible configurations...
>
> I think this part of the configure.ac needs some more rework,
> but that is probably not the right time for it.
>
> Therefore I reverted r245613 for now.
>
>
> I will post an updated patch at a later time.

Thanks Bernd, let me know if you want me to try your patch in with our
configurations.

>
> Thanks
> Bernd.
>
>
> Index: gcc/ChangeLog
> ===
> --- gcc/ChangeLog   (Revision 246978)
> +++ gcc/ChangeLog   (Revision 246979)
> @@ -1,3 +1,11 @@
> +2017-04-18  Bernd Edlinger  
> +
> +   Revert:
> +   2017-02-20  Bernd Edlinger  
> +   * Makefile.in (BUILD_SYSTEM_HEADER_DIR): New make variabe.
> +   (LIMITS_H_TEST, if_multiarch, stmp-fixinc): Use 
> BUILD_SYSTEM_HEADER_DIR
> +   instead of SYSTEM_HEADER_DIR.
> +
>   2017-04-18  Jeff Law  
>
> PR middle-end/80422
> Index: gcc/Makefile.in
> ===
> --- gcc/Makefile.in (Revision 246978)
> +++ gcc/Makefile.in (Revision 246979)
> @@ -517,18 +517,11 @@
>   # macro is also used in a double-quoted context.
>   SYSTEM_HEADER_DIR = `echo @SYSTEM_HEADER_DIR@ | sed -e :a -e
> 's,[^/]*/\.\.\/,,' -e ta`
>
> -# Path to the system headers on the build machine
> -ifeq ($(build),$(host))
> -BUILD_SYSTEM_HEADER_DIR = $(SYSTEM_HEADER_DIR)
> -else
> -BUILD_SYSTEM_HEADER_DIR = `echo $(CROSS_SYSTEM_HEADER_DIR) | sed -e :a
> -e 's,[^/]*/\.\.\/,,' -e ta`
> -endif
> -
>   # Control whether to run fixincludes.
>   STMP_FIXINC = @STMP_FIXINC@
>
>   # Test to see whether  exists in the system header files.
> -LIMITS_H_TEST = [ -f $(BUILD_SYSTEM_HEADER_DIR)/limits.h ]
> +LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
>
>   # Directory for prefix to system directories, for
>   # each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
> @@ -579,7 +572,7 @@
>   else
> ifeq ($(enable_multiarch),auto)
>   # SYSTEM_HEADER_DIR is makefile syntax, cannot be evaluated in
> configure.ac
> -if_multiarch = $(if $(wildcard $(shell echo
> $(BUILD_SYSTEM_HEADER_DIR))/../../usr/lib/*/crti.o),$(1))
> +if_multiarch = $(if $(wildcard $(shell echo
> $(SYSTEM_HEADER_DIR))/../../usr/lib/*/crti.o),$(1))
> else
>   if_multiarch =
> endif
> @@ -2999,11 +2992,11 @@
> sysroot_headers_suffix=`echo $${ml} | sed -e 's/;.*$$//'`; \
> multi_dir=`echo $${ml} | sed -e 's/^[^;]*;//'`; \
> fix_dir=include-fixed$${multi_dir}; \
> -   if ! $(inhibit_libc) && test ! -d ${BUILD_SYSTEM_HEADER_DIR}; 
> then \
> +   if ! $(inhibit_libc) && test ! -d ${SYSTEM_HEADER_DIR}; then \
>   echo The directory that should contain system headers does not
> exist: >&2 ; \
> - echo "  ${BUILD_SYSTEM_HEADER_DIR}" >&2 ; \
> + echo "  ${SYSTEM_HEADER_DIR}" >&2 ; \
>   tooldir_sysinc=`echo "${gcc_tooldir}/sys-include" | sed -e :a
> -e "s,[^/]*/\.\.\/,," -e ta`; \
> - if test "x${BUILD_SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \
> + if test "x${SYSTEM_HEADER_DIR}" = "x$${tooldir_sysinc}"; \
>   then sleep 1; else exit 1; fi; \
> fi; \
> $(mkinstalldirs) $${fix_dir}; \
> @@ -3014,7 +3007,7 @@
>   export TARGET_MACHINE srcdir SHELL MACRO_LIST && \
>   cd $(build_objdir)/fixincludes && \
>   $(SHELL) ./fixinc.sh "$${gcc_dir}/$${fix_dir}" \
> -   $(BUILD_SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \
> +   $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS) ); \
> rm -f $${fix_dir}/syslimits.h; \
> if [ -f $${fix_dir}/limits.h ]; then \
>   mv $${fix_dir}/limits.h $${fix_dir}/syslimits.h; \


[PATCH] Fix fixincludes for canadian cross builds - next try

2017-04-20 Thread Bernd Edlinger
Hi!

This is my new attempt to clean up the different cross compiler
configurations.  It turned out to be a very complicated matter,
so I thought it would be better to postpone it to the stage1.

In a canadian cross compiler setup we have a different header dir path
for use in the build and later on the target, which is written to
install-tools/mkheaders.conf, so I propose to export SYSTEM_HEADER_DIR
and BUILD_SYSTEM_HEADER_DIR from configure.ac to be used in Makefile.in.

I also removed unnecessary handling of --with-headers, because
the headers are copied to sys-include and thus it is not necessary to
use the original path here.

If --with-sysroot or --with-build-sysroot is used the SYSTEM_HEADER_DIR
or BUILD_SYSTEM_HEADER_DIR contain $${sysroot_headers_suffix},
which is normally an empty string, but on mips it may be something
like "mips-r2" which gets appended to the sysroot for use of fixincludes
but "target_header_dir" which is used in configure to find things like
the GLIBC version it is not used.  I assume that that either does
not create problems and is silently ignored, or that people have a
work around, my patch should not change that, however I have not been
able to setup a sysroot for mips*-img-linux* or mips*-mti-linux* which
seem to be the only targets where this might make a difference.

I have tested all different combinations of --with-sysroot /
--with-build-sysroot.  Even a native build with --with-sysroot works.
Except go of course: cross-builds are a no-go area for the go language
in general ;)

As before I would appreciate your kind help with testing the many
different build setups.


So far I have tested native x86_64-pc-linux-gnu and arm-linux-gnueabihf
cross build configurations.  And everything looks sane.

Is it OK for trunk?


Thanks
Bernd.
2017-04-18  Bernd Edlinger  

	* configure.ac (SYSTEM_HEADER_DIR, BUILD_SYSTEM_HEADER_DIR,
	target_header_dir): Set correctly.
	* configure: Regenerated.
	* Makefile.in (BUILD_SYSTEM_HEADER_DIR): New make variabe.
	(LIMITS_H_TEST, if_multiarch, stmp-fixinc): Use BUILD_SYSTEM_HEADER_DIR
	instead of SYSTEM_HEADER_DIR.

Index: gcc/configure.ac
===
--- gcc/configure.ac	(revision 246979)
+++ gcc/configure.ac	(working copy)
@@ -1998,41 +1998,29 @@ done
 CROSS=		AC_SUBST(CROSS)
 ALL=all.internalAC_SUBST(ALL)
 SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)'	AC_SUBST(SYSTEM_HEADER_DIR)
+BUILD_SYSTEM_HEADER_DIR=$SYSTEM_HEADER_DIR	AC_SUBST(BUILD_SYSTEM_HEADER_DIR)
 
-if test "x$with_build_sysroot" != x; then
-  build_system_header_dir=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
-else
-  # This value is used, even on a native system, because 
-  # CROSS_SYSTEM_HEADER_DIR is just 
-  # $(TARGET_SYSTEM_ROOT)$(NATIVE_SYSTEM_HEADER_DIR).
-  build_system_header_dir='$(CROSS_SYSTEM_HEADER_DIR)'
-fi
+if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x ||
+   test x$build != x$host || test "x$with_build_sysroot" != x; then
+  if test "x$with_build_sysroot" != x; then
+BUILD_SYSTEM_HEADER_DIR=$with_build_sysroot'$${sysroot_headers_suffix}$(NATIVE_SYSTEM_HEADER_DIR)'
+  else
+BUILD_SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
+  fi
 
-if test x$host != x$target
-then
-	CROSS="-DCROSS_DIRECTORY_STRUCTURE"
-	ALL=all.cross
-	SYSTEM_HEADER_DIR=$build_system_header_dir
-	case $target in
-		*-*-mingw*)
-			if test "x$with_headers" = x; then
-with_headers=yes
-			fi
-			;;
-		*)
-			;;
-	esac
-elif test "x$TARGET_SYSTEM_ROOT" != x; then
-SYSTEM_HEADER_DIR=$build_system_header_dir 
-fi
+  if test x$host != x$target
+  then
+CROSS="-DCROSS_DIRECTORY_STRUCTURE"
+ALL=all.cross
+SYSTEM_HEADER_DIR=$BUILD_SYSTEM_HEADER_DIR
+  elif test "x$TARGET_SYSTEM_ROOT" != x; then
+SYSTEM_HEADER_DIR='$(CROSS_SYSTEM_HEADER_DIR)'
+  fi
 
-if test x$host != x$target || test "x$TARGET_SYSTEM_ROOT" != x; then
-  if test "x$with_headers" != x && test "x$with_headers" != xyes; then
-target_header_dir=$with_headers
+  if test "x$with_build_sysroot" != "x"; then
+target_header_dir="${with_build_sysroot}${native_system_header_dir}"
   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
Index: gcc/configure
===
--- gcc/configure	(revision 246979)
+++ gcc/configure	(working copy)
@@ -719,6 +719,7 @@ BUILD_CFLAGS
 CXX_FOR_BUILD
 CC_FOR_BUILD
 inhibit_libc
+BUILD_SYSTEM_HEADER_DIR
 SYSTEM_HEADER_DIR
 ALL
 CROSS
@@ -12214,41 +12215,29 @@ done
 CROSS=
 ALL=all.internal
 SYSTEM_HEADER_DIR='$(NATIVE_SYSTEM_HEADER_DIR)'
+BUILD_SYSTEM_HEADER_DIR=$SYSTEM

RE: [PATCH] Fix fixincludes for canadian cross builds - next try

2017-04-20 Thread Matthew Fortune
Bernd Edlinger  writes:
> This is my new attempt to clean up the different cross compiler
> configurations.  It turned out to be a very complicated matter,
> so I thought it would be better to postpone it to the stage1.
> 
> In a canadian cross compiler setup we have a different header dir path
> for use in the build and later on the target, which is written to
> install-tools/mkheaders.conf, so I propose to export SYSTEM_HEADER_DIR
> and BUILD_SYSTEM_HEADER_DIR from configure.ac to be used in Makefile.in.
> 
> I also removed unnecessary handling of --with-headers, because
> the headers are copied to sys-include and thus it is not necessary to
> use the original path here.
> 
> If --with-sysroot or --with-build-sysroot is used the SYSTEM_HEADER_DIR
> or BUILD_SYSTEM_HEADER_DIR contain $${sysroot_headers_suffix},
> which is normally an empty string, but on mips it may be something
> like "mips-r2" which gets appended to the sysroot for use of fixincludes
> but "target_header_dir" which is used in configure to find things like
> the GLIBC version it is not used.  I assume that that either does
> not create problems and is silently ignored, or that people have a
> work around, my patch should not change that, however I have not been
> able to setup a sysroot for mips*-img-linux* or mips*-mti-linux* which
> seem to be the only targets where this might make a difference.

I'll try to test this out for you with MIPS. I have changes I want to make
to further improve the cross builds for the mti and img vendor builds so
if there is a bit of fallout I could deal with it then.

Matthew


Re: [PATCH] Fix fixincludes for canadian cross builds - next try

2017-04-21 Thread Yvan Roux
Hi Bernd,

On 20 April 2017 at 21:11, Bernd Edlinger  wrote:
> Hi!
>
> This is my new attempt to clean up the different cross compiler
> configurations.  It turned out to be a very complicated matter,
> so I thought it would be better to postpone it to the stage1.
>
> In a canadian cross compiler setup we have a different header dir path
> for use in the build and later on the target, which is written to
> install-tools/mkheaders.conf, so I propose to export SYSTEM_HEADER_DIR
> and BUILD_SYSTEM_HEADER_DIR from configure.ac to be used in Makefile.in.
>
> I also removed unnecessary handling of --with-headers, because
> the headers are copied to sys-include and thus it is not necessary to
> use the original path here.
>
> If --with-sysroot or --with-build-sysroot is used the SYSTEM_HEADER_DIR
> or BUILD_SYSTEM_HEADER_DIR contain $${sysroot_headers_suffix},
> which is normally an empty string, but on mips it may be something
> like "mips-r2" which gets appended to the sysroot for use of fixincludes
> but "target_header_dir" which is used in configure to find things like
> the GLIBC version it is not used.  I assume that that either does
> not create problems and is silently ignored, or that people have a
> work around, my patch should not change that, however I have not been
> able to setup a sysroot for mips*-img-linux* or mips*-mti-linux* which
> seem to be the only targets where this might make a difference.
>
> I have tested all different combinations of --with-sysroot /
> --with-build-sysroot.  Even a native build with --with-sysroot works.
> Except go of course: cross-builds are a no-go area for the go language
> in general ;)
>
> As before I would appreciate your kind help with testing the many
> different build setups.

Canadian cross build for i686-w64-mingw32 host and arm-linux-gnueabihf
target configured with both --with-sysroot and --with-build-sysroot is
okay (with SYSTEM_HEADER_DIR, BUILD_SYSTEM_HEADER_DIR and
TARGET_SYSTEM_ROOT containing the good paths).

>
> So far I have tested native x86_64-pc-linux-gnu and arm-linux-gnueabihf
> cross build configurations.  And everything looks sane.
>
> Is it OK for trunk?
>
>
> Thanks
> Bernd.


Re: [PATCH] Fix fixincludes for canadian cross builds - next try

2017-04-28 Thread Jeff Law

On 04/20/2017 01:11 PM, Bernd Edlinger wrote:

Hi!

This is my new attempt to clean up the different cross compiler
configurations.  It turned out to be a very complicated matter,
so I thought it would be better to postpone it to the stage1.

In a canadian cross compiler setup we have a different header dir path
for use in the build and later on the target, which is written to
install-tools/mkheaders.conf, so I propose to export SYSTEM_HEADER_DIR
and BUILD_SYSTEM_HEADER_DIR from configure.ac to be used in Makefile.in.

I also removed unnecessary handling of --with-headers, because
the headers are copied to sys-include and thus it is not necessary to
use the original path here.

If --with-sysroot or --with-build-sysroot is used the SYSTEM_HEADER_DIR
or BUILD_SYSTEM_HEADER_DIR contain $${sysroot_headers_suffix},
which is normally an empty string, but on mips it may be something
like "mips-r2" which gets appended to the sysroot for use of fixincludes
but "target_header_dir" which is used in configure to find things like
the GLIBC version it is not used.  I assume that that either does
not create problems and is silently ignored, or that people have a
work around, my patch should not change that, however I have not been
able to setup a sysroot for mips*-img-linux* or mips*-mti-linux* which
seem to be the only targets where this might make a difference.

I have tested all different combinations of --with-sysroot /
--with-build-sysroot.  Even a native build with --with-sysroot works.
Except go of course: cross-builds are a no-go area for the go language
in general;)

As before I would appreciate your kind help with testing the many
different build setups.


So far I have tested native x86_64-pc-linux-gnu and arm-linux-gnueabihf
cross build configurations.  And everything looks sane.

Is it OK for trunk?


Thanks
Bernd.


fixinc.diff


2017-04-18  Bernd Edlinger

* configure.ac (SYSTEM_HEADER_DIR, BUILD_SYSTEM_HEADER_DIR,
target_header_dir): Set correctly.
* configure: Regenerated.
* Makefile.in (BUILD_SYSTEM_HEADER_DIR): New make variabe.
(LIMITS_H_TEST, if_multiarch, stmp-fixinc): Use BUILD_SYSTEM_HEADER_DIR
instead of SYSTEM_HEADER_DIR.
OK.  Please watch for fallout.  I'm not entirely sure mingw is working 
right now, but they're often affected by this stuff.


jeff