This is an automated email from the ASF dual-hosted git repository.

assignuser pushed a commit to branch maint-20.0.0
in repository https://gitbox.apache.org/repos/asf/arrow.git

commit caf885b7c9e9891a96da0f81f8bc31b7b0860213
Author: Sutou Kouhei <[email protected]>
AuthorDate: Mon Apr 7 19:15:49 2025 +0900

    GH-45994: [CI][GLib] Fix vcpkg configuration for Windows job (#46006)
    
    ### Rationale for this change
    
    We always use `BoostConfig.cmake` by #45623. We don't use `FindBoost.cmake`.
    
    We need to use recent vcpkg to use `BoostConfig.cmake` because old Boost 
doesn't provide it.
    
    ### What changes are included in this PR?
    
    * Update `vcpkg.json` for `cpp/` and `c_glib/`.
    * Always use the latest vcpkg instead of using vcpkg bundled in Visual 
Studio.
    * C++: Don't use gflags for building bundled gRPC because bundled gRPC 
doens't use gflags.
    * C++: Don't define `-D*_EXPORT` macros to `Cflags.private` in `*.pc` 
because pkgconf 1.7.4 or later uses `--static` by default on Windows. If 
`--static` is used by default, `*_EXPORT`s are defined for shared linking. It 
causes link errors. This is a workaround of this.
      * FYI: 
https://github.com/pkgconf/pkgconf/commit/008d706958c3a2b1d96d5609d362b177ea57dda3
    * GLib: Add support for finding Apache Arrow C++ by CMake. It's another 
workaround for the pkgconf problem. If we use CMake, the pkgconf problem isn't 
related.
    
    ### Are these changes tested?
    
    Yes.
    
    ### Are there any user-facing changes?
    
    Yes.
    * GitHub Issue: #45994
    
    Authored-by: Sutou Kouhei <[email protected]>
    Signed-off-by: Raúl Cumplido <[email protected]>
---
 .github/workflows/ruby.yml                      | 26 +++++--
 c_glib/meson.build                              | 90 +++++++++++++++++++------
 c_glib/vcpkg.json                               | 18 +----
 ci/scripts/c_glib_build.sh                      |  5 +-
 cpp/CMakeLists.txt                              | 63 ++++++++++++++++-
 cpp/cmake_modules/ThirdpartyToolchain.cmake     | 12 +---
 cpp/src/arrow/acero/CMakeLists.txt              |  9 +++
 cpp/src/arrow/acero/arrow-acero.pc.in           |  3 +-
 cpp/src/arrow/dataset/CMakeLists.txt            |  9 +++
 cpp/src/arrow/dataset/arrow-dataset.pc.in       |  3 +-
 cpp/src/arrow/engine/CMakeLists.txt             |  9 +++
 cpp/src/arrow/engine/arrow-substrait.pc.in      |  3 +-
 cpp/src/arrow/flight/CMakeLists.txt             |  9 +++
 cpp/src/arrow/flight/arrow-flight.pc.in         |  3 +-
 cpp/src/arrow/flight/sql/CMakeLists.txt         |  9 +++
 cpp/src/arrow/flight/sql/arrow-flight-sql.pc.in |  3 +-
 cpp/src/gandiva/CMakeLists.txt                  |  9 +++
 cpp/src/gandiva/gandiva.pc.in                   |  4 +-
 cpp/vcpkg.json                                  | 14 ++--
 dev/tasks/vcpkg-tests/cpp-build-vcpkg.bat       |  1 -
 dev/tasks/vcpkg-tests/github.windows.yml        |  1 +
 21 files changed, 238 insertions(+), 65 deletions(-)

diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml
index ed26e72cf1..be90eeee39 100644
--- a/.github/workflows/ruby.yml
+++ b/.github/workflows/ruby.yml
@@ -79,7 +79,7 @@ jobs:
       UBUNTU: ${{ matrix.ubuntu }}
     steps:
       - name: Checkout Arrow
-        uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # 
v4.0.0
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 
v4.2.2
         with:
           fetch-depth: 0
           submodules: recursive
@@ -148,7 +148,7 @@ jobs:
       ARROW_WITH_ZSTD: ON
     steps:
       - name: Checkout Arrow
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 
v4.2.2
         with:
           fetch-depth: 0
           submodules: recursive
@@ -248,7 +248,7 @@ jobs:
             /d 1 `
             /f
       - name: Checkout Arrow
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 
v4.2.2
         with:
           fetch-depth: 0
           submodules: recursive
@@ -366,7 +366,7 @@ jobs:
             /d 1 `
             /f
       - name: Checkout Arrow
-        uses: actions/checkout@v4
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 
v4.2.2
         with:
           fetch-depth: 0
           submodules: recursive
@@ -395,6 +395,20 @@ jobs:
         env:
           # We can invalidate the current cache by updating this.
           CACHE_VERSION: "2024-05-09"
+      - name: Checkout vcpkg
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 
v4.2.2
+        with:
+          fetch-depth: 0
+          path: vcpkg
+          repository: microsoft/vcpkg
+      - name: Bootstrap vcpkg
+        run: |
+          vcpkg\bootstrap-vcpkg.bat
+          $VCPKG_ROOT = $(Resolve-Path -LiteralPath "vcpkg").ToString()
+          Write-Output ${VCPKG_ROOT} | `
+            Out-File -FilePath ${Env:GITHUB_PATH} -Encoding utf8 -Append
+          Write-Output "VCPKG_ROOT=${VCPKG_ROOT}" | `
+            Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
       - name: Setup NuGet credentials for vcpkg caching
         shell: bash
         run: |
@@ -411,10 +425,14 @@ jobs:
       - name: Build C++
         shell: cmd
         run: |
+          set VCPKG_ROOT_KEEP=%VCPKG_ROOT%
           call "C:\Program Files\Microsoft Visual 
Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
+          set VCPKG_ROOT=%VCPKG_ROOT_KEEP%
           bash -c "ci/scripts/cpp_build.sh $(pwd) $(pwd)/build"
       - name: Build GLib
         shell: cmd
         run: |
+          set VCPKG_ROOT_KEEP=%VCPKG_ROOT%
           call "C:\Program Files\Microsoft Visual 
Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
+          set VCPKG_ROOT=%VCPKG_ROOT_KEEP%
           bash -c "ci/scripts/c_glib_build.sh $(pwd) $(pwd)/build"
diff --git a/c_glib/meson.build b/c_glib/meson.build
index 11b6ba2f47..fd931cc6a4 100644
--- a/c_glib/meson.build
+++ b/c_glib/meson.build
@@ -48,6 +48,7 @@ endif
 version_major = version_numbers[0].to_int()
 version_minor = version_numbers[1].to_int()
 version_micro = version_numbers[2].to_int()
+version_no_snapshot = '.'.join(version_numbers)
 
 api_version = '1.0'
 so_version = version_major * 100 + version_minor
@@ -81,7 +82,7 @@ endif
 generate_vapi = have_gi and get_option('vapi')
 if generate_vapi
     pkgconfig_variables += ['vapidir=@0@'.format(vapi_dir)]
-    add_languages('vala')
+    add_languages('vala', native: false)
 endif
 
 arrow_cpp_build_dir = get_option('arrow_cpp_build_dir')
@@ -97,47 +98,96 @@ else
 endif
 
 if arrow_cpp_build_lib_dir == ''
-    arrow = dependency('arrow', version: ['>=' + version])
+    common_args = {'version': [f'>=@version_no_snapshot@']}
+    arrow = dependency(
+        'arrow',
+        'Arrow',
+        kwargs: common_args,
+        modules: ['Arrow::arrow_shared'],
+    )
     # They are just for checking required modules are enabled. They are built 
into
     # libarrow.so. So we don't need additional build flags for them.
-    dependency('arrow-compute', version: ['>=' + version])
-    dependency('arrow-csv', version: ['>=' + version])
-    dependency('arrow-filesystem', version: ['>=' + version])
-    dependency('arrow-json', version: ['>=' + version])
+    if arrow.type_name() == 'cmake'
+        assert(
+            arrow.get_variable('ARROW_COMPUTE', default_value: 'OFF') == 'ON',
+            'compute module must be enabled',
+        )
+        assert(
+            arrow.get_variable('ARROW_CSV', default_value: 'OFF') == 'ON',
+            'CSV module must be enabled',
+        )
+        assert(
+            arrow.get_variable('ARROW_FILESYSTEM', default_value: 'OFF') == 
'ON',
+            'filesystem module must be enabled',
+        )
+        assert(
+            arrow.get_variable('ARROW_JSON', default_value: 'OFF') == 'ON',
+            'JSON module must be enabled',
+        )
+    else
+        dependency('arrow-compute', kwargs: common_args)
+        dependency('arrow-csv', kwargs: common_args)
+        dependency('arrow-filesystem', kwargs: common_args)
+        dependency('arrow-json', kwargs: common_args)
+    endif
 
-    have_arrow_orc = dependency(
-        'arrow-orc',
-        required: false,
-        version: ['>=' + version],
-    ).found()
+    if arrow.type_name() == 'cmake'
+        have_arrow_orc = (arrow.get_variable('ARROW_ORC', default_value: 
'OFF') == 'ON')
+    else
+        have_arrow_orc = dependency(
+            'arrow-orc',
+            kwargs: common_args,
+            required: false,
+        ).found()
+    endif
     arrow_cuda = dependency(
         'arrow-cuda',
+        'ArrowCUDA',
+        kwargs: common_args,
+        modules: ['ArrowCUDA::arrow_cuda_shared'],
         required: false,
-        version: ['>=' + version],
     )
-    # we do not support compiling glib without acero engine
+    # we do not support compiling GLib without Acero engine
     arrow_acero = dependency(
         'arrow-acero',
-        required: true,
-        version: ['>=' + version],
+        'ArrowAcero',
+        kwargs: common_args,
+        modules: ['ArrowAcero::arrow_acero_shared'],
     )
     arrow_dataset = dependency(
         'arrow-dataset',
+        'ArrowDataset',
+        kwargs: common_args,
+        modules: ['ArrowDataset::arrow_dataset_shared'],
         required: false,
-        version: ['>=' + version],
     )
     arrow_flight = dependency(
         'arrow-flight',
+        'ArrowFlight',
+        kwargs: common_args,
+        modules: ['ArrowFlight::arrow_flight_shared'],
         required: false,
-        version: ['>=' + version],
     )
     arrow_flight_sql = dependency(
         'arrow-flight-sql',
+        'ArrowFlightSql',
+        kwargs: common_args,
+        modules: ['ArrowFlightSql::arrow_flight_sql_shared'],
+        required: false,
+    )
+    gandiva = dependency(
+        'gandiva',
+        'Gandiva',
+        kwargs: common_args,
+        modules: ['Gandiva::gandiva_shared'],
         required: false,
-        version: ['>=' + version],
     )
-    gandiva = dependency('gandiva', required: false, version: ['>=' + version])
-    parquet = dependency('parquet', required: false, version: ['>=' + version])
+    parquet = dependency(
+        'parquet',
+        'Parquet',
+        kwargs: common_args,
+        modules: ['Parquet::parquet_shared'],
+    )
 else
     base_include_directories += [
         include_directories(join_paths(arrow_cpp_build_dir, 'src')),
diff --git a/c_glib/vcpkg.json b/c_glib/vcpkg.json
index df4508d297..b05f7e8d1f 100644
--- a/c_glib/vcpkg.json
+++ b/c_glib/vcpkg.json
@@ -1,23 +1,11 @@
 {
   "name": "arrow-glib",
   "version-string": "20.0.0-SNAPSHOT",
+  "$comment:dependencies": "We can enable gobject-introspection again once 
it's updated",
   "dependencies": [
     "glib",
-    "gobject-introspection",
     "pkgconf"
   ],
-  "$comment": "2025.02.14",
-  "builtin-baseline": "d5ec528843d29e3a52d745a64b469f810b2cedbf",
-  "overrides": [
-    {
-      "$comment":
-        "We need gobject-introspection 1.80.0 or later for GLib 2.80.0 but 
vcpkg doesn't provide it yet.",
-      "name": "glib",
-      "version": "2.78.4"
-    },
-    {
-      "name": "vcpkg-tool-meson",
-      "version": "1.3.2"
-    }
-  ]
+  "$comment": "We can update builtin-baseline by 'vcpkg x-update-baseline'",
+  "builtin-baseline": "09f6a4ef2f08252f7f4d924fd9c2d42165fb21c9"
 }
diff --git a/ci/scripts/c_glib_build.sh b/ci/scripts/c_glib_build.sh
index 54bd7e5645..359d76c6d7 100755
--- a/ci/scripts/c_glib_build.sh
+++ b/ci/scripts/c_glib_build.sh
@@ -37,6 +37,7 @@ fi
 
 PATH="${ARROW_HOME}/bin:${PATH}"
 
+meson_cmake_prefix_path="${ARROW_HOME}"
 meson_pkg_config_path="${ARROW_HOME}/lib/pkgconfig"
 
 mkdir -p "${build_dir}"
@@ -46,6 +47,7 @@ if [ -n "${VCPKG_DEFAULT_TRIPLET:-}" ]; then
   vcpkg install \
     --x-manifest-root="${source_dir}" \
     --x-install-root="${vcpkg_install_root}"
+  
meson_cmake_prefix_path="${vcpkg_install_root}/${VCPKG_DEFAULT_TRIPLET}:${meson_cmake_prefix_path}"
   
PKG_CONFIG="${vcpkg_install_root}/${VCPKG_DEFAULT_TRIPLET}/tools/pkgconf/pkgconf.exe"
   export PKG_CONFIG
   
meson_pkg_config_path="${vcpkg_install_root}/${VCPKG_DEFAULT_TRIPLET}/lib/pkgconfig:${meson_pkg_config_path}"
@@ -65,9 +67,10 @@ fi
 # Build with Meson
 meson setup \
       --backend=ninja \
-      --prefix="${ARROW_HOME}" \
+      --cmake-prefix-path="${meson_cmake_prefix_path}" \
       --libdir=lib \
       --pkg-config-path="${meson_pkg_config_path}" \
+      --prefix="${ARROW_HOME}" \
       -Ddoc="${with_doc}" \
       -Dvapi="${ARROW_GLIB_VAPI}" \
       -Dwerror="${ARROW_GLIB_WERROR}" \
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index 3c628a20c3..d1b7f3f31b 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -532,22 +532,79 @@ enable_testing()
 # For arrow.pc. Cflags.private, Libs.private and Requires.private are
 # used when "pkg-config --cflags --libs --static arrow" is used.
 set(ARROW_PC_CFLAGS "")
-set(ARROW_PC_CFLAGS_PRIVATE " -DARROW_STATIC")
+set(ARROW_PC_CFLAGS_PRIVATE "")
+if(ARROW_BUILD_STATIC)
+  # We add -DARROW_STATIC only when static build is enabled because
+  # pkgconf 1.7.4 or later on Windows uses "--static" by default. If
+  # Cflags.private (-DARROW_STATIC) is used for shared linking, it
+  # will cause linke error. We recommend users to not use pkgconf for
+  # shared linking on Windows but we also provide a workaround here.
+  # If users don't enable ARROW_BUILD_STATIC, users can use pkgconf on
+  # Windows because Cflags.private is used but it has nothing.
+  string(APPEND ARROW_PC_CFLAGS_PRIVATE " -DARROW_STATIC")
+endif()
 set(ARROW_PC_LIBS_PRIVATE "")
 set(ARROW_PC_REQUIRES_PRIVATE "")
 
+# For arrow-acero.pc.
+set(ARROW_ACERO_PC_CFLAGS "")
+set(ARROW_ACERO_PC_CFLAGS_PRIVATE "")
+if(ARROW_BUILD_STATIC)
+  string(APPEND ARROW_ACERO_PC_CFLAGS_PRIVATE " -DARROW_ACERO_STATIC")
+endif()
+
+# For arrow-dataset.pc.
+set(ARROW_DATASET_PC_CFLAGS "")
+set(ARROW_DATASET_PC_CFLAGS_PRIVATE "")
+if(ARROW_BUILD_STATIC)
+  string(APPEND ARROW_DATASET_PC_CFLAGS_PRIVATE " -DARROW_DS_STATIC")
+endif()
+
 # For arrow-flight.pc.
+set(ARROW_FLIGHT_PC_CFLAGS "")
+set(ARROW_FLIGHT_PC_CFLAGS_PRIVATE "")
+if(ARROW_BUILD_STATIC)
+  string(APPEND ARROW_FLIGHT_PC_CFLAGS_PRIVATE " -DARROW_FLIGHT_STATIC")
+endif()
 set(ARROW_FLIGHT_PC_REQUIRES_PRIVATE "")
 
+# For arrow-flight-sql.pc.
+set(ARROW_FLIGHT_SQL_PC_CFLAGS "")
+set(ARROW_FLIGHT_SQL_PC_CFLAGS_PRIVATE "")
+if(ARROW_BUILD_STATIC)
+  string(APPEND ARROW_FLIGHT_SQL_PC_CFLAGS_PRIVATE " 
-DARROW_FLIGHT_SQL_STATIC")
+endif()
+set(ARROW_FLIGHT_PC_REQUIRES_PRIVATE "")
+
+# For arrow-substrait.pc.
+set(ARROW_SUBSTRAIT_PC_CFLAGS "")
+set(ARROW_SUBSTRAIT_PC_CFLAGS_PRIVATE "")
+if(ARROW_BUILD_STATIC)
+  string(APPEND ARROW_SUBSTRAIT_PC_CFLAGS_PRIVATE " -DARROW_ENGINE_STATIC")
+endif()
+
 # For arrow-testing.pc.
 set(ARROW_TESTING_PC_CFLAGS "")
-set(ARROW_TESTING_PC_CFLAGS_PRIVATE " -DARROW_TESTING_STATIC")
+set(ARROW_TESTING_PC_CFLAGS_PRIVATE "")
+if(ARROW_BUILD_STATIC)
+  string(APPEND ARROW_TESTING_PC_CFLAGS_PRIVATE " -DARROW_TESTING_STATIC")
+endif()
 set(ARROW_TESTING_PC_LIBS "")
 set(ARROW_TESTING_PC_REQUIRES "")
 
+# For gandiva.pc.
+set(GANDIVA_PC_CFLAGS "")
+set(GANDIVA_PC_CFLAGS_PRIVATE "")
+if(ARROW_BUILD_STATIC)
+  string(APPEND GANDIVA_PC_CFLAGS_PRIVATE " -DGANDIVA_STATIC")
+endif()
+
 # For parquet.pc.
 set(PARQUET_PC_CFLAGS "")
-set(PARQUET_PC_CFLAGS_PRIVATE " -DPARQUET_STATIC")
+set(PARQUET_PC_CFLAGS_PRIVATE "")
+if(ARROW_BUILD_STATIC)
+  string(APPEND PARQUET_PC_CFLAGS_PRIVATE " -DPARQUET_STATIC")
+endif()
 set(PARQUET_PC_REQUIRES "")
 set(PARQUET_PC_REQUIRES_PRIVATE "")
 
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake 
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 5d57bf3128..0cd09fa3ca 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -1667,11 +1667,10 @@ endif()
 if(ARROW_BUILD_TESTS
    OR ARROW_BUILD_BENCHMARKS
    OR ARROW_BUILD_INTEGRATION
-   OR ARROW_USE_GLOG
-   OR ARROW_WITH_GRPC)
-  set(ARROW_NEED_GFLAGS 1)
+   OR ARROW_USE_GLOG)
+  set(ARROW_NEED_GFLAGS TRUE)
 else()
-  set(ARROW_NEED_GFLAGS 0)
+  set(ARROW_NEED_GFLAGS FALSE)
 endif()
 
 macro(build_gflags)
@@ -3962,9 +3961,6 @@ macro(build_grpc)
                       IMPORTED_LOCATION)
   get_target_property(GRPC_CARES_INCLUDE_DIR c-ares::cares 
INTERFACE_INCLUDE_DIRECTORIES)
   get_filename_component(GRPC_CARES_ROOT "${GRPC_CARES_INCLUDE_DIR}" DIRECTORY)
-  get_target_property(GRPC_GFLAGS_INCLUDE_DIR ${GFLAGS_LIBRARIES}
-                      INTERFACE_INCLUDE_DIRECTORIES)
-  get_filename_component(GRPC_GFLAGS_ROOT "${GRPC_GFLAGS_INCLUDE_DIR}" 
DIRECTORY)
   get_target_property(GRPC_RE2_INCLUDE_DIR re2::re2 
INTERFACE_INCLUDE_DIRECTORIES)
   get_filename_component(GRPC_RE2_ROOT "${GRPC_RE2_INCLUDE_DIR}" DIRECTORY)
 
@@ -3972,7 +3968,6 @@ macro(build_grpc)
   # before (what are likely) system directories
   set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${ABSL_PREFIX}")
   set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${GRPC_PB_ROOT}")
-  set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${GRPC_GFLAGS_ROOT}")
   set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${GRPC_CARES_ROOT}")
   set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${GRPC_RE2_ROOT}")
 
@@ -4022,7 +4017,6 @@ macro(build_grpc)
       -DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF
       -DgRPC_BUILD_TESTS=OFF
       -DgRPC_CARES_PROVIDER=package
-      -DgRPC_GFLAGS_PROVIDER=package
       -DgRPC_MSVC_STATIC_RUNTIME=${ARROW_USE_STATIC_CRT}
       -DgRPC_PROTOBUF_PROVIDER=package
       -DgRPC_RE2_PROVIDER=package
diff --git a/cpp/src/arrow/acero/CMakeLists.txt 
b/cpp/src/arrow/acero/CMakeLists.txt
index e6aa0560df..5708d71737 100644
--- a/cpp/src/arrow/acero/CMakeLists.txt
+++ b/cpp/src/arrow/acero/CMakeLists.txt
@@ -19,6 +19,15 @@ add_custom_target(arrow_acero)
 
 arrow_install_all_headers("arrow/acero")
 
+# If libarrow_acero.a is only built, "pkg-config --cflags --libs
+# arrow-acero" outputs build flags for static linking not shared
+# linking. ARROW_ACERO_PC_* except ARROW_ACERO_PC_*_PRIVATE are for
+# the static linking case.
+if(NOT ARROW_BUILD_SHARED AND ARROW_BUILD_STATIC)
+  string(APPEND ARROW_ACERO_PC_CFLAGS "${ARROW_ACERO_PC_CFLAGS_PRIVATE}")
+  set(ARROW_ACERO_PC_CFLAGS_PRIVATE "")
+endif()
+
 set(ARROW_ACERO_SRCS
     accumulation_queue.cc
     scalar_aggregate_node.cc
diff --git a/cpp/src/arrow/acero/arrow-acero.pc.in 
b/cpp/src/arrow/acero/arrow-acero.pc.in
index fde3262b9a..ddddd52c4d 100644
--- a/cpp/src/arrow/acero/arrow-acero.pc.in
+++ b/cpp/src/arrow/acero/arrow-acero.pc.in
@@ -24,4 +24,5 @@ Description: Apache Arrow's Acero Engine.
 Version: @ARROW_VERSION@
 Requires: arrow
 Libs: -L${libdir} -larrow_acero
-Cflags.private: -DARROW_ACERO_STATIC
+Cflags:@ARROW_ACERO_PC_CFLAGS@
+Cflags.private:@ARROW_ACERO_PC_CFLAGS_PRIVATE@
diff --git a/cpp/src/arrow/dataset/CMakeLists.txt 
b/cpp/src/arrow/dataset/CMakeLists.txt
index e99593f669..29d8c3cb59 100644
--- a/cpp/src/arrow/dataset/CMakeLists.txt
+++ b/cpp/src/arrow/dataset/CMakeLists.txt
@@ -19,6 +19,15 @@ add_custom_target(arrow_dataset)
 
 arrow_install_all_headers("arrow/dataset")
 
+# If libarrow_dataset.a is only built, "pkg-config --cflags --libs
+# arrow-dataset" outputs build flags for static linking not shared
+# linking. ARROW_DATASET_PC_* except ARROW_DATASET_PC_*_PRIVATE are for
+# the static linking case.
+if(NOT ARROW_BUILD_SHARED AND ARROW_BUILD_STATIC)
+  string(APPEND ARROW_DATASET_PC_CFLAGS "${ARROW_DATASET_PC_CFLAGS_PRIVATE}")
+  set(ARROW_DATASET_PC_CFLAGS_PRIVATE "")
+endif()
+
 set(ARROW_DATASET_SRCS
     dataset.cc
     dataset_writer.cc
diff --git a/cpp/src/arrow/dataset/arrow-dataset.pc.in 
b/cpp/src/arrow/dataset/arrow-dataset.pc.in
index d587fd110c..4e35c554d7 100644
--- a/cpp/src/arrow/dataset/arrow-dataset.pc.in
+++ b/cpp/src/arrow/dataset/arrow-dataset.pc.in
@@ -24,4 +24,5 @@ Description: Apache Arrow Dataset provides an API to read and 
write semantic dat
 Version: @ARROW_VERSION@
 Requires: @ARROW_DATASET_PKG_CONFIG_REQUIRES@
 Libs: -L${libdir} -larrow_dataset
-Cflags.private: -DARROW_DS_STATIC
+Cflags:@ARROW_DATASET_PC_CFLAGS@
+Cflags.private:@ARROW_DATASET_PC_CFLAGS_PRIVATE@
diff --git a/cpp/src/arrow/engine/CMakeLists.txt 
b/cpp/src/arrow/engine/CMakeLists.txt
index fcaa242b11..6978a8383f 100644
--- a/cpp/src/arrow/engine/CMakeLists.txt
+++ b/cpp/src/arrow/engine/CMakeLists.txt
@@ -19,6 +19,15 @@ add_custom_target(arrow_substrait)
 
 arrow_install_all_headers("arrow/engine")
 
+# If libarrow_substrait.a is only built, "pkg-config --cflags --libs
+# arrow-substrait" outputs build flags for static linking not shared
+# linking. ARROW_SUBSTRAIT_PC_* except ARROW_SUBSTRAIT_PC_*_PRIVATE are for
+# the static linking case.
+if(NOT ARROW_BUILD_SHARED AND ARROW_BUILD_STATIC)
+  string(APPEND ARROW_SUBSTRAIT_PC_CFLAGS 
"${ARROW_SUBSTRAIT_PC_CFLAGS_PRIVATE}")
+  set(ARROW_SUBSTRAIT_PC_CFLAGS_PRIVATE "")
+endif()
+
 set(ARROW_SUBSTRAIT_SRCS
     substrait/expression_internal.cc
     substrait/extended_expression_internal.cc
diff --git a/cpp/src/arrow/engine/arrow-substrait.pc.in 
b/cpp/src/arrow/engine/arrow-substrait.pc.in
index 1e891995e2..ceb9d0fada 100644
--- a/cpp/src/arrow/engine/arrow-substrait.pc.in
+++ b/cpp/src/arrow/engine/arrow-substrait.pc.in
@@ -24,4 +24,5 @@ Description: Apache Arrow's Substrait Consumer.
 Version: @ARROW_VERSION@
 Requires: arrow-dataset
 Libs: -L${libdir} -larrow_substrait
-Cflags.private: -DARROW_ENGINE_STATIC
+Cflags:@ARROW_SUBSTRAIT_PC_CFLAGS@
+Cflags.private:@ARROW_SUBSTRAIT_PC_CFLAGS_PRIVATE@
diff --git a/cpp/src/arrow/flight/CMakeLists.txt 
b/cpp/src/arrow/flight/CMakeLists.txt
index b92d900ffd..564d300ffa 100644
--- a/cpp/src/arrow/flight/CMakeLists.txt
+++ b/cpp/src/arrow/flight/CMakeLists.txt
@@ -19,6 +19,15 @@ add_custom_target(arrow_flight)
 
 arrow_install_all_headers("arrow/flight")
 
+# If libarrow_flight.a is only built, "pkg-config --cflags --libs
+# arrow-flight" outputs build flags for static linking not shared
+# linking. ARROW_FLIGHT_PC_* except ARROW_FLIGHT_PC_*_PRIVATE are for
+# the static linking case.
+if(NOT ARROW_BUILD_SHARED AND ARROW_BUILD_STATIC)
+  string(APPEND ARROW_FLIGHT_PC_CFLAGS "${ARROW_FLIGHT_PC_CFLAGS_PRIVATE}")
+  set(ARROW_FLIGHT_PC_CFLAGS_PRIVATE "")
+endif()
+
 set(ARROW_FLIGHT_LINK_LIBS gRPC::grpc++ ${ARROW_PROTOBUF_LIBPROTOBUF})
 if(ARROW_WITH_OPENTELEMETRY)
   list(APPEND ARROW_FLIGHT_LINK_LIBS ${ARROW_OPENTELEMETRY_LIBS})
diff --git a/cpp/src/arrow/flight/arrow-flight.pc.in 
b/cpp/src/arrow/flight/arrow-flight.pc.in
index a63d6cadaa..f548c642a7 100644
--- a/cpp/src/arrow/flight/arrow-flight.pc.in
+++ b/cpp/src/arrow/flight/arrow-flight.pc.in
@@ -25,4 +25,5 @@ Version: @ARROW_VERSION@
 Requires: arrow
 Requires.private:@ARROW_FLIGHT_PC_REQUIRES_PRIVATE@
 Libs: -L${libdir} -larrow_flight
-Cflags.private: -DARROW_FLIGHT_STATIC
+Cflags:@ARROW_FLIGHT_PC_CFLAGS@
+Cflags.private:@ARROW_FLIGHT_PC_CFLAGS_PRIVATE@
diff --git a/cpp/src/arrow/flight/sql/CMakeLists.txt 
b/cpp/src/arrow/flight/sql/CMakeLists.txt
index b32f731496..796cb9da18 100644
--- a/cpp/src/arrow/flight/sql/CMakeLists.txt
+++ b/cpp/src/arrow/flight/sql/CMakeLists.txt
@@ -19,6 +19,15 @@ add_custom_target(arrow_flight_sql)
 
 arrow_install_all_headers("arrow/flight/sql")
 
+# If libarrow_flight_sql.a is only built, "pkg-config --cflags --libs
+# arrow-flight-sql" outputs build flags for static linking not shared
+# linking. ARROW_FLIGHT_SQL_PC_* except ARROW_FLIGHT_PC_SQL_*_PRIVATE
+# are for the static linking case.
+if(NOT ARROW_BUILD_SHARED AND ARROW_BUILD_STATIC)
+  string(APPEND ARROW_FLIGHT_SQL_PC_CFLAGS 
"${ARROW_FLIGHT_SQL_PC_CFLAGS_PRIVATE}")
+  set(ARROW_FLIGHT_SQL_PC_CFLAGS_PRIVATE "")
+endif()
+
 set(FLIGHT_SQL_PROTO_PATH "${ARROW_SOURCE_DIR}/../format")
 set(FLIGHT_SQL_PROTO ${ARROW_SOURCE_DIR}/../format/FlightSql.proto)
 
diff --git a/cpp/src/arrow/flight/sql/arrow-flight-sql.pc.in 
b/cpp/src/arrow/flight/sql/arrow-flight-sql.pc.in
index b76964b97c..b42f00703a 100644
--- a/cpp/src/arrow/flight/sql/arrow-flight-sql.pc.in
+++ b/cpp/src/arrow/flight/sql/arrow-flight-sql.pc.in
@@ -24,4 +24,5 @@ Description: Apache Arrow Flight SQL extension
 Version: @ARROW_VERSION@
 Requires: arrow-flight
 Libs: -L${libdir} -larrow_flight_sql
-Cflags.private: -DARROW_FLIGHT_SQL_STATIC
+Cflags:@ARROW_FLIGHT_SQL_PC_CFLAGS@
+Cflags.private:@ARROW_FLIGHT_SQL_PC_CFLAGS_PRIVATE@
diff --git a/cpp/src/gandiva/CMakeLists.txt b/cpp/src/gandiva/CMakeLists.txt
index 3e63f88c3d..a7f5f9dacf 100644
--- a/cpp/src/gandiva/CMakeLists.txt
+++ b/cpp/src/gandiva/CMakeLists.txt
@@ -25,6 +25,15 @@ add_custom_target(gandiva-benchmarks)
 
 add_dependencies(gandiva-all gandiva gandiva-tests gandiva-benchmarks)
 
+# If libgandiva.a is only built, "pkg-config --cflags --libs
+# arrow-flight" outputs build flags for static linking not shared
+# linking. GANDIVA_PC_* except GANDIVA_PC_*_PRIVATE are for the static
+# linking case.
+if(NOT ARROW_BUILD_SHARED AND ARROW_BUILD_STATIC)
+  string(APPEND GANDIVA_PC_CFLAGS "${GANDIVA_PC_CFLAGS_PRIVATE}")
+  set(GANDIVA_PC_CFLAGS_PRIVATE "")
+endif()
+
 include(GandivaAddBitcode)
 
 find_package(LLVMAlt REQUIRED)
diff --git a/cpp/src/gandiva/gandiva.pc.in b/cpp/src/gandiva/gandiva.pc.in
index 49260092d2..e999a785fe 100644
--- a/cpp/src/gandiva/gandiva.pc.in
+++ b/cpp/src/gandiva/gandiva.pc.in
@@ -24,5 +24,5 @@ Description: Gandiva is a toolset for compiling and 
evaluating expressions on Ar
 Version: @GANDIVA_VERSION@
 Requires: arrow
 Libs: -L${libdir} -lgandiva
-Cflags: -I${includedir}
-Cflags.private: -DGANDIVA_STATIC
+Cflags: -I${includedir}@GANDIVA_PC_CFLAGS@
+Cflags.private:@GANDIVA_PC_CFLAGS_PRIVATE@
diff --git a/cpp/vcpkg.json b/cpp/vcpkg.json
index 6eb24ad180..529df24cc8 100644
--- a/cpp/vcpkg.json
+++ b/cpp/vcpkg.json
@@ -29,15 +29,19 @@
     "gflags",
     "glog",
     {
-      "name":"google-cloud-cpp",
-      "version>=": "1.32.1",
+      "name": "google-cloud-cpp",
       "default-features": false,
       "features": [
         "storage"
       ]
     },
     "grpc",
-    "gtest",
+    {
+      "name": "gtest",
+      "features": [
+        "cxx17"
+      ]
+    },
     "lz4",
     "openssl",
     "orc",
@@ -52,6 +56,6 @@
     "zlib",
     "zstd"
   ],
-  "$comment": "2025.02.14",
-  "builtin-baseline": "d5ec528843d29e3a52d745a64b469f810b2cedbf"
+  "$comment": "We can update builtin-baseline by 'vcpkg x-update-baseline'",
+  "builtin-baseline": "09f6a4ef2f08252f7f4d924fd9c2d42165fb21c9"
 }
diff --git a/dev/tasks/vcpkg-tests/cpp-build-vcpkg.bat 
b/dev/tasks/vcpkg-tests/cpp-build-vcpkg.bat
index 3b337bb175..e118ce6f57 100644
--- a/dev/tasks/vcpkg-tests/cpp-build-vcpkg.bat
+++ b/dev/tasks/vcpkg-tests/cpp-build-vcpkg.bat
@@ -27,7 +27,6 @@ call "C:\Program Files (x86)\Microsoft Visual 
Studio\2019\Enterprise\Common7\Too
 @rem changes in vcpkg
 
 vcpkg install ^
-    --triplet x64-windows ^
     --x-manifest-root cpp  ^
     --feature-flags=versions ^
     --clean-after-build ^
diff --git a/dev/tasks/vcpkg-tests/github.windows.yml 
b/dev/tasks/vcpkg-tests/github.windows.yml
index 0fd4892c0a..81213d9fc8 100644
--- a/dev/tasks/vcpkg-tests/github.windows.yml
+++ b/dev/tasks/vcpkg-tests/github.windows.yml
@@ -25,6 +25,7 @@ jobs:
     runs-on: windows-2019
     env:
       VCPKG_BINARY_SOURCES: 'clear;nuget,GitHub,readwrite'
+      VCPKG_DEFAULT_TRIPLET: 'x64-windows'
     steps:
       {{ macros.github_checkout_arrow()|indent }}
       # CMake 3.29.1 that is pre-installed on the Windows image has a problem.

Reply via email to