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. |