commit:     7acd5f570128aedd2b027bda84b3838539eba49e
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Nov  8 22:42:36 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Nov  8 22:46:19 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7acd5f57

sys-devel/clang-common: drop -Werror=deprecated-non-prototype for 15.x, promote 
to 16.x

Clang 16.x will make -Wimplicit-int, -Wimplicit-function-declaration, and
-Wincompatible-function-pointer-type error by default.

Clang 15.x+ also warns on -Wdeprecated-non-prototype but it's not becoming
fatal yet. It'll be an error when the defaults in compilers change to C23.

There's a LOT of breakage with -Werror=deprecated-non-prototype, and we do
care about it, but the first batch of errors mentioned above are more
important for the time being. We need to be able to triage and prioritise
the bugs.

So:
* Clang 15 USE=stricter: only -Wimplict-int -Wimplicit-function-declaration
  and -Wincompatible-function-pointer-type are errors.

* Clang 16 USE=stricter: upstream defaults (which include ^ as we're
  doing for clang 15) + -Wdeprecated-non-prototype as an error, because 
presumably
  if you set USE=stricter on *16*, you want something harsher than already
  will ship upstream.

This more accurately lets developers in Gentoo set USE=stricter on clang-common
for 15.x and get Clang 16.x behaviour rather than scaring the life out of them.

Thanks to Ionen for talking this out with me.

Bug: https://bugs.gentoo.org/876985
See: 930fe2268cbedda61e37fada65e57352d25d8761
Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...15.0.4.ebuild => clang-common-15.0.4-r1.ebuild} |   3 -
 .../clang-common/clang-common-15.0.4.9999.ebuild   |   3 -
 .../clang-common/clang-common-16.0.0.9999.ebuild   |   6 +
 ...d => clang-common-16.0.0_pre20221023-r2.ebuild} |   6 +
 ...d => clang-common-16.0.0_pre20221104-r1.ebuild} |   3 +
 .../clang-common-16.0.0_pre20221104.ebuild         | 126 ---------------------
 6 files changed, 15 insertions(+), 132 deletions(-)

diff --git a/sys-devel/clang-common/clang-common-15.0.4.ebuild 
b/sys-devel/clang-common/clang-common-15.0.4-r1.ebuild
similarity index 98%
rename from sys-devel/clang-common/clang-common-15.0.4.ebuild
rename to sys-devel/clang-common/clang-common-15.0.4-r1.ebuild
index 819076f87723..f7293fd3cb2b 100644
--- a/sys-devel/clang-common/clang-common-15.0.4.ebuild
+++ b/sys-devel/clang-common/clang-common-15.0.4-r1.ebuild
@@ -97,9 +97,6 @@ src_install() {
                        -Werror=implicit-function-declaration
                        -Werror=implicit-int
                        -Werror=incompatible-function-pointer-types
-
-                       # constructs banned by C2x
-                       -Werror=deprecated-non-prototype
                EOF
 
                cat >> "${ED}/etc/clang/gentoo-common.cfg" <<-EOF || die

diff --git a/sys-devel/clang-common/clang-common-15.0.4.9999.ebuild 
b/sys-devel/clang-common/clang-common-15.0.4.9999.ebuild
index d5e7941a5fc8..3e43f51a0aab 100644
--- a/sys-devel/clang-common/clang-common-15.0.4.9999.ebuild
+++ b/sys-devel/clang-common/clang-common-15.0.4.9999.ebuild
@@ -97,9 +97,6 @@ src_install() {
                        -Werror=implicit-function-declaration
                        -Werror=implicit-int
                        -Werror=incompatible-function-pointer-types
-
-                       # constructs banned by C2x
-                       -Werror=deprecated-non-prototype
                EOF
 
                cat >> "${ED}/etc/clang/gentoo-common.cfg" <<-EOF || die

diff --git a/sys-devel/clang-common/clang-common-16.0.0.9999.ebuild 
b/sys-devel/clang-common/clang-common-16.0.0.9999.ebuild
index 3e43f51a0aab..e9669ee1adcc 100644
--- a/sys-devel/clang-common/clang-common-16.0.0.9999.ebuild
+++ b/sys-devel/clang-common/clang-common-16.0.0.9999.ebuild
@@ -97,6 +97,12 @@ src_install() {
                        -Werror=implicit-function-declaration
                        -Werror=implicit-int
                        -Werror=incompatible-function-pointer-types
+
+                       # constructs banned by C2x
+                       -Werror=deprecated-non-prototype
+
+                       # deprecated but large blast radius
+                       #-Werror=strict-prototypes
                EOF
 
                cat >> "${ED}/etc/clang/gentoo-common.cfg" <<-EOF || die

diff --git a/sys-devel/clang-common/clang-common-16.0.0_pre20221023-r1.ebuild 
b/sys-devel/clang-common/clang-common-16.0.0_pre20221023-r2.ebuild
similarity index 96%
rename from sys-devel/clang-common/clang-common-16.0.0_pre20221023-r1.ebuild
rename to sys-devel/clang-common/clang-common-16.0.0_pre20221023-r2.ebuild
index 3e43f51a0aab..e9669ee1adcc 100644
--- a/sys-devel/clang-common/clang-common-16.0.0_pre20221023-r1.ebuild
+++ b/sys-devel/clang-common/clang-common-16.0.0_pre20221023-r2.ebuild
@@ -97,6 +97,12 @@ src_install() {
                        -Werror=implicit-function-declaration
                        -Werror=implicit-int
                        -Werror=incompatible-function-pointer-types
+
+                       # constructs banned by C2x
+                       -Werror=deprecated-non-prototype
+
+                       # deprecated but large blast radius
+                       #-Werror=strict-prototypes
                EOF
 
                cat >> "${ED}/etc/clang/gentoo-common.cfg" <<-EOF || die

diff --git a/sys-devel/clang-common/clang-common-15.0.4.9999.ebuild 
b/sys-devel/clang-common/clang-common-16.0.0_pre20221104-r1.ebuild
similarity index 98%
copy from sys-devel/clang-common/clang-common-15.0.4.9999.ebuild
copy to sys-devel/clang-common/clang-common-16.0.0_pre20221104-r1.ebuild
index d5e7941a5fc8..e9669ee1adcc 100644
--- a/sys-devel/clang-common/clang-common-15.0.4.9999.ebuild
+++ b/sys-devel/clang-common/clang-common-16.0.0_pre20221104-r1.ebuild
@@ -100,6 +100,9 @@ src_install() {
 
                        # constructs banned by C2x
                        -Werror=deprecated-non-prototype
+
+                       # deprecated but large blast radius
+                       #-Werror=strict-prototypes
                EOF
 
                cat >> "${ED}/etc/clang/gentoo-common.cfg" <<-EOF || die

diff --git a/sys-devel/clang-common/clang-common-16.0.0_pre20221104.ebuild 
b/sys-devel/clang-common/clang-common-16.0.0_pre20221104.ebuild
deleted file mode 100644
index 3e43f51a0aab..000000000000
--- a/sys-devel/clang-common/clang-common-16.0.0_pre20221104.ebuild
+++ /dev/null
@@ -1,126 +0,0 @@
-# Copyright 1999-2022 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-inherit bash-completion-r1 llvm.org
-
-DESCRIPTION="Common files shared between multiple slots of clang"
-HOMEPAGE="https://llvm.org/";
-
-LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA"
-SLOT="0"
-KEYWORDS=""
-IUSE="
-       default-compiler-rt default-libcxx default-lld llvm-libunwind
-       stricter
-"
-
-PDEPEND="
-       sys-devel/clang:*
-       default-compiler-rt? (
-               sys-devel/clang-runtime[compiler-rt]
-               llvm-libunwind? ( sys-libs/llvm-libunwind )
-               !llvm-libunwind? ( sys-libs/libunwind )
-       )
-       !default-compiler-rt? ( sys-devel/gcc )
-       default-libcxx? ( >=sys-libs/libcxx-${PV} )
-       !default-libcxx? ( sys-devel/gcc )
-       default-lld? ( sys-devel/lld )
-       !default-lld? ( sys-devel/binutils )
-"
-IDEPEND="
-       !default-compiler-rt? ( sys-devel/gcc-config )
-       !default-libcxx? ( sys-devel/gcc-config )
-"
-
-LLVM_COMPONENTS=( clang/utils )
-llvm.org_set_globals
-
-pkg_pretend() {
-       [[ ${CLANG_IGNORE_DEFAULT_RUNTIMES} ]] && return
-
-       local flag missing_flags=()
-       for flag in default-{compiler-rt,libcxx,lld}; do
-               if ! use "${flag}" && has_version "sys-devel/clang[${flag}]"; 
then
-                       missing_flags+=( "${flag}" )
-               fi
-       done
-
-       if [[ ${missing_flags[@]} ]]; then
-               eerror "It seems that you have the following flags set on 
sys-devel/clang:"
-               eerror
-               eerror "  ${missing_flags[*]}"
-               eerror
-               eerror "The default runtimes are now set via flags on 
sys-devel/clang-common."
-               eerror "The build is being aborted to prevent breakage.  Please 
either set"
-               eerror "the respective flags on this ebuild, e.g.:"
-               eerror
-               eerror "  sys-devel/clang-common ${missing_flags[*]}"
-               eerror
-               eerror "or build with CLANG_IGNORE_DEFAULT_RUNTIMES=1."
-               die "Mismatched defaults detected between sys-devel/clang and 
sys-devel/clang-common"
-       fi
-}
-
-src_install() {
-       newbashcomp bash-autocomplete.sh clang
-
-       insinto /etc/clang
-       newins - gentoo-runtimes.cfg <<-EOF
-               # This file is initially generated by sys-devel/clang-runtime.
-               # It is used to control the default runtimes using by clang.
-
-               --rtlib=$(usex default-compiler-rt compiler-rt libgcc)
-               --unwindlib=$(usex default-compiler-rt libunwind libgcc)
-               --stdlib=$(usex default-libcxx libc++ libstdc++)
-               -fuse-ld=$(usex default-lld lld bfd)
-       EOF
-
-       newins - gentoo-gcc-install.cfg <<-EOF
-               # This file is maintained by gcc-config.
-               # It is used to specify the selected GCC installation.
-       EOF
-
-       newins - gentoo-common.cfg <<-EOF
-               # This file contains flags common to clang, clang++ and 
clang-cpp.
-               @gentoo-runtimes.cfg
-               @gentoo-gcc-install.cfg
-       EOF
-
-       if use stricter; then
-               newins - gentoo-stricter.cfg <<-EOF
-                       # This file increases the strictness of older clang 
versions
-                       # to match the newest upstream version.
-
-                       # clang-16 defaults
-                       -Werror=implicit-function-declaration
-                       -Werror=implicit-int
-                       -Werror=incompatible-function-pointer-types
-               EOF
-
-               cat >> "${ED}/etc/clang/gentoo-common.cfg" <<-EOF || die
-                       @gentoo-stricter.cfg
-               EOF
-       fi
-
-       local tool
-       for tool in clang{,++,-cpp}; do
-               newins - "${tool}.cfg" <<-EOF
-                       # This configuration file is used by ${tool} driver.
-                       @gentoo-common.cfg
-               EOF
-       done
-}
-
-pkg_preinst() {
-       if has_version -b sys-devel/gcc-config && has_version sys-devel/gcc
-       then
-               local gcc_path=$(gcc-config --get-lib-path 2>/dev/null)
-               if [[ -n ${gcc_path} ]]; then
-                       cat >> "${ED}/etc/clang/gentoo-gcc-install.cfg" <<-EOF
-                               --gcc-install-dir="${gcc_path%%:*}"
-                       EOF
-               fi
-       fi
-}

Reply via email to