Skip to content

Commit 9036f72

Browse files
committed
Comply to new practices
1 parent 03bb2fa commit 9036f72

File tree

5 files changed

+100
-98
lines changed

5 files changed

+100
-98
lines changed

recipes/logr/all/conanfile.py

Lines changed: 54 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
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
38
from conan.tools.scm import Version
49
import os
510

11+
required_conan_version = ">=1.50.0"
612

713
class LogrConan(ConanFile):
814
name = "logr"
@@ -14,22 +20,14 @@ class LogrConan(ConanFile):
1420
"for server/desktop applications"
1521
)
1622
topics = ("logger", "development", "util", "utils")
17-
generators = "cmake"
23+
1824
settings = "os", "compiler", "build_type", "arch"
19-
no_copy_source = True
2025

2126
options = {"backend": ["spdlog", "glog", "log4cplus", "boostlog", None]}
2227
default_options = {"backend": "spdlog"}
2328

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")
3331

3432
def requirements(self):
3533
if Version(self.version) >= "0.6.0":
@@ -50,91 +48,67 @@ def requirements(self):
5048
elif self.options.backend == "boostlog":
5149
self.requires("boost/1.77.0")
5250

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()
5753

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}."
7969
)
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"] = (
10174
self.options.backend == "spdlog"
10275
)
103-
self._cmake.definitions["LOGR_WITH_GLOG_BACKEND"] = (
76+
tc.variables["LOGR_WITH_GLOG_BACKEND"] = (
10477
self.options.backend == "glog"
10578
)
106-
self._cmake.definitions["LOGR_WITH_LOG4CPLUS_BACKEND"] = (
79+
tc.variables["LOGR_WITH_LOG4CPLUS_BACKEND"] = (
10780
self.options.backend == "log4cplus"
10881
)
109-
self._cmake.definitions["LOGR_WITH_BOOSTLOG_BACKEND"] = (
82+
tc.variables["LOGR_WITH_BOOSTLOG_BACKEND"] = (
11083
self.options.backend == "boostlog"
11184
)
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()
11291

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()
12194

12295
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)
12698

12799
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"))
130103
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"))
136105

137106
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+
138112
self.cpp_info.names["cmake_find_package"] = "logr"
139113
self.cpp_info.names["cmake_find_package_multi"] = "logr"
140114

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,8 @@
11
cmake_minimum_required(VERSION 3.8)
2-
3-
set(CMAKE_CXX_STANDARD 17)
4-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
5-
set(CMAKE_CXX_EXTENSIONS OFF)
6-
7-
project(PackageTest CXX)
8-
9-
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
10-
conan_basic_setup()
2+
project(test_package CXX)
113

124
find_package(logr REQUIRED)
135

14-
add_executable(example example.cpp)
15-
target_link_libraries(example logr::logr)
6+
add_executable(${PROJECT_NAME} example.cpp)
7+
target_link_libraries(${PROJECT_NAME} logr::logr)
8+
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
1+
from conan import ConanFile
2+
from conan.tools.build import can_run
3+
from conan.tools.cmake import cmake_layout, CMake
14
import os
25

3-
from conans import ConanFile, CMake, tools
46

7+
class TestPackageConan(ConanFile):
8+
settings = "os", "arch", "compiler", "build_type"
9+
generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv"
10+
test_type = "explicit"
511

6-
class LogrTestConan(ConanFile):
7-
settings = "os", "compiler", "build_type", "arch"
8-
generators = "cmake", "cmake_find_package"
12+
def requirements(self):
13+
self.requires(self.tested_reference_str)
14+
15+
def layout(self):
16+
cmake_layout(self)
917

1018
def build(self):
1119
cmake = CMake(self)
1220
cmake.configure()
1321
cmake.build()
1422

1523
def test(self):
16-
if not tools.cross_building(self):
17-
bin_path = os.path.join("bin", "example")
18-
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: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
cmake_minimum_required(VERSION 3.8)
2+
project(test_package CXX)
3+
4+
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
5+
conan_basic_setup(TARGETS)
6+
7+
find_package(logr REQUIRED CONFIG)
8+
9+
add_executable(${PROJECT_NAME} ../test_package/example.cpp)
10+
target_link_libraries(${PROJECT_NAME} logr::logr)
11+
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from conans import ConanFile, CMake, tools
2+
import os
3+
4+
5+
class LogrTestConan(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+
self.run(os.path.join("bin", "test_package"), run_environment=True)

0 commit comments

Comments
 (0)