diff mbox series

[LEDE-DEV,RFC] toolchain: fix GCC version check causing failure on Debian Testing with gcc-7

Message ID 3898884.n4tFKsfmyP@gehenna
State Superseded
Delegated to: John Crispin
Headers show
Series [LEDE-DEV,RFC] toolchain: fix GCC version check causing failure on Debian Testing with gcc-7 | expand

Commit Message

Peter Pöschl Nov. 26, 2017, 4:12 p.m. UTC
In Debian Stretch/Testing gcc version 7 is called gcc-7 and g++-7 and
'gcc -dumpversion' returns '7' which causes 'make defconfig' to fail with

   Build dependency: Please install the GNU C Compiler ...
   Build dependency: Please install the GNU C++ Compiler ...

The following patch is minimal invasive.
Alternatively, it would be more robust to use the regex 
   '^(4\.[8-9]|5\.[0-9]|6\.[0-9]|7($$$$$$$$|.\[0-9]))'
instead (currently even 1.4.0 would be accepted), but this might have backward-compatibility ramifications.

Signed-off-by: Peter Pöschl <pp+wrt0611@nest-ai.de>
---

Comments

Michael Yartys via Lede-dev Nov. 26, 2017, 4:27 p.m. UTC | #1
The sender domain has a DMARC Reject/Quarantine policy which disallows
sending mailing list messages using the original "From" header.

To mitigate this problem, the original message has been wrapped
automatically by the mailing list software.
Hi Peter,

On Sun, Nov 26, 2017 at 5:12 PM, Peter Pöschl <pp+wrt0611@nest-ai.de> wrote:
> In Debian Stretch/Testing gcc version 7 is called gcc-7 and g++-7 and
> 'gcc -dumpversion' returns '7' which causes 'make defconfig' to fail with
>
>    Build dependency: Please install the GNU C Compiler ...
>    Build dependency: Please install the GNU C++ Compiler ...
>
> The following patch is minimal invasive.
> Alternatively, it would be more robust to use the regex
>    '^(4\.[8-9]|5\.[0-9]|6\.[0-9]|7($$$$$$$$|.\[0-9]))'
> instead (currently even 1.4.0 would be accepted), but this might have backward-compatibility ramifications.
a few hours ago a similar patch was pushed: [0] (I CC'ed the author of it)

there are some differences between your patch and the one which is
merged already
maybe you could check these and rebase your patch to improve the
merged patch even futher

>
> Signed-off-by: Peter Pöschl <pp+wrt0611@nest-ai.de>
> ---
> diff --git a/include/prereq-build.mk b/include/prereq-build.mk
> index c6f99a2071..43a8da290f 100644
> --- a/include/prereq-build.mk
> +++ b/include/prereq-build.mk
> @@ -28,13 +28,14 @@ $(eval $(call TestHostCommand,proper-umask, \
>
>  $(eval $(call SetupHostCommand,gcc, \
>         Please install the GNU C Compiler (gcc) 4.8 or later \
> -       $(CC) -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|7\.[0-9])', \
> -       gcc -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|7\.[0-9])', \
> +       $(CC) -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|^7$$$$$$$$|7\.[0-9])', \
> +       gcc -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|^7$$$$$$$$|7\.[0-9])', \
your patch contains a match against EOL ($) which the merged version doesn't

>         gcc48 --version | grep gcc, \
>         gcc49 --version | grep gcc, \
>         gcc5 --version | grep gcc, \
>         gcc6 --version | grep gcc, \
>         gcc7 --version | grep gcc, \
> +       gcc-7 --version | grep gcc, \
this part is new

>         gcc --version | grep Apple.LLVM ))
>
>  $(eval $(call TestHostCommand,working-gcc, \
> @@ -45,13 +46,14 @@ $(eval $(call TestHostCommand,working-gcc, \
>
>  $(eval $(call SetupHostCommand,g++, \
>         Please install the GNU C++ Compiler (g++) 4.8 or later \
> -       $(CXX) -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|7\.[0-9])', \
> -       g++ -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|7\.[0-9])', \
> +       $(CXX) -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|^7$$$$$$$$|7\.[0-9])', \
> +       g++ -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|^7$$$$$$$$|7\.[0-9])', \
>         g++48 --version | grep g++, \
>         g++49 --version | grep g++, \
>         g++5 --version | grep g++, \
>         g++6 --version | grep g++, \
>         g++7 --version | grep g++, \
> +       g++-7 --version | grep g++, \
>         g++ --version | grep Apple.LLVM ))
>
>  $(eval $(call TestHostCommand,working-g++, \
> --
> 2.15.0
>
>
> _______________________________________________
> Lede-dev mailing list
> Lede-dev@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/lede-dev

Thank you!
Martin

[0] https://git.lede-project.org/?p=source.git;a=commitdiff;h=8ee2d3f718c79dc7c2e5e859766e23e8058cf3a6
Peter Pöschl Nov. 26, 2017, 7:01 p.m. UTC | #2
Hello Martin,

> [moved to top]
> > gcc7 --version | grep gcc, \
> > +       gcc-7 --version | grep gcc, \
> 
> this part is new

And unfortunately it is only the tip of the iceberg:

In Debian there were/are gcc-4.2 .. gcc-4.9, gcc-5 .. gcc-7.
And what about beauties like 'x86_64-linux-gnu-gcc-7'?
Why not ditch the 'gcc* --version' invocations and have people use
'CC=fancy-named-gcc' on the command line if needed?


> maybe you could check these and rebase your patch to improve the
> merged patch even further

how about this:

 * properly anchored at BOL (prohibits 2.5.6 etc.)

 * allows bare '5' and '6' (according to [1] these might actually exist on SUSE systems)

[1] https://gcc.gnu.org/ml/gcc-patches/2017-01/msg00851.html


Signed-off-by: Peter Pöschl <pp+wrt0611@nest-ai.de>
---
diff --git a/include/prereq-build.mk b/include/prereq-build.mk
index d7562b4f72..10cf746809 100644
--- a/include/prereq-build.mk
+++ b/include/prereq-build.mk
@@ -28,8 +28,8 @@ $(eval $(call TestHostCommand,proper-umask, \
 
 $(eval $(call SetupHostCommand,gcc, \
        Please install the GNU C Compiler (gcc) 4.8 or later \
-       $(CC) -dumpversion | grep -E '(4\.[8-9]|5\.?[0-9]?|6\.?[0-9]?|7\.?[0-9]?)', \
-       gcc -dumpversion | grep -E '(4\.[8-9]|5\.?[0-9]?|6\.?[0-9]?|7\.?[0-9]?)', \
+       $(CC) -dumpversion | grep -E '^(4\.[8-9]|[5-7]($$$$$$$$|\.[0-9]))', \
+       gcc -dumpversion | grep -E '^(4\.[8-9]|[5-7]($$$$$$$$|\.[0-9]))', \
        gcc48 --version | grep gcc, \
        gcc49 --version | grep gcc, \
        gcc5 --version | grep gcc, \
@@ -45,8 +45,8 @@ $(eval $(call TestHostCommand,working-gcc, \
 
 $(eval $(call SetupHostCommand,g++, \
        Please install the GNU C++ Compiler (g++) 4.8 or later \
-       $(CXX) -dumpversion | grep -E '(4\.[8-9]|5\.?[0-9]?|6\.?[0-9]?|7\.?[0-9]?)', \
-       g++ -dumpversion | grep -E '(4\.[8-9]|5\.?[0-9]?|6\.?[0-9]?|7\.?[0-9]?)', \
+       $(CXX) -dumpversion | grep -E '^(4\.[8-9]|[5-7]($$$$$$$$|\.[0-9]))', \
+       g++ -dumpversion | grep -E '^(4\.[8-9]|[5-7]($$$$$$$$|\.[0-9]))', \
        g++48 --version | grep g++, \
        g++49 --version | grep g++, \
        g++5 --version | grep g++, \

--
2.15.0
Jo-Philipp Wich Nov. 28, 2017, 5:49 p.m. UTC | #3
Hi Peter,

> In Debian there were/are gcc-4.2 .. gcc-4.9, gcc-5 .. gcc-7.
> And what about beauties like 'x86_64-linux-gnu-gcc-7'?
> Why not ditch the 'gcc* --version' invocations and have people use
> 'CC=fancy-named-gcc' on the command line if needed?

That should already work (after fixing the version regex). The build
system will call "$(CC) -dumpversion" and symlink that to
./staging_dir/host/bin/gcc if passing the check, so the extra "gcc-7"
patch hunk should not be needed if you're fine with invoking the
buildroot using "CC=gcc-7 make ...".

I'm fine with removing the version checks entirely if we find an
alternative to check for GCC > 4.8 - maybe a feature test of some sort?

~ Jo
Peter Pöschl Dec. 17, 2017, 11:40 a.m. UTC | #4
Hi Jo,
 
(not subscribed, trying to reply to your mail extracted from the archives)

> > In Debian there were/are gcc-4.2 .. gcc-4.9, gcc-5 .. gcc-7.
> > And what about beauties like 'x86_64-linux-gnu-gcc-7'?
> > Why not ditch the 'gcc* --version' invocations and have people use
> > 'CC=fancy-named-gcc' on the command line if needed?
> ...
> I'm fine with removing the version checks entirely if we find an
> alternative to check for GCC > 4.8 - maybe a feature test of some sort?

Which features do you want to test for?
Alternatively, how about switching from a never-complete whitelist
to a blacklist like this:

Signed-off-by: Peter Pöschl <pp+wrt0611@nest-ai.de>
---
diff --git a/include/prereq-build.mk b/include/prereq-build.mk
index 6a423d2c7d..4e63cde56a 100644
--- a/include/prereq-build.mk
+++ b/include/prereq-build.mk
@@ -28,13 +28,8 @@ $(eval $(call TestHostCommand,proper-umask, \
 
 $(eval $(call SetupHostCommand,gcc, \
        Please install the GNU C Compiler (gcc) 4.8 or later \
-       $(CC) -dumpversion | grep -E '(4\.[8-9]|5\.?[0-9]?|6\.?[0-9]?|7\.?[0-9]?)', \
-       gcc -dumpversion | grep -E '(4\.[8-9]|5\.?[0-9]?|6\.?[0-9]?|7\.?[0-9]?)', \
-       gcc48 --version | grep gcc, \
-       gcc49 --version | grep gcc, \
-       gcc5 --version | grep gcc, \
-       gcc6 --version | grep gcc, \
-       gcc7 --version | grep gcc, \
+       $(CC) -dumpversion | grep -Ev '^([1-3]\.|4\.[0-7])', \
+       gcc -dumpversion | grep -Ev '^([1-3]\.|4\.[0-7])', \
        gcc --version | grep Apple.LLVM ))
 
 $(eval $(call TestHostCommand,working-gcc, \
@@ -45,13 +40,8 @@ $(eval $(call TestHostCommand,working-gcc, \
 
 $(eval $(call SetupHostCommand,g++, \
        Please install the GNU C++ Compiler (g++) 4.8 or later \
-       $(CXX) -dumpversion | grep -E '(4\.[8-9]|5\.?[0-9]?|6\.?[0-9]?|7\.?[0-9]?)', \
-       g++ -dumpversion | grep -E '(4\.[8-9]|5\.?[0-9]?|6\.?[0-9]?|7\.?[0-9]?)', \
-       g++48 --version | grep g++, \
-       g++49 --version | grep g++, \
-       g++5 --version | grep g++, \
-       g++6 --version | grep g++, \
-       g++7 --version | grep g++, \
+       $(CXX) -dumpversion | grep -Ev '^([1-3]\.|4\.[0-7])', \
+       g++ -dumpversion | grep -Ev '^([1-3]\.|4\.[0-7])', \
        g++ --version | grep Apple.LLVM ))
 
 $(eval $(call TestHostCommand,working-g++, \
diff mbox series

Patch

diff --git a/include/prereq-build.mk b/include/prereq-build.mk
index c6f99a2071..43a8da290f 100644
--- a/include/prereq-build.mk
+++ b/include/prereq-build.mk
@@ -28,13 +28,14 @@  $(eval $(call TestHostCommand,proper-umask, \
 
 $(eval $(call SetupHostCommand,gcc, \
        Please install the GNU C Compiler (gcc) 4.8 or later \
-       $(CC) -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|7\.[0-9])', \
-       gcc -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|7\.[0-9])', \
+       $(CC) -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|^7$$$$$$$$|7\.[0-9])', \
+       gcc -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|^7$$$$$$$$|7\.[0-9])', \
        gcc48 --version | grep gcc, \
        gcc49 --version | grep gcc, \
        gcc5 --version | grep gcc, \
        gcc6 --version | grep gcc, \
        gcc7 --version | grep gcc, \
+       gcc-7 --version | grep gcc, \
        gcc --version | grep Apple.LLVM ))
 
 $(eval $(call TestHostCommand,working-gcc, \
@@ -45,13 +46,14 @@  $(eval $(call TestHostCommand,working-gcc, \
 
 $(eval $(call SetupHostCommand,g++, \
        Please install the GNU C++ Compiler (g++) 4.8 or later \
-       $(CXX) -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|7\.[0-9])', \
-       g++ -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|7\.[0-9])', \
+       $(CXX) -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|^7$$$$$$$$|7\.[0-9])', \
+       g++ -dumpversion | grep -E '(4\.[8-9]|5\.[0-9]|6\.[0-9]|^7$$$$$$$$|7\.[0-9])', \
        g++48 --version | grep g++, \
        g++49 --version | grep g++, \
        g++5 --version | grep g++, \
        g++6 --version | grep g++, \
        g++7 --version | grep g++, \
+       g++-7 --version | grep g++, \
        g++ --version | grep Apple.LLVM ))
 
 $(eval $(call TestHostCommand,working-g++, \