opengl: Fix opengl concretization issues from missing versions (#30331)

This commit is contained in:
Chuck Atkins 2022-05-03 11:51:41 -04:00 committed by GitHub
parent a10f5656ab
commit bdef031d4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -7,41 +7,42 @@
import sys import sys
class Opengl(Package): class Opengl(BundlePackage):
"""Placeholder for external OpenGL libraries from hardware vendors""" """Placeholder for external OpenGL libraries from hardware vendors"""
has_code = False
homepage = "https://www.opengl.org/" homepage = "https://www.opengl.org/"
provides('gl') # Supported OpenGL versions:
provides('gl@:4.5', when='@4.5:') # 1.0 1.1 1.2 1.3 1.4 1.5
provides('gl@:4.4', when='@4.4:') # 2.0 2.1
provides('gl@:4.3', when='@4.3:') # 3.0 3.1 3.2 3.3
provides('gl@:4.2', when='@4.2:') # 4.0 4.1 4.2 4.3 4.4 4.5 4.6
provides('gl@:4.1', when='@4.1:') for ver_major in [
provides('gl@:3.3', when='@3.3:') (1, [0, 1, 2, 3, 4, 5]),
provides('gl@:3.2', when='@3.2:') (2, [0, 1]),
provides('gl@:3.1', when='@3.1:') (3, [0, 1, 2, 3]),
provides('gl@:3.0', when='@3.0:') (4, [0, 1, 2, 3, 4, 5]),
provides('gl@:2.1', when='@2.1:') ]:
provides('gl@:2.0', when='@2.0:') for ver_minor in ver_major[1]:
provides('gl@:1.5', when='@1.5:') ver = "{0}.{1}".format(ver_major[0], ver_minor)
provides('gl@:1.4', when='@1.4:') version(ver)
provides('gl@:1.3', when='@1.3:') provides("gl@:{0}".format(ver), when="@{0}".format(ver))
provides('gl@:1.2', when='@1.2:')
provides('gl@:1.1', when='@1.1:')
provides('gl@:1.0', when='@1.0:')
if sys.platform != 'darwin': # The last version needs to be open-ended
provides('glx@1.4') version('4.6')
provides("gl@:4.6", when="@4.6:")
executables = ['^glxinfo$'] # 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 == "linux":
provides("glx@1.4")
executables = ["^glxinfo$"]
@classmethod @classmethod
def determine_version(cls, exe): def determine_version(cls, exe):
output = Executable(exe)(output=str, error=str) output = Executable(exe)(output=str, error=str)
match = re.search(r'OpenGL version string: (\S+)', output) match = re.search(r"OpenGL version string: (\S+)", output)
return match.group(1) if match else None return match.group(1) if match else None
# Override the fetcher method to throw a useful error message; # Override the fetcher method to throw a useful error message;
@ -91,5 +92,20 @@ def fetcher(self):
@property @property
def libs(self): def libs(self):
return find_libraries( if "platform=windows" in self.spec:
'libGL', self.prefix, shared=True, recursive=True) return find_libraries("opengl32", self.prefix, shared=True, recursive=True)
else:
return find_libraries("libGL", self.prefix, shared=True, recursive=True)
@property
def glx_libs(self):
return find_libraries("libGL",
root=self.spec.prefix,
recursive=True)
@property
def gl_libs(self):
if "platform=windows" in self.spec:
return find_libraries("opengl32", self.prefix, shared=True, recursive=True)
else:
return find_libraries("libGL", self.prefix, shared=True, recursive=True)