Skip to content

Commit caf885b

Browse files
kouassignUser
authored andcommitted
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: pkgconf/pkgconf@008d706 * 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]>
1 parent dd47cd0 commit caf885b

File tree

21 files changed

+238
-65
lines changed

21 files changed

+238
-65
lines changed

.github/workflows/ruby.yml

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ jobs:
7979
UBUNTU: ${{ matrix.ubuntu }}
8080
steps:
8181
- name: Checkout Arrow
82-
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
82+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
8383
with:
8484
fetch-depth: 0
8585
submodules: recursive
@@ -148,7 +148,7 @@ jobs:
148148
ARROW_WITH_ZSTD: ON
149149
steps:
150150
- name: Checkout Arrow
151-
uses: actions/checkout@v4
151+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
152152
with:
153153
fetch-depth: 0
154154
submodules: recursive
@@ -248,7 +248,7 @@ jobs:
248248
/d 1 `
249249
/f
250250
- name: Checkout Arrow
251-
uses: actions/checkout@v4
251+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
252252
with:
253253
fetch-depth: 0
254254
submodules: recursive
@@ -366,7 +366,7 @@ jobs:
366366
/d 1 `
367367
/f
368368
- name: Checkout Arrow
369-
uses: actions/checkout@v4
369+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
370370
with:
371371
fetch-depth: 0
372372
submodules: recursive
@@ -395,6 +395,20 @@ jobs:
395395
env:
396396
# We can invalidate the current cache by updating this.
397397
CACHE_VERSION: "2024-05-09"
398+
- name: Checkout vcpkg
399+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
400+
with:
401+
fetch-depth: 0
402+
path: vcpkg
403+
repository: microsoft/vcpkg
404+
- name: Bootstrap vcpkg
405+
run: |
406+
vcpkg\bootstrap-vcpkg.bat
407+
$VCPKG_ROOT = $(Resolve-Path -LiteralPath "vcpkg").ToString()
408+
Write-Output ${VCPKG_ROOT} | `
409+
Out-File -FilePath ${Env:GITHUB_PATH} -Encoding utf8 -Append
410+
Write-Output "VCPKG_ROOT=${VCPKG_ROOT}" | `
411+
Out-File -FilePath ${Env:GITHUB_ENV} -Encoding utf8 -Append
398412
- name: Setup NuGet credentials for vcpkg caching
399413
shell: bash
400414
run: |
@@ -411,10 +425,14 @@ jobs:
411425
- name: Build C++
412426
shell: cmd
413427
run: |
428+
set VCPKG_ROOT_KEEP=%VCPKG_ROOT%
414429
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
430+
set VCPKG_ROOT=%VCPKG_ROOT_KEEP%
415431
bash -c "ci/scripts/cpp_build.sh $(pwd) $(pwd)/build"
416432
- name: Build GLib
417433
shell: cmd
418434
run: |
435+
set VCPKG_ROOT_KEEP=%VCPKG_ROOT%
419436
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
437+
set VCPKG_ROOT=%VCPKG_ROOT_KEEP%
420438
bash -c "ci/scripts/c_glib_build.sh $(pwd) $(pwd)/build"

c_glib/meson.build

Lines changed: 70 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ endif
4848
version_major = version_numbers[0].to_int()
4949
version_minor = version_numbers[1].to_int()
5050
version_micro = version_numbers[2].to_int()
51+
version_no_snapshot = '.'.join(version_numbers)
5152

5253
api_version = '1.0'
5354
so_version = version_major * 100 + version_minor
@@ -81,7 +82,7 @@ endif
8182
generate_vapi = have_gi and get_option('vapi')
8283
if generate_vapi
8384
pkgconfig_variables += ['vapidir=@0@'.format(vapi_dir)]
84-
add_languages('vala')
85+
add_languages('vala', native: false)
8586
endif
8687

8788
arrow_cpp_build_dir = get_option('arrow_cpp_build_dir')
@@ -97,47 +98,96 @@ else
9798
endif
9899

99100
if arrow_cpp_build_lib_dir == ''
100-
arrow = dependency('arrow', version: ['>=' + version])
101+
common_args = {'version': [f'>=@version_no_snapshot@']}
102+
arrow = dependency(
103+
'arrow',
104+
'Arrow',
105+
kwargs: common_args,
106+
modules: ['Arrow::arrow_shared'],
107+
)
101108
# They are just for checking required modules are enabled. They are built into
102109
# libarrow.so. So we don't need additional build flags for them.
103-
dependency('arrow-compute', version: ['>=' + version])
104-
dependency('arrow-csv', version: ['>=' + version])
105-
dependency('arrow-filesystem', version: ['>=' + version])
106-
dependency('arrow-json', version: ['>=' + version])
110+
if arrow.type_name() == 'cmake'
111+
assert(
112+
arrow.get_variable('ARROW_COMPUTE', default_value: 'OFF') == 'ON',
113+
'compute module must be enabled',
114+
)
115+
assert(
116+
arrow.get_variable('ARROW_CSV', default_value: 'OFF') == 'ON',
117+
'CSV module must be enabled',
118+
)
119+
assert(
120+
arrow.get_variable('ARROW_FILESYSTEM', default_value: 'OFF') == 'ON',
121+
'filesystem module must be enabled',
122+
)
123+
assert(
124+
arrow.get_variable('ARROW_JSON', default_value: 'OFF') == 'ON',
125+
'JSON module must be enabled',
126+
)
127+
else
128+
dependency('arrow-compute', kwargs: common_args)
129+
dependency('arrow-csv', kwargs: common_args)
130+
dependency('arrow-filesystem', kwargs: common_args)
131+
dependency('arrow-json', kwargs: common_args)
132+
endif
107133

108-
have_arrow_orc = dependency(
109-
'arrow-orc',
110-
required: false,
111-
version: ['>=' + version],
112-
).found()
134+
if arrow.type_name() == 'cmake'
135+
have_arrow_orc = (arrow.get_variable('ARROW_ORC', default_value: 'OFF') == 'ON')
136+
else
137+
have_arrow_orc = dependency(
138+
'arrow-orc',
139+
kwargs: common_args,
140+
required: false,
141+
).found()
142+
endif
113143
arrow_cuda = dependency(
114144
'arrow-cuda',
145+
'ArrowCUDA',
146+
kwargs: common_args,
147+
modules: ['ArrowCUDA::arrow_cuda_shared'],
115148
required: false,
116-
version: ['>=' + version],
117149
)
118-
# we do not support compiling glib without acero engine
150+
# we do not support compiling GLib without Acero engine
119151
arrow_acero = dependency(
120152
'arrow-acero',
121-
required: true,
122-
version: ['>=' + version],
153+
'ArrowAcero',
154+
kwargs: common_args,
155+
modules: ['ArrowAcero::arrow_acero_shared'],
123156
)
124157
arrow_dataset = dependency(
125158
'arrow-dataset',
159+
'ArrowDataset',
160+
kwargs: common_args,
161+
modules: ['ArrowDataset::arrow_dataset_shared'],
126162
required: false,
127-
version: ['>=' + version],
128163
)
129164
arrow_flight = dependency(
130165
'arrow-flight',
166+
'ArrowFlight',
167+
kwargs: common_args,
168+
modules: ['ArrowFlight::arrow_flight_shared'],
131169
required: false,
132-
version: ['>=' + version],
133170
)
134171
arrow_flight_sql = dependency(
135172
'arrow-flight-sql',
173+
'ArrowFlightSql',
174+
kwargs: common_args,
175+
modules: ['ArrowFlightSql::arrow_flight_sql_shared'],
176+
required: false,
177+
)
178+
gandiva = dependency(
179+
'gandiva',
180+
'Gandiva',
181+
kwargs: common_args,
182+
modules: ['Gandiva::gandiva_shared'],
136183
required: false,
137-
version: ['>=' + version],
138184
)
139-
gandiva = dependency('gandiva', required: false, version: ['>=' + version])
140-
parquet = dependency('parquet', required: false, version: ['>=' + version])
185+
parquet = dependency(
186+
'parquet',
187+
'Parquet',
188+
kwargs: common_args,
189+
modules: ['Parquet::parquet_shared'],
190+
)
141191
else
142192
base_include_directories += [
143193
include_directories(join_paths(arrow_cpp_build_dir, 'src')),

c_glib/vcpkg.json

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,11 @@
11
{
22
"name": "arrow-glib",
33
"version-string": "20.0.0-SNAPSHOT",
4+
"$comment:dependencies": "We can enable gobject-introspection again once it's updated",
45
"dependencies": [
56
"glib",
6-
"gobject-introspection",
77
"pkgconf"
88
],
9-
"$comment": "2025.02.14",
10-
"builtin-baseline": "d5ec528843d29e3a52d745a64b469f810b2cedbf",
11-
"overrides": [
12-
{
13-
"$comment":
14-
"We need gobject-introspection 1.80.0 or later for GLib 2.80.0 but vcpkg doesn't provide it yet.",
15-
"name": "glib",
16-
"version": "2.78.4"
17-
},
18-
{
19-
"name": "vcpkg-tool-meson",
20-
"version": "1.3.2"
21-
}
22-
]
9+
"$comment": "We can update builtin-baseline by 'vcpkg x-update-baseline'",
10+
"builtin-baseline": "09f6a4ef2f08252f7f4d924fd9c2d42165fb21c9"
2311
}

ci/scripts/c_glib_build.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ fi
3737

3838
PATH="${ARROW_HOME}/bin:${PATH}"
3939

40+
meson_cmake_prefix_path="${ARROW_HOME}"
4041
meson_pkg_config_path="${ARROW_HOME}/lib/pkgconfig"
4142

4243
mkdir -p "${build_dir}"
@@ -46,6 +47,7 @@ if [ -n "${VCPKG_DEFAULT_TRIPLET:-}" ]; then
4647
vcpkg install \
4748
--x-manifest-root="${source_dir}" \
4849
--x-install-root="${vcpkg_install_root}"
50+
meson_cmake_prefix_path="${vcpkg_install_root}/${VCPKG_DEFAULT_TRIPLET}:${meson_cmake_prefix_path}"
4951
PKG_CONFIG="${vcpkg_install_root}/${VCPKG_DEFAULT_TRIPLET}/tools/pkgconf/pkgconf.exe"
5052
export PKG_CONFIG
5153
meson_pkg_config_path="${vcpkg_install_root}/${VCPKG_DEFAULT_TRIPLET}/lib/pkgconfig:${meson_pkg_config_path}"
@@ -65,9 +67,10 @@ fi
6567
# Build with Meson
6668
meson setup \
6769
--backend=ninja \
68-
--prefix="${ARROW_HOME}" \
70+
--cmake-prefix-path="${meson_cmake_prefix_path}" \
6971
--libdir=lib \
7072
--pkg-config-path="${meson_pkg_config_path}" \
73+
--prefix="${ARROW_HOME}" \
7174
-Ddoc="${with_doc}" \
7275
-Dvapi="${ARROW_GLIB_VAPI}" \
7376
-Dwerror="${ARROW_GLIB_WERROR}" \

cpp/CMakeLists.txt

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -532,22 +532,79 @@ enable_testing()
532532
# For arrow.pc. Cflags.private, Libs.private and Requires.private are
533533
# used when "pkg-config --cflags --libs --static arrow" is used.
534534
set(ARROW_PC_CFLAGS "")
535-
set(ARROW_PC_CFLAGS_PRIVATE " -DARROW_STATIC")
535+
set(ARROW_PC_CFLAGS_PRIVATE "")
536+
if(ARROW_BUILD_STATIC)
537+
# We add -DARROW_STATIC only when static build is enabled because
538+
# pkgconf 1.7.4 or later on Windows uses "--static" by default. If
539+
# Cflags.private (-DARROW_STATIC) is used for shared linking, it
540+
# will cause linke error. We recommend users to not use pkgconf for
541+
# shared linking on Windows but we also provide a workaround here.
542+
# If users don't enable ARROW_BUILD_STATIC, users can use pkgconf on
543+
# Windows because Cflags.private is used but it has nothing.
544+
string(APPEND ARROW_PC_CFLAGS_PRIVATE " -DARROW_STATIC")
545+
endif()
536546
set(ARROW_PC_LIBS_PRIVATE "")
537547
set(ARROW_PC_REQUIRES_PRIVATE "")
538548

549+
# For arrow-acero.pc.
550+
set(ARROW_ACERO_PC_CFLAGS "")
551+
set(ARROW_ACERO_PC_CFLAGS_PRIVATE "")
552+
if(ARROW_BUILD_STATIC)
553+
string(APPEND ARROW_ACERO_PC_CFLAGS_PRIVATE " -DARROW_ACERO_STATIC")
554+
endif()
555+
556+
# For arrow-dataset.pc.
557+
set(ARROW_DATASET_PC_CFLAGS "")
558+
set(ARROW_DATASET_PC_CFLAGS_PRIVATE "")
559+
if(ARROW_BUILD_STATIC)
560+
string(APPEND ARROW_DATASET_PC_CFLAGS_PRIVATE " -DARROW_DS_STATIC")
561+
endif()
562+
539563
# For arrow-flight.pc.
564+
set(ARROW_FLIGHT_PC_CFLAGS "")
565+
set(ARROW_FLIGHT_PC_CFLAGS_PRIVATE "")
566+
if(ARROW_BUILD_STATIC)
567+
string(APPEND ARROW_FLIGHT_PC_CFLAGS_PRIVATE " -DARROW_FLIGHT_STATIC")
568+
endif()
540569
set(ARROW_FLIGHT_PC_REQUIRES_PRIVATE "")
541570

571+
# For arrow-flight-sql.pc.
572+
set(ARROW_FLIGHT_SQL_PC_CFLAGS "")
573+
set(ARROW_FLIGHT_SQL_PC_CFLAGS_PRIVATE "")
574+
if(ARROW_BUILD_STATIC)
575+
string(APPEND ARROW_FLIGHT_SQL_PC_CFLAGS_PRIVATE " -DARROW_FLIGHT_SQL_STATIC")
576+
endif()
577+
set(ARROW_FLIGHT_PC_REQUIRES_PRIVATE "")
578+
579+
# For arrow-substrait.pc.
580+
set(ARROW_SUBSTRAIT_PC_CFLAGS "")
581+
set(ARROW_SUBSTRAIT_PC_CFLAGS_PRIVATE "")
582+
if(ARROW_BUILD_STATIC)
583+
string(APPEND ARROW_SUBSTRAIT_PC_CFLAGS_PRIVATE " -DARROW_ENGINE_STATIC")
584+
endif()
585+
542586
# For arrow-testing.pc.
543587
set(ARROW_TESTING_PC_CFLAGS "")
544-
set(ARROW_TESTING_PC_CFLAGS_PRIVATE " -DARROW_TESTING_STATIC")
588+
set(ARROW_TESTING_PC_CFLAGS_PRIVATE "")
589+
if(ARROW_BUILD_STATIC)
590+
string(APPEND ARROW_TESTING_PC_CFLAGS_PRIVATE " -DARROW_TESTING_STATIC")
591+
endif()
545592
set(ARROW_TESTING_PC_LIBS "")
546593
set(ARROW_TESTING_PC_REQUIRES "")
547594

595+
# For gandiva.pc.
596+
set(GANDIVA_PC_CFLAGS "")
597+
set(GANDIVA_PC_CFLAGS_PRIVATE "")
598+
if(ARROW_BUILD_STATIC)
599+
string(APPEND GANDIVA_PC_CFLAGS_PRIVATE " -DGANDIVA_STATIC")
600+
endif()
601+
548602
# For parquet.pc.
549603
set(PARQUET_PC_CFLAGS "")
550-
set(PARQUET_PC_CFLAGS_PRIVATE " -DPARQUET_STATIC")
604+
set(PARQUET_PC_CFLAGS_PRIVATE "")
605+
if(ARROW_BUILD_STATIC)
606+
string(APPEND PARQUET_PC_CFLAGS_PRIVATE " -DPARQUET_STATIC")
607+
endif()
551608
set(PARQUET_PC_REQUIRES "")
552609
set(PARQUET_PC_REQUIRES_PRIVATE "")
553610

cpp/cmake_modules/ThirdpartyToolchain.cmake

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1667,11 +1667,10 @@ endif()
16671667
if(ARROW_BUILD_TESTS
16681668
OR ARROW_BUILD_BENCHMARKS
16691669
OR ARROW_BUILD_INTEGRATION
1670-
OR ARROW_USE_GLOG
1671-
OR ARROW_WITH_GRPC)
1672-
set(ARROW_NEED_GFLAGS 1)
1670+
OR ARROW_USE_GLOG)
1671+
set(ARROW_NEED_GFLAGS TRUE)
16731672
else()
1674-
set(ARROW_NEED_GFLAGS 0)
1673+
set(ARROW_NEED_GFLAGS FALSE)
16751674
endif()
16761675

16771676
macro(build_gflags)
@@ -3962,17 +3961,13 @@ macro(build_grpc)
39623961
IMPORTED_LOCATION)
39633962
get_target_property(GRPC_CARES_INCLUDE_DIR c-ares::cares INTERFACE_INCLUDE_DIRECTORIES)
39643963
get_filename_component(GRPC_CARES_ROOT "${GRPC_CARES_INCLUDE_DIR}" DIRECTORY)
3965-
get_target_property(GRPC_GFLAGS_INCLUDE_DIR ${GFLAGS_LIBRARIES}
3966-
INTERFACE_INCLUDE_DIRECTORIES)
3967-
get_filename_component(GRPC_GFLAGS_ROOT "${GRPC_GFLAGS_INCLUDE_DIR}" DIRECTORY)
39683964
get_target_property(GRPC_RE2_INCLUDE_DIR re2::re2 INTERFACE_INCLUDE_DIRECTORIES)
39693965
get_filename_component(GRPC_RE2_ROOT "${GRPC_RE2_INCLUDE_DIR}" DIRECTORY)
39703966

39713967
# Put Abseil, etc. first so that local directories are searched
39723968
# before (what are likely) system directories
39733969
set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${ABSL_PREFIX}")
39743970
set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${GRPC_PB_ROOT}")
3975-
set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${GRPC_GFLAGS_ROOT}")
39763971
set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${GRPC_CARES_ROOT}")
39773972
set(GRPC_CMAKE_PREFIX "${GRPC_CMAKE_PREFIX};${GRPC_RE2_ROOT}")
39783973

@@ -4022,7 +4017,6 @@ macro(build_grpc)
40224017
-DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF
40234018
-DgRPC_BUILD_TESTS=OFF
40244019
-DgRPC_CARES_PROVIDER=package
4025-
-DgRPC_GFLAGS_PROVIDER=package
40264020
-DgRPC_MSVC_STATIC_RUNTIME=${ARROW_USE_STATIC_CRT}
40274021
-DgRPC_PROTOBUF_PROVIDER=package
40284022
-DgRPC_RE2_PROVIDER=package

cpp/src/arrow/acero/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@ add_custom_target(arrow_acero)
1919

2020
arrow_install_all_headers("arrow/acero")
2121

22+
# If libarrow_acero.a is only built, "pkg-config --cflags --libs
23+
# arrow-acero" outputs build flags for static linking not shared
24+
# linking. ARROW_ACERO_PC_* except ARROW_ACERO_PC_*_PRIVATE are for
25+
# the static linking case.
26+
if(NOT ARROW_BUILD_SHARED AND ARROW_BUILD_STATIC)
27+
string(APPEND ARROW_ACERO_PC_CFLAGS "${ARROW_ACERO_PC_CFLAGS_PRIVATE}")
28+
set(ARROW_ACERO_PC_CFLAGS_PRIVATE "")
29+
endif()
30+
2231
set(ARROW_ACERO_SRCS
2332
accumulation_queue.cc
2433
scalar_aggregate_node.cc

0 commit comments

Comments
 (0)