Gentoo Archives: gentoo-dev

From: Alexandre Rostovtsev <tetromino@g.o>
To: gentoo-dev@l.g.o
Subject: Re: [gentoo-dev] [RFC] new vala.eclass
Date: Wed, 12 Sep 2012 20:25:59
Message-Id: 1347481490.9013.50.camel@rook
In Reply to: Re: [gentoo-dev] [RFC] new vala.eclass by Alexandre Rostovtsev
1 On Sun, 2012-09-09 at 22:09 -0400, Alexandre Rostovtsev wrote:
2 > Revised proposal with suggestions from Nirbheek. VALA_API_VERSION has
3 > been split into max and min to make it easier for packages to depend on
4 > a range of vala slots.
5 >
6 > # Copyright 1999-2012 Gentoo Foundation
7 > # Distributed under the terms of the GNU General Public License v2
8 > # $Header: $
9 >
10 > # @ECLASS: vala.eclass
11 > # @MAINTAINER:
12 > # gnome@g.o
13 > # @AUTHOR:
14 > # Alexandre Rostovtsev <tetromino@g.o>
15 > # @BLURB: Sets up the environment for using a specific version of vala.
16 > # @DESCRIPTION:
17 > # This eclass sets up commonly used environment variables for using a specific
18 > # version of dev-lang/vala to configure and build a package. It is needed for
19 > # packages whose build systems assume the existence of certain unversioned vala
20 > # executables, pkgconfig files, etc., which Gentoo does not provide.
21 > #
22 > # This eclass provides one phase function: src_prepare.
23 >
24 > inherit multilib
25 >
26 > case "${EAPI:-0}" in
27 > 0) die "EAPI=0 is not supported" ;;
28 > 1) ;;
29 > *) EXPORT_FUNCTIONS src_prepare ;;
30 > esac
31 >
32 > # @ECLASS-VARIABLE: VALA_MIN_API_VERSION
33 > # @DEFAULT_UNSET
34 > # @DESCRIPTION:
35 > # Minimum vala API version (e.g. 0.16).
36 > VALA_MIN_API_VERSION=${VALA_MIN_API_VERSION:-0.10}
37 >
38 > # @ECLASS-VARIABLE: VALA_MAX_API_VERSION
39 > # @DEFAULT_UNSET
40 > # @DESCRIPTION:
41 > # Maximum vala API version (e.g. 0.18).
42 > VALA_MAX_API_VERSION=${VALA_MAX_API_VERSION:-0.18}
43 >
44 > # @ECLASS-VARIABLE: VALA_USE_DEPEND
45 > # @DEFAULT_UNSET
46 > # @DESCRIPTION:
47 > # USE dependencies that vala must be built with (e.g. vapigen).
48 >
49 > # @FUNCTION: vala_api_versions
50 > # @DESCRIPTION:
51 > # Outputs a list of vala API versions from VALA_MAX_API_VERSION down to
52 > # VALA_MIN_API_VERSION.
53 > vala_api_versions() {
54 > eval "echo 0.{${VALA_MAX_API_VERSION#0.}..${VALA_MIN_API_VERSION#0.}..2}"
55 > }
56 >
57 > # @FUNCTION: vala_depend
58 > # @DESCRIPTION:
59 > # Outputs a ||-dependency string on vala from VALA_MAX_API_VERSION down to
60 > # VALA_MIN_API_VERSION
61 > vala_depend() {
62 > local u v versions=$(vala_api_versions)
63 > [[ ${VALA_USE_DEPEND} ]] && u="[${VALA_USE_DEPEND}]"
64 >
65 > echo -n "|| ("
66 > for v in ${versions}; do
67 > echo -n " dev-lang/vala:${v}${u}"
68 > done
69 > echo " )"
70 > }
71 >
72 > # @FUNCTION: vala_best_api_version
73 > # @DESCRIPTION:
74 > # Returns the highest installed vala API version satisfying
75 > # VALA_MAX_API_VERSION, VALA_MIN_API_VERSION, and VALA_USE_DEPEND.
76 > vala_best_api_version() {
77 > local u v
78 > [[ ${VALA_USE_DEPEND} ]] && u="[${VALA_USE_DEPEND}]"
79 > for v in $(vala_api_versions); do
80 > has_version "dev-lang/vala:${v}${u}" && echo "${v}" && return
81 > done
82 > }
83 >
84 > # @FUNCTION: vala_src_prepare
85 > # @USAGE: [--vala-api-version api_version]
86 > # @DESCRIPTION:
87 > # Sets up the environment variables and pkgconfig files for the
88 > # specified API version, or, if no version is specified, for the
89 > # highest installed vala API version satisfying
90 > # VALA_MIN_API_VERSION, VALA_MIN_API_VERSION, and VALA_USE_DEPEND.
91 > vala_src_prepare() {
92 > local p d valafoo version
93 >
94 > if [[ $1 = "--vala-api-version" ]]; then
95 > version=$2
96 > [[ ${version} ]] || die "'--vala-api-version' option requires API version parameter."
97 > else
98 > version=$(vala_best_api_version)
99 > [[ ${version} ]] || die "No installed vala in $(vala_depend)"
100 > fi
101 >
102 > export VALAC=$(type -P valac-${version})
103 >
104 > valafoo=$(type -P vala-gen-introspect-${VALA_API_VERSION})
105 > [[ ${valafoo} ]] && export VALA_GEN_INTROSPECT=$(type -P vala-gen-introspect-${version})
106 >
107 > valafoo=$(type -P vapigen-${VALA_API_VERSION})
108 > [[ ${valafoo} ]] && export VAPIGEN="${valafoo}"
109 >
110 > valafoo="${EPREFIX}/usr/share/vala/Makefile.vapigen"
111 > [[ -e ${valafoo} ]] && export VAPIGEN_MAKEFILE="${valafoo}"
112 >
113 > export VAPIGEN_VAPIDIR="${EPREFIX}/usr/share/vala/vapi"
114 >
115 > mkdir -p "${T}/pkgconfig" || die "mkdir failed"
116 > for p in libvala vapigen; do
117 > for d in "${EPREFIX}/usr/$(get_libdir)/pkgconfig" "${EPREFIX}/usr/share/pkgconfig"; do
118 > if [[ -e ${d}/${p}-${VALA_API_VERSION}.pc ]]; then
119 > ln -s "${d}/${p}-${VALA_API_VERSION}.pc" "${T}/pkgconfig/${p}.pc" || die "ln failed"
120 > break
121 > fi
122 > done
123 > done
124 > : ${PKG_CONFIG_PATH:="${EPREFIX}/usr/$(get_libdir)/pkgconfig:${EPREFIX}/usr/share/pkgconfig"}
125 > export PKG_CONFIG_PATH="${T}/pkgconfig:${PKG_CONFIG_PATH}"
126 > }
127
128 Now in portage.