From a9a1d0b140118f6f9eb1630074fa2b6752382d41 Mon Sep 17 00:00:00 2001 From: Will Ayd Date: Mon, 16 Jun 2025 13:34:35 -0400 Subject: [PATCH 1/9] GH-46827: [C++] Update Meson Configuration for compute shared lib --- cpp/src/arrow/acero/meson.build | 20 ++- cpp/src/arrow/c/meson.build | 8 +- cpp/src/arrow/compute/CMakeLists.txt | 2 +- cpp/src/arrow/compute/kernels/meson.build | 16 +- cpp/src/arrow/compute/meson.build | 69 ++++++--- cpp/src/arrow/compute/row/meson.build | 2 +- cpp/src/arrow/compute/test_env.cc | 11 +- cpp/src/arrow/meson.build | 181 ++++++++++++---------- cpp/subprojects/gtest.wrap | 18 +-- 9 files changed, 192 insertions(+), 135 deletions(-) diff --git a/cpp/src/arrow/acero/meson.build b/cpp/src/arrow/acero/meson.build index 6029610eb30..e0acb3665c2 100644 --- a/cpp/src/arrow/acero/meson.build +++ b/cpp/src/arrow/acero/meson.build @@ -80,12 +80,12 @@ arrow_acero_srcs = [ arrow_acero_lib = library( 'arrow-acero', sources: arrow_acero_srcs, - dependencies: [arrow_dep], + dependencies: [arrow_dep, arrow_compute_dep], ) arrow_acero_dep = declare_dependency(link_with: [arrow_acero_lib]) -arrow_acero_testing_sources = ['test_nodes.cc', 'test_util_internal.cc'] + arrow_compute_testing_srcs +arrow_acero_testing_sources = ['test_nodes.cc', 'test_util_internal.cc'] arrow_acero_tests = { 'plan-test': {'sources': ['plan_test.cc', 'test_nodes_test.cc']}, @@ -110,7 +110,7 @@ foreach key, val : arrow_acero_tests exc = executable( 'arrow-acero-@0@'.format(key), sources: val['sources'] + arrow_acero_testing_sources, - dependencies: [arrow_acero_dep, arrow_test_dep], + dependencies: [arrow_acero_dep, arrow_compute_test_dep], ) test(key, exc) endforeach @@ -133,7 +133,19 @@ foreach key, val : arrow_acero_benchmarks exc = executable( key, sources: val['sources'] + arrow_acero_testing_sources, - dependencies: [arrow_acero_dep, arrow_benchmark_dep, gmock_dep], + dependencies: [ + arrow_acero_dep, + arrow_compute_test_dep, + arrow_benchmark_dep, + gmock_dep, + ], ) benchmark(key, exc) endforeach + +pkg.generate( + filebase: 'arrow-acero', + name: 'Apache Arrow Acero Engine', + description: 'Apache Arrow\'s Acero Engine', + requires: ['arrow', 'arrow-compute'], +) diff --git a/cpp/src/arrow/c/meson.build b/cpp/src/arrow/c/meson.build index b5713a6e083..8d64fb23b58 100644 --- a/cpp/src/arrow/c/meson.build +++ b/cpp/src/arrow/c/meson.build @@ -15,10 +15,16 @@ # specific language governing permissions and limitations # under the License. +if needs_compute + arrow_c_bridge_deps = [arrow_compute_test_dep] +else + arrow_c_bridge_deps = [] +endif + exc = executable( 'arrow-c-bridge-test', sources: ['bridge_test.cc'], - dependencies: [arrow_test_dep], + dependencies: arrow_c_bridge_deps, ) test('arrow-c-bridge-test', exc) diff --git a/cpp/src/arrow/compute/CMakeLists.txt b/cpp/src/arrow/compute/CMakeLists.txt index 4255f2971c1..7a08e044655 100644 --- a/cpp/src/arrow/compute/CMakeLists.txt +++ b/cpp/src/arrow/compute/CMakeLists.txt @@ -50,7 +50,7 @@ if(ARROW_TESTING AND ARROW_COMPUTE) # arrow_compute_core_testing so that is also included correctly target_link_libraries(arrow_compute_testing PUBLIC $ - PUBLIC ${ARROW_GTEST_GTEST_MAIN}) + PUBLIC ${ARROW_GTEST_GTEST}) endif() set(ARROW_COMPUTE_TEST_PREFIX "arrow-compute") diff --git a/cpp/src/arrow/compute/kernels/meson.build b/cpp/src/arrow/compute/kernels/meson.build index bbf5be10760..fb682443783 100644 --- a/cpp/src/arrow/compute/kernels/meson.build +++ b/cpp/src/arrow/compute/kernels/meson.build @@ -26,17 +26,11 @@ endif exc = executable( 'arrow-scalar-cast-test', - sources: ['scalar_cast_test.cc'] + arrow_compute_testing_srcs + kernel_testing_srcs, - dependencies: [arrow_test_dep], + sources: ['scalar_cast_test.cc'] + kernel_testing_srcs, + dependencies: [arrow_compute_test_dep], ) test('arrow-scalar-cast-test', exc) -if needs_compute - arrow_compute_test_dep = declare_dependency(dependencies: [arrow_test_dep]) -else - arrow_compute_test_dep = disabler() -endif - # ---------------------------------------------------------------------- # Scalar kernels @@ -71,7 +65,7 @@ scalar_kernel_tests = { foreach key, val : scalar_kernel_tests exc = executable( key, - sources: val['sources'] + arrow_compute_testing_srcs + kernel_testing_srcs, + sources: val['sources'] + kernel_testing_srcs, dependencies: [arrow_compute_test_dep], ) test(key, exc) @@ -126,7 +120,7 @@ vector_kernel_tests = { foreach key, val : vector_kernel_tests exc = executable( key, - sources: val['sources'] + arrow_compute_testing_srcs + kernel_testing_srcs, + sources: val['sources'] + kernel_testing_srcs, dependencies: [arrow_compute_test_dep], ) test(key, exc) @@ -157,7 +151,7 @@ endforeach # Aggregates exc = executable( 'arrow-compute-aggregate-test', - sources: ['aggregate_test.cc'] + arrow_compute_testing_srcs + kernel_testing_srcs, + sources: ['aggregate_test.cc'] + kernel_testing_srcs, dependencies: [arrow_compute_test_dep, filesystem_dep], ) test('arrow-compute-aggregate-test', exc) diff --git a/cpp/src/arrow/compute/meson.build b/cpp/src/arrow/compute/meson.build index 03c893eac3e..1da0594e2a2 100644 --- a/cpp/src/arrow/compute/meson.build +++ b/cpp/src/arrow/compute/meson.build @@ -41,15 +41,48 @@ install_headers( if needs_compute pkg.generate( filebase: 'arrow-compute', - name: 'Apache Arrow Compute', - description: 'All compute kernels for Apache Arrow', + name: 'Apache Arrow Compute Kernels', + description: 'Apache Arrow\'s Compute Kernels', requires: ['arrow'], ) endif -arrow_compute_testing_srcs = [] +# Define arrow_compute_core_testing object library for common test files requiring +# only core compute. No extra kernels are required. if needs_testing - arrow_compute_testing_srcs += files('test_util_internal.cc') + arrow_compute_core_test_lib = library( + 'arrow-compute-core-testing', + sources: files('test_util_internal.cc'), + dependencies: arrow_test_dep, + ) + arrow_compute_core_test_dep = declare_dependency( + link_with: arrow_compute_core_test_lib, + ) +else + arrow_compute_core_test_dep = disabler() +endif + +# Define arrow_compute_testing object library for test files requiring extra kernels. +if needs_testing and needs_compute + arrow_compute_testing_lib = library( + 'arrow-compute-testing', + sources: files('test_env.cc'), + dependencies: [ + arrow_compute_dep, + arrow_compute_core_test_dep, + arrow_test_dep_no_main, + ], + ) + arrow_compute_test_dep = declare_dependency( + link_with: arrow_compute_testing_lib, + dependencies: [ + arrow_compute_dep, + arrow_compute_core_test_dep, + arrow_test_dep_no_main, + ], + ) +else + arrow_compute_test_dep = disabler() endif exc = executable( @@ -59,15 +92,13 @@ exc = executable( 'exec_test.cc', 'kernel_test.cc', 'registry_test.cc', - ] + arrow_compute_testing_srcs, - dependencies: [arrow_test_dep], + ], + dependencies: [arrow_test_dep, arrow_compute_core_test_dep], ) test('arrow-internals-test', exc) compute_tests = { - 'arrow-compute-expression-test': { - 'sources': ['expression_test.cc'] + arrow_compute_testing_srcs, - }, + 'arrow-compute-expression-test': {'sources': ['expression_test.cc']}, 'arrow-compute-row-test': { 'sources': [ 'key_hash_test.cc', @@ -77,7 +108,7 @@ compute_tests = { 'row/row_encoder_internal_test.cc', 'row/row_test.cc', 'util_internal_test.cc', - ] + arrow_compute_testing_srcs, + ], }, } @@ -96,16 +127,14 @@ compute_tests = { # - value_counts # # Also see: GH-34388, GH-34615 -if needs_compute - foreach key, val : compute_tests - exc = executable( - key, - sources: val['sources'], - dependencies: [arrow_test_dep], - ) - test(key, exc) - endforeach -endif +foreach key, val : compute_tests + exc = executable( + key, + sources: val['sources'], + dependencies: [arrow_compute_test_dep], + ) + test(key, exc) +endforeach exc = executable( 'arrow-compute-function-benchmark', diff --git a/cpp/src/arrow/compute/row/meson.build b/cpp/src/arrow/compute/row/meson.build index 7c5e3f0fb5a..237c12d8b3b 100644 --- a/cpp/src/arrow/compute/row/meson.build +++ b/cpp/src/arrow/compute/row/meson.build @@ -24,6 +24,6 @@ if needs_compute exc = executable( 'arrow-compute-grouper-benchmark', sources: ['grouper_benchmark.cc'], - dependencies: [arrow_benchmark_dep], + dependencies: [arrow_compute_dep, arrow_benchmark_dep], ) endif diff --git a/cpp/src/arrow/compute/test_env.cc b/cpp/src/arrow/compute/test_env.cc index 530ef5fa24d..57e92763c6d 100644 --- a/cpp/src/arrow/compute/test_env.cc +++ b/cpp/src/arrow/compute/test_env.cc @@ -34,9 +34,10 @@ class ComputeKernelEnvironment : public ::testing::Environment { }; } // namespace - -// Initialize the compute module -::testing::Environment* compute_kernels_env = - ::testing::AddGlobalTestEnvironment(new ComputeKernelEnvironment); - } // namespace arrow::compute + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + ::testing::AddGlobalTestEnvironment(new arrow::compute::ComputeKernelEnvironment); + return RUN_ALL_TESTS(); +} diff --git a/cpp/src/arrow/meson.build b/cpp/src/arrow/meson.build index cad76c39db8..029bcc0a71a 100644 --- a/cpp/src/arrow/meson.build +++ b/cpp/src/arrow/meson.build @@ -45,6 +45,38 @@ arrow_components = { 'array/validate.cc', ], }, + 'arrow_compute': { + 'sources': [ + 'compute/api_aggregate.cc', + 'compute/api_scalar.cc', + 'compute/api_vector.cc', + 'compute/cast.cc', + 'compute/exec.cc', + 'compute/expression.cc', + 'compute/function.cc', + 'compute/function_internal.cc', + 'compute/kernel.cc', + 'compute/ordering.cc', + 'compute/registry.cc', + 'compute/kernels/chunked_internal.cc', + 'compute/kernels/codegen_internal.cc', + 'compute/kernels/ree_util_internal.cc', + 'compute/kernels/scalar_cast_boolean.cc', + 'compute/kernels/scalar_cast_dictionary.cc', + 'compute/kernels/scalar_cast_extension.cc', + 'compute/kernels/scalar_cast_internal.cc', + 'compute/kernels/scalar_cast_nested.cc', + 'compute/kernels/scalar_cast_numeric.cc', + 'compute/kernels/scalar_cast_string.cc', + 'compute/kernels/scalar_cast_temporal.cc', + 'compute/kernels/util_internal.cc', + 'compute/kernels/vector_hash.cc', + 'compute/kernels/vector_selection.cc', + 'compute/kernels/vector_selection_filter_internal.cc', + 'compute/kernels/vector_selection_internal.cc', + 'compute/kernels/vector_selection_take_internal.cc', + ], + }, 'arrow_io': { 'sources': [ 'io/buffered.cc', @@ -260,88 +292,6 @@ if needs_csv arrow_testing_srcs += ['csv/test_common.cc'] endif -arrow_compute_sources = [ - 'compute/api_aggregate.cc', - 'compute/api_scalar.cc', - 'compute/api_vector.cc', - 'compute/cast.cc', - 'compute/exec.cc', - 'compute/expression.cc', - 'compute/function.cc', - 'compute/function_internal.cc', - 'compute/kernel.cc', - 'compute/ordering.cc', - 'compute/registry.cc', - 'compute/kernels/chunked_internal.cc', - 'compute/kernels/codegen_internal.cc', - 'compute/kernels/ree_util_internal.cc', - 'compute/kernels/scalar_cast_boolean.cc', - 'compute/kernels/scalar_cast_dictionary.cc', - 'compute/kernels/scalar_cast_extension.cc', - 'compute/kernels/scalar_cast_internal.cc', - 'compute/kernels/scalar_cast_nested.cc', - 'compute/kernels/scalar_cast_numeric.cc', - 'compute/kernels/scalar_cast_string.cc', - 'compute/kernels/scalar_cast_temporal.cc', - 'compute/kernels/util_internal.cc', - 'compute/kernels/vector_hash.cc', - 'compute/kernels/vector_selection.cc', - 'compute/kernels/vector_selection_filter_internal.cc', - 'compute/kernels/vector_selection_internal.cc', - 'compute/kernels/vector_selection_take_internal.cc', -] - -if needs_compute - arrow_compute_sources += [ - 'compute/kernels/aggregate_basic.cc', - 'compute/kernels/aggregate_mode.cc', - 'compute/kernels/aggregate_pivot.cc', - 'compute/kernels/aggregate_quantile.cc', - 'compute/kernels/aggregate_tdigest.cc', - 'compute/kernels/aggregate_var_std.cc', - 'compute/kernels/hash_aggregate.cc', - 'compute/kernels/hash_aggregate_numeric.cc', - 'compute/kernels/hash_aggregate_pivot.cc', - 'compute/kernels/pivot_internal.cc', - 'compute/kernels/scalar_arithmetic.cc', - 'compute/kernels/scalar_boolean.cc', - 'compute/kernels/scalar_compare.cc', - 'compute/kernels/scalar_if_else.cc', - 'compute/kernels/scalar_nested.cc', - 'compute/kernels/scalar_random.cc', - 'compute/kernels/scalar_round.cc', - 'compute/kernels/scalar_set_lookup.cc', - 'compute/kernels/scalar_string_ascii.cc', - 'compute/kernels/scalar_string_utf8.cc', - 'compute/kernels/scalar_temporal_binary.cc', - 'compute/kernels/scalar_temporal_unary.cc', - 'compute/kernels/scalar_validity.cc', - 'compute/kernels/vector_array_sort.cc', - 'compute/kernels/vector_cumulative_ops.cc', - 'compute/kernels/vector_nested.cc', - 'compute/kernels/vector_pairwise.cc', - 'compute/kernels/vector_rank.cc', - 'compute/kernels/vector_replace.cc', - 'compute/kernels/vector_run_end_encode.cc', - 'compute/kernels/vector_select_k.cc', - 'compute/kernels/vector_sort.cc', - 'compute/kernels/vector_statistics.cc', - 'compute/kernels/vector_swizzle.cc', - 'compute/key_hash_internal.cc', - 'compute/key_map_internal.cc', - 'compute/light_array_internal.cc', - 'compute/row/encode_internal.cc', - 'compute/row/compare_internal.cc', - 'compute/row/grouper.cc', - 'compute/row/row_encoder_internal.cc', - 'compute/row/row_internal.cc', - 'compute/util.cc', - 'compute/util_internal.cc', - ] -endif - -arrow_components += {'arrow-compute': {'sources': arrow_compute_sources}} - if needs_json or needs_integration rapidjson_dep = dependency('rapidjson', include_type: 'system') else @@ -479,6 +429,71 @@ arrow_dep = declare_dependency( link_with: arrow_lib, ) +if needs_compute + arrow_compute_lib_sources = [ + 'compute/initialize.cc', + 'compute/kernels/aggregate_basic.cc', + 'compute/kernels/aggregate_mode.cc', + 'compute/kernels/aggregate_pivot.cc', + 'compute/kernels/aggregate_quantile.cc', + 'compute/kernels/aggregate_tdigest.cc', + 'compute/kernels/aggregate_var_std.cc', + 'compute/kernels/hash_aggregate.cc', + 'compute/kernels/hash_aggregate_numeric.cc', + 'compute/kernels/hash_aggregate_pivot.cc', + 'compute/kernels/pivot_internal.cc', + 'compute/kernels/scalar_arithmetic.cc', + 'compute/kernels/scalar_boolean.cc', + 'compute/kernels/scalar_compare.cc', + 'compute/kernels/scalar_if_else.cc', + 'compute/kernels/scalar_nested.cc', + 'compute/kernels/scalar_random.cc', + 'compute/kernels/scalar_round.cc', + 'compute/kernels/scalar_set_lookup.cc', + 'compute/kernels/scalar_string_ascii.cc', + 'compute/kernels/scalar_string_utf8.cc', + 'compute/kernels/scalar_temporal_binary.cc', + 'compute/kernels/scalar_temporal_unary.cc', + 'compute/kernels/scalar_validity.cc', + 'compute/kernels/util_internal.cc', + 'compute/kernels/vector_array_sort.cc', + 'compute/kernels/vector_cumulative_ops.cc', + 'compute/kernels/vector_nested.cc', + 'compute/kernels/vector_pairwise.cc', + 'compute/kernels/vector_rank.cc', + 'compute/kernels/vector_replace.cc', + 'compute/kernels/vector_run_end_encode.cc', + 'compute/kernels/vector_select_k.cc', + 'compute/kernels/vector_sort.cc', + 'compute/kernels/vector_statistics.cc', + 'compute/kernels/vector_swizzle.cc', + 'compute/key_hash_internal.cc', + 'compute/key_map_internal.cc', + 'compute/light_array_internal.cc', + 'compute/row/encode_internal.cc', + 'compute/row/compare_internal.cc', + 'compute/row/grouper.cc', + 'compute/row/row_encoder_internal.cc', + 'compute/row/row_internal.cc', + 'compute/util.cc', + 'compute/util_internal.cc', + ] + + arrow_compute_lib = library( + 'arrow-compute', + sources: arrow_compute_lib_sources, + dependencies: arrow_dep, + install: true, + ) + arrow_compute_dep = declare_dependency( + link_with: arrow_compute_lib, + include_directories: include_dir, + dependencies: arrow_dep, + ) +else + arrow_compute_dep = disabler() +endif + # Meson does not allow you to glob for headers to install. See also # https://mesonbuild.com/FAQ.html#why-cant-i-specify-target-files-with-a-wildcard # install_subdir would be usable if the directory only contained headers @@ -696,8 +711,8 @@ pkg.generate( subdir('testing') subdir('array') -subdir('c') subdir('compute') +subdir('c') subdir('io') subdir('tensor') subdir('util') diff --git a/cpp/subprojects/gtest.wrap b/cpp/subprojects/gtest.wrap index ee7d0b9f363..2406c2c1cee 100644 --- a/cpp/subprojects/gtest.wrap +++ b/cpp/subprojects/gtest.wrap @@ -16,15 +16,15 @@ # under the License. [wrap-file] -directory = googletest-1.15.2 -source_url = https://github.com/google/googletest/archive/refs/tags/v1.15.2.tar.gz -source_filename = gtest-1.15.2.tar.gz -source_hash = 7b42b4d6ed48810c5362c265a17faebe90dc2373c885e5216439d37927f02926 -patch_filename = gtest_1.15.2-1_patch.zip -patch_url = https://wrapdb.mesonbuild.com/v2/gtest_1.15.2-1/get_patch -patch_hash = b41cba05fc61d47b2ba5bf95732eb86ce2b67303f291b68a9587b7563c318141 -source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/gtest_1.15.2-1/gtest-1.15.2.tar.gz -wrapdb_version = 1.15.2-1 +directory = googletest-1.17.0 +source_url = https://github.com/google/googletest/archive/refs/tags/v1.17.0.tar.gz +source_filename = googletest-1.17.0.tar.gz +source_hash = 65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c +patch_filename = gtest_1.17.0-3_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/gtest_1.17.0-3/get_patch +patch_hash = 3e2799683f27c6dce138b7bae823416581c467ddde755c9a516c0863225f0ceb +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/gtest_1.17.0-3/googletest-1.17.0.tar.gz +wrapdb_version = 1.17.0-3 [provide] gtest = gtest_dep From 2e047552c2de17709f51e681e0d8e9c916e84b59 Mon Sep 17 00:00:00 2001 From: Will Ayd Date: Tue, 17 Jun 2025 09:34:24 -0400 Subject: [PATCH 2/9] kou feedback --- cpp/src/arrow/acero/meson.build | 4 ++-- cpp/src/arrow/compute/meson.build | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/src/arrow/acero/meson.build b/cpp/src/arrow/acero/meson.build index e0acb3665c2..848b02f6ca2 100644 --- a/cpp/src/arrow/acero/meson.build +++ b/cpp/src/arrow/acero/meson.build @@ -80,7 +80,7 @@ arrow_acero_srcs = [ arrow_acero_lib = library( 'arrow-acero', sources: arrow_acero_srcs, - dependencies: [arrow_dep, arrow_compute_dep], + dependencies: [arrow_compute_dep, arrow_dep], ) arrow_acero_dep = declare_dependency(link_with: [arrow_acero_lib]) @@ -147,5 +147,5 @@ pkg.generate( filebase: 'arrow-acero', name: 'Apache Arrow Acero Engine', description: 'Apache Arrow\'s Acero Engine', - requires: ['arrow', 'arrow-compute'], + requires: ['arrow-compute'], ) diff --git a/cpp/src/arrow/compute/meson.build b/cpp/src/arrow/compute/meson.build index 1da0594e2a2..fed699e1ca4 100644 --- a/cpp/src/arrow/compute/meson.build +++ b/cpp/src/arrow/compute/meson.build @@ -93,7 +93,7 @@ exc = executable( 'kernel_test.cc', 'registry_test.cc', ], - dependencies: [arrow_test_dep, arrow_compute_core_test_dep], + dependencies: [arrow_compute_core_test_dep, arrow_test_dep], ) test('arrow-internals-test', exc) From 2a72c56424e62b58a009c9fd609c58b37bec92e3 Mon Sep 17 00:00:00 2001 From: Will Ayd Date: Tue, 17 Jun 2025 10:22:31 -0400 Subject: [PATCH 3/9] try win compat --- ci/appveyor-cpp-build.bat | 2 +- cpp/src/arrow/compute/CMakeLists.txt | 12 +++++++++--- cpp/src/arrow/compute/test_env.cc | 9 +++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ci/appveyor-cpp-build.bat b/ci/appveyor-cpp-build.bat index eb6a2cb7201..f3bf93de3d8 100644 --- a/ci/appveyor-cpp-build.bat +++ b/ci/appveyor-cpp-build.bat @@ -24,7 +24,7 @@ git reset --hard git submodule update --init || exit /B set ARROW_TEST_DATA=%CD%\testing\data -set PARQUET_TEST_DATA=%CD%\cpp\submodules\parquet-testing\data +set PARQUET_TEST_DATA=%CD%/cpp/submodules/parquet-testing/data @rem Enable memory debug checks if the env is not set already IF "%ARROW_DEBUG_MEMORY_POOL%"=="" ( diff --git a/cpp/src/arrow/compute/CMakeLists.txt b/cpp/src/arrow/compute/CMakeLists.txt index 7a08e044655..cc30ac6dc20 100644 --- a/cpp/src/arrow/compute/CMakeLists.txt +++ b/cpp/src/arrow/compute/CMakeLists.txt @@ -48,9 +48,15 @@ if(ARROW_TESTING AND ARROW_COMPUTE) add_library(arrow_compute_testing OBJECT ${ARROW_COMPUTE_TESTING_SRCS}) # Even though this is still just an object library we still need to "link" # arrow_compute_core_testing so that is also included correctly - target_link_libraries(arrow_compute_testing - PUBLIC $ - PUBLIC ${ARROW_GTEST_GTEST}) + if(MSVC AND MSVC_VERSION LESS 1930) # gtest linkage needs compat on Visual Studio 2019 + target_link_libraries(arrow_compute_testing + PUBLIC $ + PUBLIC ${ARROW_GTEST_GTEST_MAIN}) + else() + target_link_libraries(arrow_compute_testing + PUBLIC $ + PUBLIC ${ARROW_GTEST_GTEST}) + endif() endif() set(ARROW_COMPUTE_TEST_PREFIX "arrow-compute") diff --git a/cpp/src/arrow/compute/test_env.cc b/cpp/src/arrow/compute/test_env.cc index 57e92763c6d..35c7c733c55 100644 --- a/cpp/src/arrow/compute/test_env.cc +++ b/cpp/src/arrow/compute/test_env.cc @@ -34,10 +34,19 @@ class ComputeKernelEnvironment : public ::testing::Environment { }; } // namespace + +#if defined(_MSVC_VER) && _MSVC_VER < 1930 +// Initialize the compute module +::testing::Environment* compute_kernels_env = + ::testing::AddGlobalTestEnvironment(new ComputeKernelEnvironment); +#endif + } // namespace arrow::compute +#if !(defined(_MSVC_VER) && _MSVC_VER < 1930) int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); ::testing::AddGlobalTestEnvironment(new arrow::compute::ComputeKernelEnvironment); return RUN_ALL_TESTS(); } +#endif From f7446f9c5bcf4ff3e1042eba11919159d707908b Mon Sep 17 00:00:00 2001 From: Will Ayd Date: Thu, 19 Jun 2025 08:54:41 -0400 Subject: [PATCH 4/9] fix bridge test without compute --- cpp/src/arrow/c/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/src/arrow/c/meson.build b/cpp/src/arrow/c/meson.build index 8d64fb23b58..519e7f5910a 100644 --- a/cpp/src/arrow/c/meson.build +++ b/cpp/src/arrow/c/meson.build @@ -18,7 +18,7 @@ if needs_compute arrow_c_bridge_deps = [arrow_compute_test_dep] else - arrow_c_bridge_deps = [] + arrow_c_bridge_deps = [arrow_test_dep] endif exc = executable( From 8c3f7980356b5e111bba85186a770de3393d3bc3 Mon Sep 17 00:00:00 2001 From: Will Ayd Date: Thu, 19 Jun 2025 09:23:04 -0400 Subject: [PATCH 5/9] try full path --- ci/appveyor-cpp-build.bat | 2 +- cpp/src/arrow/compute/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/appveyor-cpp-build.bat b/ci/appveyor-cpp-build.bat index f3bf93de3d8..7fe1ab09caa 100644 --- a/ci/appveyor-cpp-build.bat +++ b/ci/appveyor-cpp-build.bat @@ -24,7 +24,7 @@ git reset --hard git submodule update --init || exit /B set ARROW_TEST_DATA=%CD%\testing\data -set PARQUET_TEST_DATA=%CD%/cpp/submodules/parquet-testing/data +set PARQUET_TEST_DATA=C:\projects\arrow\cpp\submodules\parquet-testing\data @rem Enable memory debug checks if the env is not set already IF "%ARROW_DEBUG_MEMORY_POOL%"=="" ( diff --git a/cpp/src/arrow/compute/CMakeLists.txt b/cpp/src/arrow/compute/CMakeLists.txt index cc30ac6dc20..6498fd1c17a 100644 --- a/cpp/src/arrow/compute/CMakeLists.txt +++ b/cpp/src/arrow/compute/CMakeLists.txt @@ -48,7 +48,7 @@ if(ARROW_TESTING AND ARROW_COMPUTE) add_library(arrow_compute_testing OBJECT ${ARROW_COMPUTE_TESTING_SRCS}) # Even though this is still just an object library we still need to "link" # arrow_compute_core_testing so that is also included correctly - if(MSVC AND MSVC_VERSION LESS 1930) # gtest linkage needs compat on Visual Studio 2019 + if(MSVC AND MSVC_VERSION LESS 1930) target_link_libraries(arrow_compute_testing PUBLIC $ PUBLIC ${ARROW_GTEST_GTEST_MAIN}) From 7bade00931d80d87aa22adc7d1e202544af7c10f Mon Sep 17 00:00:00 2001 From: Will Ayd Date: Thu, 19 Jun 2025 10:51:30 -0400 Subject: [PATCH 6/9] skip test on AppVeyor --- ci/appveyor-cpp-build.bat | 2 +- cpp/src/arrow/engine/substrait/serde_test.cc | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ci/appveyor-cpp-build.bat b/ci/appveyor-cpp-build.bat index 7fe1ab09caa..eb6a2cb7201 100644 --- a/ci/appveyor-cpp-build.bat +++ b/ci/appveyor-cpp-build.bat @@ -24,7 +24,7 @@ git reset --hard git submodule update --init || exit /B set ARROW_TEST_DATA=%CD%\testing\data -set PARQUET_TEST_DATA=C:\projects\arrow\cpp\submodules\parquet-testing\data +set PARQUET_TEST_DATA=%CD%\cpp\submodules\parquet-testing\data @rem Enable memory debug checks if the env is not set already IF "%ARROW_DEBUG_MEMORY_POOL%"=="" ( diff --git a/cpp/src/arrow/engine/substrait/serde_test.cc b/cpp/src/arrow/engine/substrait/serde_test.cc index 6762d1e0454..deeeac0d047 100644 --- a/cpp/src/arrow/engine/substrait/serde_test.cc +++ b/cpp/src/arrow/engine/substrait/serde_test.cc @@ -1065,6 +1065,10 @@ NamedTableProvider AlwaysProvideSameTable(std::shared_ptr table) { } TEST(Substrait, ExecReadRelWithLocalFiles) { +#if defined(_MSVC_VER) && _MSVC_VER < 1930 + GTEST_SKIP() << "GH-XXX: AppVeyor treats backslashes as escape characters"; +#endif + ASSERT_OK_AND_ASSIGN(std::string dir_string, arrow::internal::GetEnvVar("PARQUET_TEST_DATA")); From 23e3d566d0adf0b5be1059497b155b7db6672076 Mon Sep 17 00:00:00 2001 From: Will Ayd Date: Thu, 19 Jun 2025 11:21:26 -0400 Subject: [PATCH 7/9] Fix _MSVC_VER -> _MSC_VER --- cpp/src/arrow/compute/test_env.cc | 4 ++-- cpp/src/arrow/engine/substrait/serde_test.cc | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/cpp/src/arrow/compute/test_env.cc b/cpp/src/arrow/compute/test_env.cc index 35c7c733c55..901a0056474 100644 --- a/cpp/src/arrow/compute/test_env.cc +++ b/cpp/src/arrow/compute/test_env.cc @@ -35,7 +35,7 @@ class ComputeKernelEnvironment : public ::testing::Environment { } // namespace -#if defined(_MSVC_VER) && _MSVC_VER < 1930 +#if defined(_MSC_VER) && _MSC_VER < 1930 // Initialize the compute module ::testing::Environment* compute_kernels_env = ::testing::AddGlobalTestEnvironment(new ComputeKernelEnvironment); @@ -43,7 +43,7 @@ ::testing::Environment* compute_kernels_env = } // namespace arrow::compute -#if !(defined(_MSVC_VER) && _MSVC_VER < 1930) +#if !(defined(_MSC_VER) && _MSC_VER < 1930) int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); ::testing::AddGlobalTestEnvironment(new arrow::compute::ComputeKernelEnvironment); diff --git a/cpp/src/arrow/engine/substrait/serde_test.cc b/cpp/src/arrow/engine/substrait/serde_test.cc index deeeac0d047..6762d1e0454 100644 --- a/cpp/src/arrow/engine/substrait/serde_test.cc +++ b/cpp/src/arrow/engine/substrait/serde_test.cc @@ -1065,10 +1065,6 @@ NamedTableProvider AlwaysProvideSameTable(std::shared_ptr
table) { } TEST(Substrait, ExecReadRelWithLocalFiles) { -#if defined(_MSVC_VER) && _MSVC_VER < 1930 - GTEST_SKIP() << "GH-XXX: AppVeyor treats backslashes as escape characters"; -#endif - ASSERT_OK_AND_ASSIGN(std::string dir_string, arrow::internal::GetEnvVar("PARQUET_TEST_DATA")); From dc0bb2507130acee303c771777a9158ba8a7bea8 Mon Sep 17 00:00:00 2001 From: Will Ayd Date: Thu, 19 Jun 2025 12:33:08 -0400 Subject: [PATCH 8/9] One last attempt without macro --- cpp/src/arrow/compute/test_env.cc | 9 --------- 1 file changed, 9 deletions(-) diff --git a/cpp/src/arrow/compute/test_env.cc b/cpp/src/arrow/compute/test_env.cc index 901a0056474..57e92763c6d 100644 --- a/cpp/src/arrow/compute/test_env.cc +++ b/cpp/src/arrow/compute/test_env.cc @@ -34,19 +34,10 @@ class ComputeKernelEnvironment : public ::testing::Environment { }; } // namespace - -#if defined(_MSC_VER) && _MSC_VER < 1930 -// Initialize the compute module -::testing::Environment* compute_kernels_env = - ::testing::AddGlobalTestEnvironment(new ComputeKernelEnvironment); -#endif - } // namespace arrow::compute -#if !(defined(_MSC_VER) && _MSC_VER < 1930) int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); ::testing::AddGlobalTestEnvironment(new arrow::compute::ComputeKernelEnvironment); return RUN_ALL_TESTS(); } -#endif From d8a3ca0ac55eb81f36d9fb27cc5e460c9eb12507 Mon Sep 17 00:00:00 2001 From: Will Ayd Date: Thu, 19 Jun 2025 12:49:30 -0400 Subject: [PATCH 9/9] Revert "One last attempt without macro" This reverts commit 787016b5882f2c3b923b680eacd4c2e6ac9456ff. --- cpp/src/arrow/compute/test_env.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cpp/src/arrow/compute/test_env.cc b/cpp/src/arrow/compute/test_env.cc index 57e92763c6d..901a0056474 100644 --- a/cpp/src/arrow/compute/test_env.cc +++ b/cpp/src/arrow/compute/test_env.cc @@ -34,10 +34,19 @@ class ComputeKernelEnvironment : public ::testing::Environment { }; } // namespace + +#if defined(_MSC_VER) && _MSC_VER < 1930 +// Initialize the compute module +::testing::Environment* compute_kernels_env = + ::testing::AddGlobalTestEnvironment(new ComputeKernelEnvironment); +#endif + } // namespace arrow::compute +#if !(defined(_MSC_VER) && _MSC_VER < 1930) int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); ::testing::AddGlobalTestEnvironment(new arrow::compute::ComputeKernelEnvironment); return RUN_ALL_TESTS(); } +#endif