From 9efb0521641db03e0c0c8b4b3cbfd3199bcf6520 Mon Sep 17 00:00:00 2001 From: Curt Hagenlocher Date: Fri, 23 Oct 2026 16:33:13 -0700 Subject: [PATCH 1/2] Force newer versions of Brotli --- ci/vcpkg/ports.patch | 25 +++ cpp/subprojects/google-brotli.wrap | 14 +- .../packagefiles/google-brotli/LICENSE.build | 19 +++ .../packagefiles/google-brotli/meson.build | 153 ++++++++++++++++++ cpp/thirdparty/versions.txt | 4 +- 5 files changed, 204 insertions(+), 11 deletions(-) create mode 100644 cpp/subprojects/packagefiles/google-brotli/LICENSE.build create mode 100644 cpp/subprojects/packagefiles/google-brotli/meson.build diff --git a/ci/vcpkg/ports.patch b/ci/vcpkg/ports.patch index db38c25de3f8..75f180e972fb 100644 --- a/ci/vcpkg/ports.patch +++ b/ci/vcpkg/ports.patch @@ -1,3 +1,28 @@ +diff --git a/ports/brotli/portfile.cmake b/ports/brotli/portfile.cmake +index e55c69c3d1..7d7cb1d67e 100644 +--- a/ports/brotli/portfile.cmake ++++ b/ports/brotli/portfile.cmake +@@ -2,7 +2,7 @@ vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO google/brotli + REF v${VERSION} # v1.1.0 +- SHA512 f94542afd2ecd96cc41fd21a805a3da314281ae558c10650f3e6d9ca732b8425bba8fde312823f0a564c7de3993bdaab5b43378edab65ebb798cefb6fd702256 ++ SHA512 460591287d428c8b5a8a2766b5b424d14501fcda12c7118b8f3cc4bfae44b90ac75ca156557f07b6e22542612724d904533e5f70019be07dbbb604c46f03ab69 + HEAD_REF master + PATCHES + install.patch +diff --git a/ports/brotli/vcpkg.json b/ports/brotli/vcpkg.json +index c5bf679166..abaeb1caa8 100644 +--- a/ports/brotli/vcpkg.json ++++ b/ports/brotli/vcpkg.json +@@ -1,6 +1,6 @@ + { + "name": "brotli", +- "version": "1.2.0", ++ "version": "1.2.1", + "description": "a generic-purpose lossless compression algorithm that compresses data using a combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling.", + "homepage": "https://github.com/google/brotli", + "license": "MIT", diff --git a/ports/curl/portfile.cmake b/ports/curl/portfile.cmake index 73f5aece46..68cdb3966f 100644 --- a/ports/curl/portfile.cmake diff --git a/cpp/subprojects/google-brotli.wrap b/cpp/subprojects/google-brotli.wrap index ec24d4417c46..fc01072c40f7 100644 --- a/cpp/subprojects/google-brotli.wrap +++ b/cpp/subprojects/google-brotli.wrap @@ -16,15 +16,11 @@ # under the License. [wrap-file] -directory = brotli-1.1.0 -source_url = https://github.com/google/brotli/archive/v1.1.0.tar.gz -source_filename = v1.1.0.tar.gz -source_hash = e720a6ca29428b803f4ad165371771f5398faba397edf6778837a18599ea13ff -patch_filename = google-brotli_1.1.0-1_patch.zip -patch_url = https://wrapdb.mesonbuild.com/v2/google-brotli_1.1.0-1/get_patch -patch_hash = 6826873a148c670d90a80715a7083284da7e19d59cda6a135fae6774411914dc -source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/google-brotli_1.1.0-1/v1.1.0.tar.gz -wrapdb_version = 1.1.0-1 +directory = brotli-1.1.1 +source_url = https://github.com/google/brotli/archive/v1.1.1.tar.gz +source_filename = v1.1.1.tar.gz +source_hash = 1a84dfaa740994d19254bf78aa7d74a4a8040d1638f3d5f2cdecb188fd520da8 +patch_directory = google-brotli [provide] libbrotlicommon = brotli_common_dep diff --git a/cpp/subprojects/packagefiles/google-brotli/LICENSE.build b/cpp/subprojects/packagefiles/google-brotli/LICENSE.build new file mode 100644 index 000000000000..b59833dedbe2 --- /dev/null +++ b/cpp/subprojects/packagefiles/google-brotli/LICENSE.build @@ -0,0 +1,19 @@ +Copyright (c) 2021 The Meson development team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/cpp/subprojects/packagefiles/google-brotli/meson.build b/cpp/subprojects/packagefiles/google-brotli/meson.build new file mode 100644 index 000000000000..12e549b5a6b9 --- /dev/null +++ b/cpp/subprojects/packagefiles/google-brotli/meson.build @@ -0,0 +1,153 @@ +# Copyright © 2019-2020 Intel Corporation + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +project( + 'google-brotli', + 'c', + license: 'MIT', + version: '1.1.1', + meson_version: '>= 0.49', +) + +cc = meson.get_compiler('c') + +dep_m = cc.find_library('m', required: false) +if not cc.has_function('log2', dependencies: dep_m) + error('Cannot find required log2() function') +endif + +inc = include_directories('c/include') + +if host_machine.system() == 'linux' + add_project_arguments('-DOS_LINUX', language: 'c') +elif host_machine.system() == 'freebsd' + add_project_arguments('-DOS_FREEBSD', language: 'c') +elif host_machine.system() == 'darwin' + add_project_arguments('-DOS_MACOSX', language: 'c') +endif + +c_args = [] +bcs = [] +bds = [] +bes = [] +install = false +if get_option('default_library') == 'shared' + c_args += ['-DBROTLI_SHARED_COMPILATION', '-DBROTLI_BUILD_PORTABLE'] + install = true + bcs = '-DBROTLICOMMON_SHARED_COMPILATION' + bds = '-DBROTLIDEC_SHARED_COMPILATION' + bes = '-DBROTLIENC_SHARED_COMPILATION' +elif get_option('default_library') == 'both' + error('both not yet supported.') +endif + +common_src = files( + 'c/common/constants.c', + 'c/common/context.c', + 'c/common/dictionary.c', + 'c/common/platform.c', + 'c/common/shared_dictionary.c', + 'c/common/transform.c', +) + +libbrotli_common = library( + 'brotli_common', + common_src, + gnu_symbol_visibility: 'hidden', + c_args: [c_args, bcs], + include_directories: inc, + version: meson.project_version(), + install: install, +) + +dec_src = files( + 'c/dec/bit_reader.c', + 'c/dec/decode.c', + 'c/dec/huffman.c', + 'c/dec/state.c', +) + +libbrotli_decoder = library( + 'brotli_decoder', + dec_src, + gnu_symbol_visibility: 'hidden', + c_args: [c_args, bds], + include_directories: inc, + link_with: libbrotli_common, + version: meson.project_version(), + install: install, +) + +enc_src = files( + 'c/enc/backward_references.c', + 'c/enc/backward_references_hq.c', + 'c/enc/bit_cost.c', + 'c/enc/block_splitter.c', + 'c/enc/brotli_bit_stream.c', + 'c/enc/cluster.c', + 'c/enc/command.c', + 'c/enc/compound_dictionary.c', + 'c/enc/compress_fragment.c', + 'c/enc/compress_fragment_two_pass.c', + 'c/enc/dictionary_hash.c', + 'c/enc/encode.c', + 'c/enc/encoder_dict.c', + 'c/enc/entropy_encode.c', + 'c/enc/fast_log.c', + 'c/enc/histogram.c', + 'c/enc/literal_cost.c', + 'c/enc/memory.c', + 'c/enc/metablock.c', + 'c/enc/static_dict.c', + 'c/enc/utf8_util.c', +) + +libbrotli_encoder = library( + 'brotli_encoder', + enc_src, + c_args: [c_args, bes], + gnu_symbol_visibility: 'hidden', + include_directories: inc, + link_with: libbrotli_common, + dependencies: dep_m, + version: meson.project_version(), + install: install, +) + +brotli_common_dep = declare_dependency( + link_with: libbrotli_common, + include_directories: inc, +) + +brotli_encoder_dep = declare_dependency( + link_with: [libbrotli_common, libbrotli_encoder], + include_directories: inc, +) + +brotli_decoder_dep = declare_dependency( + link_with: [libbrotli_common, libbrotli_decoder], + include_directories: inc, +) + +executable( + 'brotli', + 'c/tools/brotli.c', + dependencies: [brotli_decoder_dep, brotli_encoder_dep], +) diff --git a/cpp/thirdparty/versions.txt b/cpp/thirdparty/versions.txt index e2f16c588e20..42125e32b553 100644 --- a/cpp/thirdparty/versions.txt +++ b/cpp/thirdparty/versions.txt @@ -58,8 +58,8 @@ ARROW_AZURE_SDK_BUILD_VERSION=azure-identity_1.9.0 ARROW_AZURE_SDK_BUILD_SHA256_CHECKSUM=97065bfc971ac8df450853ce805f820f52b59457bd7556510186a1569502e4a1 ARROW_BOOST_BUILD_VERSION=1.92.0 ARROW_BOOST_BUILD_SHA256_CHECKSUM=f51707c27359a0df0cac1beada86de31bb5eed5e8285592dadec384df99c2984 -ARROW_BROTLI_BUILD_VERSION=v1.0.9 -ARROW_BROTLI_BUILD_SHA256_CHECKSUM=f9e8d81d0405ba66d181529af42a3354f838c939095ff99930da6aa9cdf6fe46 +ARROW_BROTLI_BUILD_VERSION=v1.0.10 +ARROW_BROTLI_BUILD_SHA256_CHECKSUM=b517ebdb5266b963d28d6e639b973479874ec72086deb6ee4a2d639e1b13606b ARROW_BZIP2_BUILD_VERSION=1.0.8 ARROW_BZIP2_BUILD_SHA256_CHECKSUM=ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269 ARROW_CARES_BUILD_VERSION=1.34.6 From 747092e753058902b62151f40585806fdf8fa115 Mon Sep 17 00:00:00 2001 From: Curt Hagenlocher Date: Fri, 23 Oct 2026 16:50:50 -0700 Subject: [PATCH 2/2] Address review feedback: reformat meson.build and bump Windows wheel image - Apply meson-fmt to the vendored google-brotli meson.build (whitespace only). - Bump PYTHON_WHEEL_WINDOWS_IMAGE_REVISION so Windows wheel CI rebuilds its cached image with the patched vcpkg brotli 1.2.1 port instead of reusing the existing image built with 1.2.0. Co-Authored-By: Claude Opus 5.5 --- .env | 2 +- .../packagefiles/google-brotli/meson.build | 158 +++++++++--------- 2 files changed, 80 insertions(+), 80 deletions(-) diff --git a/.env b/.env index 4be5d436f2d7..68747af7e35f 100644 --- a/.env +++ b/.env @@ -98,6 +98,6 @@ VCPKG="9b965a116838c6cdcd36bca60d1b81b030c8ab8d" # 2026.05.27 (not release, u # ci/docker/python-*-windows-*.dockerfile or the vcpkg config. # This is a workaround for our CI problem that "archery docker build" doesn't # use pulled built images in dev/tasks/python-wheels/github.windows.yml. -PYTHON_WHEEL_WINDOWS_IMAGE_REVISION=2026-10-11 +PYTHON_WHEEL_WINDOWS_IMAGE_REVISION=2026-10-23 PYTHON_WHEEL_WINDOWS_TEST_IMAGE_REVISION=2026-11-11 diff --git a/cpp/subprojects/packagefiles/google-brotli/meson.build b/cpp/subprojects/packagefiles/google-brotli/meson.build index 12e549b5a6b9..26a1c5c992bc 100644 --- a/cpp/subprojects/packagefiles/google-brotli/meson.build +++ b/cpp/subprojects/packagefiles/google-brotli/meson.build @@ -19,28 +19,28 @@ # THE SOFTWARE. project( - 'google-brotli', - 'c', - license: 'MIT', - version: '1.1.1', - meson_version: '>= 0.49', + 'google-brotli', + 'c', + license: 'MIT', + version: '1.1.1', + meson_version: '>= 0.49', ) cc = meson.get_compiler('c') dep_m = cc.find_library('m', required: false) if not cc.has_function('log2', dependencies: dep_m) - error('Cannot find required log2() function') + error('Cannot find required log2() function') endif inc = include_directories('c/include') if host_machine.system() == 'linux' - add_project_arguments('-DOS_LINUX', language: 'c') + add_project_arguments('-DOS_LINUX', language: 'c') elif host_machine.system() == 'freebsd' - add_project_arguments('-DOS_FREEBSD', language: 'c') + add_project_arguments('-DOS_FREEBSD', language: 'c') elif host_machine.system() == 'darwin' - add_project_arguments('-DOS_MACOSX', language: 'c') + add_project_arguments('-DOS_MACOSX', language: 'c') endif c_args = [] @@ -49,105 +49,105 @@ bds = [] bes = [] install = false if get_option('default_library') == 'shared' - c_args += ['-DBROTLI_SHARED_COMPILATION', '-DBROTLI_BUILD_PORTABLE'] - install = true - bcs = '-DBROTLICOMMON_SHARED_COMPILATION' - bds = '-DBROTLIDEC_SHARED_COMPILATION' - bes = '-DBROTLIENC_SHARED_COMPILATION' + c_args += ['-DBROTLI_SHARED_COMPILATION', '-DBROTLI_BUILD_PORTABLE'] + install = true + bcs = '-DBROTLICOMMON_SHARED_COMPILATION' + bds = '-DBROTLIDEC_SHARED_COMPILATION' + bes = '-DBROTLIENC_SHARED_COMPILATION' elif get_option('default_library') == 'both' - error('both not yet supported.') + error('both not yet supported.') endif common_src = files( - 'c/common/constants.c', - 'c/common/context.c', - 'c/common/dictionary.c', - 'c/common/platform.c', - 'c/common/shared_dictionary.c', - 'c/common/transform.c', + 'c/common/constants.c', + 'c/common/context.c', + 'c/common/dictionary.c', + 'c/common/platform.c', + 'c/common/shared_dictionary.c', + 'c/common/transform.c', ) libbrotli_common = library( - 'brotli_common', - common_src, - gnu_symbol_visibility: 'hidden', - c_args: [c_args, bcs], - include_directories: inc, - version: meson.project_version(), - install: install, + 'brotli_common', + common_src, + gnu_symbol_visibility: 'hidden', + c_args: [c_args, bcs], + include_directories: inc, + version: meson.project_version(), + install: install, ) dec_src = files( - 'c/dec/bit_reader.c', - 'c/dec/decode.c', - 'c/dec/huffman.c', - 'c/dec/state.c', + 'c/dec/bit_reader.c', + 'c/dec/decode.c', + 'c/dec/huffman.c', + 'c/dec/state.c', ) libbrotli_decoder = library( - 'brotli_decoder', - dec_src, - gnu_symbol_visibility: 'hidden', - c_args: [c_args, bds], - include_directories: inc, - link_with: libbrotli_common, - version: meson.project_version(), - install: install, + 'brotli_decoder', + dec_src, + gnu_symbol_visibility: 'hidden', + c_args: [c_args, bds], + include_directories: inc, + link_with: libbrotli_common, + version: meson.project_version(), + install: install, ) enc_src = files( - 'c/enc/backward_references.c', - 'c/enc/backward_references_hq.c', - 'c/enc/bit_cost.c', - 'c/enc/block_splitter.c', - 'c/enc/brotli_bit_stream.c', - 'c/enc/cluster.c', - 'c/enc/command.c', - 'c/enc/compound_dictionary.c', - 'c/enc/compress_fragment.c', - 'c/enc/compress_fragment_two_pass.c', - 'c/enc/dictionary_hash.c', - 'c/enc/encode.c', - 'c/enc/encoder_dict.c', - 'c/enc/entropy_encode.c', - 'c/enc/fast_log.c', - 'c/enc/histogram.c', - 'c/enc/literal_cost.c', - 'c/enc/memory.c', - 'c/enc/metablock.c', - 'c/enc/static_dict.c', - 'c/enc/utf8_util.c', + 'c/enc/backward_references.c', + 'c/enc/backward_references_hq.c', + 'c/enc/bit_cost.c', + 'c/enc/block_splitter.c', + 'c/enc/brotli_bit_stream.c', + 'c/enc/cluster.c', + 'c/enc/command.c', + 'c/enc/compound_dictionary.c', + 'c/enc/compress_fragment.c', + 'c/enc/compress_fragment_two_pass.c', + 'c/enc/dictionary_hash.c', + 'c/enc/encode.c', + 'c/enc/encoder_dict.c', + 'c/enc/entropy_encode.c', + 'c/enc/fast_log.c', + 'c/enc/histogram.c', + 'c/enc/literal_cost.c', + 'c/enc/memory.c', + 'c/enc/metablock.c', + 'c/enc/static_dict.c', + 'c/enc/utf8_util.c', ) libbrotli_encoder = library( - 'brotli_encoder', - enc_src, - c_args: [c_args, bes], - gnu_symbol_visibility: 'hidden', - include_directories: inc, - link_with: libbrotli_common, - dependencies: dep_m, - version: meson.project_version(), - install: install, + 'brotli_encoder', + enc_src, + c_args: [c_args, bes], + gnu_symbol_visibility: 'hidden', + include_directories: inc, + link_with: libbrotli_common, + dependencies: dep_m, + version: meson.project_version(), + install: install, ) brotli_common_dep = declare_dependency( - link_with: libbrotli_common, - include_directories: inc, + link_with: libbrotli_common, + include_directories: inc, ) brotli_encoder_dep = declare_dependency( - link_with: [libbrotli_common, libbrotli_encoder], - include_directories: inc, + link_with: [libbrotli_common, libbrotli_encoder], + include_directories: inc, ) brotli_decoder_dep = declare_dependency( - link_with: [libbrotli_common, libbrotli_decoder], - include_directories: inc, + link_with: [libbrotli_common, libbrotli_decoder], + include_directories: inc, ) executable( - 'brotli', - 'c/tools/brotli.c', - dependencies: [brotli_decoder_dep, brotli_encoder_dep], + 'brotli', + 'c/tools/brotli.c', + dependencies: [brotli_decoder_dep, brotli_encoder_dep], )