Make copy of <bits/std_abs.h> from GCC 7 [BZ #21573]

Message ID 20170613113813.GA7656@gmail.com
State New, archived
Headers

Commit Message

H.J. Lu June 13, 2017, 11:38 a.m. UTC
  <bits/std_abs.h> from GCC 7 will include /usr/include/stdlib.h from
"#include_next" (instead of stdlib/stdlib.h in the glibc source
directory), and this turns up as a make dependency.  Also make a copy
of <bits/std_abs.h> to prevent it from including /usr/include/stdlib.h.

OK for master?

H.J.
---
	[BZ #21573]
	* configure.ac (find_cxx_header): Add a second argument to
	support <bits/std_abs.h>.
	(CXX_CSTDLIB_HEADER): Updated.  Also make a copy of
	<bits/std_abs.h>.
	(CXX_CMATH_HEADER): Updated.
	* configure: Regenerated.
---
 configure    | 9 ++++++---
 configure.ac | 9 ++++++---
 2 files changed, 12 insertions(+), 6 deletions(-)
  

Comments

Andreas Schwab June 13, 2017, 11:40 a.m. UTC | #1
On Jun 13 2017, "H.J. Lu" <hjl.tools@gmail.com> wrote:

> diff --git a/configure b/configure
> index 422482f..888224e 100755
> --- a/configure
> +++ b/configure
> @@ -5336,10 +5336,13 @@ fi
>  # copy of those headers in Makerules.
>  if test -n "$CXX"; then
>    find_cxx_header () {
> -    echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$1:/{s/:\$//;p}"
> +    echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$2:/{s/:\$//;p}"
>    }
> -  CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)"
> -  CXX_CMATH_HEADER="$(find_cxx_header cmath)"
> +  CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib cstdlib)"
> +  # Also make a copy of <bits/std_abs.h> from GCC 7 to prevent it from
> +  # including /usr/include/stdlib.h.
> +  CXX_CSTDLIB_HEADER="$CXX_CSTDLIB_HEADER $(find_cxx_header bits/std_abs.h bits\\\/std_abs.h)"

Use a different delimiter in the sed command.

Andreas.
  
H.J. Lu June 13, 2017, 11:44 a.m. UTC | #2
On Tue, Jun 13, 2017 at 4:40 AM, Andreas Schwab <schwab@suse.de> wrote:
> On Jun 13 2017, "H.J. Lu" <hjl.tools@gmail.com> wrote:
>
>> diff --git a/configure b/configure
>> index 422482f..888224e 100755
>> --- a/configure
>> +++ b/configure
>> @@ -5336,10 +5336,13 @@ fi
>>  # copy of those headers in Makerules.
>>  if test -n "$CXX"; then
>>    find_cxx_header () {
>> -    echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$1:/{s/:\$//;p}"
>> +    echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$2:/{s/:\$//;p}"
>>    }
>> -  CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)"
>> -  CXX_CMATH_HEADER="$(find_cxx_header cmath)"
>> +  CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib cstdlib)"
>> +  # Also make a copy of <bits/std_abs.h> from GCC 7 to prevent it from
>> +  # including /usr/include/stdlib.h.
>> +  CXX_CSTDLIB_HEADER="$CXX_CSTDLIB_HEADER $(find_cxx_header bits/std_abs.h bits\\\/std_abs.h)"
>
> Use a different delimiter in the sed command.
>

The first / in "/$1:/{s/:\$//;p}" is a command:

[hjl@gnu-tools-1 glibc-test]$ echo "#include <bits/std_abs.h>" |
/usr/gcc-7.1.1-x32/bin/c++ -M -MP -x c++ - | sed -n
",/bits/std_abs.h:,{s/:\$//;p}"
sed: -e expression #1, char 1: unknown command: `,'

What options do I have?
  
Andreas Schwab June 13, 2017, 11:46 a.m. UTC | #3
On Jun 13 2017, "H.J. Lu" <hjl.tools@gmail.com> wrote:

> The first / in "/$1:/{s/:\$//;p}" is a command:

It's not a command, it's an address.

> [hjl@gnu-tools-1 glibc-test]$ echo "#include <bits/std_abs.h>" |
> /usr/gcc-7.1.1-x32/bin/c++ -M -MP -x c++ - | sed -n
> ",/bits/std_abs.h:,{s/:\$//;p}"
> sed: -e expression #1, char 1: unknown command: `,'
>
> What options do I have?

\,$1,

Andreas.
  

Patch

diff --git a/configure b/configure
index 422482f..888224e 100755
--- a/configure
+++ b/configure
@@ -5336,10 +5336,13 @@  fi
 # copy of those headers in Makerules.
 if test -n "$CXX"; then
   find_cxx_header () {
-    echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$1:/{s/:\$//;p}"
+    echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$2:/{s/:\$//;p}"
   }
-  CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)"
-  CXX_CMATH_HEADER="$(find_cxx_header cmath)"
+  CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib cstdlib)"
+  # Also make a copy of <bits/std_abs.h> from GCC 7 to prevent it from
+  # including /usr/include/stdlib.h.
+  CXX_CSTDLIB_HEADER="$CXX_CSTDLIB_HEADER $(find_cxx_header bits/std_abs.h bits\\\/std_abs.h)"
+  CXX_CMATH_HEADER="$(find_cxx_header cmath cmath)"
 fi
 
 
diff --git a/configure.ac b/configure.ac
index 7f43042..00cf227 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1187,10 +1187,13 @@  AC_SUBST(CXX_SYSINCLUDES)
 # copy of those headers in Makerules.
 if test -n "$CXX"; then
   find_cxx_header () {
-    echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$1:/{s/:\$//;p}"
+    echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$2:/{s/:\$//;p}"
   }
-  CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)"
-  CXX_CMATH_HEADER="$(find_cxx_header cmath)"
+  CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib cstdlib)"
+  # Also make a copy of <bits/std_abs.h> from GCC 7 to prevent it from
+  # including /usr/include/stdlib.h.
+  CXX_CSTDLIB_HEADER="$CXX_CSTDLIB_HEADER $(find_cxx_header bits/std_abs.h bits\\\/std_abs.h)"
+  CXX_CMATH_HEADER="$(find_cxx_header cmath cmath)"
 fi
 AC_SUBST(CXX_CSTDLIB_HEADER)
 AC_SUBST(CXX_CMATH_HEADER)