
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.
110 lines
4.7 KiB
Python
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")
|