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

gangwu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 18c74b0733 GH-35804: [CI][Packaging][Conan] Synchronize upstream conan 
(#39729)
18c74b0733 is described below

commit 18c74b0733c9ff473a211259cf10705b2c9be891
Author: Gang Wu <[email protected]>
AuthorDate: Mon Apr 15 10:07:32 2024 +0800

    GH-35804: [CI][Packaging][Conan] Synchronize upstream conan (#39729)
    
    ### What changes are included in this PR?
    
    Merged upstream conan using `ci/conan/merge_upstream.sh 
../conan-center-index/`
    
    ### Are these changes tested?
    
    Will be tested on CI.
    
    ### Are there any user-facing changes?
    
    No
    * Closes: #35804
    
    Authored-by: Gang Wu <[email protected]>
    Signed-off-by: Gang Wu <[email protected]>
---
 .env                                               |   9 +-
 .../conan_cmake_project_include.cmake}             |  28 +-
 ci/conan/all/conandata.yml                         |  50 +-
 ci/conan/all/conanfile.py                          | 596 ++++++++-------------
 ci/conan/config.yml                                |  20 +-
 ci/scripts/conan_build.sh                          |  25 +-
 ci/scripts/install_sccache.sh                      |   2 +-
 cpp/cmake_modules/ThirdpartyToolchain.cmake        |   6 +
 docker-compose.yml                                 |   7 +-
 9 files changed, 313 insertions(+), 430 deletions(-)

diff --git a/.env b/.env
index 298c100c09..997801ef86 100644
--- a/.env
+++ b/.env
@@ -100,7 +100,8 @@ VCPKG="a42af01b72c28a8e1d7b48107b33e4f286a55ef6"    # 
2023.11.20 Release
 # use pulled built images in dev/tasks/python-wheels/github.windows.yml.
 PYTHON_WHEEL_WINDOWS_IMAGE_REVISION=2024-03-19
 
-# Use conanio/${CONAN} for "docker-compose run --rm conan". See
-# https://github.com/conan-io/conan-docker-tools#readme for available
-# images.
-CONAN=gcc10
+# Use conanio/${CONAN_BASE}:{CONAN_VERSION} for "docker-compose run --rm 
conan".
+# See https://github.com/conan-io/conan-docker-tools#readme and
+# https://hub.docker.com/u/conanio for available images.
+CONAN_BASE=gcc10
+CONAN_VERSION=1.62.0
diff --git a/ci/conan/config.yml 
b/ci/conan/all/conan_cmake_project_include.cmake
similarity index 68%
copy from ci/conan/config.yml
copy to ci/conan/all/conan_cmake_project_include.cmake
index be333447f3..a6dee0c434 100644
--- a/ci/conan/config.yml
+++ b/ci/conan/all/conan_cmake_project_include.cmake
@@ -20,18 +20,16 @@
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 # SOFTWARE.
 
-versions:
-  "10.0.1":
-    folder: all
-  "10.0.0":
-    folder: all
-  "8.0.1":
-    folder: all
-  "8.0.0":
-    folder: all
-  "7.0.0":
-    folder: all
-  "2.0.0":
-    folder: all
-  "1.0.0":
-    folder: all
+if(ARROW_S3)
+  find_package(AWSSDK REQUIRED)
+  # Fix issue where scripts expect a variable called "AWSSDK_LINK_LIBRARIES"
+  # which is not defined by the generated AWSSDKConfig.cmake
+  if(NOT DEFINED AWSSDK_LINK_LIBRARIES)
+    set(AWSSDK_LINK_LIBRARIES "${AWSSDK_LIBRARIES}")
+  endif()
+
+  # Causes logic used for generated .pc file to not run
+  # avoiding instropection of target `aws-cpp-sdk::aws-cpp-sdk`
+  # This is fine because the generated .pc file is not of use
+  set(AWSSDK_SOURCE "conan")
+endif()
diff --git a/ci/conan/all/conandata.yml b/ci/conan/all/conandata.yml
index 7402272a4b..fb75f3995c 100644
--- a/ci/conan/all/conandata.yml
+++ b/ci/conan/all/conandata.yml
@@ -21,6 +21,30 @@
 # SOFTWARE.
 
 sources:
+  "15.0.0":
+    url: 
"https://www.apache.org/dyn/closer.lua/arrow/arrow-15.0.0/apache-arrow-15.0.0.tar.gz?action=download";
+    sha256: "01dd3f70e85d9b5b933ec92c0db8a4ef504a5105f78d2d8622e84279fb45c25d"
+  "14.0.2":
+    url: 
"https://www.apache.org/dyn/closer.lua/arrow/arrow-14.0.2/apache-arrow-14.0.2.tar.gz?action=download";
+    sha256: "1304dedb41896008b89fe0738c71a95d9b81752efc77fa70f264cb1da15d9bc2"
+  "14.0.1":
+    url: 
"https://www.apache.org/dyn/closer.lua/arrow/arrow-14.0.1/apache-arrow-14.0.1.tar.gz?action=download";
+    sha256: "5c70eafb1011f9d124bafb328afe54f62cc5b9280b7080e1e3d668f78c0e407e"
+  "14.0.0":
+    url: 
"https://www.apache.org/dyn/closer.lua/arrow/arrow-14.0.0/apache-arrow-14.0.0.tar.gz?action=download";
+    sha256: "4eb0da50ec071baf15fc163cb48058931e006f1c862c8def0e180fd07d531021"
+  "13.0.0":
+    url: 
"https://www.apache.org/dyn/closer.lua/arrow/arrow-13.0.0/apache-arrow-13.0.0.tar.gz?action=download";
+    sha256: "35dfda191262a756be934eef8afee8d09762cad25021daa626eb249e251ac9e6"
+  "12.0.1":
+    url: 
"https://www.apache.org/dyn/closer.lua/arrow/arrow-12.0.1/apache-arrow-12.0.1.tar.gz?action=download";
+    sha256: "3481c411393aa15c75e88d93cf8315faf7f43e180fe0790128d3840d417de858"
+  "12.0.0":
+    url: 
"https://www.apache.org/dyn/closer.lua/arrow/arrow-12.0.0/apache-arrow-12.0.0.tar.gz?action=download";
+    sha256: "ddd8347882775e53af7d0965a1902b7d8fcd0a030fd14f783d4f85e821352d52"
+  "11.0.0":
+    url: 
"https://www.apache.org/dyn/closer.lua/arrow/arrow-11.0.0/apache-arrow-11.0.0.tar.gz?action=download";
+    sha256: "2dd8f0ea0848a58785628ee3a57675548d509e17213a2f5d72b0d900b43f5430"
   "10.0.1":
     url: 
"https://www.apache.org/dyn/closer.lua/arrow/arrow-10.0.1/apache-arrow-10.0.1.tar.gz?action=download";
     sha256: "c814e0670112a22c1a6ec03ab420a52ae236a9a42e9e438c3cbd37f37e658fb3"
@@ -36,12 +60,6 @@ sources:
   "7.0.0":
     url: 
"https://www.apache.org/dyn/closer.lua/arrow/arrow-7.0.0/apache-arrow-7.0.0.tar.gz?action=download";
     sha256: "e8f49b149a15ecef4e40fcfab1b87c113c6b1ee186005c169e5cdf95d31a99de"
-  "2.0.0":
-    url: 
"https://www.apache.org/dyn/closer.lua/arrow/arrow-2.0.0/apache-arrow-2.0.0.tar.gz?action=download";
-    sha256: "be0342cc847bb340d86aeaef43596a0b6c1dbf1ede9c789a503d939e01c71fbe"
-  "1.0.0":
-    url: 
"https://www.apache.org/dyn/closer.lua/arrow/arrow-1.0.0/apache-arrow-1.0.0.tar.gz?action=download";
-    sha256: "86ddb9feb48203a5aaf9cc4f2827525e20a2ca4d7239e492af17e74532ccf243"
 patches:
   "8.0.1":
     - patch_file: "patches/8.0.0-0005-install-utils.patch"
@@ -64,23 +82,3 @@ patches:
     - patch_file: "patches/7.0.0-0007-fix-cmake.patch"
       patch_description: "use cci package"
       patch_type: "conan"
-  "2.0.0":
-    - patch_file: "patches/2.0.0-0003-fix-shared-msvc.patch"
-      patch_description: "make shared enabled in msvc"
-      patch_type: "official"
-    - patch_file: "patches/2.0.0-0005-gandiva-engine.patch"
-      patch_description: "fix grandiva compilation error"
-      patch_type: "official"
-    - patch_file: "patches/2.0.0-0008-fix-cmake.patch"
-      patch_description: "use cci package"
-      patch_type: "conan"
-  "1.0.0":
-    - patch_file: "patches/1.0.0-0003-fix-shared-msvc.patch"
-      patch_description: "make shared enabled in msvc"
-      patch_type: "official"
-    - patch_file: "patches/1.0.0-0005-fix-make12-namespace.patch"
-      patch_description: "fix ambiguous `make12` function between std and date"
-      patch_type: "official"
-    - patch_file: "patches/1.0.0-0006-fix-cmake.patch"
-      patch_description: "use cci package"
-      patch_type: "conan"
diff --git a/ci/conan/all/conanfile.py b/ci/conan/all/conanfile.py
index 7e87f82e7e..178cd03da1 100644
--- a/ci/conan/all/conanfile.py
+++ b/ci/conan/all/conanfile.py
@@ -21,12 +21,12 @@
 # SOFTWARE.
 
 from conan import ConanFile
-from conan.errors import ConanInvalidConfiguration
-from conan.tools.microsoft import is_msvc_static_runtime, is_msvc, check_min_vs
-from conan.tools.files import export_conandata_patches, 
apply_conandata_patches, get, copy, rmdir
+from conan.errors import ConanInvalidConfiguration, ConanException
 from conan.tools.build import check_min_cppstd, cross_building
-from conan.tools.scm import Version
 from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout
+from conan.tools.files import apply_conandata_patches, copy, 
export_conandata_patches, get, rmdir
+from conan.tools.microsoft import is_msvc, is_msvc_static_runtime
+from conan.tools.scm import Version
 
 import os
 import glob
@@ -39,7 +39,8 @@ class ArrowConan(ConanFile):
     license = ("Apache-2.0",)
     url = "https://github.com/conan-io/conan-center-index";
     homepage = "https://arrow.apache.org/";
-    topics = ("memory", "gandiva", "parquet", "skyhook", "plasma", "hdfs", 
"csv", "cuda", "gcs", "json", "hive", "s3", "grpc")
+    topics = ("memory", "gandiva", "parquet", "skyhook", "acero", "hdfs", 
"csv", "cuda", "gcs", "json", "hive", "s3", "grpc")
+    package_type = "library"
     settings = "os", "arch", "compiler", "build_type"
     options = {
         "shared": [True, False],
@@ -48,15 +49,15 @@ class ArrowConan(ConanFile):
         "parquet": ["auto", True, False],
         "substrait": [True, False],
         "skyhook": [True, False],
-        "plasma": [True, False],
+        "acero": [True, False],
         "cli": [True, False],
         "compute": ["auto", True, False],
-        "acero": ["auto", True, False],
         "dataset_modules":  ["auto", True, False],
         "deprecated": [True, False],
         "encryption": [True, False],
         "filesystem_layer":  [True, False],
         "hdfs_bridgs": [True, False],
+        "plasma": [True, False, "deprecated"],
         "simd_level": [None, "default", "sse4_2", "avx2", "avx512", "neon", ],
         "runtime_simd_level": [None, "sse4_2", "avx2", "avx512", "max"],
         "with_backtrace": [True, False],
@@ -70,8 +71,9 @@ class ArrowConan(ConanFile):
         "with_glog": ["auto", True, False],
         "with_grpc": ["auto", True, False],
         "with_jemalloc": ["auto", True, False],
-        "with_mimalloc": ["auto", True, False],
+        "with_mimalloc": [True, False],
         "with_json": [True, False],
+        "with_thrift": ["auto", True, False],
         "with_llvm": ["auto", True, False],
         "with_openssl": ["auto", True, False],
         "with_opentelemetry": [True, False],
@@ -91,43 +93,44 @@ class ArrowConan(ConanFile):
         "shared": False,
         "fPIC": True,
         "gandiva": False,
-        "parquet": "auto",
+        "parquet": False,
         "skyhook": False,
         "substrait": False,
-        "plasma": False,
+        "acero": False,
         "cli": False,
-        "compute": "auto",
-        "acero": "auto",
-        "dataset_modules": "auto",
+        "compute": False,
+        "dataset_modules": False,
         "deprecated": True,
         "encryption": False,
         "filesystem_layer": False,
         "hdfs_bridgs": False,
+        "plasma": "deprecated",
         "simd_level": "default",
         "runtime_simd_level": "max",
         "with_backtrace": False,
-        "with_boost": "auto",
+        "with_boost": False,
         "with_brotli": False,
         "with_bz2": False,
         "with_csv": False,
         "with_cuda": False,
-        "with_flight_rpc": "auto",
+        "with_flight_rpc": False,
         "with_flight_sql": False,
         "with_gcs": False,
-        "with_gflags": "auto",
-        "with_jemalloc": "auto",
+        "with_gflags": False,
+        "with_jemalloc": False,
         "with_mimalloc": False,
-        "with_glog": "auto",
-        "with_grpc": "auto",
+        "with_glog": False,
+        "with_grpc": False,
         "with_json": False,
-        "with_llvm": "auto",
-        "with_openssl": "auto",
+        "with_thrift": False,
+        "with_llvm": False,
+        "with_openssl": False,
         "with_opentelemetry": False,
         "with_orc": False,
-        "with_protobuf": "auto",
-        "with_re2": "auto",
+        "with_protobuf": False,
+        "with_re2": False,
         "with_s3": False,
-        "with_utf8proc": "auto",
+        "with_utf8proc": False,
         "with_lz4": False,
         "with_snappy": False,
         "with_zlib": False,
@@ -136,283 +139,147 @@ class ArrowConan(ConanFile):
     short_paths = True
 
     @property
-    def _minimum_cpp_standard(self):
+    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 "11" if Version(self.version) < "10.0.0" else "17"
 
     @property
     def _compilers_minimum_version(self):
         return {
-            "gcc": "8",
-            "clang": "7",
-            "apple-clang": "10",
-        }
+            "11": {
+                "clang": "3.9",
+            },
+            "17": {
+                "gcc": "8",
+                "clang": "7",
+                "apple-clang": "10",
+                "Visual Studio": "15",
+                "msvc": "191",
+            },
+        }.get(self._min_cppstd, {})
 
     def export_sources(self):
         export_conandata_patches(self)
+        copy(self, "conan_cmake_project_include.cmake", self.recipe_folder, 
os.path.join(self.export_sources_folder, "src"))
 
     def config_options(self):
         if self.settings.os == "Windows":
             del self.options.fPIC
-        if Version(self.version) < "2.0.0":
-            del self.options.simd_level
-            del self.options.runtime_simd_level
-        elif Version(self.version) < "6.0.0":
-            self.options.simd_level = "sse4_2"
-        if Version(self.version) < "6.0.0":
-            del self.options.with_gcs
-        if Version(self.version) < "7.0.0":
-            del self.options.skyhook
-            del self.options.with_flight_sql
-            del self.options.with_opentelemetry
         if Version(self.version) < "8.0.0":
             del self.options.substrait
+        if is_msvc(self):
+            self.options.with_boost = True
 
     def configure(self):
         if self.options.shared:
             self.options.rm_safe("fPIC")
 
-    def validate(self):
-        if self.info.settings.compiler.cppstd:
-            check_min_cppstd(self, self._minimum_cpp_standard)
-
-        if self._minimum_cpp_standard == 11:
-            if self.info.settings.compiler == "clang" and 
self.info.settings.compiler.version <= Version("3.9"):
-                raise ConanInvalidConfiguration("This recipe does not support 
this compiler version")
-        else:
-            check_min_vs(self, 191)
-            if not is_msvc(self):
-                minimum_version = 
self._compilers_minimum_version.get(str(self.info.settings.compiler), False)
-                if minimum_version and 
Version(self.info.settings.compiler.version) < minimum_version:
-                    raise ConanInvalidConfiguration(
-                        f"{self.ref} requires C++{self._minimum_cpp_standard}, 
which your compiler does not support."
-                    )
-
-        if self.options.shared:
-            del self.options.fPIC
-        if self.options.compute == False and not self._compute(True):
-            raise ConanInvalidConfiguration("compute options is required (or 
choose auto)")
-        if self.options.acero == False and not self._acero(True):
-            raise ConanInvalidConfiguration("acero options is required (or 
choose auto)")
-        if self.options.parquet == False and self._parquet(True):
-            raise ConanInvalidConfiguration("parquet options is required (or 
choose auto)")
-        if self.options.dataset_modules == False and 
self._dataset_modules(True):
-            raise ConanInvalidConfiguration("dataset_modules options is 
required (or choose auto)")
-        if self.options.get_safe("skyhook", False):
-            raise ConanInvalidConfiguration("CCI has no librados recipe (yet)")
-        if self.options.with_jemalloc == False and self._with_jemalloc(True):
-            raise ConanInvalidConfiguration("with_jemalloc option is required 
(or choose auto)")
-        if self.options.with_re2 == False and self._with_re2(True):
-            raise ConanInvalidConfiguration("with_re2 option is required (or 
choose auto)")
-        if self.options.with_protobuf == False and self._with_protobuf(True):
-            raise ConanInvalidConfiguration("with_protobuf option is required 
(or choose auto)")
-        if self.options.with_gflags == False and self._with_gflags(True):
-            raise ConanInvalidConfiguration("with_gflags options is required 
(or choose auto)")
-        if self.options.with_flight_rpc == False and 
self._with_flight_rpc(True):
-            raise ConanInvalidConfiguration("with_flight_rpc options is 
required (or choose auto)")
-        if self.options.with_grpc == False and self._with_grpc(True):
-            raise ConanInvalidConfiguration("with_grpc options is required (or 
choose auto)")
-        if self.options.with_boost == False and self._with_boost(True):
-            raise ConanInvalidConfiguration("with_boost options is required 
(or choose auto)")
-        if self.options.with_openssl == False and self._with_openssl(True):
-            raise ConanInvalidConfiguration("with_openssl options is required 
(or choose auto)")
-        if self.options.with_llvm == False and self._with_llvm(True):
-            raise ConanInvalidConfiguration("with_llvm options is required (or 
choose auto)")
-        if self.options.with_cuda:
-            raise ConanInvalidConfiguration("CCI has no cuda recipe (yet)")
-        if self.options.with_orc:
-            raise ConanInvalidConfiguration("CCI has no orc recipe (yet)")
-        if self.options.with_s3 and not self.options["aws-sdk-cpp"].config:
-            raise ConanInvalidConfiguration("arrow:with_s3 requires 
aws-sdk-cpp:config is True.")
-
-        if self.options.shared and self._with_jemalloc():
-            if self.options["jemalloc"].enable_cxx:
-                raise ConanInvalidConfiguration("jemmalloc.enable_cxx of a 
static jemalloc must be disabled")
-
-        if Version(self.version) < "6.0.0" and 
self.options.get_safe("simd_level") == "default":
-            raise ConanInvalidConfiguration(f"In {self.ref}, simd_level 
options is not supported `default` value.")
-
     def layout(self):
         cmake_layout(self, src_folder="src")
 
-    def _compute(self, required=False):
-        if required or self.options.compute == "auto":
-            return bool(self._parquet()) or bool(self._acero())
-        else:
-            return bool(self.options.compute)
-
-    def _acero(self, required=False):
-        if required or self.options.acero == "auto":
-            return bool(self._dataset_modules())
-        else:
-            return bool(self.options.acero)
-
-    def _parquet(self, required=False):
-        if required or self.options.parquet == "auto":
-            return bool(self.options.get_safe("substrait", False))
-        else:
-            return bool(self.options.parquet)
-
-    def _plasma(self, required=False):
-        if Version(self.version) >= "12.0.0":
-            return False
-        else:
-            return required or self.options.plasma
-
-    def _dataset_modules(self, required=False):
-        if required or self.options.dataset_modules == "auto":
-            return bool(self.options.get_safe("substrait", False))
-        else:
-            return bool(self.options.dataset_modules)
-
-    def _with_jemalloc(self, required=False):
-        if required or self.options.with_jemalloc == "auto":
-            return bool("BSD" in str(self.settings.os))
-        else:
-            return bool(self.options.with_jemalloc)
-
-    def _with_re2(self, required=False):
-        if required or self.options.with_re2 == "auto":
-            if self.options.gandiva or self.options.parquet:
-                return True
-            if Version(self) >= "7.0.0" and (self._compute() or 
self._dataset_modules()):
-                return True
-            return False
-        else:
-            return bool(self.options.with_re2)
-
-    def _with_protobuf(self, required=False):
-        if required or self.options.with_protobuf == "auto":
-            return bool(self.options.gandiva or self._with_flight_rpc() or 
self.options.with_orc or self.options.get_safe("substrait", False))
-        else:
-            return bool(self.options.with_protobuf)
-
-    def _with_flight_rpc(self, required=False):
-        if required or self.options.with_flight_rpc == "auto":
-            return bool(self.options.get_safe("with_flight_sql", False))
-        else:
-            return bool(self.options.with_flight_rpc)
-
-    def _with_gflags(self, required=False):
-        if required or self.options.with_gflags == "auto":
-            return bool(self._plasma() or self._with_glog() or 
self._with_grpc())
-        else:
-            return bool(self.options.with_gflags)
-
-    def _with_glog(self, required=False):
-        if required or self.options.with_glog == "auto":
-            return False
-        else:
-            return bool(self.options.with_glog)
-
-    def _with_grpc(self, required=False):
-        if required or self.options.with_grpc == "auto":
-            return self._with_flight_rpc()
-        else:
-            return bool(self.options.with_grpc)
-
-    def _with_boost(self, required=False):
-        if required or self.options.with_boost == "auto":
-            if self.options.gandiva:
-                return True
-            version = Version(self.version)
-            if version.major == "1":
-                if self._parquet() and self.settings.compiler == "gcc" and 
self.settings.compiler.version < Version("4.9"):
-                    return True
-            elif version.major >= "2":
-                if is_msvc(self):
-                    return True
-            return False
-        else:
-            return bool(self.options.with_boost)
-
-    def _with_thrift(self, required=False):
-        # No self.options.with_thrift exists
-        return bool(required or self._parquet())
-
-    def _with_utf8proc(self, required=False):
-        if required or self.options.with_utf8proc == "auto":
-            return bool(self._compute() or self.options.gandiva)
-        else:
-            return bool(self.options.with_utf8proc)
-
-    def _with_llvm(self, required=False):
-        if required or self.options.with_llvm == "auto":
-            return bool(self.options.gandiva)
-        else:
-            return bool(self.options.with_llvm)
-
-    def _with_openssl(self, required=False):
-        if required or self.options.with_openssl == "auto":
-            return bool(self.options.encryption or self._with_flight_rpc() or 
self.options.with_s3)
-        else:
-            return bool(self.options.with_openssl)
-
-    def _with_rapidjson(self):
-        if self.options.with_json:
-            return True
-        if Version(self.version) >= "7.0.0" and self.options.encryption:
-            return True
-        return False
+    def _requires_rapidjson(self):
+        return self.options.with_json or self.options.encryption
 
     def requirements(self):
-        if self._with_thrift():
-            self.requires("zlib/1.2.13")
+        if self.options.with_thrift:
             self.requires("thrift/0.17.0")
-        if self._with_protobuf():
-            self.requires("protobuf/3.21.4")
-        if self._with_jemalloc():
+        if self.options.with_protobuf:
+            self.requires("protobuf/3.21.9")
+        if self.options.with_jemalloc:
             self.requires("jemalloc/5.3.0")
         if self.options.with_mimalloc:
             self.requires("mimalloc/1.7.6")
-        if self._with_boost():
-            self.requires("boost/1.80.0")
-        if self._with_gflags():
+        if self.options.with_boost:
+            self.requires("boost/1.84.0")
+        if self.options.with_gflags:
             self.requires("gflags/2.2.2")
-        if self._with_glog():
+        if self.options.with_glog:
             self.requires("glog/0.6.0")
         if self.options.get_safe("with_gcs"):
             self.requires("google-cloud-cpp/1.40.1")
-        if self._with_grpc():
+        if self.options.with_grpc:
             self.requires("grpc/1.50.0")
-        if self._with_rapidjson():
+        if self._requires_rapidjson():
             self.requires("rapidjson/1.1.0")
-        if self._with_llvm():
+        if self.options.with_llvm:
             self.requires("llvm-core/13.0.0")
-        if self._with_openssl():
+        if self.options.with_openssl:
             # aws-sdk-cpp requires openssl/1.1.1. it uses deprecated functions 
in openssl/3.0.0
             if self.options.with_s3:
-                self.requires("openssl/1.1.1s")
+                self.requires("openssl/1.1.1w")
             else:
-                self.requires("openssl/1.1.1s")
+                self.requires("openssl/[>=1.1 <4]")
         if self.options.get_safe("with_opentelemetry"):
             self.requires("opentelemetry-cpp/1.7.0")
         if self.options.with_s3:
             self.requires("aws-sdk-cpp/1.9.234")
         if self.options.with_brotli:
-            self.requires("brotli/1.0.9")
+            self.requires("brotli/1.1.0")
         if self.options.with_bz2:
             self.requires("bzip2/1.0.8")
         if self.options.with_lz4:
             self.requires("lz4/1.9.4")
         if self.options.with_snappy:
             self.requires("snappy/1.1.9")
-        if Version(self.version) >= "6.0.0" and \
-            self.options.get_safe("simd_level") != None or \
+        if self.options.get_safe("simd_level") != None or \
             self.options.get_safe("runtime_simd_level") != None:
             self.requires("xsimd/9.0.1")
         if self.options.with_zlib:
-            self.requires("zlib/1.2.13")
+            self.requires("zlib/[>=1.2.11 <2]")
         if self.options.with_zstd:
-            self.requires("zstd/1.5.2")
-        if self._with_re2():
-            self.requires("re2/20220601")
-        if self._with_utf8proc():
+            self.requires("zstd/1.5.5")
+        if self.options.with_re2:
+            self.requires("re2/20230301")
+        if self.options.with_utf8proc:
             self.requires("utf8proc/2.8.0")
         if self.options.with_backtrace:
             self.requires("libbacktrace/cci.20210118")
 
+    def validate(self):
+        # Do not allow options with 'auto' value
+        # TODO: Remove "auto" from the possible values for these options
+        auto_options = [option for option, value in self.options.items() if 
value == "auto"]
+        if auto_options:
+            raise ConanException("Options with value 'auto' are deprecated. 
Please set them true/false or use its default value."
+                                 f" Please change the following options: 
{auto_options}")
+
+        # From 
https://github.com/conan-io/conan-center-index/pull/23163#issuecomment-2039808851
+        if self.options.gandiva:
+            if not self.options.with_re2:
+                raise ConanException("'with_re2' option should be True 
when'gandiva=True'")
+            if not self.options.with_boost:
+                raise ConanException("'with_boost' option should be True 
when'gandiva=True'")
+            if not self.options.with_utf8proc:
+                raise ConanException("'with_utf8proc' option should be True 
when'gandiva=True'")
+
+        if self.settings.compiler.get_safe("cppstd"):
+            check_min_cppstd(self, self._min_cppstd)
+
+        minimum_version = 
self._compilers_minimum_version.get(str(self.settings.compiler), False)
+        if minimum_version and Version(self.settings.compiler.version) < 
minimum_version:
+            raise ConanInvalidConfiguration(
+                f"{self.ref} requires C++{self._min_cppstd}, which your 
compiler does not support."
+            )
+
+        if self.options.get_safe("skyhook", False):
+            raise ConanInvalidConfiguration("CCI has no librados recipe (yet)")
+        if self.options.with_cuda:
+            raise ConanInvalidConfiguration("CCI has no cuda recipe (yet)")
+        if self.options.with_orc:
+            raise ConanInvalidConfiguration("CCI has no orc recipe (yet)")
+        if self.options.with_s3 and not 
self.dependencies["aws-sdk-cpp"].options.config:
+            raise ConanInvalidConfiguration("arrow:with_s3 requires 
aws-sdk-cpp:config is True.")
+
+        if self.options.shared and self.options.with_jemalloc:
+            if self.dependencies["jemalloc"].options.enable_cxx:
+                raise ConanInvalidConfiguration("jemmalloc.enable_cxx of a 
static jemalloc must be disabled")
+
+
+    def build_requirements(self):
+        if Version(self.version) >= "13.0.0":
+            self.tool_requires("cmake/[>=3.16 <4]")
+
     def source(self):
         # START
         # This block should be removed when we update upstream:
@@ -435,17 +302,15 @@ class ArrowConan(ConanFile):
             return
         # END
         get(self, **self.conan_data["sources"][self.version],
-                  filename=f"apache-arrow-{self.version}.tar.gz", 
destination=self.source_folder, strip_root=True)
+            filename=f"apache-arrow-{self.version}.tar.gz", strip_root=True)
 
     def generate(self):
-        # BUILD_SHARED_LIBS and POSITION_INDEPENDENT_CODE are automatically 
parsed when self.options.shared or self.options.fPIC exist
         tc = CMakeToolchain(self)
         if cross_building(self):
             cmake_system_processor = {
                 "armv8": "aarch64",
                 "armv8.3": "aarch64",
             }.get(str(self.settings.arch), str(self.settings.arch))
-            tc.variables["CMAKE_SYSTEM_PROCESSOR"] = cmake_system_processor
             if cmake_system_processor == "aarch64":
                 tc.variables["ARROW_CPU_FLAG"] = "armv8"
         if is_msvc(self):
@@ -453,12 +318,10 @@ class ArrowConan(ConanFile):
         tc.variables["ARROW_DEPENDENCY_SOURCE"] = "SYSTEM"
         tc.variables["ARROW_PACKAGE_KIND"] = "conan" # See 
https://github.com/conan-io/conan-center-index/pull/14903/files#r1057938314 for 
details
         tc.variables["ARROW_GANDIVA"] = bool(self.options.gandiva)
-        tc.variables["ARROW_PARQUET"] = self._parquet()
+        tc.variables["ARROW_PARQUET"] = self.options.parquet
         tc.variables["ARROW_SUBSTRAIT"] = 
bool(self.options.get_safe("substrait", False))
-        if Version(self.version) < "12.0.0":
-            tc.variables["ARROW_PLASMA"] = bool(self._plasma())
-        tc.variables["ARROW_ACERO"] = self._acero()
-        tc.variables["ARROW_DATASET"] = self._dataset_modules()
+        tc.variables["ARROW_ACERO"] = bool(self.options.acero)
+        tc.variables["ARROW_DATASET"] = self.options.dataset_modules
         tc.variables["ARROW_FILESYSTEM"] = bool(self.options.filesystem_layer)
         tc.variables["PARQUET_REQUIRE_ENCRYPTION"] = 
bool(self.options.encryption)
         tc.variables["ARROW_HDFS"] = bool(self.options.hdfs_bridgs)
@@ -466,12 +329,12 @@ class ArrowConan(ConanFile):
         tc.variables["ARROW_BUILD_SHARED"] = bool(self.options.shared)
         tc.variables["ARROW_BUILD_STATIC"] = not bool(self.options.shared)
         tc.variables["ARROW_NO_DEPRECATED_API"] = not 
bool(self.options.deprecated)
-        tc.variables["ARROW_FLIGHT"] = self._with_flight_rpc()
+        tc.variables["ARROW_FLIGHT"] = self.options.with_flight_rpc
         tc.variables["ARROW_FLIGHT_SQL"] = 
bool(self.options.get_safe("with_flight_sql", False))
-        tc.variables["ARROW_COMPUTE"] = self._compute()
+        tc.variables["ARROW_COMPUTE"] = bool(self.options.compute)
         tc.variables["ARROW_CSV"] = bool(self.options.with_csv)
         tc.variables["ARROW_CUDA"] = bool(self.options.with_cuda)
-        tc.variables["ARROW_JEMALLOC"] = self._with_jemalloc()
+        tc.variables["ARROW_JEMALLOC"] = self.options.with_jemalloc
         tc.variables["jemalloc_SOURCE"] = "SYSTEM"
         tc.variables["ARROW_MIMALLOC"] = bool(self.options.with_mimalloc)
         tc.variables["ARROW_JSON"] = bool(self.options.with_json)
@@ -479,61 +342,58 @@ class ArrowConan(ConanFile):
         tc.variables["ARROW_GCS"] = bool(self.options.get_safe("with_gcs", 
False))
         tc.variables["BOOST_SOURCE"] = "SYSTEM"
         tc.variables["Protobuf_SOURCE"] = "SYSTEM"
-        if self._with_protobuf():
-            tc.variables["ARROW_PROTOBUF_USE_SHARED"] = 
bool(self.options["protobuf"].shared)
+        if self.options.with_protobuf:
+            tc.variables["ARROW_PROTOBUF_USE_SHARED"] = 
bool(self.dependencies["protobuf"].options.shared)
         tc.variables["gRPC_SOURCE"] = "SYSTEM"
-        if self._with_grpc():
-            tc.variables["ARROW_GRPC_USE_SHARED"] = 
bool(self.options["grpc"].shared)
+        if self.options.with_grpc:
+            tc.variables["ARROW_GRPC_USE_SHARED"] = 
bool(self.dependencies["grpc"].options.shared)
 
-        tc.variables["ARROW_USE_GLOG"] = self._with_glog()
+        tc.variables["ARROW_USE_GLOG"] = self.options.with_glog
         tc.variables["GLOG_SOURCE"] = "SYSTEM"
         tc.variables["ARROW_WITH_BACKTRACE"] = 
bool(self.options.with_backtrace)
         tc.variables["ARROW_WITH_BROTLI"] = bool(self.options.with_brotli)
         tc.variables["brotli_SOURCE"] = "SYSTEM"
         if self.options.with_brotli:
-            tc.variables["ARROW_BROTLI_USE_SHARED"] = 
bool(self.options["brotli"].shared)
+            tc.variables["ARROW_BROTLI_USE_SHARED"] = 
bool(self.dependencies["brotli"].options.shared)
         tc.variables["gflags_SOURCE"] = "SYSTEM"
-        if self._with_gflags():
-            tc.variables["ARROW_GFLAGS_USE_SHARED"] = 
bool(self.options["gflags"].shared)
+        if self.options.with_gflags:
+            tc.variables["ARROW_GFLAGS_USE_SHARED"] = 
bool(self.dependencies["gflags"].options.shared)
         tc.variables["ARROW_WITH_BZ2"] = bool(self.options.with_bz2)
         tc.variables["BZip2_SOURCE"] = "SYSTEM"
         if self.options.with_bz2:
-            tc.variables["ARROW_BZ2_USE_SHARED"] = 
bool(self.options["bzip2"].shared)
+            tc.variables["ARROW_BZ2_USE_SHARED"] = 
bool(self.dependencies["bzip2"].options.shared)
         tc.variables["ARROW_WITH_LZ4"] = bool(self.options.with_lz4)
         tc.variables["lz4_SOURCE"] = "SYSTEM"
         if self.options.with_lz4:
-            tc.variables["ARROW_LZ4_USE_SHARED"] = 
bool(self.options["lz4"].shared)
+            tc.variables["ARROW_LZ4_USE_SHARED"] = 
bool(self.dependencies["lz4"].options.shared)
         tc.variables["ARROW_WITH_SNAPPY"] = bool(self.options.with_snappy)
         tc.variables["RapidJSON_SOURCE"] = "SYSTEM"
         tc.variables["Snappy_SOURCE"] = "SYSTEM"
         if self.options.with_snappy:
-            tc.variables["ARROW_SNAPPY_USE_SHARED"] = 
bool(self.options["snappy"].shared)
+            tc.variables["ARROW_SNAPPY_USE_SHARED"] = 
bool(self.dependencies["snappy"].options.shared)
         tc.variables["ARROW_WITH_ZLIB"] = bool(self.options.with_zlib)
         tc.variables["re2_SOURCE"] = "SYSTEM"
         tc.variables["ZLIB_SOURCE"] = "SYSTEM"
         tc.variables["xsimd_SOURCE"] = "SYSTEM"
         tc.variables["ARROW_WITH_ZSTD"] = bool(self.options.with_zstd)
-        if Version(self.version) >= "2.0":
-            tc.variables["zstd_SOURCE"] = "SYSTEM"
-            tc.variables["ARROW_SIMD_LEVEL"] = 
str(self.options.simd_level).upper()
-            tc.variables["ARROW_RUNTIME_SIMD_LEVEL"] = 
str(self.options.runtime_simd_level).upper()
-        else:
-            tc.variables["ZSTD_SOURCE"] = "SYSTEM"
+        tc.variables["zstd_SOURCE"] = "SYSTEM"
+        tc.variables["ARROW_SIMD_LEVEL"] = str(self.options.simd_level).upper()
+        tc.variables["ARROW_RUNTIME_SIMD_LEVEL"] = 
str(self.options.runtime_simd_level).upper()
         if self.options.with_zstd:
-            tc.variables["ARROW_ZSTD_USE_SHARED"] = 
bool(self.options["zstd"].shared)
+            tc.variables["ARROW_ZSTD_USE_SHARED"] = 
bool(self.dependencies["zstd"].options.shared)
         tc.variables["ORC_SOURCE"] = "SYSTEM"
-        tc.variables["ARROW_WITH_THRIFT"] = self._with_thrift()
+        tc.variables["ARROW_WITH_THRIFT"] = bool(self.options.with_thrift)
         tc.variables["Thrift_SOURCE"] = "SYSTEM"
-        if self._with_thrift():
-            tc.variables["THRIFT_VERSION"] = 
bool(self.deps_cpp_info["thrift"].version) # a recent thrift does not require 
boost
-            tc.variables["ARROW_THRIFT_USE_SHARED"] = 
bool(self.options["thrift"].shared)
-        tc.variables["ARROW_USE_OPENSSL"] = self._with_openssl()
-        if self._with_openssl():
-            tc.variables["OPENSSL_ROOT_DIR"] = 
self.deps_cpp_info["openssl"].rootpath.replace("\\", "/")
-            tc.variables["ARROW_OPENSSL_USE_SHARED"] = 
bool(self.options["openssl"].shared)
-        if self._with_boost():
+        if self.options.with_thrift:
+            tc.variables["THRIFT_VERSION"] = 
bool(self.dependencies["thrift"].ref.version) # a recent thrift does not 
require boost
+            tc.variables["ARROW_THRIFT_USE_SHARED"] = 
bool(self.dependencies["thrift"].options.shared)
+        tc.variables["ARROW_USE_OPENSSL"] = self.options.with_openssl
+        if self.options.with_openssl:
+            tc.variables["OPENSSL_ROOT_DIR"] = 
self.dependencies["openssl"].package_folder.replace("\\", "/")
+            tc.variables["ARROW_OPENSSL_USE_SHARED"] = 
bool(self.dependencies["openssl"].options.shared)
+        if self.options.with_boost:
             tc.variables["ARROW_USE_BOOST"] = True
-            tc.variables["ARROW_BOOST_USE_SHARED"] = 
bool(self.options["boost"].shared)
+            tc.variables["ARROW_BOOST_USE_SHARED"] = 
bool(self.dependencies["boost"].options.shared)
         tc.variables["ARROW_S3"] = bool(self.options.with_s3)
         tc.variables["AWSSDK_SOURCE"] = "SYSTEM"
         tc.variables["ARROW_BUILD_UTILITIES"] = bool(self.options.cli)
@@ -544,16 +404,18 @@ class ArrowConan(ConanFile):
         tc.variables["ARROW_ENABLE_TIMING_TESTS"] = False
         tc.variables["ARROW_BUILD_BENCHMARKS"] = False
         tc.variables["LLVM_SOURCE"] = "SYSTEM"
-        tc.variables["ARROW_WITH_UTF8PROC"] = self._with_utf8proc()
-        tc.variables["ARROW_BOOST_REQUIRED"] = self._with_boost()
+        tc.variables["ARROW_WITH_UTF8PROC"] = self.options.with_utf8proc
+        tc.variables["ARROW_BOOST_REQUIRED"] = self.options.with_boost
         tc.variables["utf8proc_SOURCE"] = "SYSTEM"
-        if self._with_utf8proc():
-            tc.variables["ARROW_UTF8PROC_USE_SHARED"] = 
bool(self.options["utf8proc"].shared)
+        if self.options.with_utf8proc:
+            tc.variables["ARROW_UTF8PROC_USE_SHARED"] = 
bool(self.dependencies["utf8proc"].options.shared)
         tc.variables["BUILD_WARNING_LEVEL"] = "PRODUCTION"
         if is_msvc(self):
-            tc.variables["ARROW_USE_STATIC_CRT"] = "MT" in 
str(self.settings.compiler.runtime)
-        if self._with_llvm():
-            tc.variables["LLVM_DIR"] = 
self.deps_cpp_info["llvm-core"].rootpath.replace("\\", "/")
+            tc.variables["ARROW_USE_STATIC_CRT"] = is_msvc_static_runtime(self)
+        if self.options.with_llvm:
+            tc.variables["LLVM_DIR"] = 
self.dependencies["llvm-core"].package_folder.replace("\\", "/")
+
+        tc.cache_variables["CMAKE_PROJECT_arrow_INCLUDE"] = 
os.path.join(self.source_folder, "conan_cmake_project_include.cmake")
         tc.generate()
 
         deps = CMakeDeps(self)
@@ -561,10 +423,11 @@ class ArrowConan(ConanFile):
 
     def _patch_sources(self):
         apply_conandata_patches(self)
-        if "7.0.0" <= Version(self.version) < "10.0.0":
+        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",
@@ -576,7 +439,6 @@ class ArrowConan(ConanFile):
                     "FindArrowTesting.cmake",
                     "FindGandiva.cmake",
                     "FindParquet.cmake",
-                    "FindPlasma.cmake",
                 ]:
                     os.remove(filename)
 
@@ -596,129 +458,106 @@ class ArrowConan(ConanFile):
         rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
         rmdir(self, os.path.join(self.package_folder, "share"))
 
-    def _lib_name(self, name):
-        if is_msvc(self) and not self.options.shared:
-            return "{}_static".format(name)
-        else:
-            return "{}".format(name)
-
-    def package_id(self):
-        self.info.options.with_gflags = self._with_gflags()
-        self.info.options.with_protobuf = self._with_protobuf()
-        self.info.options.with_re2 = self._with_re2()
-        self.info.options.with_jemalloc = self._with_jemalloc()
-        self.info.options.with_openssl = self._with_openssl()
-        self.info.options.with_boost = self._with_boost()
-        self.info.options.with_glog = self._with_glog()
-        self.info.options.with_grpc = self._with_grpc()
-
     def package_info(self):
-        self.cpp_info.filenames["cmake_find_package"] = "Arrow"
-        self.cpp_info.filenames["cmake_find_package_multi"] = "Arrow"
-        self.cpp_info.components["libarrow"].libs = [self._lib_name("arrow")]
-        self.cpp_info.components["libarrow"].names["cmake_find_package"] = 
"arrow"
-        self.cpp_info.components["libarrow"].names["cmake_find_package_multi"] 
= "arrow"
-        self.cpp_info.components["libarrow"].names["pkg_config"] = "arrow"
+        # FIXME: fix CMake targets of components
+
+        self.cpp_info.set_property("cmake_file_name", "Arrow")
+
+        suffix = "_static" if is_msvc(self) and not self.options.shared else ""
+
+        self.cpp_info.components["libarrow"].set_property("pkg_config_name", 
"arrow")
+        self.cpp_info.components["libarrow"].libs = [f"arrow{suffix}"]
         if not self.options.shared:
             self.cpp_info.components["libarrow"].defines = ["ARROW_STATIC"]
             if self.settings.os in ["Linux", "FreeBSD"]:
                 self.cpp_info.components["libarrow"].system_libs = ["pthread", 
"m", "dl", "rt"]
 
-        if self._parquet():
-            self.cpp_info.components["libparquet"].libs = 
[self._lib_name("parquet")]
-            self.cpp_info.components["libparquet"].names["cmake_find_package"] 
= "parquet"
-            
self.cpp_info.components["libparquet"].names["cmake_find_package_multi"] = 
"parquet"
-            self.cpp_info.components["libparquet"].names["pkg_config"] = 
"parquet"
+        if self.options.parquet:
+            
self.cpp_info.components["libparquet"].set_property("pkg_config_name", 
"parquet")
+            self.cpp_info.components["libparquet"].libs = [f"parquet{suffix}"]
             self.cpp_info.components["libparquet"].requires = ["libarrow"]
             if not self.options.shared:
                 self.cpp_info.components["libparquet"].defines = 
["PARQUET_STATIC"]
 
-        if self.options.get_safe("substrait", False):
-            self.cpp_info.components["libarrow_substrait"].libs = 
[self._lib_name("arrow_substrait")]
-            
self.cpp_info.components["libarrow_substrait"].names["cmake_find_package"] = 
"arrow_substrait"
-            
self.cpp_info.components["libarrow_substrait"].names["cmake_find_package_multi"]
 = "arrow_substrait"
-            self.cpp_info.components["libarrow_substrait"].names["pkg_config"] 
= "arrow_substrait"
-            self.cpp_info.components["libarrow_substrait"].requires = 
["libparquet", "dataset", "acero"]
+        if self.options.get_safe("substrait"):
+            
self.cpp_info.components["libarrow_substrait"].set_property("pkg_config_name", 
"arrow_substrait")
+            self.cpp_info.components["libarrow_substrait"].libs = 
[f"arrow_substrait{suffix}"]
+            self.cpp_info.components["libarrow_substrait"].requires = 
["libparquet", "dataset"]
+
+        # Plasma was deprecated in Arrow 12.0.0
+        del self.options.plasma
 
-        if self._plasma():
-            self.cpp_info.components["libplasma"].libs = 
[self._lib_name("plasma")]
-            self.cpp_info.components["libplasma"].names["cmake_find_package"] 
= "plasma"
-            
self.cpp_info.components["libplasma"].names["cmake_find_package_multi"] = 
"plasma"
-            self.cpp_info.components["libplasma"].names["pkg_config"] = 
"plasma"
-            self.cpp_info.components["libplasma"].requires = ["libarrow"]
+        if self.options.acero:
+            self.cpp_info.components["libacero"].libs = 
[f"arrow_acero{suffix}"]
+            self.cpp_info.components["libacero"].names["cmake_find_package"] = 
"acero"
+            
self.cpp_info.components["libacero"].names["cmake_find_package_multi"] = "acero"
+            self.cpp_info.components["libacero"].names["pkg_config"] = "acero"
+            self.cpp_info.components["libacero"].requires = ["libarrow"]
 
         if self.options.gandiva:
-            self.cpp_info.components["libgandiva"].libs = 
[self._lib_name("gandiva")]
-            self.cpp_info.components["libgandiva"].names["cmake_find_package"] 
= "gandiva"
-            
self.cpp_info.components["libgandiva"].names["cmake_find_package_multi"] = 
"gandiva"
-            self.cpp_info.components["libgandiva"].names["pkg_config"] = 
"gandiva"
+            
self.cpp_info.components["libgandiva"].set_property("pkg_config_name", 
"gandiva")
+            self.cpp_info.components["libgandiva"].libs = [f"gandiva{suffix}"]
             self.cpp_info.components["libgandiva"].requires = ["libarrow"]
             if not self.options.shared:
                 self.cpp_info.components["libgandiva"].defines = 
["GANDIVA_STATIC"]
 
-        if self._with_flight_rpc():
-            self.cpp_info.components["libarrow_flight"].libs = 
[self._lib_name("arrow_flight")]
-            
self.cpp_info.components["libarrow_flight"].names["cmake_find_package"] = 
"flight_rpc"
-            
self.cpp_info.components["libarrow_flight"].names["cmake_find_package_multi"] = 
"flight_rpc"
-            self.cpp_info.components["libarrow_flight"].names["pkg_config"] = 
"flight_rpc"
+        if self.options.with_flight_rpc:
+            
self.cpp_info.components["libarrow_flight"].set_property("pkg_config_name", 
"flight_rpc")
+            self.cpp_info.components["libarrow_flight"].libs = 
[f"arrow_flight{suffix}"]
             self.cpp_info.components["libarrow_flight"].requires = ["libarrow"]
 
         if self.options.get_safe("with_flight_sql"):
-            self.cpp_info.components["libarrow_flight_sql"].libs = 
[self._lib_name("arrow_flight_sql")]
-            
self.cpp_info.components["libarrow_flight_sql"].names["cmake_find_package"] = 
"flight_sql"
-            
self.cpp_info.components["libarrow_flight_sql"].names["cmake_find_package_multi"]
 = "flight_sql"
-            
self.cpp_info.components["libarrow_flight_sql"].names["pkg_config"] = 
"flight_sql"
+            
self.cpp_info.components["libarrow_flight_sql"].set_property("pkg_config_name", 
"flight_sql")
+            self.cpp_info.components["libarrow_flight_sql"].libs = 
[f"arrow_flight_sql{suffix}"]
             self.cpp_info.components["libarrow_flight_sql"].requires = 
["libarrow", "libarrow_flight"]
 
-        if self._acero():
-            self.cpp_info.components["acero"].libs = ["arrow_acero"]
-
-        if self._dataset_modules():
+        if self.options.dataset_modules:
             self.cpp_info.components["dataset"].libs = ["arrow_dataset"]
+            if self.options.parquet:
+                self.cpp_info.components["dataset"].requires = ["libparquet"]
 
-        if (self.options.cli and (self.options.with_cuda or 
self._with_flight_rpc() or self._parquet())) or self._plasma():
+        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")
             self.output.info(f"Appending PATH env var: {binpath}")
             self.env_info.PATH.append(binpath)
 
-        if self._with_boost():
+        if self.options.with_boost:
             if self.options.gandiva:
                 # FIXME: only filesystem component is used
                 
self.cpp_info.components["libgandiva"].requires.append("boost::boost")
-            if self._parquet() and self.settings.compiler == "gcc" and 
self.settings.compiler.version < Version("4.9"):
+            if self.options.parquet and self.settings.compiler == "gcc" and 
self.settings.compiler.version < Version("4.9"):
                 
self.cpp_info.components["libparquet"].requires.append("boost::boost")
-            if Version(self.version) >= "2.0":
-                # FIXME: only headers components is used
-                
self.cpp_info.components["libarrow"].requires.append("boost::boost")
-        if self._with_openssl():
+            # FIXME: only headers components is used
+            
self.cpp_info.components["libarrow"].requires.append("boost::boost")
+        if self.options.with_openssl:
             
self.cpp_info.components["libarrow"].requires.append("openssl::openssl")
-        if self._with_gflags():
+        if self.options.with_gflags:
             
self.cpp_info.components["libarrow"].requires.append("gflags::gflags")
-        if self._with_glog():
+        if self.options.with_glog:
             self.cpp_info.components["libarrow"].requires.append("glog::glog")
-        if self._with_jemalloc():
+        if self.options.with_jemalloc:
             
self.cpp_info.components["libarrow"].requires.append("jemalloc::jemalloc")
         if self.options.with_mimalloc:
             
self.cpp_info.components["libarrow"].requires.append("mimalloc::mimalloc")
-        if self._with_re2():
+        if self.options.with_re2:
             if self.options.gandiva:
                 
self.cpp_info.components["libgandiva"].requires.append("re2::re2")
-            if self._parquet():
+            if self.options.parquet:
                 
self.cpp_info.components["libparquet"].requires.append("re2::re2")
             self.cpp_info.components["libarrow"].requires.append("re2::re2")
-        if self._with_llvm():
+        if self.options.with_llvm:
             
self.cpp_info.components["libgandiva"].requires.append("llvm-core::llvm-core")
-        if self._with_protobuf():
+        if self.options.with_protobuf:
             
self.cpp_info.components["libarrow"].requires.append("protobuf::protobuf")
-        if self._with_utf8proc():
+        if self.options.with_utf8proc:
             
self.cpp_info.components["libarrow"].requires.append("utf8proc::utf8proc")
-        if self._with_thrift():
+        if self.options.with_thrift:
             
self.cpp_info.components["libarrow"].requires.append("thrift::thrift")
         if self.options.with_backtrace:
             
self.cpp_info.components["libarrow"].requires.append("libbacktrace::libbacktrace")
         if self.options.with_cuda:
             self.cpp_info.components["libarrow"].requires.append("cuda::cuda")
-        if self._with_rapidjson():
+        if self._requires_rapidjson():
             
self.cpp_info.components["libarrow"].requires.append("rapidjson::rapidjson")
         if self.options.with_s3:
             
self.cpp_info.components["libarrow"].requires.append("aws-sdk-cpp::s3")
@@ -742,9 +581,32 @@ class ArrowConan(ConanFile):
             self.cpp_info.components["libarrow"].requires.append("zlib::zlib")
         if self.options.with_zstd:
             self.cpp_info.components["libarrow"].requires.append("zstd::zstd")
-        if self._with_boost():
+        if self.options.with_boost:
             
self.cpp_info.components["libarrow"].requires.append("boost::boost")
-        if self._with_grpc():
+        if self.options.with_grpc:
             self.cpp_info.components["libarrow"].requires.append("grpc::grpc")
-        if self._with_flight_rpc():
+        if self.options.with_flight_rpc:
             
self.cpp_info.components["libarrow_flight"].requires.append("protobuf::protobuf")
+
+        # TODO: to remove in conan v2
+        self.cpp_info.filenames["cmake_find_package"] = "Arrow"
+        self.cpp_info.filenames["cmake_find_package_multi"] = "Arrow"
+        self.cpp_info.components["libarrow"].names["cmake_find_package"] = 
"arrow"
+        self.cpp_info.components["libarrow"].names["cmake_find_package_multi"] 
= "arrow"
+        if self.options.parquet:
+            self.cpp_info.components["libparquet"].names["cmake_find_package"] 
= "parquet"
+            
self.cpp_info.components["libparquet"].names["cmake_find_package_multi"] = 
"parquet"
+        if self.options.get_safe("substrait"):
+            
self.cpp_info.components["libarrow_substrait"].names["cmake_find_package"] = 
"arrow_substrait"
+            
self.cpp_info.components["libarrow_substrait"].names["cmake_find_package_multi"]
 = "arrow_substrait"
+        if self.options.gandiva:
+            self.cpp_info.components["libgandiva"].names["cmake_find_package"] 
= "gandiva"
+            
self.cpp_info.components["libgandiva"].names["cmake_find_package_multi"] = 
"gandiva"
+        if self.options.with_flight_rpc:
+            
self.cpp_info.components["libarrow_flight"].names["cmake_find_package"] = 
"flight_rpc"
+            
self.cpp_info.components["libarrow_flight"].names["cmake_find_package_multi"] = 
"flight_rpc"
+        if self.options.get_safe("with_flight_sql"):
+            
self.cpp_info.components["libarrow_flight_sql"].names["cmake_find_package"] = 
"flight_sql"
+            
self.cpp_info.components["libarrow_flight_sql"].names["cmake_find_package_multi"]
 = "flight_sql"
+        if self.options.cli and (self.options.with_cuda or 
self.options.with_flight_rpc or self.options.parquet):
+            self.env_info.PATH.append(os.path.join(self.package_folder, "bin"))
diff --git a/ci/conan/config.yml b/ci/conan/config.yml
index be333447f3..3fa90be6f6 100644
--- a/ci/conan/config.yml
+++ b/ci/conan/config.yml
@@ -21,6 +21,22 @@
 # SOFTWARE.
 
 versions:
+  "15.0.0":
+    folder: all
+  "14.0.2":
+    folder: all
+  "14.0.1":
+    folder: all
+  "14.0.0":
+    folder: all
+  "13.0.0":
+    folder: all
+  "12.0.1":
+    folder: all
+  "12.0.0":
+    folder: all
+  "11.0.0":
+    folder: all
   "10.0.1":
     folder: all
   "10.0.0":
@@ -31,7 +47,3 @@ versions:
     folder: all
   "7.0.0":
     folder: all
-  "2.0.0":
-    folder: all
-  "1.0.0":
-    folder: all
diff --git a/ci/scripts/conan_build.sh b/ci/scripts/conan_build.sh
index b1ee0a8fc2..0ea3fc2919 100755
--- a/ci/scripts/conan_build.sh
+++ b/ci/scripts/conan_build.sh
@@ -30,34 +30,39 @@ export CONAN_HOOK_ERROR_LEVEL=40
 conan_args=()
 conan_args+=(--build=missing)
 if [ -n "${ARROW_CONAN_PARQUET:-}" ]; then
-  conan_args+=(--options arrow:parquet=${ARROW_CONAN_PARQUET})
+  conan_args+=(--options arrow/*:parquet=${ARROW_CONAN_PARQUET})
+  conan_args+=(--options arrow/*:with_thrift=${ARROW_CONAN_PARQUET})
+  conan_args+=(--options arrow/*:with_boost=${ARROW_CONAN_PARQUET})
 fi
 if [ -n "${ARROW_CONAN_WITH_BROTLI:-}" ]; then
-  conan_args+=(--options arrow:with_brotli=${ARROW_CONAN_WITH_BROTLI})
+  conan_args+=(--options arrow/*:with_brotli=${ARROW_CONAN_WITH_BROTLI})
 fi
 if [ -n "${ARROW_CONAN_WITH_BZ2:-}" ]; then
-  conan_args+=(--options arrow:with_bz2=${ARROW_CONAN_WITH_BZ2})
+  conan_args+=(--options arrow/*:with_bz2=${ARROW_CONAN_WITH_BZ2})
 fi
 if [ -n "${ARROW_CONAN_WITH_FLIGHT_RPC:-}" ]; then
-  conan_args+=(--options arrow:with_flight_rpc=${ARROW_CONAN_WITH_FLIGHT_RPC})
+  conan_args+=(--options 
arrow/*:with_flight_rpc=${ARROW_CONAN_WITH_FLIGHT_RPC})
+  conan_args+=(--options arrow/*:with_grpc=${ARROW_CONAN_WITH_FLIGHT_RPC})
+  conan_args+=(--options arrow/*:with_protobuf=${ARROW_CONAN_WITH_FLIGHT_RPC})
+  conan_args+=(--options arrow/*:with_re2=${ARROW_CONAN_WITH_FLIGHT_RPC})
 fi
 if [ -n "${ARROW_CONAN_WITH_GLOG:-}" ]; then
-  conan_args+=(--options arrow:with_glog=${ARROW_CONAN_WITH_GLOG})
+  conan_args+=(--options arrow/*:with_glog=${ARROW_CONAN_WITH_GLOG})
 fi
 if [ -n "${ARROW_CONAN_WITH_JEMALLOC:-}" ]; then
-  conan_args+=(--options arrow:with_jemalloc=${ARROW_CONAN_WITH_JEMALLOC})
+  conan_args+=(--options arrow/*:with_jemalloc=${ARROW_CONAN_WITH_JEMALLOC})
 fi
 if [ -n "${ARROW_CONAN_WITH_JSON:-}" ]; then
-  conan_args+=(--options arrow:with_json=${ARROW_CONAN_WITH_JSON})
+  conan_args+=(--options arrow/*:with_json=${ARROW_CONAN_WITH_JSON})
 fi
 if [ -n "${ARROW_CONAN_WITH_LZ4:-}" ]; then
-  conan_args+=(--options arrow:with_lz4=${ARROW_CONAN_WITH_LZ4})
+  conan_args+=(--options arrow/*:with_lz4=${ARROW_CONAN_WITH_LZ4})
 fi
 if [ -n "${ARROW_CONAN_WITH_SNAPPY:-}" ]; then
-  conan_args+=(--options arrow:with_snappy=${ARROW_CONAN_WITH_SNAPPY})
+  conan_args+=(--options arrow/*:with_snappy=${ARROW_CONAN_WITH_SNAPPY})
 fi
 if [ -n "${ARROW_CONAN_WITH_ZSTD:-}" ]; then
-  conan_args+=(--options arrow:with_zstd=${ARROW_CONAN_WITH_ZSTD})
+  conan_args+=(--options arrow/*:with_zstd=${ARROW_CONAN_WITH_ZSTD})
 fi
 
 version=$(grep '^set(ARROW_VERSION ' ${ARROW_HOME}/cpp/CMakeLists.txt | \
diff --git a/ci/scripts/install_sccache.sh b/ci/scripts/install_sccache.sh
index 0346c0cc9c..136f39b3ae 100755
--- a/ci/scripts/install_sccache.sh
+++ b/ci/scripts/install_sccache.sh
@@ -59,7 +59,7 @@ fi
 # Extract only the sccache binary into $PREFIX and ignore README and LICENSE.
 # --wildcards doesn't work on busybox.
 tar -xzvf $SCCACHE_ARCHIVE --strip-component=1 --directory $PREFIX 
--exclude="sccache*/*E*E*"
-chmod u+x $PREFIX/sccache
+chmod a+x $PREFIX/sccache
 
 if [ -n "${GITHUB_PATH}" ]; then
     echo "$PREFIX" >> $GITHUB_PATH
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake 
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 7d54ccccf7..ddea1c399c 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -1190,6 +1190,12 @@ if(MSVC AND ARROW_USE_STATIC_CRT)
   set(Boost_USE_STATIC_RUNTIME ON)
 endif()
 set(Boost_ADDITIONAL_VERSIONS
+    "1.84.0"
+    "1.84"
+    "1.83.0"
+    "1.83"
+    "1.82.0"
+    "1.82"
     "1.81.0"
     "1.81"
     "1.80.0"
diff --git a/docker-compose.yml b/docker-compose.yml
index 46717557bc..60edf1420b 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -711,10 +711,11 @@ services:
     # Usage:
     #   docker-compose run --rm conan
     # Parameters:
-    #   CONAN: gcc11, gcc11-armv7, ...
+    #   CONAN_BASE: gcc11, gcc11-armv7, ...
+    #   CONAN_VERSION: 1.62.0
     #   See https://github.com/conan-io/conan-docker-tools#readme for
     #   available images.
-    image: conanio/${CONAN}
+    image: conanio/${CONAN_BASE}:${CONAN_VERSION}
     user: root:root
     shm_size: *shm-size
     ulimits: *ulimits
@@ -724,7 +725,7 @@ services:
       - .:/arrow:delegated
     command: >-
       /bin/bash -c "
-        /arrow/ci/scripts/install_sccache.sh unknown-linux-musl /usr/local/bin 
&&
+        sudo /arrow/ci/scripts/install_sccache.sh unknown-linux-musl 
/usr/local/bin &&
         /arrow/ci/scripts/conan_setup.sh &&
         /arrow/ci/scripts/conan_build.sh /arrow /build"
 

Reply via email to