summaryrefslogtreecommitdiffstats
path: root/src/arrow/cpp/build-support/iwyu/iwyu-filter.awk
diff options
context:
space:
mode:
Diffstat (limited to 'src/arrow/cpp/build-support/iwyu/iwyu-filter.awk')
-rw-r--r--src/arrow/cpp/build-support/iwyu/iwyu-filter.awk96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/arrow/cpp/build-support/iwyu/iwyu-filter.awk b/src/arrow/cpp/build-support/iwyu/iwyu-filter.awk
new file mode 100644
index 000000000..943ab115c
--- /dev/null
+++ b/src/arrow/cpp/build-support/iwyu/iwyu-filter.awk
@@ -0,0 +1,96 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+#
+# This is an awk script to process output from the include-what-you-use (IWYU)
+# tool. As of now, IWYU is of alpha quality and it gives many incorrect
+# recommendations -- obviously invalid or leading to compilation breakage.
+# Most of those can be silenced using appropriate IWYU pragmas, but it's not
+# the case for the auto-generated files.
+#
+# Also, it's possible to address invalid recommendation using mappings:
+# https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUMappings.md
+#
+# Usage:
+# 1. Run the CMake with -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=<iwyu_cmd_line>
+#
+# The path to the IWYU binary should be absolute. The path to the binary
+# and the command-line options should be separated by semicolon
+# (that's for feeding it into CMake list variables).
+#
+# E.g., from the build directory (line breaks are just for readability):
+#
+# CC=../../thirdparty/clang-toolchain/bin/clang
+# CXX=../../thirdparty/clang-toolchain/bin/clang++
+# IWYU="`pwd`../../thirdparty/clang-toolchain/bin/include-what-you-use;\
+# -Xiwyu;--mapping_file=`pwd`../../build-support/iwyu/mappings/map.imp"
+#
+# ../../build-support/enable_devtoolset.sh \
+# env CC=$CC CXX=$CXX \
+# ../../thirdparty/installed/common/bin/cmake \
+# -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=\"$IWYU\" \
+# ../..
+#
+# NOTE:
+# Since the arrow code has some 'ifdef NDEBUG' directives, it's possible
+# that IWYU would produce different results if run against release, not
+# debug build. However, we plan to use the tool only with debug builds.
+#
+# 2. Run make, separating the output from the IWYU tool into a separate file
+# (it's possible to use piping the output from the tool to the script
+# but having a file is good for future reference, if necessary):
+#
+# make -j$(nproc) 2>/tmp/iwyu.log
+#
+# 3. Process the output from the IWYU tool using the script:
+#
+# awk -f ../../build-support/iwyu/iwyu-filter.awk /tmp/iwyu.log
+#
+
+BEGIN {
+ # This is the list of the files for which the suggestions from IWYU are
+ # ignored. Eventually, this list should become empty as soon as all the valid
+ # suggestions are addressed and invalid ones are taken care either by proper
+ # IWYU pragmas or adding special mappings (e.g. like boost mappings).
+ # muted["relative/path/to/file"]
+ muted["arrow/util/bit-util-test.cc"]
+ muted["arrow/util/rle-encoding-test.cc"]
+ muted["arrow/vendored"]
+ muted["include/hdfs.h"]
+ muted["arrow/visitor.h"]
+}
+
+# mute all suggestions for the auto-generated files
+/.*\.(pb|proxy|service)\.(cc|h) should (add|remove) these lines:/, /^$/ {
+ next
+}
+
+# mute suggestions for the explicitly specified files
+/.* should (add|remove) these lines:/ {
+ do_print = 1
+ for (path in muted) {
+ if (index($0, path)) {
+ do_print = 0
+ break
+ }
+ }
+}
+/^$/ {
+ if (do_print) print
+ do_print = 0
+}
+{ if (do_print) print }