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

Replies

Subject Author
Re: [gentoo-dev] [RFC] new vala.eclass Alexandre Rostovtsev <tetromino@g.o>