summaryrefslogtreecommitdiff
blob: d8173cd1356ad89ab019c53d8a3539af14bc6bbe (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
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

# @ECLASS: patches.eclass
# @MAINTAINER:
# mva
# @AUTHOR:
# mva
# @BLURB:
# @DESCRIPTION:
# Eclass that checks for patches directories existance and auto-add them into PATCHES=()

EXPORT_FUNCTIONS src_prepare

PATCHDIR="${FILESDIR}/patches/${PV}"
[[ -z ${PATCHES[@]} ]] && PATCHES=()

patches_src_prepare() {
	if [[ -d "${PATCHDIR}" ]]; then
		_patchdir_not_empty() {
			local has_files
			local LC_ALL=POSIX
			local prev_shopt=$(shopt -p nullglob)
			shopt -s nullglob
			local f
			for f in "${1:-${PATCHDIR}}"/*; do
				if [[ "${f}" == *.diff || "${f}" == *.patch ]] && [[ -f "${f}" || -L "${f}" ]]; then
					has_files=1
				elif [[ -d "${f}" ]]; then
					# recursion
					_patchdir_not_empty "${f}" && has_files=1
				fi
			done
			${prev_shopt}
			[[ -n "${has_files}" ]]; return $?
		}

		_patchdir_not_empty && PATCHES+=("${PATCHDIR}")

		if [[ -d "${PATCHDIR}/conditional" ]]; then
			pushd "${PATCHDIR}/conditional" &>/dev/null
			for d in *; do
				if [[ -d ${d} ]]; then
					if [[ "${d##no-}" == ${d} ]]; then
						(use "${d}" && _patchdir_not_empty "${d}") && PATCHES+=("${PATCHDIR}/conditional/${d}")
					else
						(use "${d##no-}" && _patchdir_not_empty "${d}") || PATCHES+=("${PATCHDIR}/conditional/${d}")
					fi
				fi
			done
			popd &>/dev/null
		fi
	fi
	if declare -f cmake-utils_src_prepare &>/dev/null; then
		# cmake-utils_src_prepare support (to decrease kludges in the ebuilds)
		cmake-utils_src_prepare
	else
		default_src_prepare
	fi
}