Skip to content

Commit ff917af

Browse files
committed
conan v2 support
1 parent e3cb617 commit ff917af

File tree

5 files changed

+112
-67
lines changed

5 files changed

+112
-67
lines changed

recipes/libdc1394/all/conanfile.py

Lines changed: 68 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1-
from conans import ConanFile, AutoToolsBuildEnvironment, tools
2-
from conans.errors import ConanInvalidConfiguration
1+
from conan import ConanFile
2+
from conan.errors import ConanInvalidConfiguration
3+
from conan.tools.apple import fix_apple_shared_install_name, is_apple_os
4+
from conan.tools.env import VirtualBuildEnv
5+
from conan.tools.files import chdir, copy, get, rm, rmdir
6+
from conan.tools.gnu import Autotools, AutotoolsToolchain, PkgConfigDeps
7+
from conan.tools.layout import basic_layout
8+
from conan.tools.scm import Version
39
import os
4-
import shutil
510

6-
required_conan_version = ">=1.33.0"
11+
required_conan_version = ">=1.53.0"
712

813

914
class Libdc1394Conan(ConanFile):
@@ -12,83 +17,91 @@ class Libdc1394Conan(ConanFile):
1217
url = "https://github.com/conan-io/conan-center-index"
1318
homepage = 'https://damien.douxchamps.net/ieee1394/libdc1394/'
1419
description = "libdc1394 provides a complete high level API to control IEEE 1394 based cameras"
15-
topics = ("conan", "ieee1394", "camera", "iidc", "dcam")
16-
settings = "os", "compiler", "build_type", "arch"
17-
options = {"shared": [True, False], "fPIC": [True, False]}
18-
default_options = {"shared": False, "fPIC": True}
19-
20-
generators = "pkg_config"
21-
_env_build = None
20+
topics = ("ieee1394", "camera", "iidc", "dcam")
21+
22+
settings = "os", "arch", "compiler", "build_type"
23+
options = {
24+
"shared": [True, False],
25+
"fPIC": [True, False],
26+
}
27+
default_options = {
28+
"shared": False,
29+
"fPIC": True,
30+
}
2231

2332
@property
24-
def _source_subfolder(self):
25-
return "source_subfolder"
33+
def _user_info_build(self):
34+
return getattr(self, "user_info_build", self.deps_user_info)
2635

2736
def config_options(self):
2837
if self.settings.os == "Windows":
2938
del self.options.fPIC
3039

3140
def configure(self):
3241
if self.options.shared:
33-
del self.options.fPIC
34-
del self.settings.compiler.libcxx
35-
del self.settings.compiler.cppstd
42+
self.options.rm_safe("fPIC")
43+
self.settings.rm_safe("compiler.cppstd")
44+
self.settings.rm_safe("compiler.libcxx")
45+
46+
def layout(self):
47+
basic_layout(self, src_folder="src")
3648

3749
def requirements(self):
38-
self.requires("libusb/1.0.24")
50+
self.requires("libusb/1.0.26")
3951

4052
def validate(self):
41-
if self.settings.os == "Windows":
53+
if self.info.settings.os == "Windows":
4254
raise ConanInvalidConfiguration("Windows is not supported yet in this recipe")
43-
if self.settings.compiler == "clang":
55+
if self.info.settings.compiler == "clang":
4456
raise ConanInvalidConfiguration("Clang doesn't support VLA")
4557

4658
def build_requirements(self):
47-
self.build_requires("gnu-config/cci.20201022")
48-
self.build_requires("pkgconf/1.7.4")
59+
self.tool_requires("gnu-config/cci.20210814")
60+
if not self.conf.get("tools.gnu:pkg_config", check_type=str):
61+
self.tool_requires("pkgconf/1.9.3")
4962

5063
def source(self):
51-
tools.get(**self.conan_data["sources"][self.version],
52-
destination=self._source_subfolder, strip_root=True)
53-
54-
@property
55-
def _user_info_build(self):
56-
return getattr(self, "user_info_build", None) or self.deps_user_info
57-
58-
def _configure_autotools(self):
59-
if not self._env_build:
60-
self._env_build = AutoToolsBuildEnvironment(self)
61-
if self.options.shared:
62-
args = ["--disable-static", "--enable-shared"]
63-
else:
64-
args = ["--disable-shared", "--enable-static"]
65-
args.extend(["--disable-examples"])
66-
self._env_build.configure(args=args)
67-
return self._env_build
64+
get(self, **self.conan_data["sources"][self.version],
65+
destination=self.source_folder, strip_root=True)
66+
67+
def generate(self):
68+
env = VirtualBuildEnv(self)
69+
env.generate()
70+
tc = AutotoolsToolchain(self)
71+
tc.configure_args.append("--disable-examples")
72+
tc.generate()
73+
deps = PkgConfigDeps(self)
74+
deps.generate()
75+
76+
def _patch_sources(self):
77+
for gnu_config in [
78+
self.conf.get("user.gnu-config:config_guess", check_type=str),
79+
self.conf.get("user.gnu-config:config_sub", check_type=str),
80+
]:
81+
if gnu_config:
82+
copy(self, os.path.basename(gnu_config), src=os.path.dirname(gnu_config), dst=self.source_folder)
6883

6984
def build(self):
70-
shutil.copy(self._user_info_build["gnu-config"].CONFIG_SUB,
71-
os.path.join(self._source_subfolder, "config.sub"))
72-
shutil.copy(self._user_info_build["gnu-config"].CONFIG_GUESS,
73-
os.path.join(self._source_subfolder, "config.guess"))
74-
with tools.chdir(self._source_subfolder):
75-
env_build = self._configure_autotools()
76-
env_build.make()
85+
self._patch_sources()
86+
with chdir(self, self.source_folder):
87+
autotools = Autotools(self)
88+
autotools.configure()
89+
autotools.make()
7790

7891
def package(self):
79-
with tools.chdir(self._source_subfolder):
80-
env_build = self._configure_autotools()
81-
env_build.install()
82-
83-
self.copy(pattern="COPYING", src=self._source_subfolder, dst="licenses")
84-
tools.rmdir(os.path.join(self.package_folder, "share"))
85-
tools.rmdir(os.path.join(self.package_folder, "lib", "pkgconfig"))
86-
tools.remove_files_by_mask(os.path.join(self.package_folder, "lib"), "*.la")
92+
copy(self, "COPYING", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
93+
with chdir(self, self.source_folder):
94+
autotools = Autotools(self)
95+
autotools.install()
96+
rmdir(self, os.path.join(self.package_folder, "share"))
97+
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
98+
rm(self, "*.la", os.path.join(self.package_folder, "lib"))
99+
fix_apple_shared_install_name(self)
87100

88101
def package_info(self):
89-
self.cpp_info.names["pkg_config"] = "libdc1394-{}".format(tools.Version(self.version).major)
102+
self.cpp_info.set_property("pkg_config_name", f"libdc1394-{Version(self.version).major}")
90103
self.cpp_info.libs = ["dc1394"]
91104
if self.settings.os in ["Linux", "FreeBSD"]:
92105
self.cpp_info.system_libs.append("m")
93-
elif tools.is_apple_os(self.settings.os):
106+
elif is_apple_os(self):
94107
self.cpp_info.frameworks.extend(["CoreFoundation", "CoreServices", "IOKit"])
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
cmake_minimum_required(VERSION 3.1)
2-
project(PackageTest C)
2+
project(test_package LANGUAGES C)
33

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

7-
add_executable(example test_package.c)
8-
target_link_libraries(example ${CONAN_LIBS})
6+
add_executable(${PROJECT_NAME} test_package.c)
7+
target_link_libraries(${PROJECT_NAME} PRIVATE libdc1394::libdc1394)
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, cmake_layout
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 = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv"
10+
test_type = "explicit"
511

6-
class Libdc1394TestConan(ConanFile):
7-
settings = "os", "compiler", "build_type", "arch"
8-
generators = "cmake"
12+
def layout(self):
13+
cmake_layout(self)
14+
15+
def requirements(self):
16+
self.requires(self.tested_reference_str)
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: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
cmake_minimum_required(VERSION 3.1)
2+
project(test_package)
3+
4+
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
5+
conan_basic_setup(TARGETS)
6+
7+
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../test_package
8+
${CMAKE_CURRENT_BINARY_DIR}/test_package)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from conans import ConanFile, CMake, tools
2+
import os
3+
4+
5+
class TestPackageConan(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+
bin_path = os.path.join("bin", "test_package")
17+
self.run(bin_path, run_environment=True)

0 commit comments

Comments
 (0)