1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
# Copyright 2013-2024 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 os
import re
from spack.package import *
class Wgl(Package):
"""External WGl and Windows OpenGL emulation representation in Spack"""
homepage = "https://learn.microsoft.com/en-us/windows/win32/opengl/wgl-and-windows-reference"
has_code = False
tags = ["windows"]
# hard code the extension as shared lib
libraries = ["OpenGL32.Lib"]
# versions here are in no way related to actual WGL versions
# (there is only one on a system at a time)
# but instead reflects the Windows Kit version that a particular WGL library file is found in
# Windows Kits are intended to be more or less contained environments so this allows us to
# marshall our SDK and WDK to their respective WGLs. The purpose here is to better reflect
# the concept of an MS build toolchain version W.R.T. to MSVC
version("10.0.22621")
version("10.0.19041")
version("10.0.18362")
version("10.0.17763")
version("10.0.17134")
version("10.0.16299")
version("10.0.15063")
version("10.0.14393")
version("10.0.10586")
version("10.0.26639")
version("10.0.20348")
# As per https://github.com/spack/spack/pull/31748 this provisory version represents
# an arbitrary openGL version designed for maximum compatibility with calling packages
# this current version simply reflects the latest OpenGL vesion available at the time of
# package creation and is set in a way that all specs currently depending on GL are
# satisfied appropriately
provides("gl@4.6")
# WGL exists on all Windows systems post win 98, however the headers
# needed to use OpenGL are found in the SDK (GL/gl.h)
# Dep is needed to consolidate sdk version to locate header files for
# version of SDK being used
# Generic depends to capture handling for external versions
depends_on("win-sdk")
depends_on("win-sdk@10.0.19041", when="@10.0.19041")
depends_on("win-sdk@10.0.18362", when="@10.0.18362")
depends_on("win-sdk@10.0.17763", when="@10.0.17763")
depends_on("win-sdk@10.0.17134", when="@10.0.17134")
depends_on("win-sdk@10.0.16299", when="@10.0.16299")
depends_on("win-sdk@10.0.15063", when="@10.0.15063")
depends_on("win-sdk@10.0.14393", when="@10.0.14393")
# WGL has no meaning on other platforms, should not be able to spec
for plat in ["linux", "darwin", "cray"]:
conflicts("platform=%s" % plat)
@classmethod
def determine_version(cls, lib):
"""Allow for WGL to be externally detectable"""
version_match_pat = re.compile(r"[0-9][0-9].[0-9]+.[0-9][0-9][0-9][0-9][0-9]")
ver_str = re.search(version_match_pat, lib)
return ver_str if not ver_str else Version(ver_str.group())
def _spec_arch_to_sdk_arch(self):
spec_arch = str(self.spec.architecture.target).lower()
_64bit = "64" in spec_arch
arm = "arm" in spec_arch
if arm:
return "arm64" if _64bit else "arm"
else:
return "x64" if _64bit else "x86"
# As noted above, the headers neccesary to include
@property
def headers(self):
return find_headers(
"GL", root=os.path.join(self.prefix.Include, str(self.version) + ".0"), recursive=True
)
@property
def libs(self):
return find_libraries(
"opengl32",
shared=False,
root=os.path.join(
self.prefix.Lib, str(self.version) + ".0", "um", self._spec_arch_to_sdk_arch()
),
recursive=True,
)
def install(self, spec, prefix):
raise RuntimeError(
"This package is not installable from Spack\
and should be installed on the system prior to Spack use.\
If not installed this package should be installed via\
the Visual Studio installer in order to use the \
MSVC compiler on Windows."
)
|