This is an automated email from the ASF dual-hosted git repository.
wesm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new e0f70bb ARROW-3420: [C++] include-what-you-use cleanups for most of
src/arrow, add "iwyu" target to top level docker-compose
e0f70bb is described below
commit e0f70bbf9bc8eb909373abaaf0b4c9f50bc0a2d6
Author: Wes McKinney <[email protected]>
AuthorDate: Sun Oct 7 04:36:12 2018 -0400
ARROW-3420: [C++] include-what-you-use cleanups for most of src/arrow, add
"iwyu" target to top level docker-compose
You can run IWYU now with `docker-compose run iwyu`.
I fixed most of the obvious issues in src/arrow. There are some I couldn't
quite figure out. I will leave cleaning src/parquet for a follow up patch.
IWYU makes some spurious reports thinking that certain headers can be
removed when they cannot. Not sure what's going on there.
Author: Wes McKinney <[email protected]>
Author: Krisztián Szűcs <[email protected]>
Closes #2713 from wesm/ARROW-3420 and squashes the following commits:
5f1ddb6f0 <Krisztián Szűcs> check-format
c34b707e9 <Wes McKinney> MSVC fixes
7e25eaeec <Wes McKinney> Fix more IWYU issues
d2b4a6668 <Wes McKinney> more IWYU
b14d90488 <Wes McKinney> Port IWYU setup to docker-compose, initial pass
over src/arrow
---
cpp/build-support/iwyu/mappings/arrow-misc.imp | 5 +++++
cpp/cmake_modules/SetupCxxFlags.cmake | 5 ++++-
cpp/src/arrow/api.h | 26 ++++++++++++-------------
cpp/src/arrow/array-test.cc | 13 +++++++++++--
cpp/src/arrow/array.cc | 3 +--
cpp/src/arrow/array.h | 12 ++++++------
cpp/src/arrow/buffer-test.cc | 2 ++
cpp/src/arrow/buffer.h | 1 +
cpp/src/arrow/builder.cc | 3 +--
cpp/src/arrow/builder.h | 14 ++++++-------
cpp/src/arrow/compare.cc | 8 +++++++-
cpp/src/arrow/compare.h | 1 -
cpp/src/arrow/compute/api.h | 8 ++++----
cpp/src/arrow/compute/compute-test.cc | 15 +++++++-------
cpp/src/arrow/compute/context.h | 5 ++++-
cpp/src/arrow/compute/kernel.h | 2 +-
cpp/src/arrow/compute/kernels/boolean.cc | 10 ++++++++--
cpp/src/arrow/compute/kernels/boolean.h | 13 +++----------
cpp/src/arrow/compute/kernels/cast.cc | 4 +---
cpp/src/arrow/compute/kernels/cast.h | 8 ++++----
cpp/src/arrow/compute/kernels/hash.cc | 14 ++++++++++++-
cpp/src/arrow/compute/kernels/hash.h | 7 +++++--
cpp/src/arrow/compute/kernels/util-internal.cc | 3 ++-
cpp/src/arrow/compute/kernels/util-internal.h | 4 +++-
cpp/src/arrow/csv/chunker.cc | 6 +++---
cpp/src/arrow/csv/chunker.h | 2 +-
cpp/src/arrow/csv/column-builder.cc | 15 +++++++++++++-
cpp/src/arrow/csv/converter.cc | 13 ++++++++-----
cpp/src/arrow/csv/converter.h | 7 +++++--
cpp/src/arrow/csv/csv-chunker-test.cc | 9 ++++-----
cpp/src/arrow/csv/csv-column-builder-test.cc | 13 +++++++++----
cpp/src/arrow/csv/csv-converter-test.cc | 10 ++++++++--
cpp/src/arrow/csv/csv-parser-test.cc | 7 +++++--
cpp/src/arrow/csv/parser.cc | 7 ++++---
cpp/src/arrow/csv/parser.h | 2 ++
cpp/src/arrow/csv/reader.cc | 23 +++++++++++++++++-----
cpp/src/arrow/csv/reader.h | 2 +-
cpp/src/arrow/io/buffered.h | 2 +-
cpp/src/arrow/io/file.cc | 10 +++++-----
cpp/src/arrow/io/hdfs.cc | 8 +++++++-
cpp/src/arrow/io/io-buffered-test.cc | 12 ++++++++++++
cpp/src/arrow/io/io-file-test.cc | 6 +++++-
cpp/src/arrow/io/io-memory-test.cc | 1 -
cpp/src/arrow/io/io-readahead-test.cc | 6 ++++++
cpp/src/arrow/io/memory.h | 1 -
cpp/src/arrow/io/readahead.cc | 11 +++++++----
cpp/src/arrow/io/readahead.h | 6 ++++--
cpp/src/arrow/ipc/feather-test.cc | 15 ++++++++------
cpp/src/arrow/ipc/feather.cc | 4 ++--
cpp/src/arrow/ipc/ipc-json-test.cc | 5 ++---
cpp/src/arrow/ipc/ipc-read-write-test.cc | 20 +++++++++++--------
cpp/src/arrow/ipc/json-integration-test.cc | 3 +++
cpp/src/arrow/ipc/json-internal.cc | 7 ++++++-
cpp/src/arrow/ipc/json-internal.h | 20 ++++++++++++++-----
cpp/src/arrow/ipc/message.cc | 3 ++-
cpp/src/arrow/ipc/metadata-internal.cc | 10 ++--------
cpp/src/arrow/ipc/metadata-internal.h | 12 +++++++++---
cpp/src/arrow/ipc/reader.cc | 4 +---
cpp/src/arrow/ipc/stream-to-file.cc | 4 +---
cpp/src/arrow/ipc/writer.cc | 3 ++-
cpp/src/arrow/ipc/writer.h | 3 ---
cpp/src/arrow/memory_pool-test.cc | 1 +
cpp/src/arrow/pretty_print-test.cc | 8 ++++----
cpp/src/arrow/pretty_print.cc | 6 ++++--
cpp/src/arrow/public-api-test.cc | 6 +++---
cpp/src/arrow/python/arrow_to_pandas.cc | 10 +++++-----
cpp/src/arrow/python/numpy_interop.h | 10 +++++-----
cpp/src/arrow/python/platform.h | 2 +-
cpp/src/arrow/record_batch.h | 4 ++--
cpp/src/arrow/stl-test.cc | 8 +++++++-
cpp/src/arrow/table-test.cc | 4 ++--
cpp/src/arrow/table.h | 2 +-
cpp/src/arrow/table_builder-test.cc | 9 ++++++---
cpp/src/arrow/table_builder.cc | 4 ----
cpp/src/arrow/table_builder.h | 5 ++---
cpp/src/arrow/tensor-test.cc | 1 -
cpp/src/arrow/tensor.cc | 1 -
cpp/src/arrow/type-test.cc | 2 --
cpp/src/arrow/type.cc | 3 ++-
cpp/src/arrow/type.h | 8 ++++++--
cpp/src/arrow/util/bit-util-test.cc | 1 -
cpp/src/arrow/util/bit-util.cc | 6 +++++-
cpp/src/arrow/util/checked-cast-test.cc | 1 +
cpp/src/arrow/util/compression_zlib.cc | 1 +
cpp/src/arrow/util/decimal-test.cc | 4 ++++
cpp/src/arrow/util/decimal.cc | 8 ++++++--
cpp/src/arrow/util/hash.cc | 2 ++
cpp/src/arrow/util/io-util.cc | 7 +++++--
cpp/src/arrow/util/key_value_metadata.cc | 5 +++++
cpp/src/arrow/util/lazy-test.cc | 3 +++
cpp/src/arrow/util/logging-test.cc | 5 +++--
cpp/src/arrow/util/parsing-util-test.cc | 8 ++++----
cpp/src/arrow/util/task-group-test.cc | 11 +++++------
cpp/src/arrow/util/task-group.cc | 7 +++++--
cpp/src/arrow/util/task-group.h | 1 +
cpp/src/arrow/util/thread-pool-test.cc | 8 ++++++++
cpp/src/arrow/util/thread-pool.cc | 6 ++++--
cpp/src/arrow/util/thread-pool.h | 6 ++++--
cpp/src/gandiva/arrow.h | 1 +
cpp/src/parquet/arrow/reader.cc | 16 +++++++++------
cpp/src/parquet/arrow/reader.h | 11 +++++++++--
cpp/src/parquet/arrow/record_reader.cc | 18 ++++++++++++-----
cpp/src/parquet/arrow/record_reader.h | 22 +++++++++++----------
cpp/src/parquet/arrow/schema.h | 10 ++++++++--
cpp/src/parquet/bloom_filter-test.cc | 10 +++++++++-
cpp/src/parquet/file-deserialize-test.cc | 9 +++------
cpp/src/parquet/public-api-test.cc | 8 ++++----
cpp/src/parquet/thrift.h | 2 +-
dev/docker_common/Dockerfile.xenial.base | 9 ++++++++-
dev/docker_common/install_clang_tools_xenial.sh | 24 +++++++++++++++++++++++
dev/iwyu/Dockerfile | 6 +++---
dev/iwyu/run_iwyu.sh | 16 ++++++++++-----
docker-compose.yml | 9 +++++++++
python/manylinux1/README.md | 1 -
114 files changed, 549 insertions(+), 285 deletions(-)
diff --git a/cpp/build-support/iwyu/mappings/arrow-misc.imp
b/cpp/build-support/iwyu/mappings/arrow-misc.imp
index cbe5bd1..8bb65e6 100644
--- a/cpp/build-support/iwyu/mappings/arrow-misc.imp
+++ b/cpp/build-support/iwyu/mappings/arrow-misc.imp
@@ -15,6 +15,7 @@
# specific language governing permissions and limitations
# under the License.
[
+ { include: ["<ext/new_allocator.h>", private, "<cstddef>", public ] },
{ include: ["<ext/alloc_traits.h>", private, "<memory>", public ] },
{ include: ["<ext/alloc_traits.h>", private, "<condition_variable>", public
] },
{ include: ["<ext/alloc_traits.h>", private, "<deque>", public ] },
@@ -29,6 +30,7 @@
{ include: ["<bits/stdint-intn.h>", private, "<cstdint>", public ] },
{ include: ["<bits/stdint-uintn.h>", private, "<cstdint>", public ] },
{ include: ["<bits/shared_ptr.h>", private, "<memory>", public ] },
+ { include: ["<initializer_list>", public, "<vector>", public ] },
{ symbol: ["bool", private, "<cstdint>", public ] },
{ symbol: ["false", private, "<cstdint>", public ] },
{ symbol: ["true", private, "<cstdint>", public ] },
@@ -40,6 +42,9 @@
{ symbol: ["uint16_t", private, "<cstdint>", public ] },
{ symbol: ["uint32_t", private, "<cstdint>", public ] },
{ symbol: ["uint64_t", private, "<cstdint>", public ] },
+ { symbol: ["size_t", private, "<cstddef>", public ] },
+ { symbol: ["variant", private, "\"arrow/compute/kernel.h\"", public ] },
+ { symbol: ["Array", private, "\"arrow/type_fwd.h\"", public ] },
{ symbol: ["make_shared", private, "<memory>", public ] },
{ symbol: ["shared_ptr", private, "<memory>", public ] },
{ symbol: ["_Node_const_iterator", private, "<flatbuffers/flatbuffers.h>",
public ] },
diff --git a/cpp/cmake_modules/SetupCxxFlags.cmake
b/cpp/cmake_modules/SetupCxxFlags.cmake
index 7ebb033..0d2fd33 100644
--- a/cpp/cmake_modules/SetupCxxFlags.cmake
+++ b/cpp/cmake_modules/SetupCxxFlags.cmake
@@ -173,9 +173,12 @@ else()
endif()
endif()
-# Disable annoying "performance warning" about int-to-bool conversion
if ("${COMPILER_FAMILY}" STREQUAL "msvc")
+ # Disable annoying "performance warning" about int-to-bool conversion
set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} /wd4800")
+
+ # Disable unchecked iterator warnings, equivalent to
/D_SCL_SECURE_NO_WARNINGS
+ set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} /wd4996")
endif()
if ("${COMPILER_FAMILY}" STREQUAL "gcc" AND
diff --git a/cpp/src/arrow/api.h b/cpp/src/arrow/api.h
index 7cae841..103a2b2 100644
--- a/cpp/src/arrow/api.h
+++ b/cpp/src/arrow/api.h
@@ -20,19 +20,19 @@
#ifndef ARROW_API_H
#define ARROW_API_H
-#include "arrow/array.h"
-#include "arrow/buffer.h"
-#include "arrow/builder.h"
-#include "arrow/compare.h"
-#include "arrow/memory_pool.h"
-#include "arrow/pretty_print.h"
-#include "arrow/record_batch.h"
-#include "arrow/status.h"
-#include "arrow/table.h"
-#include "arrow/table_builder.h"
-#include "arrow/tensor.h"
-#include "arrow/type.h"
-#include "arrow/visitor.h"
+#include "arrow/array.h" // IYWU pragma: export
+#include "arrow/buffer.h" // IYWU pragma: export
+#include "arrow/builder.h" // IYWU pragma: export
+#include "arrow/compare.h" // IYWU pragma: export
+#include "arrow/memory_pool.h" // IYWU pragma: export
+#include "arrow/pretty_print.h" // IYWU pragma: export
+#include "arrow/record_batch.h" // IYWU pragma: export
+#include "arrow/status.h" // IYWU pragma: export
+#include "arrow/table.h" // IYWU pragma: export
+#include "arrow/table_builder.h" // IYWU pragma: export
+#include "arrow/tensor.h" // IYWU pragma: export
+#include "arrow/type.h" // IYWU pragma: export
+#include "arrow/visitor.h" // IYWU pragma: export
/// \brief Top-level namespace for Apache Arrow C++ API
namespace arrow {}
diff --git a/cpp/src/arrow/array-test.cc b/cpp/src/arrow/array-test.cc
index f5153aa..a0be049 100644
--- a/cpp/src/arrow/array-test.cc
+++ b/cpp/src/arrow/array-test.cc
@@ -15,24 +15,33 @@
// specific language governing permissions and limitations
// under the License.
+#include <algorithm>
+#include <array>
#include <cstdint>
-#include <cstdlib>
+#include <cstring>
+#include <iterator>
+#include <limits>
#include <memory>
#include <numeric>
+#include <ostream>
+#include <string>
+#include <type_traits>
#include <vector>
-#include "gtest/gtest.h"
+#include <gtest/gtest.h>
#include "arrow/array.h"
#include "arrow/buffer.h"
#include "arrow/builder.h"
#include "arrow/ipc/test-common.h"
#include "arrow/memory_pool.h"
+#include "arrow/record_batch.h"
#include "arrow/status.h"
#include "arrow/test-common.h"
#include "arrow/test-util.h"
#include "arrow/type.h"
#include "arrow/type_traits.h"
+#include "arrow/util/bit-util.h"
#include "arrow/util/checked_cast.h"
#include "arrow/util/decimal.h"
#include "arrow/util/lazy.h"
diff --git a/cpp/src/arrow/array.cc b/cpp/src/arrow/array.cc
index 26abc33..3d88618 100644
--- a/cpp/src/arrow/array.cc
+++ b/cpp/src/arrow/array.cc
@@ -19,9 +19,7 @@
#include <algorithm>
#include <cstdint>
-#include <cstring>
#include <limits>
-#include <set>
#include <sstream>
#include <utility>
@@ -29,6 +27,7 @@
#include "arrow/compare.h"
#include "arrow/pretty_print.h"
#include "arrow/status.h"
+#include "arrow/type.h"
#include "arrow/type_traits.h"
#include "arrow/util/bit-util.h"
#include "arrow/util/checked_cast.h"
diff --git a/cpp/src/arrow/array.h b/cpp/src/arrow/array.h
index 70ceb8a..8c5e0a5 100644
--- a/cpp/src/arrow/array.h
+++ b/cpp/src/arrow/array.h
@@ -18,25 +18,28 @@
#ifndef ARROW_ARRAY_H
#define ARROW_ARRAY_H
-#include <cmath>
+#include <cstddef>
#include <cstdint>
+#include <iosfwd>
#include <memory>
#include <string>
+#include <type_traits>
#include <utility>
#include <vector>
#include "arrow/buffer.h"
#include "arrow/type.h"
-#include "arrow/type_fwd.h"
#include "arrow/type_traits.h"
#include "arrow/util/bit-util.h"
#include "arrow/util/checked_cast.h"
#include "arrow/util/macros.h"
#include "arrow/util/visibility.h"
-#include "arrow/visitor.h"
namespace arrow {
+class Array;
+class ArrayVisitor;
+
using BufferVector = std::vector<std::shared_ptr<Buffer>>;
// When slicing, we do not know the null count of the sliced range without
@@ -48,9 +51,6 @@ constexpr int64_t kUnknownNullCount = -1;
class MemoryPool;
class Status;
-template <typename T>
-struct Decimal;
-
// ----------------------------------------------------------------------
// Generic array data container
diff --git a/cpp/src/arrow/buffer-test.cc b/cpp/src/arrow/buffer-test.cc
index 6ee6076..13ea8a3 100644
--- a/cpp/src/arrow/buffer-test.cc
+++ b/cpp/src/arrow/buffer-test.cc
@@ -20,6 +20,8 @@
#include <limits>
#include <memory>
#include <string>
+#include <utility>
+#include <vector>
#include <gtest/gtest.h>
diff --git a/cpp/src/arrow/buffer.h b/cpp/src/arrow/buffer.h
index d37a336..66c1314 100644
--- a/cpp/src/arrow/buffer.h
+++ b/cpp/src/arrow/buffer.h
@@ -19,6 +19,7 @@
#define ARROW_BUFFER_H
#include <algorithm>
+#include <array>
#include <cstdint>
#include <cstring>
#include <memory>
diff --git a/cpp/src/arrow/builder.cc b/cpp/src/arrow/builder.cc
index 2210dd3..8b1b8b9 100644
--- a/cpp/src/arrow/builder.cc
+++ b/cpp/src/arrow/builder.cc
@@ -17,9 +17,9 @@
#include "arrow/builder.h"
#include <algorithm>
+#include <cstddef>
#include <cstdint>
#include <cstring>
-#include <limits>
#include <numeric>
#include <sstream>
#include <utility>
@@ -27,7 +27,6 @@
#include "arrow/array.h"
#include "arrow/buffer.h"
-#include "arrow/compare.h"
#include "arrow/status.h"
#include "arrow/type.h"
#include "arrow/type_traits.h"
diff --git a/cpp/src/arrow/builder.h b/cpp/src/arrow/builder.h
index 1347cae..cb4b9eb 100644
--- a/cpp/src/arrow/builder.h
+++ b/cpp/src/arrow/builder.h
@@ -18,13 +18,15 @@
#ifndef ARROW_BUILDER_H
#define ARROW_BUILDER_H
-#include <algorithm>
+#include <algorithm> // IWYU pragma: keep
#include <array>
#include <cstdint>
-#include <functional>
+#include <cstring>
+#include <iterator>
#include <limits>
#include <memory>
#include <string>
+#include <type_traits>
#include <vector>
#include "arrow/buffer.h"
@@ -35,22 +37,18 @@
#include "arrow/util/bit-util.h"
#include "arrow/util/hash.h"
#include "arrow/util/macros.h"
+#include "arrow/util/type_traits.h"
#include "arrow/util/visibility.h"
namespace arrow {
class Array;
+struct ArrayData;
class Decimal128;
constexpr int64_t kBinaryMemoryLimit = std::numeric_limits<int32_t>::max() - 1;
constexpr int64_t kListMaximumElements = std::numeric_limits<int32_t>::max() -
1;
-namespace internal {
-
-struct ArrayData;
-
-} // namespace internal
-
constexpr int64_t kMinBuilderCapacity = 1 << 5;
/// Base class for all data array builders.
diff --git a/cpp/src/arrow/compare.cc b/cpp/src/arrow/compare.cc
index 9ed202d..2f4f5d1 100644
--- a/cpp/src/arrow/compare.cc
+++ b/cpp/src/arrow/compare.cc
@@ -19,18 +19,24 @@
#include "arrow/compare.h"
+#include <climits>
+#include <cmath>
#include <cstdint>
+#include <cstring>
#include <memory>
+#include <string>
+#include <type_traits>
#include <vector>
#include "arrow/array.h"
+#include "arrow/buffer.h"
#include "arrow/status.h"
#include "arrow/tensor.h"
#include "arrow/type.h"
-#include "arrow/type_traits.h"
#include "arrow/util/bit-util.h"
#include "arrow/util/checked_cast.h"
#include "arrow/util/logging.h"
+#include "arrow/util/macros.h"
#include "arrow/visitor_inline.h"
namespace arrow {
diff --git a/cpp/src/arrow/compare.h b/cpp/src/arrow/compare.h
index 956ae89..21e2fdc 100644
--- a/cpp/src/arrow/compare.h
+++ b/cpp/src/arrow/compare.h
@@ -28,7 +28,6 @@ namespace arrow {
class Array;
class DataType;
-class Status;
class Tensor;
/// Returns true if the arrays are exactly equal
diff --git a/cpp/src/arrow/compute/api.h b/cpp/src/arrow/compute/api.h
index b3700b4..8ef3ea4 100644
--- a/cpp/src/arrow/compute/api.h
+++ b/cpp/src/arrow/compute/api.h
@@ -18,10 +18,10 @@
#ifndef ARROW_COMPUTE_API_H
#define ARROW_COMPUTE_API_H
-#include "arrow/compute/context.h"
-#include "arrow/compute/kernel.h"
+#include "arrow/compute/context.h" // IWYU pragma: export
+#include "arrow/compute/kernel.h" // IWYU pragma: export
-#include "arrow/compute/kernels/cast.h"
-#include "arrow/compute/kernels/hash.h"
+#include "arrow/compute/kernels/cast.h" // IWYU pragma: export
+#include "arrow/compute/kernels/hash.h" // IWYU pragma: export
#endif // ARROW_COMPUTE_API_H
diff --git a/cpp/src/arrow/compute/compute-test.cc
b/cpp/src/arrow/compute/compute-test.cc
index 056fb03..8da3408 100644
--- a/cpp/src/arrow/compute/compute-test.cc
+++ b/cpp/src/arrow/compute/compute-test.cc
@@ -16,27 +16,26 @@
// under the License.
#include <cstdint>
-#include <cstdlib>
+#include <cstdio>
+#include <functional>
#include <locale>
#include <memory>
-#include <numeric>
-#include <sstream>
+#include <stdexcept>
+#include <string>
#include <vector>
-#include "gtest/gtest.h"
+#include <gtest/gtest.h>
#include "arrow/array.h"
#include "arrow/buffer.h"
-#include "arrow/builder.h"
-#include "arrow/compare.h"
-#include "arrow/ipc/test-common.h"
#include "arrow/memory_pool.h"
-#include "arrow/pretty_print.h"
#include "arrow/status.h"
+#include "arrow/table.h"
#include "arrow/test-common.h"
#include "arrow/test-util.h"
#include "arrow/type.h"
#include "arrow/type_traits.h"
+#include "arrow/util/decimal.h"
#include "arrow/compute/context.h"
#include "arrow/compute/kernel.h"
diff --git a/cpp/src/arrow/compute/context.h b/cpp/src/arrow/compute/context.h
index 48dd57f..8ac4700 100644
--- a/cpp/src/arrow/compute/context.h
+++ b/cpp/src/arrow/compute/context.h
@@ -18,15 +18,18 @@
#ifndef ARROW_COMPUTE_CONTEXT_H
#define ARROW_COMPUTE_CONTEXT_H
+#include <cstdint>
#include <memory>
#include "arrow/memory_pool.h"
#include "arrow/status.h"
-#include "arrow/type_fwd.h"
+#include "arrow/util/macros.h"
#include "arrow/util/visibility.h"
namespace arrow {
+class Buffer;
+
namespace internal {
class CpuInfo;
} // namespace internal
diff --git a/cpp/src/arrow/compute/kernel.h b/cpp/src/arrow/compute/kernel.h
index fd596f1..8048fff 100644
--- a/cpp/src/arrow/compute/kernel.h
+++ b/cpp/src/arrow/compute/kernel.h
@@ -25,7 +25,7 @@
#include "arrow/record_batch.h"
#include "arrow/table.h"
#include "arrow/util/macros.h"
-#include "arrow/util/variant.h"
+#include "arrow/util/variant.h" // IWYU pragma: export
#include "arrow/util/visibility.h"
namespace arrow {
diff --git a/cpp/src/arrow/compute/kernels/boolean.cc
b/cpp/src/arrow/compute/kernels/boolean.cc
index d51b5d4..e1aa166 100644
--- a/cpp/src/arrow/compute/kernels/boolean.cc
+++ b/cpp/src/arrow/compute/kernels/boolean.cc
@@ -17,12 +17,18 @@
#include "arrow/compute/kernels/boolean.h"
+#include <memory>
+#include <vector>
+
+#include "arrow/array.h"
+#include "arrow/buffer.h"
#include "arrow/compute/context.h"
+#include "arrow/compute/kernel.h"
#include "arrow/compute/kernels/util-internal.h"
+#include "arrow/type_fwd.h"
+#include "arrow/util/bit-util.h"
#include "arrow/util/logging.h"
-#include <vector>
-
namespace arrow {
using internal::BitmapAnd;
diff --git a/cpp/src/arrow/compute/kernels/boolean.h
b/cpp/src/arrow/compute/kernels/boolean.h
index 4c4072c..88f5ad1 100644
--- a/cpp/src/arrow/compute/kernels/boolean.h
+++ b/cpp/src/arrow/compute/kernels/boolean.h
@@ -18,22 +18,15 @@
#ifndef ARROW_COMPUTE_KERNELS_BOOLEAN_H
#define ARROW_COMPUTE_KERNELS_BOOLEAN_H
-#include <memory>
-
#include "arrow/status.h"
#include "arrow/util/visibility.h"
-#include "arrow/compute/kernel.h"
-
namespace arrow {
-
-class Array;
-class ChunkedArray;
-class Column;
-class DataType;
-
namespace compute {
+struct Datum;
+class FunctionContext;
+
/// \brief Invert the values of a boolean datum
/// \param[in] context the FunctionContext
/// \param[in] value datum to invert
diff --git a/cpp/src/arrow/compute/kernels/cast.cc
b/cpp/src/arrow/compute/kernels/cast.cc
index c9e2bdb..4f124e8 100644
--- a/cpp/src/arrow/compute/kernels/cast.cc
+++ b/cpp/src/arrow/compute/kernels/cast.cc
@@ -23,7 +23,6 @@
#include <limits>
#include <memory>
#include <sstream>
-#include <string>
#include <type_traits>
#include <utility>
#include <vector>
@@ -31,14 +30,13 @@
#include "arrow/array.h"
#include "arrow/buffer.h"
#include "arrow/builder.h"
-#include "arrow/compare.h"
#include "arrow/type.h"
#include "arrow/type_traits.h"
#include "arrow/util/bit-util.h"
#include "arrow/util/checked_cast.h"
#include "arrow/util/logging.h"
#include "arrow/util/macros.h"
-#include "arrow/util/parsing.h"
+#include "arrow/util/parsing.h" // IWYU pragma: keep
#include "arrow/compute/context.h"
#include "arrow/compute/kernel.h"
diff --git a/cpp/src/arrow/compute/kernels/cast.h
b/cpp/src/arrow/compute/kernels/cast.h
index 49b12b9..65c70bf 100644
--- a/cpp/src/arrow/compute/kernels/cast.h
+++ b/cpp/src/arrow/compute/kernels/cast.h
@@ -23,17 +23,17 @@
#include "arrow/status.h"
#include "arrow/util/visibility.h"
-#include "arrow/compute/kernel.h"
-
namespace arrow {
class Array;
-class ChunkedArray;
-class Column;
class DataType;
namespace compute {
+struct Datum;
+class FunctionContext;
+class UnaryKernel;
+
struct ARROW_EXPORT CastOptions {
CastOptions()
: allow_int_overflow(false),
diff --git a/cpp/src/arrow/compute/kernels/hash.cc
b/cpp/src/arrow/compute/kernels/hash.cc
index 51e0a08..fc95a37 100644
--- a/cpp/src/arrow/compute/kernels/hash.cc
+++ b/cpp/src/arrow/compute/kernels/hash.cc
@@ -17,25 +17,37 @@
#include "arrow/compute/kernels/hash.h"
+#include <algorithm>
+#include <cstdint>
+#include <cstring>
#include <exception>
-#include <limits>
#include <memory>
#include <mutex>
#include <sstream>
#include <string>
+#include <type_traits>
#include <utility>
#include <vector>
+#include "arrow/array.h"
+#include "arrow/buffer.h"
#include "arrow/builder.h"
#include "arrow/compute/context.h"
#include "arrow/compute/kernel.h"
#include "arrow/compute/kernels/util-internal.h"
+#include "arrow/type.h"
+#include "arrow/type_traits.h"
+#include "arrow/util/bit-util.h"
#include "arrow/util/checked_cast.h"
#include "arrow/util/hash-util.h"
#include "arrow/util/hash.h"
+#include "arrow/util/logging.h"
+#include "arrow/util/macros.h"
namespace arrow {
+class MemoryPool;
+
using internal::checked_cast;
namespace compute {
diff --git a/cpp/src/arrow/compute/kernels/hash.h
b/cpp/src/arrow/compute/kernels/hash.h
index 05f2429..9e556c6 100644
--- a/cpp/src/arrow/compute/kernels/hash.h
+++ b/cpp/src/arrow/compute/kernels/hash.h
@@ -19,14 +19,17 @@
#define ARROW_COMPUTE_KERNELS_HASH_H
#include <memory>
-#include <vector>
#include "arrow/compute/kernel.h"
#include "arrow/status.h"
-#include "arrow/type_fwd.h"
#include "arrow/util/visibility.h"
namespace arrow {
+
+class Array;
+class DataType;
+struct ArrayData;
+
namespace compute {
class FunctionContext;
diff --git a/cpp/src/arrow/compute/kernels/util-internal.cc
b/cpp/src/arrow/compute/kernels/util-internal.cc
index c16e7aa..81fafcb 100644
--- a/cpp/src/arrow/compute/kernels/util-internal.cc
+++ b/cpp/src/arrow/compute/kernels/util-internal.cc
@@ -18,14 +18,15 @@
#include "arrow/compute/kernels/util-internal.h"
#include <algorithm>
+#include <cstdint>
#include <memory>
#include <vector>
#include "arrow/array.h"
#include "arrow/status.h"
+#include "arrow/table.h"
#include "arrow/util/logging.h"
-#include "arrow/compute/context.h"
#include "arrow/compute/kernel.h"
namespace arrow {
diff --git a/cpp/src/arrow/compute/kernels/util-internal.h
b/cpp/src/arrow/compute/kernels/util-internal.h
index 78ef662..95dfed9 100644
--- a/cpp/src/arrow/compute/kernels/util-internal.h
+++ b/cpp/src/arrow/compute/kernels/util-internal.h
@@ -21,8 +21,10 @@
#include <memory>
#include <vector>
+#include "arrow/array.h"
+#include "arrow/buffer.h"
#include "arrow/compute/kernel.h"
-#include "arrow/type_fwd.h"
+#include "arrow/status.h"
#include "arrow/util/visibility.h"
namespace arrow {
diff --git a/cpp/src/arrow/csv/chunker.cc b/cpp/src/arrow/csv/chunker.cc
index 2394ce2..92ccbbc 100644
--- a/cpp/src/arrow/csv/chunker.cc
+++ b/cpp/src/arrow/csv/chunker.cc
@@ -16,12 +16,12 @@
// under the License.
#include "arrow/csv/chunker.h"
+
+#include <cstdint>
+
#include "arrow/status.h"
#include "arrow/util/logging.h"
-#include <sstream>
-#include <string>
-
namespace arrow {
namespace csv {
diff --git a/cpp/src/arrow/csv/chunker.h b/cpp/src/arrow/csv/chunker.h
index 7d5ba3a..6c61632 100644
--- a/cpp/src/arrow/csv/chunker.h
+++ b/cpp/src/arrow/csv/chunker.h
@@ -19,10 +19,10 @@
#define ARROW_CSV_CHUNKER_H
#include <cstdint>
-#include <vector>
#include "arrow/csv/options.h"
#include "arrow/status.h"
+#include "arrow/util/macros.h"
#include "arrow/util/visibility.h"
namespace arrow {
diff --git a/cpp/src/arrow/csv/column-builder.cc
b/cpp/src/arrow/csv/column-builder.cc
index 4f04f6e..b7610a5 100644
--- a/cpp/src/arrow/csv/column-builder.cc
+++ b/cpp/src/arrow/csv/column-builder.cc
@@ -15,16 +15,29 @@
// specific language governing permissions and limitations
// under the License.
+#include <cstddef>
+#include <cstdint>
+#include <memory>
#include <mutex>
#include <utility>
+#include <vector>
+#include "arrow/array.h"
#include "arrow/csv/column-builder.h"
+#include "arrow/csv/converter.h"
+#include "arrow/csv/options.h"
+#include "arrow/memory_pool.h"
+#include "arrow/status.h"
+#include "arrow/table.h"
+#include "arrow/type.h"
#include "arrow/util/logging.h"
-#include "arrow/util/macros.h"
+#include "arrow/util/task-group.h"
namespace arrow {
namespace csv {
+class BlockParser;
+
using internal::TaskGroup;
void ColumnBuilder::SetTaskGroup(const std::shared_ptr<internal::TaskGroup>&
task_group) {
diff --git a/cpp/src/arrow/csv/converter.cc b/cpp/src/arrow/csv/converter.cc
index d8ea0c6..19cf1eb 100644
--- a/cpp/src/arrow/csv/converter.cc
+++ b/cpp/src/arrow/csv/converter.cc
@@ -16,16 +16,19 @@
// under the License.
#include "arrow/csv/converter.h"
-#include "arrow/builder.h"
-#include "arrow/status.h"
-#include "arrow/type.h"
-#include "arrow/type_traits.h"
-#include "arrow/util/parsing.h"
#include <cstring>
#include <sstream>
#include <string>
+#include "arrow/builder.h"
+#include "arrow/csv/parser.h"
+#include "arrow/memory_pool.h"
+#include "arrow/status.h"
+#include "arrow/type.h"
+#include "arrow/type_traits.h"
+#include "arrow/util/parsing.h" // IWYU pragma: keep
+
namespace arrow {
namespace csv {
diff --git a/cpp/src/arrow/csv/converter.h b/cpp/src/arrow/csv/converter.h
index 959ec71..52f8934 100644
--- a/cpp/src/arrow/csv/converter.h
+++ b/cpp/src/arrow/csv/converter.h
@@ -18,21 +18,24 @@
#ifndef ARROW_CSV_CONVERTER_H
#define ARROW_CSV_CONVERTER_H
+#include <cstdint>
#include <memory>
#include "arrow/csv/options.h"
-#include "arrow/csv/parser.h"
-#include "arrow/memory_pool.h"
+#include "arrow/util/macros.h"
#include "arrow/util/visibility.h"
namespace arrow {
class Array;
class DataType;
+class MemoryPool;
class Status;
namespace csv {
+class BlockParser;
+
class ARROW_EXPORT Converter {
public:
Converter(const std::shared_ptr<DataType>& type, ConvertOptions options,
diff --git a/cpp/src/arrow/csv/csv-chunker-test.cc
b/cpp/src/arrow/csv/csv-chunker-test.cc
index 1fb4199..7eff3e4 100644
--- a/cpp/src/arrow/csv/csv-chunker-test.cc
+++ b/cpp/src/arrow/csv/csv-chunker-test.cc
@@ -15,16 +15,15 @@
// specific language governing permissions and limitations
// under the License.
-#include <gtest/gtest.h>
-
-#include <algorithm>
+#include <cstdint>
#include <numeric>
#include <string>
-#include <vector>
+
+#include <gtest/gtest.h>
#include "arrow/csv/chunker.h"
+#include "arrow/csv/options.h"
#include "arrow/csv/test-common.h"
-#include "arrow/status.h"
#include "arrow/test-util.h"
namespace arrow {
diff --git a/cpp/src/arrow/csv/csv-column-builder-test.cc
b/cpp/src/arrow/csv/csv-column-builder-test.cc
index 9de6d7d..a4dc236 100644
--- a/cpp/src/arrow/csv/csv-column-builder-test.cc
+++ b/cpp/src/arrow/csv/csv-column-builder-test.cc
@@ -15,21 +15,26 @@
// specific language governing permissions and limitations
// under the License.
-#include <gtest/gtest.h>
-
+#include <memory>
#include <string>
#include <vector>
-#include "arrow/array.h"
+#include <gtest/gtest.h>
+
#include "arrow/csv/column-builder.h"
+#include "arrow/csv/options.h"
#include "arrow/csv/test-common.h"
-#include "arrow/status.h"
+#include "arrow/table.h"
#include "arrow/test-util.h"
+#include "arrow/type.h"
+#include "arrow/util/task-group.h"
#include "arrow/util/thread-pool.h"
namespace arrow {
namespace csv {
+class BlockParser;
+
using internal::GetCpuThreadPool;
using internal::TaskGroup;
diff --git a/cpp/src/arrow/csv/csv-converter-test.cc
b/cpp/src/arrow/csv/csv-converter-test.cc
index 1cf668d..2958615 100644
--- a/cpp/src/arrow/csv/csv-converter-test.cc
+++ b/cpp/src/arrow/csv/csv-converter-test.cc
@@ -15,20 +15,26 @@
// specific language governing permissions and limitations
// under the License.
-#include <gtest/gtest.h>
-
+#include <cstdint>
+#include <memory>
#include <string>
#include <vector>
+#include <gtest/gtest.h>
+
#include "arrow/array.h"
#include "arrow/csv/converter.h"
+#include "arrow/csv/options.h"
#include "arrow/csv/test-common.h"
#include "arrow/status.h"
#include "arrow/test-util.h"
+#include "arrow/type.h"
namespace arrow {
namespace csv {
+class BlockParser;
+
// All recognized (non-empty) null values
std::vector<std::string> AllNulls() {
return {"#N/A\n", "#N/A N/A\n", "#NA\n", "-1.#IND\n", "-1.#QNAN\n",
"-NaN\n",
diff --git a/cpp/src/arrow/csv/csv-parser-test.cc
b/cpp/src/arrow/csv/csv-parser-test.cc
index 1e8162f..55c69fb 100644
--- a/cpp/src/arrow/csv/csv-parser-test.cc
+++ b/cpp/src/arrow/csv/csv-parser-test.cc
@@ -15,11 +15,14 @@
// specific language governing permissions and limitations
// under the License.
-#include <gtest/gtest.h>
-
+#include <cstdint>
#include <string>
+#include <utility>
#include <vector>
+#include <gtest/gtest.h>
+
+#include "arrow/csv/options.h"
#include "arrow/csv/parser.h"
#include "arrow/csv/test-common.h"
#include "arrow/status.h"
diff --git a/cpp/src/arrow/csv/parser.cc b/cpp/src/arrow/csv/parser.cc
index 83ff758..240b1f8 100644
--- a/cpp/src/arrow/csv/parser.cc
+++ b/cpp/src/arrow/csv/parser.cc
@@ -16,11 +16,12 @@
// under the License.
#include "arrow/csv/parser.h"
-#include "arrow/status.h"
-#include "arrow/util/logging.h"
+#include <cstdio>
#include <sstream>
-#include <string>
+
+#include "arrow/status.h"
+#include "arrow/util/logging.h"
namespace arrow {
namespace csv {
diff --git a/cpp/src/arrow/csv/parser.h b/cpp/src/arrow/csv/parser.h
index fc70891..46991b4 100644
--- a/cpp/src/arrow/csv/parser.h
+++ b/cpp/src/arrow/csv/parser.h
@@ -19,10 +19,12 @@
#define ARROW_CSV_PARSER_H
#include <cstdint>
+#include <memory>
#include <vector>
#include "arrow/csv/options.h"
#include "arrow/status.h"
+#include "arrow/util/macros.h"
#include "arrow/util/visibility.h"
namespace arrow {
diff --git a/cpp/src/arrow/csv/reader.cc b/cpp/src/arrow/csv/reader.cc
index 6cbda75..730abe4 100644
--- a/cpp/src/arrow/csv/reader.cc
+++ b/cpp/src/arrow/csv/reader.cc
@@ -15,27 +15,40 @@
// specific language governing permissions and limitations
// under the License.
+#include "arrow/csv/reader.h"
+
+#include <cstdint>
#include <cstring>
#include <limits>
+#include <memory>
#include <sstream>
#include <string>
#include <vector>
+#include "arrow/buffer.h"
#include "arrow/csv/chunker.h"
#include "arrow/csv/column-builder.h"
+#include "arrow/csv/options.h"
#include "arrow/csv/parser.h"
-#include "arrow/csv/reader.h"
-#include "arrow/io/interfaces.h"
#include "arrow/io/readahead.h"
-#include "arrow/memory_pool.h"
-#include "arrow/record_batch.h"
#include "arrow/status.h"
+#include "arrow/table.h"
+#include "arrow/type.h"
#include "arrow/util/logging.h"
+#include "arrow/util/macros.h"
#include "arrow/util/task-group.h"
#include "arrow/util/thread-pool.h"
-#include "arrow/util/visibility.h"
namespace arrow {
+
+class MemoryPool;
+
+namespace io {
+
+class InputStream;
+
+} // namespace io
+
namespace csv {
using internal::GetCpuThreadPool;
diff --git a/cpp/src/arrow/csv/reader.h b/cpp/src/arrow/csv/reader.h
index f64aa77..edf6f11 100644
--- a/cpp/src/arrow/csv/reader.h
+++ b/cpp/src/arrow/csv/reader.h
@@ -20,7 +20,7 @@
#include <memory>
-#include "arrow/csv/options.h"
+#include "arrow/csv/options.h" // IWYU pragma: keep
#include "arrow/status.h"
#include "arrow/util/visibility.h"
diff --git a/cpp/src/arrow/io/buffered.h b/cpp/src/arrow/io/buffered.h
index 4d4dd25..10070c0 100644
--- a/cpp/src/arrow/io/buffered.h
+++ b/cpp/src/arrow/io/buffered.h
@@ -20,8 +20,8 @@
#ifndef ARROW_IO_BUFFERED_H
#define ARROW_IO_BUFFERED_H
+#include <cstdint>
#include <memory>
-#include <string>
#include "arrow/io/interfaces.h"
#include "arrow/util/visibility.h"
diff --git a/cpp/src/arrow/io/file.cc b/cpp/src/arrow/io/file.cc
index a5f51b2..240fac9 100644
--- a/cpp/src/arrow/io/file.cc
+++ b/cpp/src/arrow/io/file.cc
@@ -15,7 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-#include "arrow/util/windows_compatibility.h"
+#include "arrow/util/windows_compatibility.h" // IWYU pragma: keep
// sys/mman.h not present in Visual Studio or Cygwin
#ifdef _WIN32
@@ -27,17 +27,17 @@
#undef Free
#else
#include <sys/mman.h>
-#include <unistd.h>
+#include <unistd.h> // IWYU pragma: keep
#endif
-#include <string.h>
-
#include <algorithm>
#include <cerrno>
#include <cstdint>
#include <cstring>
+#include <memory>
#include <mutex>
#include <sstream>
+#include <string>
// ----------------------------------------------------------------------
// Other Arrow includes
@@ -549,7 +549,7 @@ Status MemoryMappedFile::ReadAt(int64_t position, int64_t
nbytes, int64_t* bytes
std::lock_guard<std::mutex> resize_guard(memory_map_->resize_lock());
nbytes = std::max<int64_t>(0, std::min(nbytes, memory_map_->size() -
position));
if (nbytes > 0) {
- std::memcpy(out, memory_map_->data() + position,
static_cast<size_t>(nbytes));
+ memcpy(out, memory_map_->data() + position, static_cast<size_t>(nbytes));
}
*bytes_read = nbytes;
return Status::OK();
diff --git a/cpp/src/arrow/io/hdfs.cc b/cpp/src/arrow/io/hdfs.cc
index 09f3b8d..3bf577b 100644
--- a/cpp/src/arrow/io/hdfs.cc
+++ b/cpp/src/arrow/io/hdfs.cc
@@ -17,17 +17,23 @@
#include <hdfs.h>
+#include <errno.h>
#include <algorithm>
#include <cerrno>
-#include <cstddef>
#include <cstdint>
+#include <cstring>
+#include <memory>
#include <mutex>
#include <sstream>
#include <string>
+#include <unordered_map>
+#include <utility>
+#include <vector>
#include "arrow/buffer.h"
#include "arrow/io/hdfs-internal.h"
#include "arrow/io/hdfs.h"
+#include "arrow/io/interfaces.h"
#include "arrow/memory_pool.h"
#include "arrow/status.h"
#include "arrow/util/logging.h"
diff --git a/cpp/src/arrow/io/io-buffered-test.cc
b/cpp/src/arrow/io/io-buffered-test.cc
index efa2301..03856dc 100644
--- a/cpp/src/arrow/io/io-buffered-test.cc
+++ b/cpp/src/arrow/io/io-buffered-test.cc
@@ -15,10 +15,22 @@
// specific language governing permissions and limitations
// under the License.
+#ifndef _WIN32
+#include <fcntl.h> // IWYU pragma: keep
+#include <unistd.h>
+#endif
+
+#include <algorithm>
+#include <cstdint>
+#include <cstdio>
+#include <functional>
+#include <iterator>
#include <memory>
#include <random>
#include <string>
+#include <utility>
#include <valarray>
+#include <vector>
#include <gtest/gtest.h>
diff --git a/cpp/src/arrow/io/io-file-test.cc b/cpp/src/arrow/io/io-file-test.cc
index 22d5947..a5d1997 100644
--- a/cpp/src/arrow/io/io-file-test.cc
+++ b/cpp/src/arrow/io/io-file-test.cc
@@ -15,8 +15,12 @@
// specific language governing permissions and limitations
// under the License.
+#ifndef _WIN32
+#include <fcntl.h> // IWYU pragma: keep
+#include <unistd.h>
+#endif
+
#include <atomic>
-#include <cerrno>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
diff --git a/cpp/src/arrow/io/io-memory-test.cc
b/cpp/src/arrow/io/io-memory-test.cc
index db536ad..fa90c1f 100644
--- a/cpp/src/arrow/io/io-memory-test.cc
+++ b/cpp/src/arrow/io/io-memory-test.cc
@@ -26,7 +26,6 @@
#include "arrow/buffer.h"
#include "arrow/io/interfaces.h"
#include "arrow/io/memory.h"
-#include "arrow/memory_pool.h"
#include "arrow/status.h"
#include "arrow/test-util.h"
#include "arrow/util/checked_cast.h"
diff --git a/cpp/src/arrow/io/io-readahead-test.cc
b/cpp/src/arrow/io/io-readahead-test.cc
index b1b7b43..1e5d02a 100644
--- a/cpp/src/arrow/io/io-readahead-test.cc
+++ b/cpp/src/arrow/io/io-readahead-test.cc
@@ -15,10 +15,16 @@
// specific language governing permissions and limitations
// under the License.
+#include <algorithm>
#include <chrono>
+#include <cstdint>
+#include <cstring>
+#include <functional>
#include <memory>
+#include <set>
#include <string>
#include <thread>
+#include <utility>
#include <vector>
#include <gtest/gtest.h>
diff --git a/cpp/src/arrow/io/memory.h b/cpp/src/arrow/io/memory.h
index 0bff985..e2db05c 100644
--- a/cpp/src/arrow/io/memory.h
+++ b/cpp/src/arrow/io/memory.h
@@ -30,7 +30,6 @@
namespace arrow {
class Buffer;
-class MemoryPool;
class ResizableBuffer;
class Status;
diff --git a/cpp/src/arrow/io/readahead.cc b/cpp/src/arrow/io/readahead.cc
index c21e45d..89db6a6 100644
--- a/cpp/src/arrow/io/readahead.cc
+++ b/cpp/src/arrow/io/readahead.cc
@@ -16,19 +16,22 @@
// under the License.
#include "arrow/io/readahead.h"
-#include "arrow/buffer.h"
-#include "arrow/status.h"
-#include "arrow/util/logging.h"
#include <condition_variable>
#include <cstring>
#include <deque>
#include <memory>
#include <mutex>
-#include <string>
#include <thread>
#include <utility>
+#include "arrow/buffer.h"
+#include "arrow/io/interfaces.h"
+#include "arrow/memory_pool.h"
+#include "arrow/status.h"
+#include "arrow/util/logging.h"
+#include "arrow/util/macros.h"
+
namespace arrow {
namespace io {
namespace internal {
diff --git a/cpp/src/arrow/io/readahead.h b/cpp/src/arrow/io/readahead.h
index d7ac509..950520b 100644
--- a/cpp/src/arrow/io/readahead.h
+++ b/cpp/src/arrow/io/readahead.h
@@ -18,10 +18,9 @@
#ifndef ARROW_IO_READAHEAD_H
#define ARROW_IO_READAHEAD_H
+#include <cstdint>
#include <memory>
-#include <string>
-#include "arrow/io/interfaces.h"
#include "arrow/util/visibility.h"
namespace arrow {
@@ -31,6 +30,9 @@ class ResizableBuffer;
class Status;
namespace io {
+
+class InputStream;
+
namespace internal {
struct ARROW_EXPORT ReadaheadBuffer {
diff --git a/cpp/src/arrow/ipc/feather-test.cc
b/cpp/src/arrow/ipc/feather-test.cc
index 1ee36d7..ded0a8b 100644
--- a/cpp/src/arrow/ipc/feather-test.cc
+++ b/cpp/src/arrow/ipc/feather-test.cc
@@ -15,26 +15,29 @@
// specific language governing permissions and limitations
// under the License.
-#include <cstdint>
#include <memory>
-#include <random>
#include <sstream>
#include <string>
-#include <vector>
-#include "gtest/gtest.h"
+#include <gtest/gtest.h>
+#include "arrow/array.h"
#include "arrow/io/memory.h"
#include "arrow/ipc/feather-internal.h"
-#include "arrow/ipc/feather.h"
+#include "arrow/ipc/feather_generated.h"
#include "arrow/ipc/test-common.h"
+#include "arrow/memory_pool.h"
#include "arrow/pretty_print.h"
-#include "arrow/table.h"
+#include "arrow/record_batch.h"
+#include "arrow/status.h"
#include "arrow/test-util.h"
+#include "arrow/type.h"
#include "arrow/util/checked_cast.h"
namespace arrow {
+class Buffer;
+
using internal::checked_cast;
namespace ipc {
diff --git a/cpp/src/arrow/ipc/feather.cc b/cpp/src/arrow/ipc/feather.cc
index eb7e19e..71ca14f 100644
--- a/cpp/src/arrow/ipc/feather.cc
+++ b/cpp/src/arrow/ipc/feather.cc
@@ -33,10 +33,10 @@
#include "arrow/ipc/feather-internal.h"
#include "arrow/ipc/feather_generated.h"
#include "arrow/ipc/util.h" // IWYU pragma: keep
-#include "arrow/record_batch.h"
#include "arrow/status.h"
-#include "arrow/table.h"
+#include "arrow/table.h" // IWYU pragma: keep
#include "arrow/type.h"
+#include "arrow/type_traits.h"
#include "arrow/util/bit-util.h"
#include "arrow/util/checked_cast.h"
#include "arrow/util/logging.h"
diff --git a/cpp/src/arrow/ipc/ipc-json-test.cc
b/cpp/src/arrow/ipc/ipc-json-test.cc
index 26d396d..47a0a29 100644
--- a/cpp/src/arrow/ipc/ipc-json-test.cc
+++ b/cpp/src/arrow/ipc/ipc-json-test.cc
@@ -18,21 +18,20 @@
#include <cstdint>
#include <cstdio>
#include <cstring>
-#include <iostream>
#include <memory>
#include <string>
#include <vector>
-#include "gtest/gtest.h"
+#include <gtest/gtest.h>
#include "arrow/array.h"
+#include "arrow/buffer.h"
#include "arrow/builder.h"
#include "arrow/ipc/json-internal.h"
#include "arrow/ipc/json.h"
#include "arrow/ipc/test-common.h"
#include "arrow/memory_pool.h"
#include "arrow/record_batch.h"
-#include "arrow/status.h"
#include "arrow/test-util.h"
#include "arrow/type.h"
#include "arrow/type_traits.h"
diff --git a/cpp/src/arrow/ipc/ipc-read-write-test.cc
b/cpp/src/arrow/ipc/ipc-read-write-test.cc
index 55c5f40..31a9d47 100644
--- a/cpp/src/arrow/ipc/ipc-read-write-test.cc
+++ b/cpp/src/arrow/ipc/ipc-read-write-test.cc
@@ -16,28 +16,32 @@
// under the License.
#include <cstdint>
-#include <cstdio>
-#include <cstring>
+#include <limits>
#include <memory>
+#include <ostream>
#include <string>
-#include <vector>
-#include "gtest/gtest.h"
+#include <flatbuffers/flatbuffers.h>
+#include <gtest/gtest.h>
#include "arrow/array.h"
#include "arrow/buffer.h"
+#include "arrow/builder.h"
+#include "arrow/io/file.h"
#include "arrow/io/memory.h"
#include "arrow/io/test-common.h"
-#include "arrow/ipc/Message_generated.h"
-#include "arrow/ipc/api.h"
+#include "arrow/ipc/Message_generated.h" // IWYU pragma: keep
+#include "arrow/ipc/message.h"
#include "arrow/ipc/metadata-internal.h"
+#include "arrow/ipc/reader.h"
#include "arrow/ipc/test-common.h"
-#include "arrow/ipc/util.h"
+#include "arrow/ipc/writer.h"
#include "arrow/memory_pool.h"
-#include "arrow/pretty_print.h"
+#include "arrow/record_batch.h"
#include "arrow/status.h"
#include "arrow/tensor.h"
#include "arrow/test-util.h"
+#include "arrow/type.h"
#include "arrow/util/bit-util.h"
#include "arrow/util/checked_cast.h"
diff --git a/cpp/src/arrow/ipc/json-integration-test.cc
b/cpp/src/arrow/ipc/json-integration-test.cc
index 37778fa..09cfa2e 100644
--- a/cpp/src/arrow/ipc/json-integration-test.cc
+++ b/cpp/src/arrow/ipc/json-integration-test.cc
@@ -50,6 +50,9 @@ DEFINE_bool(verbose, true, "Verbose output");
namespace fs = boost::filesystem;
namespace arrow {
+
+class Buffer;
+
namespace ipc {
bool file_exists(const char* path) {
diff --git a/cpp/src/arrow/ipc/json-internal.cc
b/cpp/src/arrow/ipc/json-internal.cc
index c235fd2..d5a5dd9 100644
--- a/cpp/src/arrow/ipc/json-internal.cc
+++ b/cpp/src/arrow/ipc/json-internal.cc
@@ -23,10 +23,13 @@
#include <sstream>
#include <string>
#include <type_traits>
+#include <unordered_map>
+#include <utility>
#include <vector>
#include "arrow/array.h"
-#include "arrow/builder.h"
+#include "arrow/buffer.h"
+#include "arrow/builder.h" // IWYU pragma: keep
#include "arrow/ipc/dictionary.h"
#include "arrow/record_batch.h"
#include "arrow/status.h"
@@ -41,6 +44,8 @@
namespace arrow {
+class MemoryPool;
+
using internal::checked_cast;
namespace ipc {
diff --git a/cpp/src/arrow/ipc/json-internal.h
b/cpp/src/arrow/ipc/json-internal.h
index 8becee6..8807a56 100644
--- a/cpp/src/arrow/ipc/json-internal.h
+++ b/cpp/src/arrow/ipc/json-internal.h
@@ -22,18 +22,28 @@
#define RAPIDJSON_HAS_CXX11_RVALUE_REFS 1
#define RAPIDJSON_HAS_CXX11_RANGE_FOR 1
+#define RAPIDJSON_NAMESPACE arrow::rapidjson
+#define RAPIDJSON_NAMESPACE_BEGIN \
+ namespace arrow { \
+ namespace rapidjson {
+#define RAPIDJSON_NAMESPACE_END \
+ } \
+ }
+
#include <memory>
#include <sstream>
#include <string>
-#include "rapidjson/document.h"
-#include "rapidjson/stringbuffer.h"
-#include "rapidjson/writer.h"
+#include "rapidjson/document.h" // IWYU pragma: export
+#include "rapidjson/encodings.h" // IWYU pragma: export
+#include "rapidjson/stringbuffer.h" // IWYU pragma: export
+#include "rapidjson/writer.h" // IWYU pragma: export
-#include "arrow/type_fwd.h" // IWYU pragma: export
+#include "arrow/status.h" // IWYU pragma: export
+#include "arrow/type_fwd.h" // IWYU pragma: keep
#include "arrow/util/visibility.h"
-namespace rj = rapidjson;
+namespace rj = arrow::rapidjson;
using RjWriter = rj::Writer<rj::StringBuffer>;
using RjArray = rj::Value::ConstArray;
using RjObject = rj::Value::ConstObject;
diff --git a/cpp/src/arrow/ipc/message.cc b/cpp/src/arrow/ipc/message.cc
index 797a490..724e625 100644
--- a/cpp/src/arrow/ipc/message.cc
+++ b/cpp/src/arrow/ipc/message.cc
@@ -23,10 +23,11 @@
#include <sstream>
#include <string>
+#include <flatbuffers/flatbuffers.h>
+
#include "arrow/buffer.h"
#include "arrow/io/interfaces.h"
#include "arrow/ipc/Message_generated.h"
-#include "arrow/ipc/Schema_generated.h"
#include "arrow/ipc/metadata-internal.h"
#include "arrow/ipc/util.h"
#include "arrow/status.h"
diff --git a/cpp/src/arrow/ipc/metadata-internal.cc
b/cpp/src/arrow/ipc/metadata-internal.cc
index 5ac0735..ef189c8 100644
--- a/cpp/src/arrow/ipc/metadata-internal.cc
+++ b/cpp/src/arrow/ipc/metadata-internal.cc
@@ -18,29 +18,23 @@
#include "arrow/ipc/metadata-internal.h"
#include <cstdint>
-#include <cstring>
#include <memory>
#include <sstream>
-#include <string>
#include <utility>
#include <flatbuffers/flatbuffers.h>
#include "arrow/array.h"
-#include "arrow/buffer.h"
#include "arrow/io/interfaces.h"
-#include "arrow/ipc/File_generated.h"
+#include "arrow/ipc/File_generated.h" // IWYU pragma: keep
#include "arrow/ipc/Message_generated.h"
-#include "arrow/ipc/Tensor_generated.h"
-#include "arrow/ipc/dictionary.h"
+#include "arrow/ipc/Tensor_generated.h" // IWYU pragma: keep
#include "arrow/ipc/message.h"
#include "arrow/ipc/util.h"
#include "arrow/status.h"
#include "arrow/tensor.h"
#include "arrow/type.h"
-#include "arrow/util/bit-util.h"
#include "arrow/util/checked_cast.h"
-#include "arrow/util/key_value_metadata.h"
#include "arrow/util/logging.h"
namespace arrow {
diff --git a/cpp/src/arrow/ipc/metadata-internal.h
b/cpp/src/arrow/ipc/metadata-internal.h
index 0683b8f..152ca13 100644
--- a/cpp/src/arrow/ipc/metadata-internal.h
+++ b/cpp/src/arrow/ipc/metadata-internal.h
@@ -21,21 +21,24 @@
#define ARROW_IPC_METADATA_INTERNAL_H
#include <cstdint>
+#include <cstring>
#include <memory>
#include <string>
#include <vector>
+#include <flatbuffers/flatbuffers.h>
+
#include "arrow/buffer.h"
#include "arrow/ipc/Schema_generated.h"
-#include "arrow/ipc/dictionary.h"
+#include "arrow/ipc/dictionary.h" // IYWU pragma: keep
#include "arrow/ipc/message.h"
+#include "arrow/memory_pool.h"
+#include "arrow/status.h"
namespace arrow {
-class Buffer;
class DataType;
class Schema;
-class Status;
class Tensor;
namespace flatbuf = org::apache::arrow::flatbuf;
@@ -47,6 +50,9 @@ class OutputStream;
} // namespace io
namespace ipc {
+
+class DictionaryMemo;
+
namespace internal {
static constexpr flatbuf::MetadataVersion kCurrentMetadataVersion =
diff --git a/cpp/src/arrow/ipc/reader.cc b/cpp/src/arrow/ipc/reader.cc
index ba83229..65f5d96 100644
--- a/cpp/src/arrow/ipc/reader.cc
+++ b/cpp/src/arrow/ipc/reader.cc
@@ -31,18 +31,16 @@
#include "arrow/buffer.h"
#include "arrow/io/interfaces.h"
#include "arrow/io/memory.h"
-#include "arrow/ipc/File_generated.h"
+#include "arrow/ipc/File_generated.h" // IWYU pragma: export
#include "arrow/ipc/Message_generated.h"
#include "arrow/ipc/Schema_generated.h"
#include "arrow/ipc/dictionary.h"
#include "arrow/ipc/message.h"
#include "arrow/ipc/metadata-internal.h"
-#include "arrow/ipc/util.h"
#include "arrow/record_batch.h"
#include "arrow/status.h"
#include "arrow/tensor.h"
#include "arrow/type.h"
-#include "arrow/util/bit-util.h"
#include "arrow/util/logging.h"
#include "arrow/visitor_inline.h"
diff --git a/cpp/src/arrow/ipc/stream-to-file.cc
b/cpp/src/arrow/ipc/stream-to-file.cc
index 859969b..9ebe582 100644
--- a/cpp/src/arrow/ipc/stream-to-file.cc
+++ b/cpp/src/arrow/ipc/stream-to-file.cc
@@ -21,14 +21,12 @@
#include "arrow/ipc/reader.h"
#include "arrow/ipc/writer.h"
+#include "arrow/record_batch.h"
#include "arrow/status.h"
#include "arrow/util/io-util.h"
namespace arrow {
-
-class RecordBatch;
-
namespace ipc {
// Converts a stream from stdin to a file written to standard out.
diff --git a/cpp/src/arrow/ipc/writer.cc b/cpp/src/arrow/ipc/writer.cc
index 5fcc2b0..8225cce 100644
--- a/cpp/src/arrow/ipc/writer.cc
+++ b/cpp/src/arrow/ipc/writer.cc
@@ -21,13 +21,13 @@
#include <cstdint>
#include <cstring>
#include <limits>
-#include <sstream>
#include <vector>
#include "arrow/array.h"
#include "arrow/buffer.h"
#include "arrow/io/interfaces.h"
#include "arrow/io/memory.h"
+#include "arrow/ipc/dictionary.h"
#include "arrow/ipc/message.h"
#include "arrow/ipc/metadata-internal.h"
#include "arrow/ipc/util.h"
@@ -40,6 +40,7 @@
#include "arrow/util/bit-util.h"
#include "arrow/util/checked_cast.h"
#include "arrow/util/logging.h"
+#include "arrow/visitor.h"
namespace arrow {
diff --git a/cpp/src/arrow/ipc/writer.h b/cpp/src/arrow/ipc/writer.h
index 9843126..a1c7111 100644
--- a/cpp/src/arrow/ipc/writer.h
+++ b/cpp/src/arrow/ipc/writer.h
@@ -21,7 +21,6 @@
#define ARROW_IPC_WRITER_H
#include <cstdint>
-#include <functional>
#include <memory>
#include <vector>
@@ -30,9 +29,7 @@
namespace arrow {
-class Array;
class Buffer;
-class Field;
class MemoryPool;
class RecordBatch;
class Schema;
diff --git a/cpp/src/arrow/memory_pool-test.cc
b/cpp/src/arrow/memory_pool-test.cc
index c2c8146..ad60a93 100644
--- a/cpp/src/arrow/memory_pool-test.cc
+++ b/cpp/src/arrow/memory_pool-test.cc
@@ -22,6 +22,7 @@
#include "arrow/memory_pool-test.h"
#include "arrow/memory_pool.h"
#include "arrow/status.h"
+#include "arrow/test-util.h"
namespace arrow {
diff --git a/cpp/src/arrow/pretty_print-test.cc
b/cpp/src/arrow/pretty_print-test.cc
index 9724b8e..eebb9a9 100644
--- a/cpp/src/arrow/pretty_print-test.cc
+++ b/cpp/src/arrow/pretty_print-test.cc
@@ -16,21 +16,21 @@
// under the License.
#include <cstdint>
-#include <cstdio>
-#include <cstdlib>
#include <cstring>
#include <memory>
#include <sstream>
+#include <string>
#include <vector>
-#include "gtest/gtest.h"
+#include <gtest/gtest.h>
#include "arrow/array.h"
#include "arrow/builder.h"
+#include "arrow/memory_pool.h"
#include "arrow/pretty_print.h"
+#include "arrow/table.h"
#include "arrow/test-util.h"
#include "arrow/type.h"
-#include "arrow/type_traits.h"
#include "arrow/util/decimal.h"
namespace arrow {
diff --git a/cpp/src/arrow/pretty_print.cc b/cpp/src/arrow/pretty_print.cc
index 09d8edf..73908bf 100644
--- a/cpp/src/arrow/pretty_print.cc
+++ b/cpp/src/arrow/pretty_print.cc
@@ -15,10 +15,13 @@
// specific language governing permissions and limitations
// under the License.
+#include <cstddef>
+#include <cstdint>
+#include <iostream>
#include <memory>
-#include <ostream>
#include <sstream>
#include <string>
+#include <type_traits>
#include <vector>
#include "arrow/array.h"
@@ -29,7 +32,6 @@
#include "arrow/type.h"
#include "arrow/type_traits.h"
#include "arrow/util/checked_cast.h"
-#include "arrow/util/logging.h"
#include "arrow/util/string.h"
#include "arrow/visitor_inline.h"
diff --git a/cpp/src/arrow/public-api-test.cc b/cpp/src/arrow/public-api-test.cc
index 088da3f..2009c2e 100644
--- a/cpp/src/arrow/public-api-test.cc
+++ b/cpp/src/arrow/public-api-test.cc
@@ -15,9 +15,9 @@
// specific language governing permissions and limitations
// under the License.
-#include "arrow/api.h"
-#include "arrow/io/api.h"
-#include "arrow/ipc/api.h"
+#include "arrow/api.h" // IWYU pragma: keep
+#include "arrow/io/api.h" // IWYU pragma: keep
+#include "arrow/ipc/api.h" // IWYU pragma: keep
#ifdef DCHECK
#error "DCHECK should not be visible from Arrow public headers."
diff --git a/cpp/src/arrow/python/arrow_to_pandas.cc
b/cpp/src/arrow/python/arrow_to_pandas.cc
index be6e9b1..67510c4 100644
--- a/cpp/src/arrow/python/arrow_to_pandas.cc
+++ b/cpp/src/arrow/python/arrow_to_pandas.cc
@@ -17,11 +17,10 @@
// Functions for pandas conversion via NumPy
-#include "arrow/python/numpy_interop.h"
+#include "arrow/python/numpy_interop.h" // IWYU pragma: expand
#include "arrow/python/arrow_to_pandas.h"
-#include <algorithm>
#include <cmath>
#include <cstdint>
#include <memory>
@@ -31,13 +30,12 @@
#include <vector>
#include "arrow/array.h"
+#include "arrow/buffer.h"
#include "arrow/status.h"
#include "arrow/table.h"
-#include "arrow/type_fwd.h"
+#include "arrow/type.h"
#include "arrow/type_traits.h"
-#include "arrow/util/bit-util.h"
#include "arrow/util/checked_cast.h"
-#include "arrow/util/decimal.h"
#include "arrow/util/logging.h"
#include "arrow/util/macros.h"
#include "arrow/util/parallel.h"
@@ -57,6 +55,8 @@
namespace arrow {
+class MemoryPool;
+
using internal::checked_cast;
using internal::ParallelFor;
diff --git a/cpp/src/arrow/python/numpy_interop.h
b/cpp/src/arrow/python/numpy_interop.h
index b62c4e6..094c321 100644
--- a/cpp/src/arrow/python/numpy_interop.h
+++ b/cpp/src/arrow/python/numpy_interop.h
@@ -18,9 +18,9 @@
#ifndef PYARROW_NUMPY_INTEROP_H
#define PYARROW_NUMPY_INTEROP_H
-#include "arrow/python/platform.h"
+#include "arrow/python/platform.h" // IWYU pragma: export
-#include <numpy/numpyconfig.h>
+#include <numpy/numpyconfig.h> // IWYU pragma: export
// Don't use the deprecated Numpy functions
#ifdef NPY_1_7_API_VERSION
@@ -39,9 +39,9 @@
#define NO_IMPORT_ARRAY
#endif
-#include <numpy/arrayobject.h>
-#include <numpy/arrayscalars.h>
-#include <numpy/ufuncobject.h>
+#include <numpy/arrayobject.h> // IWYU pragma: export
+#include <numpy/arrayscalars.h> // IWYU pragma: export
+#include <numpy/ufuncobject.h> // IWYU pragma: export
// A bit subtle. Numpy has 5 canonical integer types:
// (or, rather, type pairs: signed and unsigned)
diff --git a/cpp/src/arrow/python/platform.h b/cpp/src/arrow/python/platform.h
index ae39469..4dc944e 100644
--- a/cpp/src/arrow/python/platform.h
+++ b/cpp/src/arrow/python/platform.h
@@ -22,7 +22,7 @@
#define ARROW_PYTHON_PLATFORM_H
#include <iostream>
-#include <Python.h>
+#include <Python.h> // IWYU pragma: export
#include <datetime.h>
// Work around C2528 error
diff --git a/cpp/src/arrow/record_batch.h b/cpp/src/arrow/record_batch.h
index 6fb747c..f6538f9 100644
--- a/cpp/src/arrow/record_batch.h
+++ b/cpp/src/arrow/record_batch.h
@@ -23,14 +23,14 @@
#include <string>
#include <vector>
-#include "arrow/array.h"
#include "arrow/type.h"
#include "arrow/util/macros.h"
#include "arrow/util/visibility.h"
namespace arrow {
-class KeyValueMetadata;
+class Array;
+struct ArrayData;
class Status;
/// \class RecordBatch
diff --git a/cpp/src/arrow/stl-test.cc b/cpp/src/arrow/stl-test.cc
index c85baa3..6c33098 100644
--- a/cpp/src/arrow/stl-test.cc
+++ b/cpp/src/arrow/stl-test.cc
@@ -15,9 +15,15 @@
// specific language governing permissions and limitations
// under the License.
-#include "gtest/gtest.h"
+#include <cstdint>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include <gtest/gtest.h>
#include "arrow/stl.h"
+#include "arrow/type.h"
namespace arrow {
namespace stl {
diff --git a/cpp/src/arrow/table-test.cc b/cpp/src/arrow/table-test.cc
index dfd8b63..178619b 100644
--- a/cpp/src/arrow/table-test.cc
+++ b/cpp/src/arrow/table-test.cc
@@ -15,11 +15,11 @@
// specific language governing permissions and limitations
// under the License.
+#include <cstdint>
#include <memory>
-#include <string>
#include <vector>
-#include "gtest/gtest.h"
+#include <gtest/gtest.h>
#include "arrow/array.h"
#include "arrow/record_batch.h"
diff --git a/cpp/src/arrow/table.h b/cpp/src/arrow/table.h
index f80cf29..119e4e4 100644
--- a/cpp/src/arrow/table.h
+++ b/cpp/src/arrow/table.h
@@ -31,7 +31,7 @@
namespace arrow {
-class KeyValueMetadata;
+class MemoryPool;
class Status;
/// \class ChunkedArray
diff --git a/cpp/src/arrow/table_builder-test.cc
b/cpp/src/arrow/table_builder-test.cc
index 74f5ce0..3341acd 100644
--- a/cpp/src/arrow/table_builder-test.cc
+++ b/cpp/src/arrow/table_builder-test.cc
@@ -15,16 +15,17 @@
// specific language governing permissions and limitations
// under the License.
+#include <cstddef>
+#include <cstdint>
#include <memory>
#include <string>
#include <vector>
-#include "gtest/gtest.h"
+#include <gtest/gtest.h>
-#include "arrow/array.h"
+#include "arrow/builder.h"
#include "arrow/record_batch.h"
#include "arrow/status.h"
-#include "arrow/table.h"
#include "arrow/table_builder.h"
#include "arrow/test-common.h"
#include "arrow/test-util.h"
@@ -33,6 +34,8 @@
namespace arrow {
+class Array;
+
using internal::checked_cast;
class TestRecordBatchBuilder : public TestBase {
diff --git a/cpp/src/arrow/table_builder.cc b/cpp/src/arrow/table_builder.cc
index ef39d57..21d158f 100644
--- a/cpp/src/arrow/table_builder.cc
+++ b/cpp/src/arrow/table_builder.cc
@@ -17,17 +17,13 @@
#include "arrow/table_builder.h"
-#include <algorithm>
-#include <cstdlib>
#include <memory>
-#include <sstream>
#include <utility>
#include "arrow/array.h"
#include "arrow/builder.h"
#include "arrow/record_batch.h"
#include "arrow/status.h"
-#include "arrow/table.h"
#include "arrow/type.h"
#include "arrow/util/logging.h"
diff --git a/cpp/src/arrow/table_builder.h b/cpp/src/arrow/table_builder.h
index bd6b32b..8e7dfc1 100644
--- a/cpp/src/arrow/table_builder.h
+++ b/cpp/src/arrow/table_builder.h
@@ -20,20 +20,19 @@
#include <cstdint>
#include <memory>
-#include <string>
#include <vector>
+#include "arrow/builder.h"
#include "arrow/status.h"
#include "arrow/type.h"
#include "arrow/util/checked_cast.h"
+#include "arrow/util/macros.h"
#include "arrow/util/visibility.h"
namespace arrow {
-class ArrayBuilder;
class MemoryPool;
class RecordBatch;
-class Schema;
/// \class RecordBatchBuilder
/// \brief Helper class for creating record batches iteratively given a known
diff --git a/cpp/src/arrow/tensor-test.cc b/cpp/src/arrow/tensor-test.cc
index 196841c..ee82051 100644
--- a/cpp/src/arrow/tensor-test.cc
+++ b/cpp/src/arrow/tensor-test.cc
@@ -25,7 +25,6 @@
#include <gtest/gtest.h>
#include "arrow/buffer.h"
-#include "arrow/memory_pool.h"
#include "arrow/tensor.h"
#include "arrow/test-util.h"
#include "arrow/type.h"
diff --git a/cpp/src/arrow/tensor.cc b/cpp/src/arrow/tensor.cc
index 7de7558..5b44a03 100644
--- a/cpp/src/arrow/tensor.cc
+++ b/cpp/src/arrow/tensor.cc
@@ -25,7 +25,6 @@
#include <vector>
#include "arrow/compare.h"
-#include "arrow/status.h"
#include "arrow/type.h"
#include "arrow/util/checked_cast.h"
#include "arrow/util/logging.h"
diff --git a/cpp/src/arrow/type-test.cc b/cpp/src/arrow/type-test.cc
index 6291cf6..e0a1069 100644
--- a/cpp/src/arrow/type-test.cc
+++ b/cpp/src/arrow/type-test.cc
@@ -24,10 +24,8 @@
#include <gtest/gtest.h>
-#include "arrow/test-util.h"
#include "arrow/type.h"
#include "arrow/util/checked_cast.h"
-#include "arrow/util/key_value_metadata.h"
using std::shared_ptr;
using std::vector;
diff --git a/cpp/src/arrow/type.cc b/cpp/src/arrow/type.cc
index 21df342..5f1ca8d 100644
--- a/cpp/src/arrow/type.cc
+++ b/cpp/src/arrow/type.cc
@@ -18,7 +18,8 @@
#include "arrow/type.h"
#include <climits>
-#include <sstream>
+#include <cstddef>
+#include <sstream> // IWYU pragma: keep
#include <string>
#include <utility>
#include <vector>
diff --git a/cpp/src/arrow/type.h b/cpp/src/arrow/type.h
index 8688c2a..63f0e2d 100644
--- a/cpp/src/arrow/type.h
+++ b/cpp/src/arrow/type.h
@@ -23,19 +23,23 @@
#include <memory>
#include <ostream>
#include <string>
+#include <type_traits>
#include <unordered_map>
#include <vector>
#include "arrow/status.h"
#include "arrow/type_fwd.h" // IWYU pragma: export
#include "arrow/util/checked_cast.h"
-#include "arrow/util/key_value_metadata.h"
+#include "arrow/util/key_value_metadata.h" // IWYU pragma: export
#include "arrow/util/macros.h"
#include "arrow/util/visibility.h"
-#include "arrow/visitor.h"
+#include "arrow/visitor.h" // IWYU pragma: keep
namespace arrow {
+class Array;
+class Field;
+
/// \brief Main data type enumeration
///
/// This enumeration provides a quick way to interrogate the category
diff --git a/cpp/src/arrow/util/bit-util-test.cc
b/cpp/src/arrow/util/bit-util-test.cc
index 86c4933..b3ee19f 100644
--- a/cpp/src/arrow/util/bit-util-test.cc
+++ b/cpp/src/arrow/util/bit-util-test.cc
@@ -19,7 +19,6 @@
#include <cstdint>
#include <cstring>
#include <functional>
-#include <initializer_list>
#include <limits>
#include <memory>
#include <valarray>
diff --git a/cpp/src/arrow/util/bit-util.cc b/cpp/src/arrow/util/bit-util.cc
index a28d27f..7b7a726 100644
--- a/cpp/src/arrow/util/bit-util.cc
+++ b/cpp/src/arrow/util/bit-util.cc
@@ -24,17 +24,21 @@
#endif
#include <algorithm>
+#include <cstdint>
#include <cstring>
#include <functional>
+#include <memory>
#include <vector>
#include "arrow/buffer.h"
-#include "arrow/memory_pool.h"
#include "arrow/status.h"
#include "arrow/util/bit-util.h"
#include "arrow/util/logging.h"
namespace arrow {
+
+class MemoryPool;
+
namespace BitUtil {
namespace {
diff --git a/cpp/src/arrow/util/checked-cast-test.cc
b/cpp/src/arrow/util/checked-cast-test.cc
index 1045038..b50a859 100644
--- a/cpp/src/arrow/util/checked-cast-test.cc
+++ b/cpp/src/arrow/util/checked-cast-test.cc
@@ -16,6 +16,7 @@
// under the License.
#include <type_traits>
+#include <typeinfo>
#include <gtest/gtest.h>
diff --git a/cpp/src/arrow/util/compression_zlib.cc
b/cpp/src/arrow/util/compression_zlib.cc
index f1e9fb1..883b8fe 100644
--- a/cpp/src/arrow/util/compression_zlib.cc
+++ b/cpp/src/arrow/util/compression_zlib.cc
@@ -28,6 +28,7 @@
#include "arrow/status.h"
#include "arrow/util/logging.h"
+#include "arrow/util/macros.h"
namespace arrow {
namespace util {
diff --git a/cpp/src/arrow/util/decimal-test.cc
b/cpp/src/arrow/util/decimal-test.cc
index 61884a1..94c2702 100644
--- a/cpp/src/arrow/util/decimal-test.cc
+++ b/cpp/src/arrow/util/decimal-test.cc
@@ -15,6 +15,9 @@
// specific language governing permissions and limitations
// under the License.
+#include <algorithm>
+#include <array>
+#include <cmath>
#include <cstdint>
#include <string>
#include <tuple>
@@ -24,6 +27,7 @@
#include "arrow/status.h"
#include "arrow/test-util.h"
#include "arrow/util/decimal.h"
+#include "arrow/util/macros.h"
namespace arrow {
diff --git a/cpp/src/arrow/util/decimal.cc b/cpp/src/arrow/util/decimal.cc
index 5d83653..9d22e00 100644
--- a/cpp/src/arrow/util/decimal.cc
+++ b/cpp/src/arrow/util/decimal.cc
@@ -16,17 +16,21 @@
// under the License.
#include <algorithm>
-#include <cctype>
+#include <array>
#include <climits>
-#include <cmath>
+#include <cstdint>
+#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <limits>
#include <sstream>
+#include <string>
+#include "arrow/status.h"
#include "arrow/util/bit-util.h"
#include "arrow/util/decimal.h"
#include "arrow/util/logging.h"
+#include "arrow/util/macros.h"
namespace arrow {
diff --git a/cpp/src/arrow/util/hash.cc b/cpp/src/arrow/util/hash.cc
index bd28b2f..ce79710 100644
--- a/cpp/src/arrow/util/hash.cc
+++ b/cpp/src/arrow/util/hash.cc
@@ -17,6 +17,8 @@
#include "arrow/util/hash.h"
+#include <algorithm>
+
#include "arrow/buffer.h"
#include "arrow/status.h"
diff --git a/cpp/src/arrow/util/io-util.cc b/cpp/src/arrow/util/io-util.cc
index ddffce3..8db5db4 100644
--- a/cpp/src/arrow/util/io-util.cc
+++ b/cpp/src/arrow/util/io-util.cc
@@ -22,15 +22,17 @@
#define _FILE_OFFSET_BITS 64
-#include "arrow/util/windows_compatibility.h"
+#include "arrow/util/windows_compatibility.h" // IWYU pragma: keep
#include <algorithm>
#include <cerrno>
+#include <cstdint>
+#include <cstring>
#include <sstream>
+#include <string>
#include <fcntl.h>
#include <stdlib.h>
-#include <string.h>
#include <sys/stat.h>
#include <sys/types.h> // IWYU pragma: keep
@@ -90,6 +92,7 @@
#endif
+#include "arrow/status.h"
#include "arrow/util/io-util.h"
namespace arrow {
diff --git a/cpp/src/arrow/util/key_value_metadata.cc
b/cpp/src/arrow/util/key_value_metadata.cc
index 04a4d62..0ab467f 100644
--- a/cpp/src/arrow/util/key_value_metadata.cc
+++ b/cpp/src/arrow/util/key_value_metadata.cc
@@ -17,8 +17,13 @@
#include <algorithm>
#include <cstddef>
+#include <cstdint>
+#include <memory>
#include <sstream>
+#include <string>
+#include <unordered_map>
#include <utility>
+#include <vector>
#include "arrow/util/key_value_metadata.h"
#include "arrow/util/logging.h"
diff --git a/cpp/src/arrow/util/lazy-test.cc b/cpp/src/arrow/util/lazy-test.cc
index af8a9ec..2f38e8e 100644
--- a/cpp/src/arrow/util/lazy-test.cc
+++ b/cpp/src/arrow/util/lazy-test.cc
@@ -16,6 +16,9 @@
// under the License.
#include <algorithm>
+#include <cstddef>
+#include <cstdint>
+#include <vector>
#include <gtest/gtest.h>
diff --git a/cpp/src/arrow/util/logging-test.cc
b/cpp/src/arrow/util/logging-test.cc
index 98efc4a..e604de7 100644
--- a/cpp/src/arrow/util/logging-test.cc
+++ b/cpp/src/arrow/util/logging-test.cc
@@ -16,11 +16,12 @@
// under the License.
#include <chrono>
-#include <cstdlib>
+#include <cstdint>
#include <iostream>
+#include <gtest/gtest.h>
+
#include "arrow/util/logging.h"
-#include "gtest/gtest.h"
// This code is adapted from
// https://github.com/ray-project/ray/blob/master/src/ray/util/logging_test.cc.
diff --git a/cpp/src/arrow/util/parsing-util-test.cc
b/cpp/src/arrow/util/parsing-util-test.cc
index 9fa5ffb..7637a71 100644
--- a/cpp/src/arrow/util/parsing-util-test.cc
+++ b/cpp/src/arrow/util/parsing-util-test.cc
@@ -15,13 +15,13 @@
// specific language governing permissions and limitations
// under the License.
-#include <gtest/gtest.h>
-
#include <locale>
+#include <stdexcept>
#include <string>
-#include "arrow/status.h"
-#include "arrow/test-util.h"
+#include <gtest/gtest.h>
+
+#include "arrow/type.h"
#include "arrow/util/parsing.h"
namespace arrow {
diff --git a/cpp/src/arrow/util/task-group-test.cc
b/cpp/src/arrow/util/task-group-test.cc
index 3bca004..0ede4ff 100644
--- a/cpp/src/arrow/util/task-group-test.cc
+++ b/cpp/src/arrow/util/task-group-test.cc
@@ -15,20 +15,19 @@
// specific language governing permissions and limitations
// under the License.
-#ifndef _WIN32
-#include <sys/wait.h>
-#include <unistd.h>
-#endif
-
#include <atomic>
#include <chrono>
+#include <cstdint>
+#include <functional>
#include <memory>
#include <random>
+#include <thread>
#include <vector>
+#include <gtest/gtest.h>
+
#include "arrow/status.h"
#include "arrow/test-util.h"
-#include "arrow/util/macros.h"
#include "arrow/util/task-group.h"
#include "arrow/util/thread-pool.h"
diff --git a/cpp/src/arrow/util/task-group.cc b/cpp/src/arrow/util/task-group.cc
index dd551fa..3ea63fc 100644
--- a/cpp/src/arrow/util/task-group.cc
+++ b/cpp/src/arrow/util/task-group.cc
@@ -16,11 +16,14 @@
// under the License.
#include "arrow/util/task-group.h"
-#include "arrow/util/logging.h"
-#include "arrow/util/thread-pool.h"
+#include <condition_variable>
+#include <cstdint>
#include <mutex>
+#include "arrow/util/logging.h"
+#include "arrow/util/thread-pool.h"
+
namespace arrow {
namespace internal {
diff --git a/cpp/src/arrow/util/task-group.h b/cpp/src/arrow/util/task-group.h
index 693432f..450b6da 100644
--- a/cpp/src/arrow/util/task-group.h
+++ b/cpp/src/arrow/util/task-group.h
@@ -24,6 +24,7 @@
#include "arrow/status.h"
#include "arrow/util/macros.h"
+#include "arrow/util/visibility.h"
namespace arrow {
namespace internal {
diff --git a/cpp/src/arrow/util/thread-pool-test.cc
b/cpp/src/arrow/util/thread-pool-test.cc
index 99d4de2..6d7b9e2 100644
--- a/cpp/src/arrow/util/thread-pool-test.cc
+++ b/cpp/src/arrow/util/thread-pool-test.cc
@@ -22,11 +22,19 @@
#include <algorithm>
#include <chrono>
+#include <cstdint>
+#include <cstdio>
#include <cstdlib>
#include <functional>
+#include <future>
+#include <memory>
+#include <string>
#include <thread>
#include <vector>
+#include <gtest/gtest.h>
+
+#include "arrow/status.h"
#include "arrow/test-util.h"
#include "arrow/util/io-util.h"
#include "arrow/util/macros.h"
diff --git a/cpp/src/arrow/util/thread-pool.cc
b/cpp/src/arrow/util/thread-pool.cc
index f3b05fd..751b264 100644
--- a/cpp/src/arrow/util/thread-pool.cc
+++ b/cpp/src/arrow/util/thread-pool.cc
@@ -16,8 +16,6 @@
// under the License.
#include "arrow/util/thread-pool.h"
-#include "arrow/util/io-util.h"
-#include "arrow/util/logging.h"
#include <algorithm>
#include <condition_variable>
@@ -25,6 +23,10 @@
#include <mutex>
#include <string>
#include <thread>
+#include <vector>
+
+#include "arrow/util/io-util.h"
+#include "arrow/util/logging.h"
namespace arrow {
namespace internal {
diff --git a/cpp/src/arrow/util/thread-pool.h b/cpp/src/arrow/util/thread-pool.h
index 4cc746d..f18cfeb 100644
--- a/cpp/src/arrow/util/thread-pool.h
+++ b/cpp/src/arrow/util/thread-pool.h
@@ -22,18 +22,20 @@
#include <unistd.h>
#endif
-#include <exception>
+#include <cstdlib>
#include <functional>
#include <future>
#include <iostream>
#include <list>
#include <memory>
+#include <string>
+#include <thread>
#include <type_traits>
#include <utility>
-#include <vector>
#include "arrow/status.h"
#include "arrow/util/macros.h"
+#include "arrow/util/visibility.h"
namespace arrow {
diff --git a/cpp/src/gandiva/arrow.h b/cpp/src/gandiva/arrow.h
index cebcfb3..34cf517 100644
--- a/cpp/src/gandiva/arrow.h
+++ b/cpp/src/gandiva/arrow.h
@@ -21,6 +21,7 @@
#include <memory>
#include <vector>
+#include <arrow/array.h>
#include <arrow/builder.h>
#include <arrow/record_batch.h>
#include <arrow/type.h>
diff --git a/cpp/src/parquet/arrow/reader.cc b/cpp/src/parquet/arrow/reader.cc
index da6061d..2006025 100644
--- a/cpp/src/parquet/arrow/reader.cc
+++ b/cpp/src/parquet/arrow/reader.cc
@@ -18,26 +18,30 @@
#include "parquet/arrow/reader.h"
#include <algorithm>
-#include <atomic>
-#include <chrono>
-#include <mutex>
-#include <queue>
+#include <climits>
+#include <cstring>
+#include <future>
+#include <ostream>
#include <string>
-#include <thread>
#include <type_traits>
#include <utility>
#include <vector>
#include "arrow/api.h"
#include "arrow/util/bit-util.h"
-#include "arrow/util/decimal.h"
#include "arrow/util/logging.h"
#include "arrow/util/thread-pool.h"
#include "parquet/arrow/record_reader.h"
#include "parquet/arrow/schema.h"
#include "parquet/column_reader.h"
+#include "parquet/exception.h"
+#include "parquet/file_reader.h"
+#include "parquet/metadata.h"
+#include "parquet/properties.h"
#include "parquet/schema.h"
+#include "parquet/types.h"
+#include "parquet/util/memory.h"
#include "parquet/util/schema-util.h"
using arrow::Array;
diff --git a/cpp/src/parquet/arrow/reader.h b/cpp/src/parquet/arrow/reader.h
index 6eee0f6..2cd94ca 100644
--- a/cpp/src/parquet/arrow/reader.h
+++ b/cpp/src/parquet/arrow/reader.h
@@ -18,25 +18,32 @@
#ifndef PARQUET_ARROW_READER_H
#define PARQUET_ARROW_READER_H
+#include <cstdint>
#include <memory>
#include <vector>
-#include "parquet/api/reader.h"
-#include "parquet/api/schema.h"
+#include "parquet/util/visibility.h"
#include "arrow/io/interfaces.h"
+#include "arrow/util/macros.h"
namespace arrow {
class Array;
class MemoryPool;
class RecordBatchReader;
+class Schema;
class Status;
class Table;
+
} // namespace arrow
namespace parquet {
+class FileMetaData;
+class ParquetFileReader;
+class ReaderProperties;
+
namespace arrow {
class ColumnChunkReader;
diff --git a/cpp/src/parquet/arrow/record_reader.cc
b/cpp/src/parquet/arrow/record_reader.cc
index 3fbdfd5..ce6fa2a 100644
--- a/cpp/src/parquet/arrow/record_reader.cc
+++ b/cpp/src/parquet/arrow/record_reader.cc
@@ -19,21 +19,29 @@
#include <algorithm>
#include <cstdint>
+#include <cstring>
#include <memory>
#include <sstream>
+#include <unordered_map>
#include <utility>
-#include <arrow/buffer.h>
-#include <arrow/memory_pool.h>
-#include <arrow/status.h>
-#include <arrow/util/bit-util.h>
-#include <arrow/util/rle-encoding.h>
+#include "arrow/buffer.h"
+#include "arrow/builder.h"
+#include "arrow/memory_pool.h"
+#include "arrow/status.h"
+#include "arrow/type.h"
+#include "arrow/util/bit-util.h"
+#include "arrow/util/logging.h"
+#include "arrow/util/rle-encoding.h"
#include "parquet/column_page.h"
#include "parquet/column_reader.h"
#include "parquet/encoding-internal.h"
+#include "parquet/encoding.h"
#include "parquet/exception.h"
#include "parquet/properties.h"
+#include "parquet/schema.h"
+#include "parquet/types.h"
using arrow::MemoryPool;
diff --git a/cpp/src/parquet/arrow/record_reader.h
b/cpp/src/parquet/arrow/record_reader.h
index 4935713..8da0709 100644
--- a/cpp/src/parquet/arrow/record_reader.h
+++ b/cpp/src/parquet/arrow/record_reader.h
@@ -19,22 +19,24 @@
#define PARQUET_RECORD_READER_H
#include <cstdint>
-#include <cstring>
-#include <iostream>
#include <memory>
-#include <unordered_map>
-#include <vector>
-#include <arrow/buffer.h>
-#include <arrow/builder.h>
-#include <arrow/memory_pool.h>
-#include <arrow/util/bit-util.h>
+#include "arrow/memory_pool.h"
-#include "parquet/column_reader.h"
-#include "parquet/schema.h"
#include "parquet/util/macros.h"
+#include "parquet/util/memory.h"
+
+namespace arrow {
+
+class ArrayBuilder;
+
+} // namespace arrow
namespace parquet {
+
+class ColumnDescriptor;
+class PageReader;
+
namespace internal {
/// \brief Stateful column reader that delimits semantic records for both flat
diff --git a/cpp/src/parquet/arrow/schema.h b/cpp/src/parquet/arrow/schema.h
index 3b212da..8e92085 100644
--- a/cpp/src/parquet/arrow/schema.h
+++ b/cpp/src/parquet/arrow/schema.h
@@ -18,14 +18,16 @@
#ifndef PARQUET_ARROW_SCHEMA_H
#define PARQUET_ARROW_SCHEMA_H
+#include <cstdint>
#include <memory>
#include <vector>
#include "arrow/api.h"
-#include "parquet/api/schema.h"
-#include "parquet/api/writer.h"
#include "parquet/arrow/writer.h"
+#include "parquet/metadata.h"
+#include "parquet/schema.h"
+#include "parquet/util/visibility.h"
namespace arrow {
@@ -35,8 +37,12 @@ class Status;
namespace parquet {
+class WriterProperties;
+
namespace arrow {
+class ArrowWriterProperties;
+
PARQUET_EXPORT
::arrow::Status NodeToField(const schema::Node& node,
std::shared_ptr<::arrow::Field>* out);
diff --git a/cpp/src/parquet/bloom_filter-test.cc
b/cpp/src/parquet/bloom_filter-test.cc
index 96d2e06..945f80b 100644
--- a/cpp/src/parquet/bloom_filter-test.cc
+++ b/cpp/src/parquet/bloom_filter-test.cc
@@ -17,13 +17,21 @@
#include <gtest/gtest.h>
-#include <algorithm>
+#include <cstdint>
+#include <limits>
+#include <memory>
#include <random>
#include <string>
+#include <vector>
+#include "arrow/buffer.h"
#include "arrow/io/file.h"
+#include "arrow/status.h"
+
#include "parquet/bloom_filter.h"
+#include "parquet/exception.h"
#include "parquet/murmur3.h"
+#include "parquet/types.h"
#include "parquet/util/memory.h"
#include "parquet/util/test-common.h"
diff --git a/cpp/src/parquet/file-deserialize-test.cc
b/cpp/src/parquet/file-deserialize-test.cc
index 31acbf1..17dfe38 100644
--- a/cpp/src/parquet/file-deserialize-test.cc
+++ b/cpp/src/parquet/file-deserialize-test.cc
@@ -17,16 +17,11 @@
#include <gtest/gtest.h>
-#include <algorithm>
#include <cstdint>
-#include <cstdlib>
#include <cstring>
-#include <exception>
#include <memory>
-#include <string>
-#include <vector>
-#include "parquet/column_reader.h"
+#include "parquet/column_page.h"
#include "parquet/exception.h"
#include "parquet/file_reader.h"
#include "parquet/thrift.h"
@@ -34,6 +29,8 @@
#include "parquet/util/memory.h"
#include "parquet/util/test-common.h"
+#include "arrow/io/memory.h"
+#include "arrow/status.h"
#include "arrow/util/compression.h"
namespace parquet {
diff --git a/cpp/src/parquet/public-api-test.cc
b/cpp/src/parquet/public-api-test.cc
index 958e970..c0ef97a 100644
--- a/cpp/src/parquet/public-api-test.cc
+++ b/cpp/src/parquet/public-api-test.cc
@@ -17,10 +17,10 @@
#include <gtest/gtest.h>
-#include "parquet/api/io.h"
-#include "parquet/api/reader.h"
-#include "parquet/api/schema.h"
-#include "parquet/api/writer.h"
+#include "parquet/api/io.h" // IWYU pragma: keep
+#include "parquet/api/reader.h" // IWYU pragma: keep
+#include "parquet/api/schema.h" // IWYU pragma: keep
+#include "parquet/api/writer.h" // IWYU pragma: keep
TEST(TestPublicAPI, DoesNotIncludeThrift) {
#ifdef _THRIFT_THRIFT_H_
diff --git a/cpp/src/parquet/thrift.h b/cpp/src/parquet/thrift.h
index 217cc76..9c665ac 100644
--- a/cpp/src/parquet/thrift.h
+++ b/cpp/src/parquet/thrift.h
@@ -44,7 +44,7 @@
#include "parquet/exception.h"
#include "parquet/util/memory.h"
-#include "parquet/parquet_types.h"
+#include "parquet/parquet_types.h" // IYWU pragma: export
namespace parquet {
diff --git a/dev/docker_common/Dockerfile.xenial.base
b/dev/docker_common/Dockerfile.xenial.base
index b2589de..49d9fd7 100644
--- a/dev/docker_common/Dockerfile.xenial.base
+++ b/dev/docker_common/Dockerfile.xenial.base
@@ -45,6 +45,7 @@ RUN wget
https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -
pandas \
pytest \
cmake \
+ double-conversion \
flatbuffers \
rapidjson \
boost-cpp \
@@ -52,10 +53,16 @@ RUN wget
https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -
snappy \
zlib \
gflags \
+ glog \
+ gtest \
+ re2 \
brotli \
jemalloc \
lz4-c \
zstd \
setuptools \
setuptools_scm \
- && conda clean --all
\ No newline at end of file
+ && conda clean --all
+
+ADD docker_common/install_clang_tools_xenial.sh /
+RUN /install_clang_tools_xenial.sh
diff --git a/dev/docker_common/install_clang_tools_xenial.sh
b/dev/docker_common/install_clang_tools_xenial.sh
new file mode 100755
index 0000000..e35e3dc
--- /dev/null
+++ b/dev/docker_common/install_clang_tools_xenial.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+# 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.
+
+wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key|apt-key add -
+apt-add-repository -y \
+ "deb http://llvm.org/apt/xenial/ llvm-toolchain-xenial-6.0 main"
+apt-get update -qq
+apt-get install -y -q libclang-6.0-dev clang-6.0 clang-format-6.0
clang-tidy-6.0
diff --git a/dev/iwyu/Dockerfile b/dev/iwyu/Dockerfile
index 3d93f90..8174720 100644
--- a/dev/iwyu/Dockerfile
+++ b/dev/iwyu/Dockerfile
@@ -17,7 +17,7 @@
FROM arrow_integration_xenial_base
-ADD . /apache-arrow
-WORKDIR /apache-arrow
+ADD dev/iwyu/run_iwyu.sh /run_iwyu.sh
-CMD arrow/dev/iwyu/run_iwyu.sh
+WORKDIR /tmp
+CMD /run_iwyu.sh
\ No newline at end of file
diff --git a/dev/iwyu/run_iwyu.sh b/dev/iwyu/run_iwyu.sh
index ae0f761..9e2bd7e 100755
--- a/dev/iwyu/run_iwyu.sh
+++ b/dev/iwyu/run_iwyu.sh
@@ -18,8 +18,8 @@
# Set up environment and working directory
CLANG_VERSION=6.0
-IWYU_BUILD_DIR=`pwd`/arrow/cpp/docker-iwyu
-IWYU_SH=`pwd`/arrow/cpp/build-support/iwyu/iwyu.sh
+IWYU_BUILD_DIR=/arrow/cpp/docker-iwyu
+IWYU_SH=/arrow/cpp/build-support/iwyu/iwyu.sh
IWYU_URL=https://github.com/include-what-you-use/include-what-you-use/archive/clang_$CLANG_VERSION.tar.gz
rm -rf $IWYU_BUILD_DIR
@@ -49,6 +49,8 @@ pushd iwyu-build
# iwyu needs this
apt-get install -y zlib1g-dev
+source activate pyarrow-dev
+
cmake -G "Unix Makefiles" -DIWYU_LLVM_ROOT_PATH=/usr/lib/llvm-$CLANG_VERSION
$IWYU_SRC
make -j4
popd
@@ -56,11 +58,15 @@ popd
# Add iwyu and iwyu_tool.py to path
export PATH=$IWYU_BUILD_DIR/iwyu-build:$PATH
-conda activate pyarrow-dev
+export ARROW_BUILD_TOOLCHAIN=$CONDA_PREFIX
-cmake -GNinja -DARROW_PYTHON=ON -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
+cmake -GNinja \
+ -DARROW_PARQUET=ON \
+ -DARROW_PYTHON=ON \
+ -DCMAKE_CXX_FLAGS='-D_GLIBCXX_USE_CXX11_ABI=0' \
+ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
# Make so that vendored bits are built
-ninja
+ninja arrow_shared
$IWYU_SH all
diff --git a/docker-compose.yml b/docker-compose.yml
index e407e6e..62c3003 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -120,6 +120,15 @@ services:
volumes:
- .:/arrow:delegated
+ # Depends on xenial base image, see dev/README.md
+ iwyu:
+ image: arrow:iwyu
+ build:
+ context: .
+ dockerfile: dev/iwyu/Dockerfile
+ volumes:
+ - .:/arrow:delegated
+
clang-format:
image: arrow:lint
shm_size: 2G
diff --git a/python/manylinux1/README.md b/python/manylinux1/README.md
index 580aea3..de99f1c 100644
--- a/python/manylinux1/README.md
+++ b/python/manylinux1/README.md
@@ -39,7 +39,6 @@ ls -l dist/
```
### Updating the build environment
-
The base docker image is less often updated. In the case we want to update
a dependency to a new version, we also need to adjust it. You can rebuild
this image using