flac/1.4.2

BSD-3-Clause, GFDL-1.2, GPL-2.0-or-later, LPGL-2.1-or-later
License
1.4.2
Version
27,470
Downloads
Loading...
Loading...
1
from conan import ConanFile
2
from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout
3
from conan.tools.env import VirtualBuildEnv
4
from conan.tools.files import apply_conandata_patches, export_conandata_patches, copy, get, rmdir
5
from conan.tools.scm import Version
6
import os
7
8
required_conan_version = ">=1.54.0"
9
10
11
class FlacConan(ConanFile):
12
    name = "flac"
13
    description = "Free Lossless Audio Codec"
14
    topics = ("flac", "codec", "audio", )
15
    url = "https://github.com/conan-io/conan-center-index"
16
    homepage = "https://github.com/xiph/flac"
17
    license = ("BSD-3-Clause", "GPL-2.0-or-later", "LPGL-2.1-or-later", "GFDL-1.2")
18
19
    settings = "os", "arch", "compiler", "build_type"
20
    options = {
21
        "shared": [True, False],
22
        "fPIC": [True, False],
23
    }
24
    default_options = {
25
        "shared": False,
26
        "fPIC": True,
27
    }
28
29
    def export_sources(self):
30
        export_conandata_patches(self)
31
32
    def config_options(self):
33
        if self.settings.os == "Windows":
34
            del self.options.fPIC
35
36
    def configure(self):
37
        if self.options.shared:
38
            self.options.rm_safe("fPIC")
39
40
    def requirements(self):
41
        self.requires("ogg/1.3.5")
42
43
    def build_requirements(self):
44
        if Version(self.version) < "1.4.2" and self.settings.arch in ["x86", "x86_64"]:
45
            self.tool_requires("nasm/2.15.05")
46
47
    def layout(self):
48
        cmake_layout(self, src_folder="src")
49
50
    def source(self):
51
        get(self, **self.conan_data["sources"][self.version],
52
            destination=self.source_folder, strip_root=True)
53
54
    def generate(self):
55
        tc = CMakeToolchain(self)
56
        tc.variables["BUILD_EXAMPLES"] = False
57
        tc.variables["BUILD_DOCS"] = False
58
        tc.variables["BUILD_TESTING"] = False
59
        tc.generate()
60
        cd = CMakeDeps(self)
61
        cd.generate()
62
        if self.settings.arch in ["x86", "x86_64"]:
63
            envbuild = VirtualBuildEnv(self)
64
            envbuild.generate(scope="build")
65
66
    def build(self):
67
        apply_conandata_patches(self)
68
        cmake = CMake(self)
69
        cmake.configure()
70
        cmake.build()
71
72
    def package(self):
73
        cmake = CMake(self)
74
        cmake.install()
75
        copy(self, "COPYING.*", src=self.source_folder,
76
                                dst=os.path.join(self.package_folder, "licenses"), keep_path=False)
77
        copy(self, "*.h", src=os.path.join(self.source_folder, "include", "share"),
78
                          dst=os.path.join(self.package_folder, "include", "share"), keep_path=False)
79
        copy(self, "*.h", src=os.path.join(self.source_folder, "include", "share", "grabbag"),
80
                          dst=os.path.join(self.package_folder, "include", "share", "grabbag"), keep_path=False)
81
        rmdir(self, os.path.join(self.package_folder, "share"))
82
        rmdir(self, os.path.join(self.package_folder, "lib", "cmake"))
83
        rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
84
85
    def package_info(self):
86
        self.cpp_info.set_property("cmake_file_name", "flac")
87
88
        self.cpp_info.components["libflac"].set_property("cmake_target_name", "FLAC::FLAC")
89
        self.cpp_info.components["libflac"].set_property("pkg_config_name", "flac")
90
        self.cpp_info.components["libflac"].libs = ["FLAC"]
91
        self.cpp_info.components["libflac"].requires = ["ogg::ogg"]
92
93
        self.cpp_info.components["libflac++"].set_property("cmake_target_name", "FLAC::FLAC++")
94
        self.cpp_info.components["libflac++"].set_property("pkg_config_name", "flac++")
95
        self.cpp_info.components["libflac++"].libs = ["FLAC++"]
96
        self.cpp_info.components["libflac++"].requires = ["libflac"]
97
        if not self.options.shared:
98
            self.cpp_info.components["libflac"].defines = ["FLAC__NO_DLL"]
99
            if self.settings.os in ["Linux", "FreeBSD"]:
100
                self.cpp_info.components["libflac"].system_libs += ["m"]
101
102
        bin_path = os.path.join(self.package_folder, "bin")
103
        self.output.info("Appending PATH environment variable: {}".format(bin_path))
104
        self.env_info.PATH.append(bin_path)
105
106
        # TODO: to remove in conan v2
107
        self.cpp_info.filenames["cmake_find_package"] = "flac"
108
        self.cpp_info.filenames["cmake_find_package_multi"] = "flac"
109
        self.cpp_info.names["cmake_find_package"] = "FLAC"
110
        self.cpp_info.names["cmake_find_package_multi"] = "FLAC"
111
        self.cpp_info.components["libflac"].names["cmake_find_package"] = "FLAC"
112
        self.cpp_info.components["libflac"].names["cmake_find_package_multi"] = "FLAC"
113
        self.cpp_info.components["libflac++"].names["cmake_find_package"] = "FLAC++"
114
        self.cpp_info.components["libflac++"].names["cmake_find_package_multi"] = "FLAC++"
115
116