1
- from conans import ConanFile , CMake , tools
2
- from conans .errors import ConanInvalidConfiguration
1
+ from conan import ConanFile
2
+ from conan .tools .build import check_min_cppstd
3
+ from conan .tools .cmake import CMake , CMakeToolchain , CMakeDeps
4
+ from conan .tools .files import get , copy , rmdir
5
+ from conan .tools .layout import basic_layout
6
+ from conan .errors import ConanInvalidConfiguration
7
+ from conan .tools .microsoft import check_min_vs , is_msvc
3
8
from conan .tools .scm import Version
4
9
import os
5
10
11
+ required_conan_version = ">=1.50.0"
6
12
7
13
class LogrConan (ConanFile ):
8
14
name = "logr"
@@ -14,22 +20,14 @@ class LogrConan(ConanFile):
14
20
"for server/desktop applications"
15
21
)
16
22
topics = ("logger" , "development" , "util" , "utils" )
17
- generators = "cmake"
23
+
18
24
settings = "os" , "compiler" , "build_type" , "arch"
19
- no_copy_source = True
20
25
21
26
options = {"backend" : ["spdlog" , "glog" , "log4cplus" , "boostlog" , None ]}
22
27
default_options = {"backend" : "spdlog" }
23
28
24
- _cmake = None
25
-
26
- @property
27
- def _source_subfolder (self ):
28
- return "source_subfolder"
29
-
30
- @property
31
- def _build_subfolder (self ):
32
- return "build_subfolder"
29
+ def layout (self ):
30
+ basic_layout (self , src_folder = "src" )
33
31
34
32
def requirements (self ):
35
33
if Version (self .version ) >= "0.6.0" :
@@ -50,91 +48,67 @@ def requirements(self):
50
48
elif self .options .backend == "boostlog" :
51
49
self .requires ("boost/1.77.0" )
52
50
53
- def configure (self ):
54
- minimal_cpp_standard = "17"
55
- if self .settings .compiler .cppstd :
56
- tools .check_min_cppstd (self , minimal_cpp_standard )
51
+ def package_id (self ):
52
+ self .info .clear ()
57
53
58
- if Version (self .version ) >= "0.6.0" :
59
- minimal_version = {
60
- "gcc" : "10" ,
61
- "clang" : "11" ,
62
- "apple-clang" : "12" ,
63
- "Visual Studio" : "19" ,
64
- }
65
- else :
66
- minimal_version = {
67
- "gcc" : "7" ,
68
- "clang" : "7" ,
69
- "apple-clang" : "10" ,
70
- "Visual Studio" : "16" ,
71
- }
72
-
73
- compiler = str (self .settings .compiler )
74
- if compiler not in minimal_version :
75
- self .output .warn (
76
- (
77
- "%s recipe lacks information about the %s compiler "
78
- "standard version support"
54
+ def validate (self ):
55
+ minimal_cpp_standard = "17"
56
+ if self .settings .get_safe ("compiler.cppstd" ):
57
+ check_min_cppstd (self , minimal_cpp_standard )
58
+ minimal_version = {
59
+ "gcc" : "10" ,
60
+ "clang" : "11" ,
61
+ "apple-clang" : "12" ,
62
+ }
63
+ check_min_vs (self , 192 )
64
+ if not is_msvc (self ):
65
+ minimum_version = minimal_version .get (str (self .settings .compiler ), False )
66
+ if minimum_version and Version (self .settings .compiler .version ) < minimum_version :
67
+ raise ConanInvalidConfiguration (
68
+ f"{ self .ref } requires minimum { self .settings .compiler } -{ minimum_version } ."
79
69
)
80
- % (self .name , compiler )
81
- )
82
- self .output .warn (
83
- "%s requires a compiler that supports at least C++%s"
84
- % (self .name , minimal_cpp_standard )
85
- )
86
- return
87
-
88
- version = tools .Version (self .settings .compiler .version )
89
- if version < minimal_version [compiler ]:
90
- raise ConanInvalidConfiguration (
91
- "%s requires a compiler that supports at least C++%s"
92
- % (self .name , minimal_cpp_standard )
93
- )
94
-
95
- def _configure_cmake (self ):
96
- if self ._cmake :
97
- return self ._cmake
98
-
99
- self ._cmake = CMake (self )
100
- self ._cmake .definitions ["LOGR_WITH_SPDLOG_BACKEND" ] = (
70
+
71
+ def generate (self ):
72
+ tc = CMakeToolchain (self )
73
+ tc .variables ["LOGR_WITH_SPDLOG_BACKEND" ] = (
101
74
self .options .backend == "spdlog"
102
75
)
103
- self . _cmake . definitions ["LOGR_WITH_GLOG_BACKEND" ] = (
76
+ tc . variables ["LOGR_WITH_GLOG_BACKEND" ] = (
104
77
self .options .backend == "glog"
105
78
)
106
- self . _cmake . definitions ["LOGR_WITH_LOG4CPLUS_BACKEND" ] = (
79
+ tc . variables ["LOGR_WITH_LOG4CPLUS_BACKEND" ] = (
107
80
self .options .backend == "log4cplus"
108
81
)
109
- self . _cmake . definitions ["LOGR_WITH_BOOSTLOG_BACKEND" ] = (
82
+ tc . variables ["LOGR_WITH_BOOSTLOG_BACKEND" ] = (
110
83
self .options .backend == "boostlog"
111
84
)
85
+ tc .variables ["LOGR_INSTALL" ] = True
86
+ tc .variables ["LOGR_CONAN_PACKAGING" ] = True
87
+ tc .variables ["LOGR_BUILD_TESTS" ] = False
88
+ tc .variables ["LOGR_BUILD_EXAMPLES" ] = False
89
+ tc .variables ["LOGR_BUILD_BENCHMARKS" ] = False
90
+ tc .generate ()
112
91
113
- self ._cmake .definitions ["LOGR_INSTALL" ] = True
114
- self ._cmake .definitions ["LOGR_CONAN_PACKAGING" ] = True
115
- self ._cmake .definitions ["LOGR_BUILD_TESTS" ] = False
116
- self ._cmake .definitions ["LOGR_BUILD_EXAMPLES" ] = False
117
- self ._cmake .definitions ["LOGR_BUILD_BENCHMARKS" ] = False
118
-
119
- self ._cmake .configure (source_folder = self ._source_subfolder )
120
- return self ._cmake
92
+ deps = CMakeDeps (self )
93
+ deps .generate ()
121
94
122
95
def source (self ):
123
- tools .get (** self .conan_data ["sources" ][self .version ])
124
- extracted_dir = self .name + "-" + self .version
125
- os .rename (extracted_dir , self ._source_subfolder )
96
+ get (self , ** self .conan_data ["sources" ][self .version ],
97
+ destination = self .source_folder , strip_root = True )
126
98
127
99
def package (self ):
128
- self .copy ("LICENSE" , src = self ._source_subfolder , dst = "licenses" )
129
- cmake = self ._configure_cmake ()
100
+ copy (self , "LICENSE" , src = self .source_folder , dst = os .path .join (self .package_folder , "licenses" ))
101
+ cmake = CMake (self )
102
+ cmake .configure (build_script_folder = os .path .join (self .source_folder , "logr" ))
130
103
cmake .install ()
131
-
132
- tools .rmdir (os .path .join (self .package_folder , "lib" ))
133
-
134
- def package_id (self ):
135
- self .info .settings .clear ()
104
+ rmdir (self , os .path .join (self .package_folder , "lib" ))
136
105
137
106
def package_info (self ):
107
+ self .cpp_info .bindirs = []
108
+ self .cpp_info .frameworkdirs = []
109
+ self .cpp_info .libdirs = []
110
+ self .cpp_info .set_property ("cmake_file_name" , "logr" )
111
+
138
112
self .cpp_info .names ["cmake_find_package" ] = "logr"
139
113
self .cpp_info .names ["cmake_find_package_multi" ] = "logr"
140
114
0 commit comments