This is an automated email from the ASF dual-hosted git repository.
SYaoJun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-graphar.git
The following commit(s) were added to refs/heads/main by this push:
new 8887a150 fix(cpp): restore Arrow 17 devcontainer compatibility (#952)
8887a150 is described below
commit 8887a1503c918d225226c093e6790434fed1c056
Author: alex <[email protected]>
AuthorDate: Tue Aug 18 02:40:58 2026 +0300
fix(cpp): restore Arrow 17 devcontainer compatibility (#952)
* fix(cpp): restore Arrow 17 devcontainer compatibility
Support the Arrow 17 compute and Parquet reader APIs packaged by the
published development container while preserving the Arrow 21+ path.
Tests: graphar-cpplint; CMake build; ctest (20/20) in devcontainer
Fixes: #945
* fix(cpp): keep the info headers free of Arrow and guard ARROW_VERSION
Review feedback on apache/incubator-graphar#952.
Including arrow/util/config.h in fwd.h coupled the info API chain
(api/info.h -> graph_info.h/types.h/result.h) to Arrow. Since the graphar
target links Arrow PRIVATE and graphar-config.cmake does not export the
Arrow
include directories, a downstream consumer of the info API alone would need
Arrow development headers on its include path. Every use of ARROW_VERSION in
this branch is in a translation unit that already depends on Arrow, so the
include belongs there instead.
Also spell the version checks as defined(ARROW_VERSION) && ..., matching the
checks already present in filesystem.cc and util.h.
Verified in ghcr.io/apache/graphar-dev:latest (Arrow 17): a translation unit
including only graphar/graph_info.h compiles with the Arrow headers removed
from the include path, which fails before this change; the full Debug build
succeeds and ctest reports 20/20 passed.
---------
Co-authored-by: keksmd <[email protected]>
---
cmake.log | 33 +++++++++++
cpp/src/graphar/arrow/chunk_reader.cc | 5 ++
cpp/src/graphar/arrow/chunk_writer.cc | 8 ++-
cpp/src/graphar/expression.cc | 3 +
cpp/src/graphar/filesystem.cc | 15 +++++
cpp/src/graphar/high-level/graph_reader.cc | 3 +
cpp/src/graphar/reader_util.cc | 3 +
cpp/src/graphar/util.h | 1 +
cpp/test/test_arrow_chunk_writer.cc | 12 ++--
cpp/test/test_builder.cc | 8 +--
cpp/test/util.h | 16 ++++++
make.log | 90 ++++++++++++++++++++++++++++++
12 files changed, 187 insertions(+), 10 deletions(-)
diff --git a/cmake.log b/cmake.log
new file mode 100644
index 00000000..ddcc018d
--- /dev/null
+++ b/cmake.log
@@ -0,0 +1,33 @@
+-- The C compiler identification is GNU 11.4.0
+-- The CXX compiler identification is GNU 11.4.0
+-- Detecting C compiler ABI info
+-- Detecting C compiler ABI info - done
+-- Check for working C compiler: /usr/bin/cc - skipped
+-- Detecting C compile features
+-- Detecting C compile features - done
+-- Detecting CXX compiler ABI info
+-- Detecting CXX compiler ABI info - done
+-- Check for working CXX compiler: /usr/bin/c++ - skipped
+-- Detecting CXX compile features
+-- Detecting CXX compile features - done
+-- [graphar] will build in type: Debug
+-- [graphar] GRAPHAR_ENABLE_SANITIZER: ON
+-- [graphar] GRAPHAR_ENABLE_COVERAGE: OFF
+-- Checking for modules 'libbrotlicommon;libbrotlienc;libbrotlidec'
+-- Found libbrotlicommon, version 1.0.9
+-- Found libbrotlienc, version 1.0.9
+-- Found libbrotlidec, version 1.0.9
+-- Checking for module 'liblz4'
+-- Found liblz4, version 1.9.3
+-- Checking for module 'libzstd'
+-- Found libzstd, version 1.4.8
+-- Zstandard library: /usr/lib/aarch64-linux-gnu/libzstd.so
+-- Zstandard include directory: /usr/include
+-- Checking for module 're2'
+-- Found re2, version 0.0.0
+-- Checking for module 'thrift'
+-- Found thrift, version 0.16.0
+-- [graphar] using C++ standard: 17
+-- Configuring done
+-- Generating done
+-- Build files have been written to: /w/cpp/build
diff --git a/cpp/src/graphar/arrow/chunk_reader.cc
b/cpp/src/graphar/arrow/chunk_reader.cc
index 71e2ffa9..687cff6a 100644
--- a/cpp/src/graphar/arrow/chunk_reader.cc
+++ b/cpp/src/graphar/arrow/chunk_reader.cc
@@ -24,6 +24,7 @@
#include "arrow/api.h"
#include "arrow/compute/api.h"
+#include "arrow/util/config.h"
#include "graphar/arrow/chunk_reader.h"
#include "graphar/filesystem.h"
@@ -75,7 +76,9 @@ Status GeneralCast(const std::shared_ptr<arrow::Array>& in,
std::shared_ptr<arrow::Array>* out) {
static bool initialized = false;
if (!initialized) {
+#if defined(ARROW_VERSION) && ARROW_VERSION >= 21000000
RETURN_NOT_ARROW_OK(arrow::compute::Initialize());
+#endif
initialized = true;
}
GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(*out,
@@ -117,7 +120,9 @@ Status CastTableWithSchema(const
std::shared_ptr<arrow::Table>& table,
std::shared_ptr<arrow::Table>* out_table) {
static bool initialized = false;
if (!initialized) {
+#if defined(ARROW_VERSION) && ARROW_VERSION >= 21000000
RETURN_NOT_ARROW_OK(arrow::compute::Initialize());
+#endif
initialized = true;
}
if (table->schema()->Equals(*schema)) {
diff --git a/cpp/src/graphar/arrow/chunk_writer.cc
b/cpp/src/graphar/arrow/chunk_writer.cc
index 564ea614..8a9c6921 100644
--- a/cpp/src/graphar/arrow/chunk_writer.cc
+++ b/cpp/src/graphar/arrow/chunk_writer.cc
@@ -24,6 +24,7 @@
#include <utility>
#include "arrow/api.h"
#include "arrow/compute/api.h"
+#include "arrow/util/config.h"
#include "graphar/fwd.h"
#include "graphar/writer_util.h"
#if defined(ARROW_VERSION) && ARROW_VERSION >= 12000000
@@ -94,8 +95,11 @@ Result<std::shared_ptr<arrow::Table>>
ExecutePlanAndCollectAsTable(
GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(
response_table, arrow::Table::FromRecordBatchReader(sink_reader.get()));
- // stop producing
+ // Arrow 17 marks an already drained plan as cancelled when StopProducing is
+ // called. Newer Arrow versions retain the existing explicit shutdown.
+#if defined(ARROW_VERSION) && ARROW_VERSION >= 21000000
plan->StopProducing();
+#endif
// plan mark finished
RETURN_NOT_ARROW_OK(plan->finished().status());
return response_table;
@@ -1021,8 +1025,10 @@ Result<std::shared_ptr<arrow::Table>>
EdgeChunkWriter::getOffsetTable(
Result<std::shared_ptr<arrow::Table>> EdgeChunkWriter::sortTable(
const std::shared_ptr<arrow::Table>& input_table,
const std::string& column_name) {
+#if defined(ARROW_VERSION) && ARROW_VERSION >= 21000000
RETURN_NOT_ARROW_OK(arrow::compute::Initialize());
arrow::dataset::internal::Initialize();
+#endif
auto exec_context = arrow::compute::default_exec_context();
auto plan = arrow_acero_namespace::ExecPlan::Make(exec_context).ValueOrDie();
auto table_source_options =
diff --git a/cpp/src/graphar/expression.cc b/cpp/src/graphar/expression.cc
index 18f22392..70648291 100644
--- a/cpp/src/graphar/expression.cc
+++ b/cpp/src/graphar/expression.cc
@@ -18,6 +18,7 @@
*/
#include "graphar/expression.h"
+#include "arrow/util/config.h"
#include "graphar/result.h"
namespace graphar {
@@ -25,7 +26,9 @@ namespace graphar {
Status EnsureComputeInitialized() {
static bool initialized = false;
if (!initialized) {
+#if defined(ARROW_VERSION) && ARROW_VERSION >= 21000000
RETURN_NOT_ARROW_OK(arrow::compute::Initialize());
+#endif
initialized = true;
}
return Status::OK();
diff --git a/cpp/src/graphar/filesystem.cc b/cpp/src/graphar/filesystem.cc
index 08cd9edd..454e0bc4 100644
--- a/cpp/src/graphar/filesystem.cc
+++ b/cpp/src/graphar/filesystem.cc
@@ -22,6 +22,7 @@
#include "graphar/writer_util.h"
#ifdef ARROW_ORC
#include "arrow/adapters/orc/adapter.h"
+#include "arrow/util/config.h"
#endif
#include <arrow/compute/api.h>
#include "arrow/api.h"
@@ -99,12 +100,16 @@ Status EnsureDatasetScannerInitialized() {
static bool initialized = false;
static Status init_status = Status::OK();
if (!initialized) {
+#if defined(ARROW_VERSION) && ARROW_VERSION >= 21000000
auto st = arrow::compute::Initialize();
if (!st.ok()) {
init_status = Status::ArrowError(st.ToString());
} else {
arrow::dataset::internal::Initialize();
}
+#else
+ arrow::dataset::internal::Initialize();
+#endif
initialized = true;
}
return init_status;
@@ -141,6 +146,15 @@ Result<std::shared_ptr<arrow::Table>>
FileSystem::ReadFileToTable(
}
builder.memory_pool(arrow::default_memory_pool());
GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(auto reader, builder.Build());
+#if defined(ARROW_VERSION) && ARROW_VERSION <= 20000000
+ std::shared_ptr<arrow::Table> table;
+ if (column_indices.empty()) {
+ RETURN_NOT_ARROW_OK(reader->ReadTable(&table));
+ return table;
+ }
+ RETURN_NOT_ARROW_OK(reader->ReadTable(column_indices, &table));
+ return table;
+#else
if (column_indices.empty()) {
GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(auto table, reader->ReadTable());
return table;
@@ -148,6 +162,7 @@ Result<std::shared_ptr<arrow::Table>>
FileSystem::ReadFileToTable(
GAR_RETURN_ON_ARROW_ERROR_AND_ASSIGN(auto table,
reader->ReadTable(column_indices));
return table;
+#endif
}
Result<std::shared_ptr<arrow::Table>> FileSystem::ReadFileToTable(
diff --git a/cpp/src/graphar/high-level/graph_reader.cc
b/cpp/src/graphar/high-level/graph_reader.cc
index 96c7d496..139138a8 100644
--- a/cpp/src/graphar/high-level/graph_reader.cc
+++ b/cpp/src/graphar/high-level/graph_reader.cc
@@ -23,6 +23,7 @@
#include "arrow/array.h"
#include "arrow/dataset/dataset.h"
#include "arrow/dataset/plan.h"
+#include "arrow/util/config.h"
#include "graphar/api/arrow_reader.h"
#include "graphar/convert_to_arrow_type.h"
#include "graphar/label.h"
@@ -948,7 +949,9 @@ Result<std::shared_ptr<EdgesCollection>>
EdgesCollection::Make(
const IdType vertex_chunk_end) noexcept {
static bool initialized = false;
if (!initialized) {
+#if defined(ARROW_VERSION) && ARROW_VERSION >= 21000000
RETURN_NOT_ARROW_OK(arrow::compute::Initialize());
+#endif
arrow::dataset::internal::Initialize();
initialized = true;
}
diff --git a/cpp/src/graphar/reader_util.cc b/cpp/src/graphar/reader_util.cc
index df1f2791..6c9c9a1b 100644
--- a/cpp/src/graphar/reader_util.cc
+++ b/cpp/src/graphar/reader_util.cc
@@ -19,6 +19,7 @@
#ifdef ARROW_ORC
#include "arrow/adapters/orc/adapter.h"
+#include "arrow/util/config.h"
#endif
#include "arrow/api.h"
#include "arrow/csv/api.h"
@@ -47,7 +48,9 @@ Status CheckFilterOptions(
const std::shared_ptr<PropertyGroup>& property_group) noexcept {
static bool initialized = false;
if (!initialized) {
+#if defined(ARROW_VERSION) && ARROW_VERSION >= 21000000
RETURN_NOT_ARROW_OK(arrow::compute::Initialize());
+#endif
initialized = true;
}
if (filter_options.filter) {
diff --git a/cpp/src/graphar/util.h b/cpp/src/graphar/util.h
index 1ef13a3e..9b885aaa 100644
--- a/cpp/src/graphar/util.h
+++ b/cpp/src/graphar/util.h
@@ -33,6 +33,7 @@
#include "arrow/filesystem/api.h"
#include "arrow/io/api.h"
#include "arrow/stl.h"
+#include "arrow/util/config.h"
#include "arrow/util/uri.h"
#include "parquet/arrow/reader.h"
#include "parquet/arrow/writer.h"
diff --git a/cpp/test/test_arrow_chunk_writer.cc
b/cpp/test/test_arrow_chunk_writer.cc
index b3522705..6deba0d9 100644
--- a/cpp/test/test_arrow_chunk_writer.cc
+++ b/cpp/test/test_arrow_chunk_writer.cc
@@ -145,7 +145,7 @@ TEST_CASE_METHOD(GlobalFixture, "TestVertexPropertyWriter")
{
st = graphar::util::OpenParquetArrowReader(path2, pool, &arrow_reader);
// Read entire file as a single Arrow table
- auto maybe_table2 = arrow_reader->ReadTable();
+ auto maybe_table2 = ReadParquetTable(arrow_reader.get());
REQUIRE(maybe_table2.ok());
auto table2 = maybe_table2.ValueOrDie();
@@ -218,7 +218,7 @@ TEST_CASE_METHOD(GlobalFixture, "TestVertexPropertyWriter")
{
auto st = graphar::util::OpenParquetArrowReader(
parquet_file, arrow::default_memory_pool(), &parquet_reader);
REQUIRE(st.ok());
- auto maybe_parquet_table = parquet_reader->ReadTable();
+ auto maybe_parquet_table = ReadParquetTable(parquet_reader.get());
REQUIRE(maybe_parquet_table.ok());
auto parquet_table = maybe_parquet_table.ValueOrDie();
auto parquet_metadata = parquet_reader->parquet_reader()->metadata();
@@ -281,7 +281,7 @@ TEST_CASE_METHOD(GlobalFixture, "TestEdgeChunkWriter") {
std::unique_ptr<parquet::arrow::FileReader> arrow_reader;
st = graphar::util::OpenParquetArrowReader(path, pool, &arrow_reader);
// Read entire file as a single Arrow table
- auto maybe_table = arrow_reader->ReadTable();
+ auto maybe_table = ReadParquetTable(arrow_reader.get());
REQUIRE(maybe_table.ok());
std::shared_ptr<arrow::Table> table =
@@ -377,7 +377,9 @@ TEST_CASE_METHOD(GlobalFixture, "TestEdgeChunkWriter") {
auto writer = maybe_writer.value();
// Valid: Write adj list with options
- REQUIRE(writer->SortAndWriteAdjListTable(table, 0, 0).ok());
+ auto write_status = writer->SortAndWriteAdjListTable(table, 0, 0);
+ INFO(write_status.message());
+ REQUIRE(write_status.ok());
// Valid: Write edge count
REQUIRE(writer->WriteEdgesNum(0, table->num_rows()).ok());
// Valid: Write vertex count
@@ -429,7 +431,7 @@ TEST_CASE_METHOD(GlobalFixture, "TestEdgeChunkWriter") {
auto st = graphar::util::OpenParquetArrowReader(
parquet_file, arrow::default_memory_pool(), &parquet_reader);
REQUIRE(st.ok());
- auto maybe_parquet_table = parquet_reader->ReadTable();
+ auto maybe_parquet_table = ReadParquetTable(parquet_reader.get());
REQUIRE(maybe_parquet_table.ok());
auto parquet_table = maybe_parquet_table.ValueOrDie();
auto parquet_metadata = parquet_reader->parquet_reader()->metadata();
diff --git a/cpp/test/test_builder.cc b/cpp/test/test_builder.cc
index 244f0d8c..16ba5a21 100644
--- a/cpp/test/test_builder.cc
+++ b/cpp/test/test_builder.cc
@@ -174,7 +174,7 @@ TEST_CASE_METHOD(GlobalFixture, "Test_vertices_builder") {
REQUIRE(graphar::util::OpenParquetArrowReader(
parquet_file, arrow::default_memory_pool(), &parquet_reader)
.ok());
- auto maybe_parquet_table = parquet_reader->ReadTable();
+ auto maybe_parquet_table = ReadParquetTable(parquet_reader.get());
REQUIRE(maybe_parquet_table.ok());
auto parquet_table = maybe_parquet_table.ValueOrDie();
auto parquet_metadata = parquet_reader->parquet_reader()->metadata();
@@ -193,7 +193,7 @@ TEST_CASE_METHOD(GlobalFixture, "Test_vertices_builder") {
auto id_col = parquet_table->GetColumnByName("id");
- auto maybe_name_table = name_reader->ReadTable();
+ auto maybe_name_table = ReadParquetTable(name_reader.get());
REQUIRE(maybe_name_table.ok());
auto name_table = maybe_name_table.ValueOrDie();
auto name_col = name_table->GetColumnByName("firstName");
@@ -332,7 +332,7 @@ TEST_CASE_METHOD(GlobalFixture, "test_edges_builder") {
REQUIRE(graphar::util::OpenParquetArrowReader(
parquet_file, arrow::default_memory_pool(), &reader)
.ok());
- auto maybe_table = reader->ReadTable();
+ auto maybe_table = ReadParquetTable(reader.get());
REQUIRE(maybe_table.ok());
auto table = maybe_table.ValueOrDie();
auto col = table->GetColumnByName("creationDate");
@@ -381,7 +381,7 @@ TEST_CASE_METHOD(GlobalFixture, "test_edges_builder") {
REQUIRE(graphar::util::OpenParquetArrowReader(
parquet_file, arrow::default_memory_pool(), &parquet_reader)
.ok());
- auto maybe_parquet_table = parquet_reader->ReadTable();
+ auto maybe_parquet_table = ReadParquetTable(parquet_reader.get());
REQUIRE(maybe_parquet_table.ok());
auto parquet_table = maybe_parquet_table.ValueOrDie();
auto parquet_metadata = parquet_reader->parquet_reader()->metadata();
diff --git a/cpp/test/util.h b/cpp/test/util.h
index 32630de2..3ba95cc4 100644
--- a/cpp/test/util.h
+++ b/cpp/test/util.h
@@ -21,10 +21,26 @@
#include <filesystem>
#include <iostream>
+#include <memory>
#include <string>
+#include "arrow/table.h"
+#include "arrow/util/config.h"
+#include "parquet/arrow/reader.h"
+
namespace graphar {
+inline arrow::Result<std::shared_ptr<arrow::Table>> ReadParquetTable(
+ parquet::arrow::FileReader* reader) {
+#if ARROW_VERSION <= 20000000
+ std::shared_ptr<arrow::Table> table;
+ ARROW_RETURN_NOT_OK(reader->ReadTable(&table));
+ return table;
+#else
+ return reader->ReadTable();
+#endif
+}
+
// Define the fixture
struct GlobalFixture {
GlobalFixture() {
diff --git a/make.log b/make.log
new file mode 100644
index 00000000..821c0fe5
--- /dev/null
+++ b/make.log
@@ -0,0 +1,90 @@
+make: Entering directory '/w/cpp/build'
+make[1]: Entering directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Leaving directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+[ 2%] Building CXX object
src/CMakeFiles/graphar_thirdparty.dir/__/thirdparty/mini-yaml/yaml/Yaml.cpp.o
+[ 5%] Linking CXX static library libgraphar_thirdparty.a
+make[2]: Leaving directory '/w/cpp/build'
+[ 5%] Built target graphar_thirdparty
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Leaving directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+[ 8%] Building CXX object
src/CMakeFiles/graphar.dir/graphar/arrow/chunk_writer.cc.o
+[ 11%] Building CXX object src/CMakeFiles/graphar.dir/graphar/graph_info.cc.o
+[ 13%] Building CXX object
src/CMakeFiles/graphar.dir/graphar/chunk_info_reader.cc.o
+[ 16%] Building CXX object src/CMakeFiles/graphar.dir/graphar/filesystem.cc.o
+[ 22%] Building CXX object
src/CMakeFiles/graphar.dir/graphar/arrow/chunk_reader.cc.o
+[ 22%] Building CXX object src/CMakeFiles/graphar.dir/graphar/expression.cc.o
+[ 25%] Building CXX object
src/CMakeFiles/graphar.dir/graphar/high-level/edges_builder.cc.o
+[ 27%] Building CXX object
src/CMakeFiles/graphar.dir/graphar/chunk_info_writer.cc.o
+[ 30%] Building CXX object
src/CMakeFiles/graphar.dir/graphar/high-level/graph_reader.cc.o
+[ 33%] Building CXX object
src/CMakeFiles/graphar.dir/graphar/high-level/vertices_builder.cc.o
+[ 36%] Building CXX object src/CMakeFiles/graphar.dir/graphar/label.cc.o
+[ 38%] Building CXX object src/CMakeFiles/graphar.dir/graphar/reader_util.cc.o
+[ 41%] Building CXX object src/CMakeFiles/graphar.dir/graphar/types.cc.o
+[ 44%] Building CXX object src/CMakeFiles/graphar.dir/graphar/util.cc.o
+[ 47%] Building CXX object
src/CMakeFiles/graphar.dir/graphar/version_parser.cc.o
+[ 50%] Building CXX object src/CMakeFiles/graphar.dir/graphar/writer_util.cc.o
+[ 52%] Building CXX object src/CMakeFiles/graphar.dir/graphar/yaml.cc.o
+[ 55%] Linking CXX shared library libgraphar.so
+make[2]: Leaving directory '/w/cpp/build'
+[ 55%] Built target graphar
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Leaving directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Leaving directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Leaving directory '/w/cpp/build'
+make[2]: Leaving directory '/w/cpp/build'
+make[2]: Leaving directory '/w/cpp/build'
+make[2]: Leaving directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Leaving directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+make[2]: Leaving directory '/w/cpp/build'
+make[2]: Entering directory '/w/cpp/build'
+[ 58%] Building CXX object
test/CMakeFiles/test_arrow_chunk_writer.dir/test_arrow_chunk_writer.cc.o
+[ 61%] Building CXX object test/CMakeFiles/test_graph.dir/test_graph.cc.o
+[ 63%] Building CXX object test/CMakeFiles/test_info.dir/test_info.cc.o
+[ 69%] Building CXX object
test/CMakeFiles/test_multi_label.dir/test_multi_label.cc.o
+[ 69%] Building CXX object
test/CMakeFiles/test_multi_property.dir/test_multi_property.cc.o
+[ 72%] Building CXX object
test/CMakeFiles/test_chunk_info_reader.dir/test_chunk_info_reader.cc.o
+[ 75%] Building CXX object test/CMakeFiles/test_builder.dir/test_builder.cc.o
+[ 77%] Building CXX object
test/CMakeFiles/test_arrow_chunk_reader.dir/test_arrow_chunk_reader.cc.o
+[ 80%] Linking CXX executable test_multi_label
+make[2]: Leaving directory '/w/cpp/build'
+[ 80%] Built target test_multi_label
+[ 83%] Linking CXX executable test_chunk_info_reader
+[ 86%] Linking CXX executable test_arrow_chunk_writer
+make[2]: Leaving directory '/w/cpp/build'
+[ 86%] Built target test_chunk_info_reader
+make[2]: Leaving directory '/w/cpp/build'
+[ 86%] Built target test_arrow_chunk_writer
+[ 88%] Linking CXX executable test_builder
+[ 91%] Linking CXX executable test_multi_property
+[ 94%] Linking CXX executable test_graph
+[ 97%] Linking CXX executable test_info
+[100%] Linking CXX executable test_arrow_chunk_reader
+make[2]: Leaving directory '/w/cpp/build'
+[100%] Built target test_builder
+make[2]: Leaving directory '/w/cpp/build'
+[100%] Built target test_multi_property
+make[2]: Leaving directory '/w/cpp/build'
+[100%] Built target test_graph
+make[2]: Leaving directory '/w/cpp/build'
+[100%] Built target test_info
+make[2]: Leaving directory '/w/cpp/build'
+[100%] Built target test_arrow_chunk_reader
+make[1]: Leaving directory '/w/cpp/build'
+make: Leaving directory '/w/cpp/build'
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]