Skip to content

Commit 65fb65e

Browse files
authored
glib: add recent versions and fix introspection support (#1625)
This requires adding a glib-bootstrap package with introspection disabled, which can be used to bootstrap gobject-introspection. glib itself requires gobject-introspection in recent versions.
1 parent 988097a commit 65fb65e

3 files changed

Lines changed: 141 additions & 23 deletions

File tree

repos/spack_repo/builtin/packages/glib/package.py

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,12 @@ class Glib(MesonPackage):
2929
license("LGPL-2.1-or-later")
3030

3131
# Even minor versions are stable, odd minor versions are development, only add even numbers
32+
version("2.86.1", sha256="119d1708ca022556d6d2989ee90ad1b82bd9c0d1667e066944a6d0020e2d5e57")
33+
version("2.84.4", sha256="8a9ea10943c36fc117e253f80c91e477b673525ae45762942858aef57631bb90")
3234
version("2.82.5", sha256="05c2031f9bdf6b5aba7a06ca84f0b4aced28b19bf1b50c6ab25cc675277cbc3f")
3335
version("2.82.2", sha256="ab45f5a323048b1659ee0fbda5cecd94b099ab3e4b9abf26ae06aeb3e781fd63")
34-
version(
35-
"2.78.3",
36-
sha256="609801dd373796e515972bf95fc0b2daa44545481ee2f465c4f204d224b2bc21",
37-
preferred=True,
38-
)
36+
version("2.80.5", sha256="9f23a9de803c695bbfde7e37d6626b18b9a83869689dd79019bf3ae66c3e6771")
37+
version("2.78.3", sha256="609801dd373796e515972bf95fc0b2daa44545481ee2f465c4f204d224b2bc21")
3938
version("2.78.0", sha256="44eaab8b720877ce303c5540b657b126f12dc94972d9880b52959f43fb537b30")
4039
version("2.76.6", sha256="1136ae6987dcbb64e0be3197a80190520f7acab81e2bfb937dc85c11c8aa9f04")
4140
version("2.76.4", sha256="5a5a191c96836e166a7771f7ea6ca2b0069c603c7da3cba1cd38d1694a395dda")
@@ -78,6 +77,12 @@ class Glib(MesonPackage):
7877
values=any_combination_of("dtrace", "systemtap"),
7978
description="Enable tracing support",
8079
)
80+
variant(
81+
"introspection",
82+
default=True,
83+
description="Build with introspection support",
84+
when="@2.79:",
85+
)
8186

8287
depends_on("c", type="build")
8388
depends_on("cxx", type="build")
@@ -89,7 +94,8 @@ class Glib(MesonPackage):
8994
depends_on("meson@0.52.0:", when="@2.71:")
9095
depends_on("meson@0.49.2:", when="@2.61.2:")
9196
depends_on("meson@0.48.0:")
92-
depends_on("pkgconfig", type="build")
97+
depends_on("pkgconfig")
98+
depends_on("gobject-introspection@1.80:", when="+introspection")
9399

94100
depends_on("libffi")
95101
depends_on("zlib-api")
@@ -124,9 +130,18 @@ def patch(self):
124130
gio_tests.filter("'file' : {},", "")
125131
gio_tests.filter("'gdbus-peer'", "'file'")
126132
gio_tests.filter("'gdbus-address-get-session' : {},", "")
127-
filter_file("'mkenums.py'( : {})*,*", "", "gobject/tests/meson.build")
133+
filter_file("'mkenums.py' : {},", "", "gobject/tests/meson.build")
128134
filter_file("'fileutils' : {},", "", "glib/tests/meson.build")
129135

136+
def setup_run_environment(self, env: EnvironmentModifications) -> None:
137+
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
138+
139+
def setup_dependent_run_environment(
140+
self, env: EnvironmentModifications, dependent_spec: Spec
141+
) -> None:
142+
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
143+
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
144+
130145
@property
131146
def libs(self):
132147
return find_libraries(["libglib*"], root=self.prefix, recursive=True)
@@ -202,8 +217,18 @@ def gettext_libdir(self):
202217
join_path(self.spec["glib"].libs.directories[0], "pkgconfig", "glib-2.0.pc"),
203218
)
204219

220+
def setup_dependent_build_environment(
221+
self, env: EnvironmentModifications, dependent_spec: Spec
222+
) -> None:
223+
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
224+
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
225+
205226
def meson_args(self):
206227
args = []
228+
if self.spec.satisfies("+introspection"):
229+
args.append("-Dintrospection=enabled")
230+
else:
231+
args.append("-Dintrospection=disabled")
207232
if self.spec.satisfies("@2.63.5:"):
208233
if self.spec.satisfies("+libmount"):
209234
args.append("-Dlibmount=enabled")
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Copyright Spack Project Developers. See COPYRIGHT file for details.
2+
#
3+
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
4+
5+
from spack_repo.builtin.build_systems import meson
6+
from spack_repo.builtin.build_systems.meson import MesonPackage
7+
8+
from spack.package import *
9+
10+
11+
class GlibBootstrap(MesonPackage):
12+
"""GLib provides the core application building blocks for libraries and applications written
13+
in C.
14+
15+
The GLib package contains a low-level libraries useful for providing data structure handling
16+
for C, portability wrappers and interfaces for such runtime functionality as an event loop,
17+
threads, dynamic loading and an object system.
18+
"""
19+
20+
homepage = "https://developer.gnome.org/glib/"
21+
url = "https://download.gnome.org/sources/glib/2.86/glib-2.86.1.tar.xz"
22+
list_url = "https://download.gnome.org/sources/glib"
23+
list_depth = 1
24+
25+
maintainers("michaelkuhn")
26+
27+
license("LGPL-2.1-or-later")
28+
29+
# Even minor versions are stable, odd minor versions are development, only add even numbers
30+
version("2.86.1", sha256="119d1708ca022556d6d2989ee90ad1b82bd9c0d1667e066944a6d0020e2d5e57")
31+
32+
depends_on("c", type="build")
33+
depends_on("cxx", type="build")
34+
35+
with default_args(type="build"):
36+
depends_on("meson@1.4:", when="@2.83:")
37+
depends_on("pkgconfig", type="build")
38+
39+
depends_on("libffi")
40+
depends_on("zlib-api")
41+
depends_on("gettext")
42+
depends_on("perl", type=("build", "run"))
43+
extends("python", type=("build", "run"))
44+
depends_on("pcre2@10.34:")
45+
depends_on("iconv")
46+
47+
def url_for_version(self, version):
48+
return f"https://download.gnome.org/sources/glib/{version.up_to(2)}/glib-{version}.tar.xz"
49+
50+
@property
51+
def libs(self):
52+
return find_libraries(["libglib*"], root=self.prefix, recursive=True)
53+
54+
55+
class MesonBuilder(meson.MesonBuilder):
56+
def meson_args(self):
57+
args = [
58+
"-Dselinux=disabled",
59+
"-Dlibmount=disabled",
60+
"-Dman-pages=disabled",
61+
"-Ddtrace=disabled",
62+
"-Dsystemtap=disabled",
63+
"-Dsysprof=disabled",
64+
"-Dtests=false",
65+
"-Dnls=disabled",
66+
"-Dlibelf=disabled",
67+
"-Dintrospection=disabled",
68+
]
69+
70+
return args

repos/spack_repo/builtin/packages/gobject_introspection/package.py

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright Spack Project Developers. See COPYRIGHT file for details.
22
#
33
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
4-
from spack_repo.builtin.build_systems import autotools
4+
from spack_repo.builtin.build_systems import autotools, meson
55
from spack_repo.builtin.build_systems.autotools import AutotoolsPackage
66
from spack_repo.builtin.build_systems.meson import MesonPackage
77

@@ -21,6 +21,10 @@ class GobjectIntrospection(MesonPackage, AutotoolsPackage):
2121

2222
license("LGPL-2.0-or-later AND GPL-2.0-or-later AND MIT")
2323

24+
version("1.86.0", sha256="920d1a3fcedeadc32acff95c2e203b319039dd4b4a08dd1a2dfd283d19c0b9ae")
25+
version("1.84.0", sha256="945b57da7ec262e5c266b89e091d14be800cc424277d82a02872b7d794a84779")
26+
version("1.82.0", sha256="0f5a4c1908424bf26bc41e9361168c363685080fbdb87a196c891c8401ca2f09")
27+
version("1.80.1", sha256="a1df7c424e15bda1ab639c00e9051b9adf5cea1a9e512f8a603b53cd199bc6d8")
2428
version("1.78.1", sha256="bd7babd99af7258e76819e45ba4a6bc399608fe762d83fde3cac033c50841bb4")
2529
version("1.76.1", sha256="196178bf64345501dcdc4d8469b36aa6fe80489354efe71cb7cb8ab82a3738bf")
2630
version("1.72.1", sha256="012e313186e3186cf0fde6decb57d970adf90e6b1fac5612fe69cbb5ba99543a")
@@ -45,7 +49,9 @@ class GobjectIntrospection(MesonPackage, AutotoolsPackage):
4549
# Does not build with sed from Darwin
4650
depends_on("sed", when="platform=darwin", type="build")
4751

48-
depends_on("cairo+gobject")
52+
depends_on("cairo+gobject", when="@:1.78")
53+
depends_on("glib-bootstrap@2.82:", when="@1.82:")
54+
depends_on("glib-bootstrap@2.80:", when="@1.80")
4955
depends_on("glib@2.78:", when="@1.78")
5056
depends_on("glib@2.76:", when="@1.76")
5157
depends_on("glib@2.58:", when="@1.60:1.72")
@@ -124,35 +130,52 @@ def url_for_version(self, version):
124130
url = "https://download.gnome.org/sources/gobject-introspection/{0}/gobject-introspection-{1}.tar.xz"
125131
return url.format(version.up_to(2), version)
126132

127-
def setup_build_environment(self, env: EnvironmentModifications) -> None:
128-
# Only needed for sbang.patch above
129-
if self.spec.satisfies("@:1.60"):
130-
env.set("SPACK_SBANG", sbang_install_path())
131-
env.set("GI_SCANNER_DISABLE_CACHE", "1")
132-
133133
def setup_run_environment(self, env: EnvironmentModifications) -> None:
134134
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
135135

136-
def setup_dependent_build_environment(
136+
def setup_dependent_run_environment(
137137
self, env: EnvironmentModifications, dependent_spec: Spec
138138
) -> None:
139139
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
140140
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
141+
142+
@property
143+
def parallel(self):
144+
return not self.spec.satisfies("%fj")
145+
146+
147+
class BuildEnvironment:
148+
def setup_build_environment(self, env: EnvironmentModifications) -> None:
149+
# Only needed for sbang.patch above
150+
if self.spec.satisfies("@:1.60"):
151+
env.set("SPACK_SBANG", sbang_install_path())
141152
env.set("GI_SCANNER_DISABLE_CACHE", "1")
142153

143-
def setup_dependent_run_environment(
154+
def setup_dependent_build_environment(
144155
self, env: EnvironmentModifications, dependent_spec: Spec
145156
) -> None:
146157
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
147158
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
159+
env.set("GI_SCANNER_DISABLE_CACHE", "1")
148160

149-
@property
150-
def parallel(self):
151-
return not self.spec.satisfies("%fj")
161+
if self.spec.satisfies("^glib-bootstrap"):
162+
env.append_path("PKG_CONFIG_PATH", self.spec["glib-bootstrap"].prefix.lib.pkgconfig)
152163

153164

154-
class AutotoolsBuilderPackage(autotools.AutotoolsBuilder):
165+
class AutotoolsBuilder(BuildEnvironment, autotools.AutotoolsBuilder):
155166
@run_before("build")
156167
def filter_file_to_avoid_overly_long_shebangs(self):
157-
# we need to filter this file to avoid an overly long hashbang line
158-
filter_file("#!/usr/bin/env @PYTHON@", "#!@PYTHON@", "tools/g-ir-tool-template.in")
168+
filter_file(
169+
"#!/usr/bin/env @PYTHON@", "#!@PYTHON@", "tools/g-ir-tool-template.in", string=True
170+
)
171+
172+
173+
class MesonBuilder(BuildEnvironment, meson.MesonBuilder):
174+
@run_before("build")
175+
def filter_file_to_avoid_overly_long_shebangs(self):
176+
filter_file(
177+
"#!@PYTHON_CMD@",
178+
f"{sbang_shebang_line()}\n#!@PYTHON_CMD@",
179+
"tools/g-ir-tool-template.in",
180+
string=True,
181+
)

0 commit comments

Comments
 (0)