From e8680a0eae6ce788be5d91de41d52335b223f74d Mon Sep 17 00:00:00 2001 From: Hiroyuki Sato Date: Tue, 10 Jun 2025 10:51:34 +0900 Subject: [PATCH 1/3] GH-46757: [CI][Packaging][Conan] Synchronize upstream conan --- ci/conan/all/conandata.yml | 10 +++ ci/conan/all/conanfile.py | 69 +++---------------- .../all/patches/19.0.1-0001-fix-cmake.patch | 57 +++++++++++++++ .../19.0.1-0002-fix-downloaded-mimalloc.patch | 15 ++++ ci/conan/all/test_package/CMakeLists.txt | 2 +- ci/conan/config.yml | 2 + ci/conan/merge_status.sh | 2 +- 7 files changed, 95 insertions(+), 62 deletions(-) create mode 100644 ci/conan/all/patches/19.0.1-0001-fix-cmake.patch create mode 100644 ci/conan/all/patches/19.0.1-0002-fix-downloaded-mimalloc.patch diff --git a/ci/conan/all/conandata.yml b/ci/conan/all/conandata.yml index a13b31c2e82..4efaf70568f 100644 --- a/ci/conan/all/conandata.yml +++ b/ci/conan/all/conandata.yml @@ -21,6 +21,9 @@ # SOFTWARE. sources: + "19.0.1": + url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-19.0.1/apache-arrow-19.0.1.tar.gz?action=download" + sha256: "acb76266e8b0c2fbb7eb15d542fbb462a73b3fd1e32b80fad6c2fafd95a51160" "18.1.0": url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-18.1.0/apache-arrow-18.1.0.tar.gz?action=download" sha256: "2dc8da5f8796afe213ecc5e5aba85bb82d91520eff3cf315784a52d0fa61d7fc" @@ -40,6 +43,13 @@ sources: url: "https://www.apache.org/dyn/closer.lua/arrow/arrow-14.0.2/apache-arrow-14.0.2.tar.gz?action=download" sha256: "1304dedb41896008b89fe0738c71a95d9b81752efc77fa70f264cb1da15d9bc2" patches: + "19.0.1": + - patch_file: "patches/19.0.1-0001-fix-cmake.patch" + patch_description: "use cci package" + patch_type: "conan" + - patch_file: "patches/19.0.1-0002-fix-downloaded-mimalloc.patch" + patch_description: "use cci package" + patch_type: "conan" "18.1.0": - patch_file: "patches/18.0.0-0001-fix-cmake.patch" patch_description: "use cci package" diff --git a/ci/conan/all/conanfile.py b/ci/conan/all/conanfile.py index 5db9fe35672..3322ef8d3be 100644 --- a/ci/conan/all/conanfile.py +++ b/ci/conan/all/conanfile.py @@ -19,6 +19,7 @@ # 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. +import os from conan import ConanFile from conan.errors import ConanInvalidConfiguration, ConanException @@ -28,11 +29,9 @@ from conan.tools.microsoft import is_msvc, is_msvc_static_runtime from conan.tools.scm import Version -import os -import glob - required_conan_version = ">=2.1.0" + class ArrowConan(ConanFile): name = "arrow" description = "Apache Arrow is a cross-language development platform for in-memory data" @@ -102,7 +101,7 @@ class ArrowConan(ConanFile): "dataset_modules": False, "deprecated": True, "encryption": False, - "filesystem_layer": False, + "filesystem_layer": True, "hdfs_bridgs": False, "plasma": "deprecated", "simd_level": "default", @@ -142,7 +141,7 @@ class ArrowConan(ConanFile): def _min_cppstd(self): # arrow >= 10.0.0 requires C++17. # https://github.com/apache/arrow/pull/13991 - return "11" if Version(self.version) < "10.0.0" else "17" + return "17" def export_sources(self): export_conandata_patches(self) @@ -151,10 +150,10 @@ def export_sources(self): def config_options(self): if self.settings.os == "Windows": del self.options.fPIC - if Version(self.version) < "8.0.0": - del self.options.substrait if is_msvc(self): self.options.with_boost = True + if Version(self.version) >= "19.0.0": + self.options.with_mimalloc = True def configure(self): if self.options.shared: @@ -209,9 +208,6 @@ def requirements(self): self.requires("snappy/1.1.9") if self.options.get_safe("simd_level") != None or \ self.options.get_safe("runtime_simd_level") != None: - if Version(self.version) < 8: - self.requires("xsimd/9.0.1") - else: self.requires("xsimd/13.0.0") if self.options.with_zlib: self.requires("zlib/[>=1.2.11 <2]") @@ -253,15 +249,6 @@ def validate(self): if self.settings.compiler.get_safe("cppstd"): check_min_cppstd(self, self._min_cppstd) - if ( - Version(self.version) < "10.0.0" - and self.settings.compiler == "clang" - and Version(self.settings.compiler.version) < "3.9" - ): - raise ConanInvalidConfiguration( - f"{self.ref} requires C++11, which needs at least clang-3.9" - ) - if self.options.get_safe("skyhook", False): raise ConanInvalidConfiguration("CCI has no librados recipe (yet)") if self.options.with_cuda: @@ -425,28 +412,11 @@ def generate(self): tc.generate() deps = CMakeDeps(self) + deps.set_property("mimalloc", "cmake_target_name", "mimalloc::mimalloc") deps.generate() def _patch_sources(self): apply_conandata_patches(self) - if Version(self.version) < "10.0.0": - for filename in glob.glob(os.path.join(self.source_folder, "cpp", "cmake_modules", "Find*.cmake")): - if os.path.basename(filename) not in [ - "FindArrow.cmake", - "FindArrowAcero.cmake", - "FindArrowCUDA.cmake", - "FindArrowDataset.cmake", - "FindArrowFlight.cmake", - "FindArrowFlightSql.cmake", - "FindArrowFlightTesting.cmake", - "FindArrowPython.cmake", - "FindArrowPythonFlight.cmake", - "FindArrowSubstrait.cmake", - "FindArrowTesting.cmake", - "FindGandiva.cmake", - "FindParquet.cmake", - ]: - os.remove(filename) def build(self): self._patch_sources() @@ -464,29 +434,6 @@ def package(self): rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) rmdir(self, os.path.join(self.package_folder, "share")) - cmake_suffix = "shared" if self.options.shared else "static" - - alias_map = { f"Arrow::arrow_{cmake_suffix}": f"arrow::arrow_{cmake_suffix}" } - - if self.options.parquet: - alias_map[f"Parquet::parquet_{cmake_suffix}"] = f"arrow::parquet_{cmake_suffix}" - - if self.options.get_safe("substrait"): - alias_map[f"Arrow::arrow_substrait_{cmake_suffix}"] = f"arrow::arrow_substrait_{cmake_suffix}" - - if self.options.acero: - alias_map[f"Arrow::arrow_acero_{cmake_suffix}"] = f"arrow::arrow_acero_{cmake_suffix}" - - if self.options.gandiva: - alias_map[f"Gandiva::gandiva_{cmake_suffix}"] = f"arrow::gandiva_{cmake_suffix}" - - if self.options.with_flight_rpc: - alias_map[f"ArrowFlight::arrow_flight_sql_{cmake_suffix}"] = f"arrow::arrow_flight_sql_{cmake_suffix}" - - @property - def _module_subfolder(self): - return os.path.join("lib", "cmake") - def package_info(self): # FIXME: fix CMake targets of components @@ -556,6 +503,8 @@ def package_info(self): self.cpp_info.components["dataset"].libs = ["arrow_dataset"] if self.options.parquet: self.cpp_info.components["dataset"].requires = ["libparquet"] + if self.options.acero and Version(self.version) >= "19.0.0": + self.cpp_info.components["dataset"].requires = ["libacero"] if self.options.cli and (self.options.with_cuda or self.options.with_flight_rpc or self.options.parquet): binpath = os.path.join(self.package_folder, "bin") diff --git a/ci/conan/all/patches/19.0.1-0001-fix-cmake.patch b/ci/conan/all/patches/19.0.1-0001-fix-cmake.patch new file mode 100644 index 00000000000..af7e309cf2c --- /dev/null +++ b/ci/conan/all/patches/19.0.1-0001-fix-cmake.patch @@ -0,0 +1,57 @@ +diff --git a/cpp/cmake_modules/FindThriftAlt.cmake b/cpp/cmake_modules/FindThriftAlt.cmake +index 98a706d..edf195e 100644 +--- a/cpp/cmake_modules/FindThriftAlt.cmake ++++ b/cpp/cmake_modules/FindThriftAlt.cmake +@@ -45,22 +45,20 @@ endif() + # * https://github.com/apache/thrift/pull/2725 + # * https://github.com/apache/thrift/pull/2726 + # * https://github.com/conda-forge/thrift-cpp-feedstock/issues/68 +-if(NOT WIN32) +- set(find_package_args "") +- if(ThriftAlt_FIND_VERSION) +- list(APPEND find_package_args ${ThriftAlt_FIND_VERSION}) +- endif() +- if(ThriftAlt_FIND_QUIETLY) +- list(APPEND find_package_args QUIET) +- endif() +- find_package(Thrift ${find_package_args}) +- if(Thrift_FOUND) +- set(ThriftAlt_FOUND TRUE) +- add_executable(thrift::compiler IMPORTED) +- set_target_properties(thrift::compiler PROPERTIES IMPORTED_LOCATION +- "${THRIFT_COMPILER}") +- return() +- endif() ++set(find_package_args "") ++if(ThriftAlt_FIND_VERSION) ++ list(APPEND find_package_args ${ThriftAlt_FIND_VERSION}) ++endif() ++if(ThriftAlt_FIND_QUIETLY) ++ list(APPEND find_package_args QUIET) ++endif() ++find_package(Thrift ${find_package_args}) ++if(Thrift_FOUND) ++ set(ThriftAlt_FOUND TRUE) ++ add_executable(thrift::compiler IMPORTED) ++ set_target_properties(thrift::compiler PROPERTIES IMPORTED_LOCATION ++ "${THRIFT_COMPILER}") ++ return() + endif() + + function(extract_thrift_version) +diff --git a/cpp/src/parquet/size_statistics.cc b/cpp/src/parquet/size_statistics.cc +index 1ce6c937a..e45eef3f0 100644 +--- a/cpp/src/parquet/size_statistics.cc ++++ b/cpp/src/parquet/size_statistics.cc +@@ -18,9 +18,11 @@ + #include "parquet/size_statistics.h" + + #include ++#include + #include + #include + #include ++#include + + #include "arrow/util/logging.h" + #include "parquet/exception.h" diff --git a/ci/conan/all/patches/19.0.1-0002-fix-downloaded-mimalloc.patch b/ci/conan/all/patches/19.0.1-0002-fix-downloaded-mimalloc.patch new file mode 100644 index 00000000000..46725ea20a8 --- /dev/null +++ b/ci/conan/all/patches/19.0.1-0002-fix-downloaded-mimalloc.patch @@ -0,0 +1,15 @@ +diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake +index abfe6d2..cc0f3c5 100644 +--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake ++++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake +@@ -2259,6 +2259,10 @@ endif() + # mimalloc - Cross-platform high-performance allocator, from Microsoft + + if(ARROW_MIMALLOC) ++ find_package(mimalloc REQUIRED CONFIG) ++endif() ++ ++if(0) + if(NOT ARROW_ENABLE_THREADING) + message(FATAL_ERROR "Can't use mimalloc with ARROW_ENABLE_THREADING=OFF") + endif() diff --git a/ci/conan/all/test_package/CMakeLists.txt b/ci/conan/all/test_package/CMakeLists.txt index b25c8e889cb..d85120a6626 100644 --- a/ci/conan/all/test_package/CMakeLists.txt +++ b/ci/conan/all/test_package/CMakeLists.txt @@ -20,7 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -cmake_minimum_required(VERSION 3.8) +cmake_minimum_required(VERSION 3.15) project(test_package LANGUAGES CXX) find_package(Arrow REQUIRED CONFIG) diff --git a/ci/conan/config.yml b/ci/conan/config.yml index cbb2fce0547..33c0261df74 100644 --- a/ci/conan/config.yml +++ b/ci/conan/config.yml @@ -21,6 +21,8 @@ # SOFTWARE. versions: + "19.0.1": + folder: all "18.1.0": folder: all "18.0.0": diff --git a/ci/conan/merge_status.sh b/ci/conan/merge_status.sh index 600385c0e17..229c3a4394c 100644 --- a/ci/conan/merge_status.sh +++ b/ci/conan/merge_status.sh @@ -15,4 +15,4 @@ # specific language governing permissions and limitations # under the License. -UPSTREAM_REVISION=a9b270f9d2052e193ce3c0a6c4e2fda0b0ac5ade +UPSTREAM_REVISION=1729c3c2c3b0e9d058821fa00e8a54154415efc6 From a98c62641c195d2200120fd30e4832096e36c604 Mon Sep 17 00:00:00 2001 From: Hiroyuki Sato Date: Thu, 12 Jun 2025 14:24:13 +0900 Subject: [PATCH 2/3] Update ci/conan/all/conanfile.py Co-authored-by: Sutou Kouhei --- ci/conan/all/conanfile.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/conan/all/conanfile.py b/ci/conan/all/conanfile.py index 3322ef8d3be..6881ee6f325 100644 --- a/ci/conan/all/conanfile.py +++ b/ci/conan/all/conanfile.py @@ -19,6 +19,7 @@ # 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. + import os from conan import ConanFile From d613370b03fb87222903c0edcc170aeda781e20d Mon Sep 17 00:00:00 2001 From: Hiroyuki Sato Date: Thu, 12 Jun 2025 15:04:54 +0900 Subject: [PATCH 3/3] Add license header --- .../all/patches/19.0.1-0001-fix-cmake.patch | 22 +++++++++++++++++++ .../19.0.1-0002-fix-downloaded-mimalloc.patch | 22 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/ci/conan/all/patches/19.0.1-0001-fix-cmake.patch b/ci/conan/all/patches/19.0.1-0001-fix-cmake.patch index af7e309cf2c..0d37465a0eb 100644 --- a/ci/conan/all/patches/19.0.1-0001-fix-cmake.patch +++ b/ci/conan/all/patches/19.0.1-0001-fix-cmake.patch @@ -1,3 +1,25 @@ +MIT License + +Copyright (c) 2025 Conan.io + +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/cmake_modules/FindThriftAlt.cmake b/cpp/cmake_modules/FindThriftAlt.cmake index 98a706d..edf195e 100644 --- a/cpp/cmake_modules/FindThriftAlt.cmake diff --git a/ci/conan/all/patches/19.0.1-0002-fix-downloaded-mimalloc.patch b/ci/conan/all/patches/19.0.1-0002-fix-downloaded-mimalloc.patch index 46725ea20a8..d49f14dcc8d 100644 --- a/ci/conan/all/patches/19.0.1-0002-fix-downloaded-mimalloc.patch +++ b/ci/conan/all/patches/19.0.1-0002-fix-downloaded-mimalloc.patch @@ -1,3 +1,25 @@ +MIT License + +Copyright (c) 2025 Conan.io + +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/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake index abfe6d2..cc0f3c5 100644 --- a/cpp/cmake_modules/ThirdpartyToolchain.cmake