spack/var/spack/repos/builtin/packages/gobject-introspection/package.py
Massimiliano Culpo 30c9ff50dd
Allow for packages with multiple build-systems (#30738)
This commit extends the DSL that can be used in packages
to allow declaring that a package uses different build-systems
under different conditions.

It requires each spec to have a `build_system` single valued
variant. The variant can be used in many context to query, manipulate
or select the build system associated with a concrete spec.

The knowledge to build a package has been moved out of the
PackageBase hierarchy, into a new Builder hierarchy. Customization
of the default behavior for a given builder can be obtained by
coding a new derived builder in package.py.

The "run_after" and "run_before" decorators are now applied to
methods on the builder. They can also incorporate a "when="
argument to specify that a method is run only when certain
conditions apply.

For packages that do not define their own builder, forwarding logic
is added between the builder and package (methods not found in one
will be retrieved from the other); this PR is expected to be fully
backwards compatible with unmodified packages that use a single
build system.
2022-10-26 20:17:32 +02:00

110 lines
4.7 KiB
Python

# Copyright 2013-2022 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 spack.build_systems.autotools
import spack.hooks.sbang as sbang
from spack.package import *
class GobjectIntrospection(MesonPackage, AutotoolsPackage):
"""The GObject Introspection is used to describe the program APIs and
collect them in a uniform, machine readable format.Cairo is a 2D graphics
library with support for multiple output
"""
homepage = "https://wiki.gnome.org/Projects/GObjectIntrospection"
url = "https://download.gnome.org/sources/gobject-introspection/1.72/gobject-introspection-1.72.0.tar.xz"
maintainers = ["michaelkuhn"]
version("1.72.0", sha256="02fe8e590861d88f83060dd39cda5ccaa60b2da1d21d0f95499301b186beaabc")
version("1.56.1", sha256="5b2875ccff99ff7baab63a34b67f8c920def240e178ff50add809e267d9ea24b")
version("1.49.2", sha256="73d59470ba1a546b293f54d023fd09cca03a951005745d86d586b9e3a8dde9ac")
version("1.48.0", sha256="fa275aaccdbfc91ec0bc9a6fd0562051acdba731e7d584b64a277fec60e75877")
build_system(
conditional("autotools", when="@:1.60"),
conditional("meson", when="@1.61:"),
default="meson",
)
depends_on("pkgconfig", type="build")
depends_on("bison", type="build")
depends_on("flex", type="build")
# Does not build with sed from Darwin
depends_on("sed", when="platform=darwin", type="build")
depends_on("cairo+gobject")
depends_on("glib@2.49.2:", when="@1.49.2:")
# version 1.48.0 build fails with glib 2.49.4
depends_on("glib@2.48.1", when="@1.48.0")
depends_on("libffi")
# https://gitlab.gnome.org/GNOME/gobject-introspection/-/merge_requests/283
depends_on("libffi@:3.3", when="@:1.70") # libffi 3.4 caused seg faults
depends_on("python")
# This package creates several scripts from
# toosl/g-ir-tool-template.in. In their original form these
# scripts end up with a sbang line like
#
# `#!/usr/bin/env /path/to/spack/python`.
#
# These scripts are generated and then used as part of the build
# (other packages also use the scripts after they've been
# installed).
#
# The path to the spack python can become too long. Because these
# tools are used as part of the build, the normal hook that fixes
# this problem can't help us.
# This package fixes the problem in two steps:
# - it rewrites the g-ir-tool-template so that its sbang line
# refers directly to spack's python (filter_file step below); and
# - it patches the Makefile.in so that the generated Makefile has an
# extra sed expression in its TOOL_SUBSTITUTION that results in
# an `#!/bin/bash /path/to/spack/bin/sbang` unconditionally being
# inserted into the scripts as they're generated.
patch("sbang.patch", when="@:1.60")
# Drop deprecated xml.etree.ElementTree.Element.getchildren() which leads
# to compilation issues with Python 3.9.
# https://gitlab.gnome.org/GNOME/gobject-introspection/-/issues/325
patch(
"https://gitlab.gnome.org/GNOME/gobject-introspection/-/commit/"
"1f9284228092b2a7200e8a78bc0ea6702231c6db.patch",
sha256="7700828b638c85255c87fcc317ea7e9572ff443f65c86648796528885e5b4cea",
when="@:1.63.1",
)
def url_for_version(self, version):
url = "https://download.gnome.org/sources/gobject-introspection/{0}/gobject-introspection-{1}.tar.xz"
return url.format(version.up_to(2), version)
def setup_build_environment(self, env):
# Only needed for sbang.patch above
if self.spec.satisfies("@:1.60"):
env.set("SPACK_SBANG", sbang.sbang_install_path())
def setup_run_environment(self, env):
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
def setup_dependent_build_environment(self, env, dependent_spec):
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
def setup_dependent_run_environment(self, env, dependent_spec):
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
@property
def parallel(self):
return not self.spec.satisfies("%fj")
class AutotoolsBuilderPackage(spack.build_systems.autotools.AutotoolsBuilder):
@run_before("build")
def filter_file_to_avoid_overly_long_shebangs(self):
# we need to filter this file to avoid an overly long hashbang line
filter_file("#!/usr/bin/env @PYTHON@", "#!@PYTHON@", "tools/g-ir-tool-template.in")