summaryrefslogtreecommitdiff
blob: 25130d28ada2b409aaaf110c9e3f7584c71be2a4 (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-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-apps/sandbox/sandbox-2.6-r1.ebuild,v 1.12 2013/07/02 07:43:42 ago Exp $

#
# don't monkey with this ebuild unless contacting portage devs.
# period.
#

inherit autotools eutils flag-o-matic toolchain-funcs multilib unpacker multiprocessing

DESCRIPTION="sandbox'd LD_PRELOAD hack"
HOMEPAGE="http://www.gentoo.org/"
SRC_URI="mirror://gentoo/${P}.tar.xz
	http://dev.gentoo.org/~vapier/dist/${P}.tar.xz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="alpha amd64 arm hppa ia64 ~m68k ~mips ppc ppc64 s390 sh sparc x86 ~sparc-fbsd -x86-fbsd"
IUSE="multilib pch"

DEPEND="app-arch/xz-utils
	>=app-misc/pax-utils-0.1.19" #265376
RDEPEND=""

EMULTILIB_PKG="true"
has sandbox_death_notice ${EBUILD_DEATH_HOOKS} || EBUILD_DEATH_HOOKS="${EBUILD_DEATH_HOOKS} sandbox_death_notice"

sandbox_death_notice() {
	ewarn "If configure failed with a 'cannot run C compiled programs' error, try this:"
	ewarn "FEATURES=-sandbox emerge sandbox"
}

sb_get_install_abis() { use multilib && get_install_abis || echo ${ABI:-default} ; }

sb_foreach_abi() {
	local OABI=${ABI}
	for ABI in $(sb_get_install_abis) ; do
		cd "${WORKDIR}/build-${ABI}"
		einfo "Running $1 for ABI=${ABI}..."
		"$@"
	done
	ABI=${OABI}
}

src_unpack() {
	unpacker
	cd "${S}"
	epatch "${FILESDIR}"/${P}-trace-hppa.patch #425062
	epatch "${FILESDIR}"/${P}-log-var.patch
	epatch "${FILESDIR}"/${P}-static-close-fd.patch #364877
	epatch "${FILESDIR}"/${P}-desktop.patch #443672
	epatch "${FILESDIR}"/${P}-open-nofollow.patch #413441
	epatch "${FILESDIR}"/${P}-check-empty-paths-at.patch #346929
	 epatch "${FILESDIR}"/${P}-hardened-pch.patch #425524
	epatch_user

	eautoreconf
}

sb_configure() {
	mkdir "${WORKDIR}/build-${ABI}"
	cd "${WORKDIR}/build-${ABI}"

	use multilib && multilib_toolchain_setup ${ABI}

	einfo "Configuring sandbox for ABI=${ABI}..."
	ECONF_SOURCE="../${P}/" \
	econf $(use_enable pch) ${myconf} || die
}

sb_compile() {
	emake || die
}

src_compile() {
	filter-lfs-flags #90228

	# Run configures in parallel!
	multijob_init
	local OABI=${ABI}
	for ABI in $(sb_get_install_abis) ; do
		multijob_child_init sb_configure
	done
	ABI=${OABI}
	multijob_finish

	sb_foreach_abi sb_compile
}

sb_test() {
	emake check TESTSUITEFLAGS="--jobs=$(makeopts_jobs)" || die
}

src_test() {
	sb_foreach_abi sb_test
}

sb_install() {
	emake DESTDIR="${D}" install || die
	insinto /etc/sandbox.d #333131
	doins etc/sandbox.d/00default || die
}

src_install() {
	sb_foreach_abi sb_install

	doenvd "${FILESDIR}"/09sandbox

	keepdir /var/log/sandbox
	fowners root:portage /var/log/sandbox
	fperms 0770 /var/log/sandbox

	cd "${S}"
	dodoc AUTHORS ChangeLog* NEWS README
}

pkg_preinst() {
	chown root:portage "${D}"/var/log/sandbox
	chmod 0770 "${D}"/var/log/sandbox

	local old=$(find "${ROOT}"/lib* -maxdepth 1 -name 'libsandbox*')
	if [[ -n ${old} ]] ; then
		elog "Removing old sandbox libraries for you:"
		elog ${old//${ROOT}}
		find "${ROOT}"/lib* -maxdepth 1 -name 'libsandbox*' -exec rm -fv {} \;
	fi
}

pkg_postinst() {
	chmod 0755 "${ROOT}"/etc/sandbox.d #265376
}