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
3
7
import os
4
- import functools
5
8
6
- required_conan_version = ">=1.43.0"
9
+ required_conan_version = ">=1.53.0"
10
+
7
11
8
12
class RoaringConan (ConanFile ):
9
13
name = "roaring"
@@ -27,18 +31,6 @@ class RoaringConan(ConanFile):
27
31
"with_neon" : True ,
28
32
"native_optimization" : False ,
29
33
}
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" )
42
34
43
35
def config_options (self ):
44
36
if self .settings .os == "Windows" :
@@ -50,50 +42,50 @@ def config_options(self):
50
42
51
43
def configure (self ):
52
44
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" )
54
49
55
50
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
+ )
61
58
62
59
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 )
65
62
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
74
70
# 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 ()
78
73
79
74
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 ()
82
78
cmake .build ()
83
79
84
80
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 )
86
83
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" ))
90
86
91
87
def package_info (self ):
92
- self .cpp_info .libs = ["roaring" ]
93
-
88
+ self .cpp_info .set_property ("cmake_file_name" , "roaring" )
94
89
self .cpp_info .set_property ("cmake_target_name" , "roaring::roaring" )
95
90
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" ]
0 commit comments