Skip to content

Commit

Permalink
(#20324) libdisplay-info: Add recipe
Browse files Browse the repository at this point in the history
* libdisplay-info: Add recipe

* Don't set PATH

* Bump Meson version

* Ensure that hwdata is found

* Make the recipe work without a build profile

* Set default for getattr

* Disable on macOS

Apple's linker doesn't support '--version-script'.

* Only build for Linux / FreeBSD

* Add missing colon

* Update recipes/libdisplay-info/all/conanfile.py

Co-authored-by: Martin Valgur <martin.valgur@gmail.com>

---------

Co-authored-by: Martin Valgur <martin.valgur@gmail.com>
  • Loading branch information
jwillikers and valgur authored Nov 16, 2023
1 parent 8550175 commit b0fcb6f
Show file tree
Hide file tree
Showing 6 changed files with 153 additions and 0 deletions.
4 changes: 4 additions & 0 deletions recipes/libdisplay-info/all/conandata.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
sources:
"0.1.1":
url: "https://gitlab.freedesktop.org/emersion/libdisplay-info/-/archive/0.1.1/libdisplay-info-0.1.1.tar.bz2"
sha256: "51cdb0362882ca2af62532ab4d95e60d81e9890b339264719fd55f8e3945d695"
101 changes: 101 additions & 0 deletions recipes/libdisplay-info/all/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
from conan import ConanFile
from conan.errors import ConanInvalidConfiguration
from conan.tools.build import cross_building
from conan.tools.env import VirtualBuildEnv
from conan.tools.files import copy, get, replace_in_file, rm, rmdir
from conan.tools.gnu import PkgConfigDeps
from conan.tools.layout import basic_layout
from conan.tools.meson import Meson, MesonToolchain
import os


required_conan_version = ">=1.53.0"


class LibdisplayInfoConan(ConanFile):
name = "libdisplay-info"
description = "EDID and DisplayID library."
license = "MIT"
url = "https://github.com/conan-io/conan-center-index"
homepage = "https://gitlab.freedesktop.org/emersion/libdisplay-info"
topics = ("display", "DisplayID", "EDID")
package_type = "library"
settings = "os", "arch", "compiler", "build_type"
options = {
"shared": [True, False],
"fPIC": [True, False],
}
default_options = {
"shared": False,
"fPIC": True,
}

@property
def _has_build_profile(self):
return getattr(self, "settings_build", None)

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

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 layout(self):
basic_layout(self, src_folder="src")

def requirements(self):
if not self._has_build_profile:
self.requires("hwdata/0.374")

def validate(self):
if not self.settings.os in ["FreeBSD", "Linux"]:
raise ConanInvalidConfiguration(f"{self.ref} is not supported on {self.settings.os}")

def build_requirements(self):
if self._has_build_profile:
self.tool_requires("hwdata/0.374")
self.tool_requires("meson/1.2.3")
if not self.conf.get("tools.gnu:pkg_config", default=False, check_type=str):
self.tool_requires("pkgconf/2.0.3")

def source(self):
get(self, **self.conan_data["sources"][self.version], strip_root=True)

def generate(self):
tc = MesonToolchain(self)
if cross_building(self):
tc.project_options["build.pkg_config_path"] = self.generators_folder
tc.generate()
pkg_config_deps = PkgConfigDeps(self)
if self._has_build_profile:
pkg_config_deps.build_context_activated = ["hwdata"]
pkg_config_deps.generate()
virtual_build_env = VirtualBuildEnv(self)
virtual_build_env.generate()

def _patch_sources(self):
replace_in_file(self, os.path.join(self.source_folder, "meson.build"), "subdir('test')", "# subdir('test')")

def build(self):
self._patch_sources()
meson = Meson(self)
meson.configure()
meson.build()

def package(self):
copy(self, "LICENSE", self.source_folder, os.path.join(self.package_folder, "licenses"))
meson = Meson(self)
meson.install()

rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
rm(self, "*.pdb", os.path.join(self.package_folder, "lib"))
rm(self, "*.pdb", os.path.join(self.package_folder, "bin"))

def package_info(self):
self.cpp_info.libs = ["display-info"]
if self.settings.os in ["Linux", "FreeBSD"]:
self.cpp_info.system_libs.extend(["m"])
32 changes: 32 additions & 0 deletions recipes/libdisplay-info/all/test_package/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from conan import ConanFile
from conan.tools.build import can_run
from conan.tools.layout import basic_layout
from conan.tools.meson import Meson
import os


class TestPackageConan(ConanFile):
settings = "os", "arch", "compiler", "build_type"
generators = "PkgConfigDeps", "MesonToolchain", "VirtualRunEnv", "VirtualBuildEnv"
test_type = "explicit"

def layout(self):
basic_layout(self)

def requirements(self):
self.requires(self.tested_reference_str)

def build_requirements(self):
self.tool_requires("meson/1.2.3")
if not self.conf.get("tools.gnu:pkg_config", default=False, check_type=str):
self.tool_requires("pkgconf/2.0.3")

def build(self):
meson = Meson(self)
meson.configure()
meson.build()

def test(self):
if can_run(self):
bin_path = os.path.join(self.cpp.build.bindir, "test_package")
self.run(bin_path, env="conanrun")
5 changes: 5 additions & 0 deletions recipes/libdisplay-info/all/test_package/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
project('test_package', 'c')
package_dep = dependency('libdisplay-info')
executable('test_package',
sources : ['test_package.c'],
dependencies : [package_dep])
8 changes: 8 additions & 0 deletions recipes/libdisplay-info/all/test_package/test_package.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#include <stddef.h>

#include <libdisplay-info/info.h>

int main()
{
return di_info_parse_edid("", 0) != 0;
}
3 changes: 3 additions & 0 deletions recipes/libdisplay-info/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
versions:
"0.1.1":
folder: all

0 comments on commit b0fcb6f

Please sign in to comment.