aboutsummaryrefslogtreecommitdiff
blob: eb03c0fc5634e2b55d9fd99657b652a7dbbfe874 (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
# Copyright 2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

# @ECLASS: nim-utils.eclass
# @MAINTAINER:
# Anna Vyalkova <cyber+gentoo@sysrq.in>
# @AUTHOR:
# Anna Vyalkova <cyber+gentoo@sysrq.in>
# @SUPPORTED_EAPIS: 8
# @BLURB: utility functions for Nim packages
# @DESCRIPTION:
# A utility eclass providing functions to call and configure Nim.
#
# This eclass does not set any metadata variables nor export any phase
# functions. It can be inherited safely.

case ${EAPI} in
	8) ;;
	*) die "${ECLASS}: EAPI ${EAPI} unsupported."
esac

if [[ ! ${_NIM_UTILS_ECLASS} ]]; then

# @ECLASS_VARIABLE: NIMFLAGS
# @USER_VARIABLE
# @DEFAULT_UNSET
# @DESCRIPTION:
# Flags for the Nim compiler.

# @ECLASS_VARIABLE: TESTAMENT_DISABLE_MEGATEST
# @USER_VARIABLE
# @DEFAULT_UNSET
# @DESCRIPTION:
# If set, pass '--megatest:off' to testament.

# @VARIABLE: ETESTAMENT_DESELECT
# @DEFAULT_UNSET
# @DESCRIPTION:
# Specifies an array of test files to be deselected via testament's --skipFrom
# parameter, when calling etestament.

inherit multiprocessing toolchain-funcs xdg-utils

# @FUNCTION: enim
# @USAGE: [<args>...]
# @DESCRIPTION:
# Call nim, passing the supplied arguments.
# This function dies if nim fails. It also supports being called via 'nonfatal'.
# If you need to call nim directly in your ebuilds, this is the way it should
# be done.
enim() {
	debug-print-function ${FUNCNAME} "${@}"

	set -- nim "${@}"
	echo "$@" >&2
	"$@" || die -n "${*} failed"
}

# @FUNCTION: etestament
# @USAGE: [<args>...]
# @DESCRIPTION:
# Call testament, passing the supplied arguments.
# This function dies if testament fails.
etestament() {
	debug-print-function ${FUNCNAME} "${@}"

	local -a testament_args=()
	[[ ${TESTAMENT_DISABLE_MEGATEST} ]] && \
		testament_args+=( --megatest:off )

	[[ "${NOCOLOR}" == true || "${NOCOLOR}" == yes ]] && \
		testament_args+=( --colors:off )

	if [[ ${ETESTAMENT_DESELECT} ]]; then
		local skipfile="${T}"/testament.skipfile
		if [[ ! -f ${skipfile} ]]; then
			for t in "${ETESTAMENT_DESELECT[@]}"; do
				echo "${t}" >> "${skipfile}"
			done
		fi
		testament_args+=( --skipFrom:"${skipfile}" )
	fi

	set -- testament "${testament_args[@]}" "${@}"
	echo "$@" >&2
	"$@" || die -n "${*} failed"
}

# @FUNCTION: nim_gen_config
# @USAGE:
# @DESCRIPTION:
# Generate the ${WORKDIR}/nim.cfg to respect user's toolchain and preferences.
nim_gen_config() {
	debug-print-function ${FUNCNAME} "${@}"

	xdg_environment_reset

	cat > "${WORKDIR}/nim.cfg" <<- EOF || die "Failed to create Nim config"
	cc:"gcc"
	gcc.exe:"$(tc-getCC)"
	gcc.linkerexe:"$(tc-getCC)"
	gcc.cpp.exe:"$(tc-getCXX)"
	gcc.cpp.linkerexe:"$(tc-getCXX)"
	gcc.options.always:"${CFLAGS} ${CPPFLAGS}"
	gcc.options.linker:"${LDFLAGS}"
	gcc.cpp.options.always:"${CFLAGS} ${CPPFLAGS}"
	gcc.cpp.options.linker:"${LDFLAGS}"

	$([[ "${NOCOLOR}" == true || "${NOCOLOR}" == yes ]] && echo '--colors:"off"')
	-d:"release"
	--parallelBuild:"$(makeopts_jobs)"
	$(printf "%s\n" ${NIMFLAGS})
	EOF
}

_NIM_UTILS_ECLASS=1
fi