Skip to content

Commit 2034cf1

Browse files
authored
(conan-io#18760) [libmnl] migrate to v2
* [libmnl] migrate to v2 * add package_type * fix indentation
1 parent bab9d55 commit 2034cf1

File tree

3 files changed

+42
-41
lines changed

3 files changed

+42
-41
lines changed

recipes/libmnl/all/conanfile.py

+26-32
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import os
2-
from conans import ConanFile, tools, AutoToolsBuildEnvironment
3-
from conans.errors import ConanInvalidConfiguration
42

5-
required_conan_version = ">=1.29.1"
3+
from conan import ConanFile
4+
from conan.tools.gnu import Autotools, AutotoolsToolchain
5+
from conan.tools.files import copy, get, rmdir, rm
6+
from conan.tools.layout import basic_layout
7+
from conan.errors import ConanInvalidConfiguration
8+
9+
required_conan_version = ">=1.53.0"
610

711
class LibmnlConan(ConanFile):
812
name = "libmnl"
@@ -14,50 +18,40 @@ class LibmnlConan(ConanFile):
1418
settings = "os", "compiler", "build_type", "arch"
1519
options = {"shared": [True, False], "fPIC": [True, False]}
1620
default_options = {"shared": False, "fPIC": True}
17-
_autotools = None
21+
package_type = "library"
1822

19-
@property
20-
def _source_subfolder(self):
21-
return "source_subfolder"
23+
def layout(self):
24+
basic_layout(self, src_folder="src")
2225

2326
def source(self):
24-
tools.get(**self.conan_data["sources"][self.version])
25-
extracted_dir = self.name + "-" + self.version
26-
os.rename(extracted_dir, self._source_subfolder)
27+
get(self, **self.conan_data["sources"][self.version], strip_root=True)
2728

2829
def configure(self):
2930
if self.settings.os != "Linux":
3031
raise ConanInvalidConfiguration("libmnl is only supported on Linux")
3132
if self.options.shared:
32-
del self.options.fPIC
33-
del self.settings.compiler.libcxx
34-
del self.settings.compiler.cppstd
35-
36-
def _configure_autotools(self):
37-
if self._autotools:
38-
return self._autotools
39-
self._autotools = AutoToolsBuildEnvironment(self)
40-
conf_args = []
41-
if self.options.shared:
42-
conf_args.extend(["--enable-shared", "--disable-static"])
43-
else:
44-
conf_args.extend(["--disable-shared", "--enable-static"])
45-
self._autotools.configure(configure_dir=self._source_subfolder, args=conf_args)
46-
return self._autotools
33+
self.options.rm_safe("fPIC")
34+
self.settings.rm_safe("compiler.libcxx")
35+
self.settings.rm_safe("compiler.cppstd")
36+
37+
def generate(self):
38+
tc = AutotoolsToolchain(self)
39+
tc.generate()
4740

4841
def build(self):
49-
autotools = self._configure_autotools()
42+
autotools = Autotools(self)
43+
autotools.configure()
5044
autotools.make()
5145

5246
def package(self):
53-
self.copy("COPYING", dst="licenses", src=self._source_subfolder)
54-
autotools = self._configure_autotools()
47+
copy(self, "COPYING", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
48+
autotools = Autotools(self)
5549
autotools.install()
5650

57-
tools.remove_files_by_mask(os.path.join(self.package_folder, "lib"), "*.la")
58-
tools.rmdir(os.path.join(self.package_folder, "share"))
59-
tools.rmdir(os.path.join(self.package_folder, "etc"))
60-
tools.rmdir(os.path.join(self.package_folder, "lib", "pkgconfig"))
51+
rm(self, "*.la", os.path.join(self.package_folder, "lib"))
52+
rmdir(self, os.path.join(self.package_folder, "share"))
53+
rmdir(self, os.path.join(self.package_folder, "etc"))
54+
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
6155

6256
def package_info(self):
6357
self.cpp_info.libs = ["mnl"]
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
cmake_minimum_required(VERSION 3.1)
22
project(PackageTest CXX)
33

4-
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
5-
conan_basic_setup()
4+
find_package(libmnl REQUIRED)
65

76
add_executable(example example.cpp)
8-
target_link_libraries(example ${CONAN_LIBS})
7+
target_link_libraries(example libmnl::libmnl)
+14-6
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
11
import os
22

3-
from conans import ConanFile, CMake, tools
4-
3+
from conan import ConanFile
4+
from conan.tools.build import can_run
5+
from conan.tools.cmake import cmake_layout, CMake
56

67
class LibmnlTestConan(ConanFile):
78
settings = "os", "compiler", "build_type", "arch"
8-
generators = "cmake"
9+
generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv"
10+
test_type = "explicit"
11+
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], "example")
26+
self.run(bin_path, env="conanrun")

0 commit comments

Comments
 (0)