blob: d79f1e30db36a70b5bbb00341a7579fad2a67f36 (
plain) (
tree)
|
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import re
import sys
from spack.package import *
class Egl(BundlePackage):
"""Placeholder for external EGL(OpenGL) libraries from hardware vendors"""
homepage = "https://www.khronos.org/egl"
maintainers("biddisco")
version("1.5")
# This should really be when='platform=linux' but can't because of a
# current bug in when and how ArchSpecs are constructed
if sys.platform.startswith("linux"):
provides("gl@4.5")
# conflict with GLX
conflicts("glx")
# not always available, but sometimes
executables = ["^eglinfo$"]
@classmethod
def determine_version(cls, exe):
if exe:
output = Executable(exe)(output=str, error=str)
match = re.search(r"EGL version string: (\S+)", output)
return match.group(1) if match else None
else:
return None
# Override the fetcher method to throw a useful error message;
# fixes GitHub issue (#7061) in which this package threw a
# generic, uninformative error during the `fetch` step,
@property
def fetcher(self):
msg = """This package is intended to be a placeholder for
system-provided EGL(OpenGL) libraries from hardware vendors. Please
download and install EGL drivers/libraries for your graphics
hardware separately, and then set that up as an external package.
An example of a working packages.yaml:
packages:
egl:
buildable: False
externals:
- spec: egl@1.5.0
prefix: /usr/
In that case, /usr/ should contain these two folders:
include/EGL/ (egl headers, including "egl.h")
lib (egl libraries, including "libEGL.so")
"""
raise InstallError(msg)
@fetcher.setter # Since fetcher is read-write, must override both
def fetcher(self):
_ = self.fetcher
@property
def headers(self):
return self.egl_headers
@property
def libs(self):
return self.egl_libs
@property
def egl_headers(self):
header_name = "GL/gl"
gl_header = find_headers(header_name, root=self.prefix, recursive=True)
header_name = "EGL/egl"
egl_header = find_headers(header_name, root=self.prefix, recursive=True)
return gl_header + egl_header
@property
def egl_libs(self):
lib_name = "libGL"
gl_lib = find_libraries(lib_name, root=self.prefix, recursive=True)
lib_name = "libEGL"
egl_lib = find_libraries(lib_name, root=self.prefix, recursive=True)
return gl_lib + egl_lib
|