forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
base.eclass
194 lines (161 loc) · 5.17 KB
/
base.eclass
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
# @ECLASS: base.eclass
# @MAINTAINER:
# QA Team <[email protected]>
# @AUTHOR:
# Original author: Dan Armak <[email protected]>
# @BLURB: The base eclass defines some default functions and variables.
# @DESCRIPTION:
# The base eclass defines some default functions and variables.
if [[ -z ${_BASE_ECLASS} ]]; then
_BASE_ECLASS=1
inherit eutils
BASE_EXPF="src_unpack src_compile src_install"
case "${EAPI:-0}" in
2|3|4|5) BASE_EXPF+=" src_prepare src_configure" ;;
*) ;;
esac
EXPORT_FUNCTIONS ${BASE_EXPF}
# @ECLASS-VARIABLE: DOCS
# @DESCRIPTION:
# Array containing documents passed to dodoc command.
#
# DOCS=( "${S}/doc/document.txt" "${S}/doc/doc_folder/" )
# @ECLASS-VARIABLE: HTML_DOCS
# @DESCRIPTION:
# Array containing documents passed to dohtml command.
#
# HTML_DOCS=( "${S}/doc/document.html" "${S}/doc/html_folder/" )
# @ECLASS-VARIABLE: PATCHES
# @DESCRIPTION:
# PATCHES array variable containing all various patches to be applied.
# This variable is expected to be defined in global scope of ebuild.
# Make sure to specify the full path. This variable is utilised in
# src_unpack/src_prepare phase based on EAPI.
#
# NOTE: if using patches folders with special file suffixes you have to
# define one additional variable EPATCH_SUFFIX="something"
#
# PATCHES=( "${FILESDIR}/mypatch.patch" "${FILESDIR}/patches_folder/" )
# @FUNCTION: base_src_unpack
# @DESCRIPTION:
# The base src_unpack function, which is exported.
# Calls also src_prepare with eapi older than 2.
base_src_unpack() {
debug-print-function $FUNCNAME "$@"
pushd "${WORKDIR}" > /dev/null
if [[ $(type -t unpacker_src_unpack) == "function" ]] ; then
unpacker_src_unpack
elif [[ -n ${A} ]] ; then
unpack ${A}
fi
has src_prepare ${BASE_EXPF} || base_src_prepare
popd > /dev/null
}
# @FUNCTION: base_src_prepare
# @DESCRIPTION:
# The base src_prepare function, which is exported
# EAPI is greater or equal to 2. Here the PATCHES array is evaluated.
base_src_prepare() {
debug-print-function $FUNCNAME "$@"
debug-print "$FUNCNAME: PATCHES=$PATCHES"
local patches_failed=0
pushd "${S}" > /dev/null
if [[ "$(declare -p PATCHES 2>/dev/null 2>&1)" == "declare -a"* ]]; then
for x in "${PATCHES[@]}"; do
debug-print "$FUNCNAME: applying patch from ${x}"
if [[ -d "${x}" ]]; then
# Use standardized names and locations with bulk patching
# Patch directory is ${WORKDIR}/patch
# See epatch() in eutils.eclass for more documentation
EPATCH_SUFFIX=${EPATCH_SUFFIX:=patch}
# in order to preserve normal EPATCH_SOURCE value that can
# be used other way than with base eclass store in local
# variable and restore later
oldval=${EPATCH_SOURCE}
EPATCH_SOURCE=${x}
EPATCH_FORCE=yes
epatch
EPATCH_SOURCE=${oldval}
elif [[ -f "${x}" ]]; then
epatch "${x}"
else
ewarn "QA: File or directory \"${x}\" does not exist."
ewarn "QA: Check your PATCHES array or add missing file/directory."
patches_failed=1
fi
done
[[ ${patches_failed} -eq 1 ]] && die "Some patches failed. See above messages."
else
for x in ${PATCHES}; do
debug-print "$FUNCNAME: patching from ${x}"
epatch "${x}"
done
fi
# Apply user patches
debug-print "$FUNCNAME: applying user patches"
epatch_user
popd > /dev/null
}
# @FUNCTION: base_src_configure
# @DESCRIPTION:
# The base src_configure function, which is exported when
# EAPI is greater or equal to 2. Runs basic econf.
base_src_configure() {
debug-print-function $FUNCNAME "$@"
# there is no pushd ${S} so we can override its place where to run
[[ -x ${ECONF_SOURCE:-.}/configure ]] && econf "$@"
}
# @FUNCTION: base_src_compile
# @DESCRIPTION:
# The base src_compile function, calls src_configure with
# EAPI older than 2.
base_src_compile() {
debug-print-function $FUNCNAME "$@"
has src_configure ${BASE_EXPF} || base_src_configure
base_src_make "$@"
}
# @FUNCTION: base_src_make
# @DESCRIPTION:
# Actual function that runs emake command.
base_src_make() {
debug-print-function $FUNCNAME "$@"
if [[ -f Makefile || -f GNUmakefile || -f makefile ]]; then
emake "$@" || die "died running emake, $FUNCNAME"
fi
}
# @FUNCTION: base_src_install
# @DESCRIPTION:
# The base src_install function. Runs make install and
# installs documents and html documents from DOCS and HTML_DOCS
# arrays.
base_src_install() {
debug-print-function $FUNCNAME "$@"
emake DESTDIR="${D}" "$@" install || die "died running make install, $FUNCNAME"
base_src_install_docs
}
# @FUNCTION: base_src_install_docs
# @DESCRIPTION:
# Actual function that install documentation from
# DOCS and HTML_DOCS arrays.
base_src_install_docs() {
debug-print-function $FUNCNAME "$@"
local x
pushd "${S}" > /dev/null
if [[ "$(declare -p DOCS 2>/dev/null 2>&1)" == "declare -a"* ]]; then
for x in "${DOCS[@]}"; do
debug-print "$FUNCNAME: docs: creating document from ${x}"
dodoc "${x}" || die "dodoc failed"
done
fi
if [[ "$(declare -p HTML_DOCS 2>/dev/null 2>&1)" == "declare -a"* ]]; then
for x in "${HTML_DOCS[@]}"; do
debug-print "$FUNCNAME: docs: creating html document from ${x}"
dohtml -r "${x}" || die "dohtml failed"
done
fi
popd > /dev/null
}
fi