from conan import ConanFile from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout from conan.tools.env import VirtualBuildEnv from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, rmdir from conan.tools.scm import Version import os required_conan_version = ">=1.53.0" class LibaomAv1Conan(ConanFile): name = "libaom-av1" description = "AV1 Codec Library" topics = ("av1", "codec", "video", "encoding", "decoding") url = "https://github.com/conan-io/conan-center-index" homepage = "https://aomedia.googlesource.com/aom" license = "BSD-2-Clause" package_type = "library" settings = "os", "arch", "compiler", "build_type" options = { "shared": [True, False], "fPIC": [True, False], "assembly": [True, False], } default_options = { "shared": False, "fPIC": True, "assembly": False, } @property def _settings_build(self): return getattr(self, "settings_build", self.settings) def export_sources(self): export_conandata_patches(self) def config_options(self): if self.settings.os == "Windows": del self.options.fPIC if self.settings.arch not in ("x86", "x86_64"): del self.options.assembly def configure(self): if self.options.shared: self.options.rm_safe("fPIC") self.settings.rm_safe("compiler.cppstd") self.settings.rm_safe("compiler.libcxx") def build_requirements(self): if self.options.get_safe("assembly", False): self.tool_requires("nasm/[>=2.15.05]") if self._settings_build.os == "Windows": self.tool_requires("strawberryperl/5.32.1.1") def layout(self): cmake_layout(self, src_folder="src") def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=Version(self.version) >= "3.3.0") def generate(self): env = VirtualBuildEnv(self) env.generate() tc = CMakeToolchain(self) tc.variables["ENABLE_EXAMPLES"] = False tc.variables["ENABLE_TESTS"] = False tc.variables["ENABLE_DOCS"] = False tc.variables["ENABLE_TOOLS"] = False if not self.options.get_safe("assembly", False): # make non-assembly build tc.variables["AOM_TARGET_CPU"] = "generic" # libyuv is used for examples, tests and non-essential 'dump_obu' tool so it is disabled # required to be 1/0 instead of False tc.variables["CONFIG_LIBYUV"] = 0 # webm is not yet packaged tc.variables["CONFIG_WEBM_IO"] = 0 # Requires C99 or higher tc.variables["CMAKE_C_STANDARD"] = "99" tc.generate() def build(self): apply_conandata_patches(self) cmake = CMake(self) cmake.configure() cmake.build() def package(self): copy(self, "LICENSE", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses")) cmake = CMake(self) cmake.install() rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) def package_info(self): self.cpp_info.set_property("pkg_config_name", "aom") lib = "aom" if Version(self.version) >= "3.8.0" and self.settings.os == "Windows" and self.options.shared: lib = "aom_dll" self.cpp_info.libs = [lib] if self.settings.os in ("FreeBSD", "Linux"): self.cpp_info.system_libs = ["pthread", "m"]