Skip to content

Commit 563a78c

Browse files
authored
(#14228) roaring: conan v2 support
1 parent 8a01c1e commit 563a78c

File tree

6 files changed

+84
-68
lines changed

6 files changed

+84
-68
lines changed

recipes/roaring/all/CMakeLists.txt

Lines changed: 0 additions & 7 deletions
This file was deleted.

recipes/roaring/all/conanfile.py

Lines changed: 39 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
from conans import ConanFile, CMake, tools
2-
from conans.errors import ConanInvalidConfiguration
1+
from conan import ConanFile
2+
from conan.errors import ConanInvalidConfiguration
3+
from conan.tools.build import check_min_cppstd
4+
from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout
5+
from conan.tools.files import copy, get, replace_in_file, rmdir
6+
from conan.tools.scm import Version
37
import os
4-
import functools
58

6-
required_conan_version = ">=1.43.0"
9+
required_conan_version = ">=1.53.0"
10+
711

812
class RoaringConan(ConanFile):
913
name = "roaring"
@@ -27,18 +31,6 @@ class RoaringConan(ConanFile):
2731
"with_neon": True,
2832
"native_optimization": False,
2933
}
30-
generators = "cmake"
31-
32-
@property
33-
def _source_subfolder(self):
34-
return "source_subfolder"
35-
36-
@property
37-
def _build_subfolder(self):
38-
return "build_subfolder"
39-
40-
def export_sources(self):
41-
self.copy("CMakeLists.txt")
4234

4335
def config_options(self):
4436
if self.settings.os == "Windows":
@@ -50,50 +42,50 @@ def config_options(self):
5042

5143
def configure(self):
5244
if self.options.shared:
53-
del self.options.fPIC
45+
self.options.rm_safe("fPIC")
46+
47+
def layout(self):
48+
cmake_layout(self, src_folder="src")
5449

5550
def validate(self):
56-
if self.settings.compiler.get_safe("cppstd"):
57-
tools.check_min_cppstd(self, "11")
58-
if tools.Version(self.version) >= "0.3.0":
59-
if self.settings.compiler == "apple-clang" and tools.Version(self.settings.compiler.version) < "11":
60-
raise ConanInvalidConfiguration("roaring >= 3.0.0 requires at least apple-clang 11 to support runtime dispatching.")
51+
if self.info.settings.compiler.get_safe("cppstd"):
52+
check_min_cppstd(self, "11")
53+
if Version(self.version) >= "0.3.0":
54+
if self.info.settings.compiler == "apple-clang" and Version(self.info.settings.compiler.version) < "11":
55+
raise ConanInvalidConfiguration(
56+
f"{self.ref} requires at least apple-clang 11 to support runtime dispatching.",
57+
)
6158

6259
def source(self):
63-
tools.get(**self.conan_data["sources"][self.version],
64-
destination=self._source_subfolder, strip_root=True)
60+
get(self, **self.conan_data["sources"][self.version],
61+
destination=self.source_folder, strip_root=True)
6562

66-
@functools.lru_cache(1)
67-
def _configure_cmake(self):
68-
cmake = CMake(self)
69-
cmake.definitions["ROARING_DISABLE_AVX"] = not self.options.get_safe("with_avx", False)
70-
cmake.definitions["ROARING_DISABLE_NEON"] = not self.options.get_safe("with_neon", False)
71-
cmake.definitions["ROARING_DISABLE_NATIVE"] = not self.options.native_optimization
72-
cmake.definitions["ROARING_BUILD_STATIC"] = not self.options.shared
73-
cmake.definitions["ENABLE_ROARING_TESTS"] = False
63+
def generate(self):
64+
tc = CMakeToolchain(self)
65+
tc.variables["ROARING_DISABLE_AVX"] = not self.options.get_safe("with_avx", False)
66+
tc.variables["ROARING_DISABLE_NEON"] = not self.options.get_safe("with_neon", False)
67+
tc.variables["ROARING_DISABLE_NATIVE"] = not self.options.native_optimization
68+
tc.variables["ROARING_BUILD_STATIC"] = not self.options.shared
69+
tc.variables["ENABLE_ROARING_TESTS"] = False
7470
# Relocatable shared lib on Macos
75-
cmake.definitions["CMAKE_POLICY_DEFAULT_CMP0042"] = "NEW"
76-
cmake.configure(build_folder=self._build_subfolder)
77-
return cmake
71+
tc.cache_variables["CMAKE_POLICY_DEFAULT_CMP0042"] = "NEW"
72+
tc.generate()
7873

7974
def build(self):
80-
tools.replace_in_file(os.path.join(self._source_subfolder, "CMakeLists.txt"), "set(CMAKE_MACOSX_RPATH OFF)", "")
81-
cmake = self._configure_cmake()
75+
replace_in_file(self, os.path.join(self.source_folder, "CMakeLists.txt"), "set(CMAKE_MACOSX_RPATH OFF)", "")
76+
cmake = CMake(self)
77+
cmake.configure()
8278
cmake.build()
8379

8480
def package(self):
85-
cmake = self._configure_cmake()
81+
copy(self, "LICENSE", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
82+
cmake = CMake(self)
8683
cmake.install()
87-
tools.rmdir(os.path.join(self.package_folder, "lib", "cmake"))
88-
tools.rmdir(os.path.join(self.package_folder, "lib", "pkgconfig"))
89-
self.copy("LICENSE", src=self._source_subfolder, dst="licenses")
84+
rmdir(self, os.path.join(self.package_folder, "lib", "cmake"))
85+
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
9086

9187
def package_info(self):
92-
self.cpp_info.libs = ["roaring"]
93-
88+
self.cpp_info.set_property("cmake_file_name", "roaring")
9489
self.cpp_info.set_property("cmake_target_name", "roaring::roaring")
9590
self.cpp_info.set_property("pkg_config_name", "roaring")
96-
97-
self.cpp_info.names["cmake_find_package"] = "roaring"
98-
self.cpp_info.names["cmake_find_package_multi"] = "roaring"
99-
self.cpp_info.names["pkg_config"] = "roaring"
91+
self.cpp_info.libs = ["roaring"]
Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
1-
cmake_minimum_required(VERSION 3.1)
2-
project(test_package)
3-
4-
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
5-
conan_basic_setup(TARGETS)
1+
cmake_minimum_required(VERSION 3.8)
2+
project(test_package LANGUAGES CXX)
63

74
find_package(roaring REQUIRED CONFIG)
85

96
add_executable(${PROJECT_NAME} test_package.cpp)
10-
target_link_libraries(${PROJECT_NAME} roaring::roaring)
11-
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)
7+
target_link_libraries(${PROJECT_NAME} PRIVATE roaring::roaring)
8+
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_11)
129
if(roaring_VERSION VERSION_LESS "0.3.0")
13-
target_compile_definitions(${PROJECT_NAME} PRIVATE "ROARING_NO_NAMESPACE")
10+
target_compile_definitions(${PROJECT_NAME} PRIVATE "ROARING_NO_NAMESPACE")
1411
endif()
Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
1-
from conans import ConanFile, CMake, tools
1+
from conan import ConanFile
2+
from conan.tools.build import can_run
3+
from conan.tools.cmake import CMake, cmake_layout
24
import os
35

46

57
class TestPackageConan(ConanFile):
6-
settings = "os", "arch", "compiler", "build_type",
7-
generators = "cmake", "cmake_find_package_multi"
8+
settings = "os", "arch", "compiler", "build_type"
9+
generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv"
10+
test_type = "explicit"
11+
12+
def layout(self):
13+
cmake_layout(self)
14+
15+
def requirements(self):
16+
self.requires(self.tested_reference_str)
817

918
def build(self):
1019
cmake = CMake(self)
1120
cmake.configure()
1221
cmake.build()
1322

1423
def test(self):
15-
if not tools.cross_building(self):
16-
bin_path = os.path.join("bin", "test_package")
17-
self.run(bin_path, run_environment=True)
24+
if can_run(self):
25+
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
26+
self.run(bin_path, env="conanrun")
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
cmake_minimum_required(VERSION 3.1)
2+
project(test_package)
3+
4+
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
5+
conan_basic_setup(TARGETS)
6+
7+
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../test_package
8+
${CMAKE_CURRENT_BINARY_DIR}/test_package)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from conans import ConanFile, CMake, tools
2+
import os
3+
4+
5+
class TestPackageConan(ConanFile):
6+
settings = "os", "arch", "compiler", "build_type",
7+
generators = "cmake", "cmake_find_package_multi"
8+
9+
def build(self):
10+
cmake = CMake(self)
11+
cmake.configure()
12+
cmake.build()
13+
14+
def test(self):
15+
if not tools.cross_building(self):
16+
bin_path = os.path.join("bin", "test_package")
17+
self.run(bin_path, run_environment=True)

0 commit comments

Comments
 (0)