1
- from conans import ConanFile , CMake , tools
1
+ from conan import ConanFile
2
+ from conan .tools .apple import is_apple_os
3
+ from conan .tools .cmake import CMake , CMakeToolchain , cmake_layout
4
+ from conan .tools .files import apply_conandata_patches , copy , export_conandata_patches , get , rmdir
5
+ from conan .tools .scm import Version
2
6
import os
3
7
4
- required_conan_version = ">=1.43 .0"
8
+ required_conan_version = ">=1.53 .0"
5
9
6
10
7
11
class CpuFeaturesConan (ConanFile ):
@@ -22,57 +26,49 @@ class CpuFeaturesConan(ConanFile):
22
26
"fPIC" : True ,
23
27
}
24
28
25
- generators = "cmake" ,
26
- _cmake = None
27
-
28
- @property
29
- def _source_subfolder (self ):
30
- return "source_subfolder"
31
-
32
29
def export_sources (self ):
33
- self .copy ("CMakeLists.txt" )
34
- for patch in self .conan_data .get ("patches" , {}).get (self .version , []):
35
- self .copy (patch ["patch_file" ])
30
+ export_conandata_patches (self )
36
31
37
32
def config_options (self ):
38
33
if self .settings .os == "Windows" :
39
34
del self .options .fPIC
40
35
41
36
def configure (self ):
42
37
if self .options .shared :
43
- del self .options .fPIC
44
- del self .settings .compiler .libcxx
45
- del self .settings .compiler .cppstd
38
+ self .options .rm_safe ("fPIC" )
39
+ self .settings .compiler .rm_safe ("cppstd" )
40
+ self .settings .compiler .rm_safe ("libcxx" )
41
+
42
+ def layout (self ):
43
+ cmake_layout (self , src_folder = "src" )
46
44
47
45
def source (self ):
48
- tools .get (** self .conan_data ["sources" ][self .version ],
49
- strip_root = True , destination = self ._source_subfolder )
50
-
51
- def _configure_cmake (self ):
52
- if self ._cmake :
53
- return self ._cmake
54
- self ._cmake = CMake (self )
55
- if tools .Version (self .version ) < "0.7.0" :
56
- self ._cmake .definitions ["BUILD_PIC" ] = self .options .get_safe ("fPIC" , True )
57
- if tools .Version (self .version ) >= "0.7.0" :
58
- self ._cmake .definitions ["BUILD_TESTING" ] = False
46
+ get (self , ** self .conan_data ["sources" ][self .version ],
47
+ destination = self .source_folder , strip_root = True )
48
+
49
+ def generate (self ):
50
+ tc = CMakeToolchain (self )
51
+ if Version (self .version ) < "0.7.0" :
52
+ tc .variables ["BUILD_PIC" ] = self .options .get_safe ("fPIC" , True )
53
+ if Version (self .version ) >= "0.7.0" :
54
+ tc .variables ["BUILD_TESTING" ] = False
59
55
# TODO: should be handled by CMake helper
60
- if tools . is_apple_os (self . settings . os ) and self .settings .arch in ["armv8" , "armv8_32" , "armv8.3" ]:
61
- self . _cmake . definitions ["CMAKE_SYSTEM_PROCESSOR" ] = "aarch64"
62
- self . _cmake . configure () # Does not support out of source builds
63
- return self . _cmake
56
+ if is_apple_os (self ) and self .settings .arch in ["armv8" , "armv8_32" , "armv8.3" ]:
57
+ tc . variables ["CMAKE_SYSTEM_PROCESSOR" ] = "aarch64"
58
+ tc . variables [ "CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS" ] = True
59
+ tc . generate ()
64
60
65
61
def build (self ):
66
- for patch in self . conan_data . get ( "patches" , {}). get ( self . version , []):
67
- tools . patch ( ** patch )
68
- cmake = self . _configure_cmake ()
62
+ apply_conandata_patches ( self )
63
+ cmake = CMake ( self )
64
+ cmake . configure ()
69
65
cmake .build ()
70
66
71
67
def package (self ):
72
- self . copy ("LICENSE" , dst = "licenses" , src = self ._source_subfolder )
73
- cmake = self . _configure_cmake ( )
68
+ copy (self , "LICENSE" , src = self . source_folder , dst = os . path . join ( self .package_folder , "licenses" ) )
69
+ cmake = CMake ( self )
74
70
cmake .install ()
75
- tools . rmdir (os .path .join (self .package_folder , "lib" , "cmake" ))
71
+ rmdir (self , os .path .join (self .package_folder , "lib" , "cmake" ))
76
72
77
73
def package_info (self ):
78
74
self .cpp_info .set_property ("cmake_file_name" , "CpuFeatures" )
0 commit comments