Files
Hiroyuki Sato e85e181188 GH-51670: [C++][Dev] Fix shellcheck errors in the cpp/examples/minimal_build directory (#51671)
### Rationale for this change

This is the sub issue #44748.

* SC2046: Quote this to prevent word splitting
* SC2086: Double quote to prevent globbing and word splitting
* SC2223: This default assignment may cause DoS due to globbing. Quote it

```
In build_arrow.sh line 23:
mkdir -p $ARROW_BUILD_DIR
         ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
mkdir -p "$ARROW_BUILD_DIR"

In build_arrow.sh line 24:
pushd $ARROW_BUILD_DIR
      ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
pushd "$ARROW_BUILD_DIR"

In build_arrow.sh line 30:
    $ARROW_CMAKE_OPTIONS
    ^------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
    "$ARROW_CMAKE_OPTIONS"

In build_arrow.sh line 32:
make -j$NPROC
       ^----^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
make -j"$NPROC"

In build_example.sh line 21:
mkdir -p $EXAMPLE_BUILD_DIR
         ^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
mkdir -p "$EXAMPLE_BUILD_DIR"

In build_example.sh line 22:
pushd $EXAMPLE_BUILD_DIR
      ^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
pushd "$EXAMPLE_BUILD_DIR"

In run_static.sh line 21:
: ${ARROW_DIR:=/arrow}
  ^------------------^ SC2223 (info): This default assignment may cause DoS due to globbing. Quote it.

In run_static.sh line 22:
: ${EXAMPLE_DIR:=/io}
  ^-----------------^ SC2223 (info): This default assignment may cause DoS due to globbing. Quote it.

In run_static.sh line 23:
: ${ARROW_BUILD_DIR:=/build/arrow}
  ^-- SC2223 (info): This default assignment may cause DoS due to globbing. Quote it.

In run_static.sh line 24:
: ${EXAMPLE_BUILD_DIR:=/build/example}
  ^-- SC2223 (info): This default assignment may cause DoS due to globbing. Quote it.

In run_static.sh line 26:
: ${ARROW_DEPENDENCY_SOURCE:=BUNDLED}
  ^-- SC2223 (info): This default assignment may cause DoS due to globbing. Quote it.

In run_static.sh line 34:
mkdir -p $ARROW_BUILD_DIR
         ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
mkdir -p "$ARROW_BUILD_DIR"

In run_static.sh line 35:
pushd $ARROW_BUILD_DIR
      ^--------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
pushd "$ARROW_BUILD_DIR"

In run_static.sh line 39:
cmake $ARROW_DIR/cpp \
      ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
cmake "$ARROW_DIR"/cpp \

In run_static.sh line 43:
    -DARROW_DEPENDENCY_SOURCE=${ARROW_DEPENDENCY_SOURCE} \
                              ^------------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
    -DARROW_DEPENDENCY_SOURCE="${ARROW_DEPENDENCY_SOURCE}" \

In run_static.sh line 46:
    $ARROW_CMAKE_OPTIONS
    ^------------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
    "$ARROW_CMAKE_OPTIONS"

In run_static.sh line 48:
make -j$NPROC
       ^----^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
make -j"$NPROC"

In run_static.sh line 60:
rm -rf $EXAMPLE_BUILD_DIR
       ^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
rm -rf "$EXAMPLE_BUILD_DIR"

In run_static.sh line 61:
mkdir -p $EXAMPLE_BUILD_DIR
         ^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
mkdir -p "$EXAMPLE_BUILD_DIR"

In run_static.sh line 62:
pushd $EXAMPLE_BUILD_DIR
      ^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
pushd "$EXAMPLE_BUILD_DIR"

In run_static.sh line 64:
cmake $EXAMPLE_DIR -DARROW_LINK_SHARED=OFF
      ^----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
cmake "$EXAMPLE_DIR" -DARROW_LINK_SHARED=OFF

In run_static.sh line 76:
pushd $EXAMPLE_DIR
      ^----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
pushd "$EXAMPLE_DIR"

In run_static.sh line 78:
$EXAMPLE_BUILD_DIR/arrow-example
^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
"$EXAMPLE_BUILD_DIR"/arrow-example

In run_static.sh line 87:
rm -rf $EXAMPLE_BUILD_DIR
       ^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
rm -rf "$EXAMPLE_BUILD_DIR"

In run_static.sh line 88:
mkdir -p $EXAMPLE_BUILD_DIR
         ^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
mkdir -p "$EXAMPLE_BUILD_DIR"

In run_static.sh line 90:
  -o $EXAMPLE_BUILD_DIR/arrow-example \
     ^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
  -o "$EXAMPLE_BUILD_DIR"/arrow-example \

In run_static.sh line 91:
  $EXAMPLE_DIR/example.cc \
  ^----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
  "$EXAMPLE_DIR"/example.cc \

In run_static.sh line 92:
  $(PKG_CONFIG_PATH=$ARROW_BUILD_DIR/lib/pkgconfig \
  ^-- SC2046 (warning): Quote this to prevent word splitting.

In run_static.sh line 104:
pushd $EXAMPLE_DIR
      ^----------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
pushd "$EXAMPLE_DIR"

In run_static.sh line 106:
$EXAMPLE_BUILD_DIR/arrow-example
^----------------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
"$EXAMPLE_BUILD_DIR"/arrow-example

For more information:
  https://www.shellcheck.net/wiki/SC2046 -- Quote this to prevent word splitt...
  https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ...
  https://www.shellcheck.net/wiki/SC2223 -- This default assignment may cause...
```

### What changes are included in this PR?

* SC2046: Quote command substitutions
* SC2086: Quote variables
* SC2223: Quote default assignments

### Are these changes tested?

Yes.

### Are there any user-facing changes?

No.

### Was AI used for this PR?

In accordance to the [AI generation guidelines](https://arrow.apache.org/docs/dev/developers/overview.html#ai-generated-code), please disclose below whether and how AI was used in this PR.

**PR code and description written by:**

- [x] Human
- [ ] AI

**Reviewed before submission by:**

- [x] Human
- [ ] AI
- [ ] Not reviewed

* GitHub Issue: #51670

Authored-by: Hiroyuki Sato <hiroysato@gmail.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
2026-10-03 06:18:44 +09:00
..

Minimal C++ build example

This directory showcases a minimal build of Arrow C++ (in build_arrow.sh). This minimal build is then used by an example third-party C++ project using CMake logic to compile and link against the Arrow C++ library (in build_example.sh and CMakeLists.txt).

When run, the example executable reads a file named test.csv, displays its parsed contents, and then saves them in Arrow IPC format in a file named test.arrow.

Running the example

You can run this simple example using Docker Compose and the given compose.yaml and dockerfiles, which installs a minimal Ubuntu image with a basic C++ toolchain.

Just open a terminal in this directory and run the following commands:

docker compose run --rm minimal

Note that this example mounts two volumes inside the Docker image:

  • /arrow points to the Arrow source tree
  • /io points to this example directory

Statically-linked builds

We've provided an example build configuration here with CMake to show how to create a statically-linked executable with bundled dependencies.

To run it on Linux, you can use the above Docker image:

docker compose run --rm static

On macOS, you can use the run_static.sh but you must set some environment variables to point the script to your Arrow checkout, for example:

export ARROW_DIR=path/to/arrow-clone
export EXAMPLE_DIR=$ARROW_DIR/cpp/examples/minimal_build
export ARROW_BUILD_DIR=$(pwd)/arrow-build
export EXAMPLE_BUILD_DIR=$(pwd)/example

./run_static.sh

On Windows, you can run run_static.bat from the command prompt with Visual Studio's command line tools enabled and CMake and ninja build in the path:

call run_static.bat

Static linking against system libraries

You can also use static libraries of Arrow's dependencies from the system. To run this configuration, set ARROW_DEPENDENCY_SOURCE=SYSTEM for run_static.sh. You can use docker compose for this too:

docker compose run --rm static-system-dependency