From fb44166ff4c65c64acb9a008e0c8eb852461699b Mon Sep 17 00:00:00 2001
From: Philipp Stephani
Date: Mon, 26 Feb 2024 14:13:09 +0100
Subject: [PATCH] Treat external repositories as system headers for warning
purposes.
This should reduce the noise necessary to disable warnings.
---
.bazelrc | 13 ++++++++++++-
.github/actions/set-up/action.yaml | 11 +++++++++++
elisp/binary.cc | 16 ----------------
elisp/emacs.cc | 16 ----------------
elisp/launcher.cc | 16 ----------------
elisp/main.h | 16 ----------------
elisp/process.cc | 16 ----------------
elisp/process.h | 16 ----------------
elisp/proto/module.c | 15 ---------------
elisp/test.cc | 16 ----------------
examples/ext/.bazelrc | 5 +++++
private/defs.bzl | 9 +++++++++
12 files changed, 37 insertions(+), 128 deletions(-)
diff --git a/.bazelrc b/.bazelrc
index 0023bdb2..7f9ee17e 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -1,4 +1,4 @@
-# Copyright 2021, 2022, 2023 Google LLC
+# Copyright 2021, 2022, 2023, 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -12,10 +12,21 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+common --enable_platform_specific_config
+
# Run Pylint by default.
build --aspects='//private:defs.bzl%check_python'
build --output_groups='+check_python'
+# The external_include_paths feature has to be specified in .bazelrc because it
+# needs to apply to all compile actions in all repositories.
+# TODO: File bug against Bazel to make this work as repository-level feature.
+build --features=external_include_paths --host_features=external_include_paths
+
+# The next line shouldn’t be necessary.
+# TODO: File bug against Bazel.
+build:windows --copt=/external:W0
+
import %workspace%/c-std.bazelrc
try-import %workspace%/github.bazelrc
diff --git a/.github/actions/set-up/action.yaml b/.github/actions/set-up/action.yaml
index dbcb5725..c5ff58a9 100644
--- a/.github/actions/set-up/action.yaml
+++ b/.github/actions/set-up/action.yaml
@@ -129,3 +129,14 @@ runs:
startsWith(inputs.bazel-version, '6.3.') ||
startsWith(inputs.bazel-version, '6.4.')
)
+ - name: Remove unsupported options
+ shell: bash
+ # --host_features was introduced in Bazel 6.1.
+ run: |
+ set -efuC
+ for file in .bazelrc examples/ext/.bazelrc; do
+ sed -- 's/--host_features=[_[:alnum:]]*//g' "${file}" > "${file}.temp"
+ mv -- "${file}.temp" "${file}"
+ done
+ if: >-
+ startsWith(inputs.bazel-version, '6.0.')
diff --git a/elisp/binary.cc b/elisp/binary.cc
index 53206d81..467136ca 100644
--- a/elisp/binary.cc
+++ b/elisp/binary.cc
@@ -16,24 +16,8 @@
#include
-#ifdef __GNUC__
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wpedantic"
-# pragma GCC diagnostic ignored "-Wconversion"
-# pragma GCC diagnostic ignored "-Wsign-conversion"
-# pragma GCC diagnostic ignored "-Woverflow"
-#endif
-#ifdef _MSC_VER
-# pragma warning(push, 3)
-#endif
#include "absl/status/statusor.h"
#include "absl/types/span.h"
-#ifdef __GNUC__
-# pragma GCC diagnostic pop
-#endif
-#ifdef _MSC_VER
-# pragma warning(pop)
-#endif
#include "elisp/platform.h"
#include "elisp/process.h"
diff --git a/elisp/emacs.cc b/elisp/emacs.cc
index 924fbf13..52b617b9 100644
--- a/elisp/emacs.cc
+++ b/elisp/emacs.cc
@@ -16,24 +16,8 @@
#include
-#ifdef __GNUC__
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wpedantic"
-# pragma GCC diagnostic ignored "-Wconversion"
-# pragma GCC diagnostic ignored "-Wsign-conversion"
-# pragma GCC diagnostic ignored "-Woverflow"
-#endif
-#ifdef _MSC_VER
-# pragma warning(push, 3)
-#endif
#include "absl/status/statusor.h"
#include "absl/types/span.h"
-#ifdef __GNUC__
-# pragma GCC diagnostic pop
-#endif
-#ifdef _MSC_VER
-# pragma warning(pop)
-#endif
#include "elisp/platform.h"
#include "elisp/process.h"
diff --git a/elisp/launcher.cc b/elisp/launcher.cc
index bcaaaf51..9f8082a0 100644
--- a/elisp/launcher.cc
+++ b/elisp/launcher.cc
@@ -14,28 +14,12 @@
#include
-#ifdef __GNUC__
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wpedantic"
-# pragma GCC diagnostic ignored "-Wconversion"
-# pragma GCC diagnostic ignored "-Wsign-conversion"
-# pragma GCC diagnostic ignored "-Woverflow"
-#endif
-#ifdef _MSC_VER
-# pragma warning(push, 3)
-#endif
#include "absl/container/fixed_array.h"
#include "absl/log/log.h"
#include "absl/meta/type_traits.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/types/span.h"
-#ifdef __GNUC__
-# pragma GCC diagnostic pop
-#endif
-#ifdef _MSC_VER
-# pragma warning(pop)
-#endif
#include "elisp/platform.h"
#include "elisp/main.h"
diff --git a/elisp/main.h b/elisp/main.h
index f97ffa62..4bbbb683 100644
--- a/elisp/main.h
+++ b/elisp/main.h
@@ -21,24 +21,8 @@
#include
-#ifdef __GNUC__
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wpedantic"
-# pragma GCC diagnostic ignored "-Wconversion"
-# pragma GCC diagnostic ignored "-Wsign-conversion"
-# pragma GCC diagnostic ignored "-Woverflow"
-#endif
-#ifdef _MSC_VER
-# pragma warning(push, 3)
-#endif
#include "absl/status/statusor.h"
#include "absl/types/span.h"
-#ifdef __GNUC__
-# pragma GCC diagnostic pop
-#endif
-#ifdef _MSC_VER
-# pragma warning(pop)
-#endif
#include "elisp/platform.h"
diff --git a/elisp/process.cc b/elisp/process.cc
index 14bc60eb..89dab58b 100644
--- a/elisp/process.cc
+++ b/elisp/process.cc
@@ -52,16 +52,6 @@
#include
#include
-#ifdef __GNUC__
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wpedantic"
-# pragma GCC diagnostic ignored "-Wconversion"
-# pragma GCC diagnostic ignored "-Wsign-conversion"
-# pragma GCC diagnostic ignored "-Woverflow"
-#endif
-#ifdef _MSC_VER
-# pragma warning(push, 3)
-#endif
#include "absl/algorithm/container.h"
#include "absl/base/attributes.h"
#include "absl/base/nullability.h"
@@ -78,12 +68,6 @@
#include "absl/strings/str_join.h"
#include "absl/types/span.h"
#include "tools/cpp/runfiles/runfiles.h"
-#ifdef __GNUC__
-# pragma GCC diagnostic pop
-#endif
-#ifdef _MSC_VER
-# pragma warning(pop)
-#endif
#ifdef __APPLE__
# include // for _NSGetEnviron
diff --git a/elisp/process.h b/elisp/process.h
index 10a5c2e4..d2010609 100644
--- a/elisp/process.h
+++ b/elisp/process.h
@@ -22,24 +22,8 @@
#include
#include // IWYU pragma: keep
-#ifdef __GNUC__
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wpedantic"
-# pragma GCC diagnostic ignored "-Wconversion"
-# pragma GCC diagnostic ignored "-Wsign-conversion"
-# pragma GCC diagnostic ignored "-Woverflow"
-#endif
-#ifdef _MSC_VER
-# pragma warning(push, 3)
-#endif
#include "absl/status/statusor.h"
#include "absl/types/span.h"
-#ifdef __GNUC__
-# pragma GCC diagnostic pop
-#endif
-#ifdef _MSC_VER
-# pragma warning(pop)
-#endif
#include "elisp/platform.h"
diff --git a/elisp/proto/module.c b/elisp/proto/module.c
index 98d332e4..51dfc3c0 100644
--- a/elisp/proto/module.c
+++ b/elisp/proto/module.c
@@ -131,15 +131,6 @@
# error Emacs module header too old
#endif
-#ifdef __GNUC__
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wconversion"
-# pragma GCC diagnostic ignored "-Wsign-conversion"
-#endif
-#ifdef _MSC_VER
-# pragma warning(push, 3)
-# pragma warning(disable : 4090 4244 4267 4334)
-#endif
#include "absl/base/attributes.h"
#include "absl/base/config.h"
#include "google/protobuf/any.upb.h"
@@ -165,12 +156,6 @@
#include "upb/util/required_fields.h"
#include "upb/wire/decode.h"
#include "upb/wire/encode.h"
-#ifdef __GNUC__
-# pragma GCC diagnostic pop
-#endif
-#ifdef _MSC_VER
-# pragma warning(pop)
-#endif
/// Global variables
diff --git a/elisp/test.cc b/elisp/test.cc
index 4f158477..20157e93 100644
--- a/elisp/test.cc
+++ b/elisp/test.cc
@@ -16,24 +16,8 @@
#include
-#ifdef __GNUC__
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wpedantic"
-# pragma GCC diagnostic ignored "-Wconversion"
-# pragma GCC diagnostic ignored "-Wsign-conversion"
-# pragma GCC diagnostic ignored "-Woverflow"
-#endif
-#ifdef _MSC_VER
-# pragma warning(push, 3)
-#endif
#include "absl/status/statusor.h"
#include "absl/types/span.h"
-#ifdef __GNUC__
-# pragma GCC diagnostic pop
-#endif
-#ifdef _MSC_VER
-# pragma warning(pop)
-#endif
#include "elisp/platform.h"
#include "elisp/process.h"
diff --git a/examples/ext/.bazelrc b/examples/ext/.bazelrc
index 02603282..c5646948 100644
--- a/examples/ext/.bazelrc
+++ b/examples/ext/.bazelrc
@@ -12,6 +12,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+# The external_include_paths feature has to be specified in .bazelrc because it
+# needs to apply to all compile actions in all repositories.
+# TODO: File bug against Bazel to make this work as repository-level feature.
+build --features=external_include_paths --host_features=external_include_paths
+
import %workspace%/../../c-std.bazelrc
try-import %workspace%/../../github.bazelrc
diff --git a/private/defs.bzl b/private/defs.bzl
index 044b94c5..0cf5e6e1 100644
--- a/private/defs.bzl
+++ b/private/defs.bzl
@@ -440,6 +440,15 @@ COPTS = select({
"-pedantic",
"-pedantic-errors",
],
+}) + select({
+ Label("//private:clang"): [
+ # This shouldn’t be needed, but the external_include_paths feature
+ # doesn’t work on macOS.
+ # TODO: File bug against Bazel.
+ "--system-header-prefix=absl/",
+ "--system-header-prefix=upb/",
+ ],
+ Label("//conditions:default"): [],
})
CXXOPTS = select({