Skip to content

Commit e650a18

Browse files
authored
(#14336) libdc1394: conan v2 support
1 parent b8ab766 commit e650a18

File tree

5 files changed

+111
-70
lines changed

5 files changed

+111
-70
lines changed

recipes/libdc1394/all/conanfile.py

Lines changed: 67 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,103 @@
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):
1015
name = "libdc1394"
1116
license = "LGPL-2.1-or-later"
1217
url = "https://github.com/conan-io/conan-center-index"
13-
homepage = 'https://damien.douxchamps.net/ieee1394/libdc1394/'
18+
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
22-
23-
@property
24-
def _source_subfolder(self):
25-
return "source_subfolder"
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+
}
2631

2732
def config_options(self):
2833
if self.settings.os == "Windows":
2934
del self.options.fPIC
3035

3136
def configure(self):
3237
if self.options.shared:
33-
del self.options.fPIC
34-
del self.settings.compiler.libcxx
35-
del self.settings.compiler.cppstd
38+
self.options.rm_safe("fPIC")
39+
self.settings.rm_safe("compiler.cppstd")
40+
self.settings.rm_safe("compiler.libcxx")
41+
42+
def layout(self):
43+
basic_layout(self, src_folder="src")
3644

3745
def requirements(self):
38-
self.requires("libusb/1.0.24")
46+
self.requires("libusb/1.0.26")
3947

4048
def validate(self):
41-
if self.settings.os == "Windows":
49+
if self.info.settings.os == "Windows":
4250
raise ConanInvalidConfiguration("Windows is not supported yet in this recipe")
43-
if self.settings.compiler == "clang":
51+
if self.info.settings.compiler == "clang":
4452
raise ConanInvalidConfiguration("Clang doesn't support VLA")
4553

4654
def build_requirements(self):
47-
self.build_requires("gnu-config/cci.20201022")
48-
self.build_requires("pkgconf/1.7.4")
55+
self.tool_requires("gnu-config/cci.20210814")
56+
if not self.conf.get("tools.gnu:pkg_config", check_type=str):
57+
self.tool_requires("pkgconf/1.9.3")
4958

5059
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
60+
get(self, **self.conan_data["sources"][self.version],
61+
destination=self.source_folder, strip_root=True)
62+
63+
def generate(self):
64+
env = VirtualBuildEnv(self)
65+
env.generate()
66+
tc = AutotoolsToolchain(self)
67+
tc.configure_args.append("--disable-examples")
68+
tc.generate()
69+
deps = PkgConfigDeps(self)
70+
deps.generate()
71+
72+
def _patch_sources(self):
73+
for gnu_config in [
74+
self.conf.get("user.gnu-config:config_guess", check_type=str),
75+
self.conf.get("user.gnu-config:config_sub", check_type=str),
76+
]:
77+
if gnu_config:
78+
copy(self, os.path.basename(gnu_config), src=os.path.dirname(gnu_config), dst=self.source_folder)
6879

6980
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()
81+
self._patch_sources()
82+
with chdir(self, self.source_folder):
83+
autotools = Autotools(self)
84+
autotools.configure()
85+
autotools.make()
7786

7887
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")
88+
copy(self, "COPYING", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
89+
with chdir(self, self.source_folder):
90+
autotools = Autotools(self)
91+
autotools.install()
92+
rmdir(self, os.path.join(self.package_folder, "share"))
93+
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
94+
rm(self, "*.la", os.path.join(self.package_folder, "lib"))
95+
fix_apple_shared_install_name(self)
8796

8897
def package_info(self):
89-
self.cpp_info.names["pkg_config"] = "libdc1394-{}".format(tools.Version(self.version).major)
98+
self.cpp_info.set_property("pkg_config_name", f"libdc1394-{Version(self.version).major}")
9099
self.cpp_info.libs = ["dc1394"]
91100
if self.settings.os in ["Linux", "FreeBSD"]:
92101
self.cpp_info.system_libs.append("m")
93-
elif tools.is_apple_os(self.settings.os):
102+
elif is_apple_os(self):
94103
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)