Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"cargo-warning:Compiler version doesn't include clang or GCC" prints a lot on Ubuntu #909

Closed
jonathanpallant opened this issue Dec 5, 2023 · 10 comments · Fixed by #932
Closed

Comments

@jonathanpallant
Copy link

jonathanpallant commented Dec 5, 2023

When I'm building Rust (well, Ferrocene), I see a lot of:

cargo-warning:Compiler version doesn't include clang or GCC: "cc" "--version"

This appears to be because Ubuntu 22.04's GCC doesn't report itself as GCC failing this check.

ubuntu@machine:~/work/ferrocene$ cc --version
 cc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
 Copyright (C) 2021 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ubuntu@machine:~/work/ferrocene$ gcc --version
 gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
 Copyright (C) 2021 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ubuntu@machine:~/work/ferrocene$ clang --version
 Ubuntu clang version 14.0.0-1ubuntu1.1
 Target: x86_64-pc-linux-gnu
 Thread model: posix
 InstalledDir: /usr/bin

ubuntu@machine:~/work/ferrocene$ uname -a
 Linux ip-172-31-17-237 6.2.0-1016-aws #16~22.04.1-Ubuntu SMP Sun Nov  5 20:08:16 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

ubuntu@machine:~/work/ferrocene$

I'm using cc 1.0.79.

If --version doesn't help, you could consider using cc -v instead?

ubuntu@machine:~/work/ferrocene$ cc -v
 Using built-in specs.
 COLLECT_GCC=cc
 COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
 OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
 OFFLOAD_TARGET_DEFAULT=1
 Target: x86_64-linux-gnu
 Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
 Thread model: posix
 Supported LTO compression algorithms: zlib zstd
 gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)

ubuntu@machine:~/work/ferrocene$ gcc -v
 Using built-in specs.
 COLLECT_GCC=gcc
 COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
 OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
 OFFLOAD_TARGET_DEFAULT=1
 Target: x86_64-linux-gnu
 Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
 Thread model: posix
 Supported LTO compression algorithms: zlib zstd
 gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)

ubuntu@machine:~/work/ferrocene$ clang -v
 Ubuntu clang version 14.0.0-1ubuntu1.1
 Target: x86_64-pc-linux-gnu
 Thread model: posix
 InstalledDir: /usr/bin
 Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11
 Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11
 Candidate multilib: .;@m64
 Selected multilib: .;@m64

ubuntu@machine:~/work/ferrocene$

Other options include looking for the "Free Software Foundation" copyright (that will always mean it's gcc, surely), or the string cc (Ubuntu.

Clang's output remains constant, no matter whether it is called as clang or cc.

@curiousdannii
Copy link

curiousdannii commented Feb 13, 2024

I started getting these warnings today in Github Actions - caused by the 1.0.85 update?

Or perhaps when the Github Actions runner upgraded from 2.312.0 to 2.313.0.

@NobodyXu
Copy link
Collaborator

#932 should fix this, I will fix the merge conflict.

@dot-asm
Copy link
Contributor

dot-asm commented Feb 13, 2024

#932 should fix this, I will fix the merge conflict.

While it reduces minimizes the amount of warnings, one can still make the case that the warning itself is unwarranted. Because the detection mechanism is actually flawed. As the original report indicated, "GCC", the string cc-rs searches for, doesn't appear in gcc --version output in all Linux distributions. Moreover, even if one tries to narrow gcc detection down to something else, it would be bound to complain about nvcc, Nvidia compiler. For this reason the warnings should be either omitted altogether(*) or exposed only in the verbose build log.

(*) As in

diff --git a/src/tool.rs b/src/tool.rs
index 915be54..9c84458 100644
--- a/src/tool.rs
+++ b/src/tool.rs
@@ -84,14 +84,7 @@ impl Tool {
             };
             if stdout.contains("clang") {
                 ToolFamily::Clang
-            } else if stdout.contains("GCC") {
-                ToolFamily::Gnu
             } else {
-                // --version doesn't include clang for GCC
-                cargo_output.print_warning(&format_args!(
-                    "Compiler version doesn't include clang or GCC: {:?}",
-                    cmd
-                ));
                 ToolFamily::Gnu
             }
         }

@dot-asm
Copy link
Contributor

dot-asm commented Feb 13, 2024

"GCC", the string cc-rs searches for, doesn't appear in gcc --version output in all Linux distributions.

Just in case for reference. It appears on Fedora, RHEL and Archlinux, but not on Ubuntu, Debian and naturally their derivatives....

@NobodyXu
Copy link
Collaborator

Sounds good, I will open a separate PR to remove that warning.

@NobodyXu
Copy link
Collaborator

@dot-asm Thinking about this again, we probably need better ways to detect clang/gcc, rather than removing that warning.

@believeinlain
Copy link

I'm still seeing this on Ubuntu 22.04 with cc version 1.0.88, despite it being closed.

An idea I have to fix it would be to first invoke "cc --version", then if the "gcc" or "clang" strings cannot be found, to try "cc -v" before printing the warning. On my machine, "cc -v" does include "gcc" but "cc --version" does not.

@NobodyXu
Copy link
Collaborator

@believeinlain Yeah I think that might work, can you submit a PR for this?

@ivan23kor
Copy link

I have the same behaviour as @believeinlain described on my Ubuntu 20.04.6 LTS: cc --version does not contain gcc while cc -v does.

@NobodyXu
Copy link
Collaborator

NobodyXu commented Mar 5, 2024

cc version issue is tracked in #958

yedayak added a commit to yedayak/difftastic that referenced this issue Jul 18, 2024
This includes the fix to rust-lang/cc-rs#909
which spams warnings on ubuntu 22.04
Wilfred pushed a commit to Wilfred/difftastic that referenced this issue Jul 18, 2024
This includes the fix to rust-lang/cc-rs#909
which spams warnings on ubuntu 22.04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants