summaryrefslogtreecommitdiff
path: root/sys-apps/selinux-python/selinux-python-3.8.1-r2.ebuild
blob: 34ed66a4ea7bffe35c8b95ff02ec468efd6daf3c (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
133
134
135
136
137
138
139
140
141
142
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI="8"

DISTUTILS_USE_PEP517=setuptools
PYTHON_COMPAT=( python3_{9,10,11,12,13} )
PYTHON_REQ_USE="xml(+)"

inherit distutils-r1 toolchain-funcs

MY_PV="${PV//_/-}"
MY_P="${PN}-${MY_PV}"

DESCRIPTION="SELinux core utilities"
HOMEPAGE="https://github.com/SELinuxProject/selinux/wiki"

if [[ ${PV} == 9999 ]] ; then
	inherit git-r3
	EGIT_REPO_URI="https://github.com/SELinuxProject/selinux.git"
	S="${WORKDIR}/${P}/${PN#selinux-}"
else
	SRC_URI="https://github.com/SELinuxProject/selinux/releases/download/${MY_PV}/${MY_P}.tar.gz"
	KEYWORDS="amd64 arm arm64 ~riscv x86"
	S="${WORKDIR}/${MY_P}"
fi

LICENSE="GPL-2"
SLOT="0"
IUSE="test"
RESTRICT="!test? ( test )"

RDEPEND=">=sys-libs/libselinux-${PV}:=[python]
	>=sys-libs/libsemanage-${PV}:=[python(+)]
	>=sys-libs/libsepol-${PV}:=[static-libs(+)]
	>=app-admin/setools-4.2.0[${PYTHON_USEDEP}]
	>=sys-process/audit-1.5.1[python,${PYTHON_USEDEP}]"
DEPEND="${RDEPEND}"
BDEPEND="
	test? (
		${RDEPEND}
		sec-policy/selinux-base
		>=sys-apps/secilc-${PV}
	)"

PATCHES=(
	"${FILESDIR}"/selinux-python-3.8.1-no-pip.patch
)

src_prepare() {
	default

	sed -e 's/-Werror//g' -i "${S}"/*/Makefile || die "Failed to remove Werror"

	pushd sepolicy >/dev/null || die
	# To avoid default
	DISTUTILS_OPTIONAL=1 distutils-r1_src_prepare
	popd >/dev/null || die
}

python_compile() {
	distutils-r1_python_compile
	emake -C "${S}" \
		CC="$(tc-getCC)" \
		LIBDIR="\$(PREFIX)/$(get_libdir)"
}

src_compile() {
	pushd sepolicy >/dev/null || die
	distutils-r1_src_compile
	popd >/dev/null || die
}

python_test() {
	# The different subprojects have some interproject dependencies:
	# - audit2allow depens on sepolgen
	# - chcat depends on semanage
	# and maybe others.
	# Add all the modules of the individual subprojects to the
	# PYTHONPATH, so they get actually found and used. In
	# particular, already installed versions on the system are not
	# used.
	for dir in audit2allow chcat semanage sepolgen/src sepolicy ; do
		PYTHONPATH="${S}/${dir}:${PYTHONPATH}"
	done
	PYTHONPATH=${PYTHONPATH} emake -C "${S}" test
}

src_test() {
	pushd sepolicy >/dev/null || die
	distutils-r1_src_test
	popd >/dev/null || die
}

python_install() {
	distutils-r1_python_install
	emake -C "${S}" \
		DESTDIR="${D}" \
		LIBDIR="\$(PREFIX)/$(get_libdir)" \
		install

	# Install over previously installed scripts to ensure proper python support
	python_doscript "${S}"/audit2allow/audit2allow
	python_doscript "${S}"/audit2allow/sepolgen-ifgen
	python_doscript "${S}"/chcat/chcat
	python_newscript "${S}"/sepolicy/sepolicy.py sepolicy

	python_scriptinto /usr/sbin
	python_doscript "${S}"/semanage/semanage

	# set _PYTHON_SCRIPTROOT to the implicit default for the next python target, bug #967869
	python_scriptinto /usr/bin

	python_optimize
}

python_install_all() {
	# Create sepolgen.conf with different devel location definition
	mkdir -p "${D}"/etc/selinux || die "Failed to create selinux directory";
	if [[ -f /etc/selinux/config ]];
	then
		local selinuxtype=$(awk -F'=' '/^SELINUXTYPE/ {print $2}' /etc/selinux/config);
		echo "SELINUX_DEVEL_PATH=/usr/share/selinux/${selinuxtype}/include:/usr/share/selinux/${selinuxtype}" \
			> "${D}"/etc/selinux/sepolgen.conf || die "Failed to generate sepolgen"
	else
		local selinuxtype="${POLICY_TYPES%% *}";
		if [[ -n "${selinuxtype}" ]];
		then
			echo "SELINUX_DEVEL_PATH=/usr/share/selinux/${selinuxtype}/include:/usr/share/selinux/${selinuxtype}" \
				> "${D}"/etc/selinux/sepolgen.conf || die "Failed to generate sepolgen"
		else
			echo "SELINUX_DEVEL_PATH=/usr/share/selinux/strict/include:/usr/share/selinux/strict" \
				> "${D}"/etc/selinux/sepolgen.conf || die "Failed to generate sepolgen"
		fi
	fi
}

src_install() {
	pushd sepolicy >/dev/null || die
	distutils-r1_src_install
	popd >/dev/null || die
}