summaryrefslogtreecommitdiff
path: root/eclass/meson-multilib.eclass
blob: 0c069af11930d5736b631a4afba1772d793aab71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

# @ECLASS: meson-multilib.eclass
# @MAINTAINER:
# Matt Turner <mattst88@gentoo.org>
# @AUTHOR:
# Michał Górny <mgorny@gentoo.org>
# Matt Turner <mattst88@gentoo.org>
# @SUPPORTED_EAPIS: 7 8
# @PROVIDES: meson multilib-minimal
# @BLURB: meson wrapper for multilib builds
# @DESCRIPTION:
# The meson-multilib.eclass provides a glue between meson.eclass(5)
# and multilib-minimal.eclass(5), aiming to provide a convenient way
# to build packages using meson for multiple ABIs.
#
# Inheriting this eclass sets IUSE and exports default multilib_src_*()
# sub-phases that call meson phase functions for each ABI enabled.
# The multilib_src_*() functions can be defined in ebuild just like
# in multilib-minimal, yet they ought to call appropriate meson
# phase rather than 'default'.

case ${EAPI} in
	7|8) ;;
	*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
esac

if [[ -z ${_MESON_MULTILIB_ECLASS} ]] ; then
_MESON_MULTILIB_ECLASS=1

inherit meson multilib-minimal

# @FUNCTION: meson_native_use_bool
# @USAGE: <USE flag> [option name]
# @DESCRIPTION:
# Given a USE flag and a meson project option, output a string like:
#
#   -Doption=true
#   -Doption=false
#
# if building for the native ABI (multilib_is_native_abi is true). Otherwise,
# output -Doption=false. If the project option is unspecified, it defaults
# to the USE flag.
meson_native_use_bool() {
	multilib_native_usex "${1}" "-D${2-${1}}=true" "-D${2-${1}}=false"
}

# @FUNCTION: meson_native_use_feature
# @USAGE: <USE flag> [option name]
# @DESCRIPTION:
# Given a USE flag and a meson project option, output a string like:
#
#   -Doption=enabled
#   -Doption=disabled
#
# if building for the native ABI (multilib_is_native_abi is true). Otherwise,
# output -Doption=disabled. If the project option is unspecified, it defaults
# to the USE flag.
meson_native_use_feature() {
	multilib_native_usex "${1}" "-D${2-${1}}=enabled" "-D${2-${1}}=disabled"
}

# @FUNCTION: meson_native_enabled
# @USAGE: <option name>
# @DESCRIPTION:
# Output -Doption=enabled option if executables are being built
# (multilib_is_native_abi is true). Otherwise, output -Doption=disabled option.
meson_native_enabled() {
	if multilib_is_native_abi; then
		echo "-D${1}=enabled"
	else
		echo "-D${1}=disabled"
	fi
}

# @FUNCTION: meson_native_true
# @USAGE: <option name>
# @DESCRIPTION:
# Output -Doption=true option if executables are being built
# (multilib_is_native_abi is true). Otherwise, output -Doption=false option.
meson_native_true() {
	if multilib_is_native_abi; then
		echo "-D${1}=true"
	else
		echo "-D${1}=false"
	fi
}

meson-multilib_src_configure() {
	local _meson_args=( "${@}" )

	multilib-minimal_src_configure
}

multilib_src_configure() {
	meson_src_configure "${_meson_args[@]}"
}

meson-multilib_src_compile() {
	local _meson_args=( "${@}" )

	multilib-minimal_src_compile
}

multilib_src_compile() {
	meson_src_compile "${_meson_args[@]}"
}

meson-multilib_src_test() {
	local _meson_args=( "${@}" )

	multilib-minimal_src_test
}

multilib_src_test() {
	meson_src_test "${_meson_args[@]}"
}

meson-multilib_src_install() {
	local _meson_args=( "${@}" )

	multilib-minimal_src_install
}

multilib_src_install() {
	meson_install "${_meson_args[@]}"
}

fi

EXPORT_FUNCTIONS src_configure src_compile src_test src_install