[DO-971] ffmpeg recipe with requirements (!9)
Co-authored-by: aleksandr.vodyanov <aleksandr.vodyanov@avroid.tech> Reviewed-on: https://git.avroid.tech/Conan/conan_build/pulls/9
This commit is contained in:
13
recipes/openh264/all/conandata.yml
Normal file
13
recipes/openh264/all/conandata.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
sources:
|
||||
"2.5.0":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/cisco/openh264/archive/refs/tags/v2.5.0.tar.gz"
|
||||
sha256: "94c8ca364db990047ec4ec3481b04ce0d791e62561ef5601443011bdc00825e3"
|
||||
"2.4.1":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/cisco/openh264/archive/refs/tags/v2.4.1.tar.gz"
|
||||
sha256: "8ffbe944e74043d0d3fb53d4a2a14c94de71f58dbea6a06d0dc92369542958ea"
|
||||
"2.3.1":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/cisco/openh264/archive/refs/tags/v2.3.1.tar.gz"
|
||||
sha256: "453afa66dacb560bc5fd0468aabee90c483741571bca820a39a1c07f0362dc32"
|
||||
"2.1.1":
|
||||
url: "https://nexus.avroid.tech/repository/devops-raw-proxy-github/cisco/openh264/archive/v2.1.1.tar.gz"
|
||||
sha256: "af173e90fce65f80722fa894e1af0d6b07572292e76de7b65273df4c0a8be678"
|
||||
126
recipes/openh264/all/conanfile.py
Normal file
126
recipes/openh264/all/conanfile.py
Normal file
@@ -0,0 +1,126 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.build import stdcpp_library, cross_building
|
||||
from conan.tools.env import VirtualBuildEnv
|
||||
from conan.tools.files import copy, get, rmdir, rm, rename, replace_in_file
|
||||
from conan.tools.layout import basic_layout
|
||||
from conan.tools.microsoft import is_msvc
|
||||
from conan.tools.apple import fix_apple_shared_install_name
|
||||
from conan.tools.scm import Version
|
||||
from conan.tools.meson import Meson, MesonToolchain
|
||||
from conan.errors import ConanInvalidConfiguration
|
||||
|
||||
import os
|
||||
|
||||
|
||||
required_conan_version = ">=2.0.9"
|
||||
|
||||
|
||||
class OpenH264Conan(ConanFile):
|
||||
name = "openh264"
|
||||
description = "Open Source H.264 Codec"
|
||||
license = "BSD-2-Clause"
|
||||
url = "https://github.com/conan-io/conan-center-index"
|
||||
homepage = "http://www.openh264.org/"
|
||||
topics = ("h264", "codec", "video", "compression", )
|
||||
package_type = "library"
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
options = {
|
||||
"shared": [True, False],
|
||||
"fPIC": [True, False],
|
||||
}
|
||||
default_options = {
|
||||
"shared": False,
|
||||
"fPIC": True,
|
||||
}
|
||||
implements = ["auto_shared_fpic"]
|
||||
|
||||
@property
|
||||
def _is_clang_cl(self):
|
||||
return self.settings.os == 'Windows' and self.settings.compiler == 'clang'
|
||||
|
||||
@property
|
||||
def _preserve_dll_name(self):
|
||||
return (is_msvc(self) or self._is_clang_cl) and Version(self.version) <= "2.4.1" and self.options.shared
|
||||
|
||||
def layout(self):
|
||||
basic_layout(self, src_folder="src")
|
||||
|
||||
def build_requirements(self):
|
||||
#self.tool_requires("meson/1.4.1")
|
||||
if not self.conf.get("tools.gnu:pkg_config", default=False, check_type=str):
|
||||
self.tool_requires("pkgconf/[>=2.2 <3]")
|
||||
if self.settings.arch in ["x86", "x86_64"]:
|
||||
self.tool_requires("nasm/2.16.01")
|
||||
|
||||
def validate(self):
|
||||
if Version(self.version) <= "2.1.1" and self.settings.os in ["Android", "Macos"]:
|
||||
# INFO: ../src/meson.build:86:2: ERROR: Problem encountered: FIXME: Unhandled system android
|
||||
# INFO: ../src/meson.build:86:2: ERROR: Problem encountered: FIXME: Unhandled system darwin
|
||||
raise ConanInvalidConfiguration(f"{self.ref} does not support {self.settings.os}. Try a newer version.")
|
||||
|
||||
def source(self):
|
||||
get(self, **self.conan_data["sources"][self.version],
|
||||
destination=self.source_folder, strip_root=True)
|
||||
|
||||
def generate(self):
|
||||
env = VirtualBuildEnv(self)
|
||||
env.generate()
|
||||
tc = MesonToolchain(self)
|
||||
tc.project_options["tests"] = "disabled"
|
||||
tc.generate()
|
||||
|
||||
def _patch_sources(self):
|
||||
if self._preserve_dll_name:
|
||||
# INFO: When generating with Meson, the library name is openh264-7.dll. This change preserves the old name openh264.dll
|
||||
replace_in_file(self, os.path.join(self.source_folder, "meson.build"), "soversion: major_version,", "soversion: '',")
|
||||
|
||||
def build(self):
|
||||
self._patch_sources()
|
||||
meson = Meson(self)
|
||||
meson.configure()
|
||||
meson.build()
|
||||
|
||||
def package(self):
|
||||
copy(self, pattern="LICENSE", dst=os.path.join(self.package_folder, "licenses"), src=self.source_folder)
|
||||
meson = Meson(self)
|
||||
meson.install()
|
||||
|
||||
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
|
||||
# INFO: Version 2.1.1 installs both static and shared libraries using same target name
|
||||
if Version(self.version) <= "2.1.1":
|
||||
if self.options.shared:
|
||||
rm(self, "*.a", os.path.join(self.package_folder, "lib"))
|
||||
else:
|
||||
rm(self, "*.so*", os.path.join(self.package_folder, "lib"))
|
||||
rm(self, "*.dylib*", os.path.join(self.package_folder, "lib"))
|
||||
rm(self, "*.dll", os.path.join(self.package_folder, "bin"))
|
||||
rm(self, "openh264.lib", os.path.join(self.package_folder, "lib"))
|
||||
|
||||
if is_msvc(self) or self._is_clang_cl:
|
||||
rm(self, "*.pdb", os.path.join(self.package_folder, "bin"))
|
||||
if Version(self.version) <= "2.4.1":
|
||||
if self.options.shared:
|
||||
# INFO: Preserve same old library name as when building with Make on Windows but using Meson
|
||||
rename(self, os.path.join(self.package_folder, "lib", "openh264.lib"),
|
||||
os.path.join(self.package_folder, "lib", "openh264_dll.lib"))
|
||||
if not self.options.shared:
|
||||
rename(self, os.path.join(self.package_folder, "lib", "libopenh264.a"),
|
||||
os.path.join(self.package_folder, "lib", "openh264.lib"))
|
||||
fix_apple_shared_install_name(self)
|
||||
|
||||
def package_info(self):
|
||||
suffix = "_dll" if self._preserve_dll_name else ""
|
||||
self.cpp_info.libs = [f"openh264{suffix}"]
|
||||
if self.settings.os in ("FreeBSD", "Linux"):
|
||||
self.cpp_info.system_libs.extend(["m", "pthread"])
|
||||
if self.settings.os == "Android":
|
||||
self.cpp_info.system_libs.append("m")
|
||||
if not self.options.shared:
|
||||
libcxx = stdcpp_library(self)
|
||||
if libcxx:
|
||||
if self.settings.os == "Android" and libcxx == "c++_static":
|
||||
# INFO: When builing for Android, need to link against c++abi too. Otherwise will get linkage errors:
|
||||
# ld.lld: error: undefined symbol: operator new(unsigned long)
|
||||
# >>> referenced by welsEncoderExt.cpp
|
||||
self.cpp_info.system_libs.append("c++abi")
|
||||
self.cpp_info.system_libs.append(libcxx)
|
||||
7
recipes/openh264/all/test_package/CMakeLists.txt
Normal file
7
recipes/openh264/all/test_package/CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
project(test_package C)
|
||||
|
||||
find_package(openh264 REQUIRED CONFIG)
|
||||
|
||||
add_executable(${PROJECT_NAME} test_package.c)
|
||||
target_link_libraries(${PROJECT_NAME} openh264::openh264)
|
||||
26
recipes/openh264/all/test_package/conanfile.py
Normal file
26
recipes/openh264/all/test_package/conanfile.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.build import can_run
|
||||
from conan.tools.cmake import cmake_layout, CMake
|
||||
import os
|
||||
|
||||
|
||||
class TestPackageConan(ConanFile):
|
||||
settings = "os", "arch", "compiler", "build_type"
|
||||
generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv"
|
||||
test_type = "explicit"
|
||||
|
||||
def layout(self):
|
||||
cmake_layout(self)
|
||||
|
||||
def requirements(self):
|
||||
self.requires(self.tested_reference_str)
|
||||
|
||||
def build(self):
|
||||
cmake = CMake(self)
|
||||
cmake.configure()
|
||||
cmake.build()
|
||||
|
||||
def test(self):
|
||||
if can_run(self):
|
||||
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
|
||||
self.run(bin_path, env="conanrun")
|
||||
9
recipes/openh264/all/test_package/test_package.c
Normal file
9
recipes/openh264/all/test_package/test_package.c
Normal file
@@ -0,0 +1,9 @@
|
||||
#include <wels/codec_api.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
OpenH264Version version = WelsGetCodecVersion();
|
||||
printf("OpenH264 version: %d.%d.%d\n", version.uMajor, version.uMinor, version.uRevision);
|
||||
return 0;
|
||||
}
|
||||
9
recipes/openh264/config.yml
Normal file
9
recipes/openh264/config.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
versions:
|
||||
"2.5.0":
|
||||
folder: all
|
||||
"2.4.1":
|
||||
folder: all
|
||||
"2.3.1":
|
||||
folder: all
|
||||
"2.1.1":
|
||||
folder: all
|
||||
Reference in New Issue
Block a user