From 38fd083362e1a15817278bd0efb827c33bc17814 Mon Sep 17 00:00:00 2001 From: Hiroyuki Sato Date: Thu, 1 Oct 2026 10:26:08 +0900 Subject: [PATCH 1/3] GH-51670: [C++][Dev] Fix shellcheck errors in the cpp/examples/minimal_build directory --- .pre-commit-config.yaml | 6 +-- cpp/examples/minimal_build/build_arrow.sh | 12 +++-- cpp/examples/minimal_build/build_example.sh | 4 +- cpp/examples/minimal_build/run_static.sh | 54 +++++++++++---------- 4 files changed, 40 insertions(+), 36 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 789e06716e58..50293d291f4d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -284,11 +284,7 @@ repos: ( ?^c_glib/.*\.sh$| ?^ci/.*\.sh$| - ?^cpp/build-support/.*\.sh$| - ?^cpp/examples/minimal_build/run\.sh$| - ?^cpp/examples/tutorial_examples/.*\.sh$| - ?^cpp/src/.*\.sh$| - ?^cpp/thirdparty/download_dependencies\.sh$| + ?^cpp/.*\.sh$| ?^dev/release/05-binary-upload\.sh$| ?^dev/release/07-flightsqlodbc-upload\.sh$| ?^dev/release/08-publish-gh-release\.sh$| diff --git a/cpp/examples/minimal_build/build_arrow.sh b/cpp/examples/minimal_build/build_arrow.sh index 7045439c1a6f..be9a4eb51e13 100755 --- a/cpp/examples/minimal_build/build_arrow.sh +++ b/cpp/examples/minimal_build/build_arrow.sh @@ -20,16 +20,20 @@ set -ex NPROC=$(nproc) -mkdir -p $ARROW_BUILD_DIR -pushd $ARROW_BUILD_DIR +mkdir -p "$ARROW_BUILD_DIR" +pushd "$ARROW_BUILD_DIR" + +# Convert the space-separated CMake options into a Bash array. +# This avoids ShellCheck SC2086 and preserves argument boundaries. +read -r -a ARROW_CMAKE_OPTIONS_ARRAY <<< "$ARROW_CMAKE_OPTIONS" # Enable the CSV reader as it's used by the example third-party build cmake /arrow/cpp \ -DARROW_CSV=ON \ -DARROW_MIMALLOC=OFF \ - $ARROW_CMAKE_OPTIONS + "${ARROW_CMAKE_OPTIONS_ARRAY[@]}" -make -j$NPROC +make -j"$NPROC" make install popd diff --git a/cpp/examples/minimal_build/build_example.sh b/cpp/examples/minimal_build/build_example.sh index a315755a597f..02fa95b7d417 100755 --- a/cpp/examples/minimal_build/build_example.sh +++ b/cpp/examples/minimal_build/build_example.sh @@ -18,8 +18,8 @@ set -ex -mkdir -p $EXAMPLE_BUILD_DIR -pushd $EXAMPLE_BUILD_DIR +mkdir -p "$EXAMPLE_BUILD_DIR" +pushd "$EXAMPLE_BUILD_DIR" cmake /io make diff --git a/cpp/examples/minimal_build/run_static.sh b/cpp/examples/minimal_build/run_static.sh index 26019227a7ba..7c5209e4db98 100755 --- a/cpp/examples/minimal_build/run_static.sh +++ b/cpp/examples/minimal_build/run_static.sh @@ -18,12 +18,12 @@ set -e -: ${ARROW_DIR:=/arrow} -: ${EXAMPLE_DIR:=/io} -: ${ARROW_BUILD_DIR:=/build/arrow} -: ${EXAMPLE_BUILD_DIR:=/build/example} +: "${ARROW_DIR:=/arrow}" +: "${EXAMPLE_DIR:=/io}" +: "${ARROW_BUILD_DIR:=/build/arrow}" +: "${EXAMPLE_BUILD_DIR:=/build/example}" -: ${ARROW_DEPENDENCY_SOURCE:=BUNDLED} +: "${ARROW_DEPENDENCY_SOURCE:=BUNDLED}" echo echo "==" @@ -31,21 +31,25 @@ echo "== Building Arrow C++ library" echo "==" echo -mkdir -p $ARROW_BUILD_DIR -pushd $ARROW_BUILD_DIR +mkdir -p "$ARROW_BUILD_DIR" +pushd "$ARROW_BUILD_DIR" NPROC=$(nproc) -cmake $ARROW_DIR/cpp \ +# Convert the space-separated CMake options into a Bash array. +# This avoids ShellCheck SC2086 and preserves argument boundaries. +read -r -a ARROW_CMAKE_OPTIONS_ARRAY <<< "$ARROW_CMAKE_OPTIONS" + +cmake "$ARROW_DIR"/cpp \ -DARROW_BUILD_SHARED=OFF \ -DARROW_BUILD_STATIC=ON \ -DARROW_CSV=ON \ - -DARROW_DEPENDENCY_SOURCE=${ARROW_DEPENDENCY_SOURCE} \ + -DARROW_DEPENDENCY_SOURCE="${ARROW_DEPENDENCY_SOURCE}" \ -DARROW_DEPENDENCY_USE_SHARED=OFF \ -Dxsimd_SOURCE=BUNDLED \ - $ARROW_CMAKE_OPTIONS + "${ARROW_CMAKE_OPTIONS_ARRAY[@]}" -make -j$NPROC +make -j"$NPROC" make install popd @@ -57,11 +61,11 @@ echo "== Building example project using Arrow C++ library" echo "==" echo -rm -rf $EXAMPLE_BUILD_DIR -mkdir -p $EXAMPLE_BUILD_DIR -pushd $EXAMPLE_BUILD_DIR +rm -rf "$EXAMPLE_BUILD_DIR" +mkdir -p "$EXAMPLE_BUILD_DIR" +pushd "$EXAMPLE_BUILD_DIR" -cmake $EXAMPLE_DIR -DARROW_LINK_SHARED=OFF +cmake "$EXAMPLE_DIR" -DARROW_LINK_SHARED=OFF make popd @@ -73,9 +77,9 @@ echo "== Running example project" echo "==" echo -pushd $EXAMPLE_DIR +pushd "$EXAMPLE_DIR" -$EXAMPLE_BUILD_DIR/arrow-example +"${EXAMPLE_BUILD_DIR}/arrow-example" echo echo "==" @@ -84,13 +88,13 @@ echo "== Building example project using Arrow C++ library" echo "==" echo -rm -rf $EXAMPLE_BUILD_DIR -mkdir -p $EXAMPLE_BUILD_DIR +rm -rf "$EXAMPLE_BUILD_DIR" +mkdir -p "$EXAMPLE_BUILD_DIR" ${CXX:-c++} -std=c++20 \ - -o $EXAMPLE_BUILD_DIR/arrow-example \ - $EXAMPLE_DIR/example.cc \ - $(PKG_CONFIG_PATH=$ARROW_BUILD_DIR/lib/pkgconfig \ - pkg-config --cflags --libs --static arrow) + -o "${EXAMPLE_BUILD_DIR}/arrow-example" \ + "${EXAMPLE_DIR}/example.cc" \ + "$(PKG_CONFIG_PATH=$ARROW_BUILD_DIR/lib/pkgconfig \ + pkg-config --cflags --libs --static arrow)" popd @@ -101,6 +105,6 @@ echo "== Running example project" echo "==" echo -pushd $EXAMPLE_DIR +pushd "$EXAMPLE_DIR" -$EXAMPLE_BUILD_DIR/arrow-example +${EXAMPLE_BUILD_DIR}/arrow-example From cb90265abd7782db810299e32beb57dcf211fb90 Mon Sep 17 00:00:00 2001 From: Hiroyuki Sato Date: Thu, 1 Oct 2026 10:51:35 +0900 Subject: [PATCH 2/3] Quote variables --- cpp/examples/minimal_build/run_static.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/examples/minimal_build/run_static.sh b/cpp/examples/minimal_build/run_static.sh index 7c5209e4db98..07f667c1ef55 100755 --- a/cpp/examples/minimal_build/run_static.sh +++ b/cpp/examples/minimal_build/run_static.sh @@ -107,4 +107,4 @@ echo pushd "$EXAMPLE_DIR" -${EXAMPLE_BUILD_DIR}/arrow-example +"${EXAMPLE_BUILD_DIR}/arrow-example" From 33b9969ae73828aedc926395679b6f286f4961be Mon Sep 17 00:00:00 2001 From: Hiroyuki Sato Date: Thu, 1 Oct 2026 14:08:09 +0900 Subject: [PATCH 3/3] Use Bash array --- cpp/examples/minimal_build/run_static.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cpp/examples/minimal_build/run_static.sh b/cpp/examples/minimal_build/run_static.sh index 07f667c1ef55..55b1d9eb362b 100755 --- a/cpp/examples/minimal_build/run_static.sh +++ b/cpp/examples/minimal_build/run_static.sh @@ -88,13 +88,17 @@ echo "== Building example project using Arrow C++ library" echo "==" echo +read -ra ARROW_BUILD_FLAGS <<< "$( + PKG_CONFIG_PATH="$ARROW_BUILD_DIR/lib/pkgconfig" \ + pkg-config --cflags --libs --static arrow +)" + rm -rf "$EXAMPLE_BUILD_DIR" mkdir -p "$EXAMPLE_BUILD_DIR" ${CXX:-c++} -std=c++20 \ -o "${EXAMPLE_BUILD_DIR}/arrow-example" \ "${EXAMPLE_DIR}/example.cc" \ - "$(PKG_CONFIG_PATH=$ARROW_BUILD_DIR/lib/pkgconfig \ - pkg-config --cflags --libs --static arrow)" + "${ARROW_BUILD_FLAGS[@]}" popd