mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-11-09 18:47:16 -08:00
Files being installed by Portage are generally trusted but also the syscalls allowed by file are quite broad anyway. With e.g. new libc or sandbox version (or any number of things...), the syscalls used by file can change which leads to its seccomp filter killing the process. This is an acceptable tradeoff when users are calling file(1), but it makes less sense with trusted input within Portage, especially where it may lead to confusing errors (swallowed within pipes, subshells, etc). Indeed, it might even be the case that file(1) is broken, but the user needs to complete a world upgrade to get a newer file/portage/???, but can't because of various ebuilds (like ones using this eclass) failing. Disable seccomp for these calls to keep working. Bug: https://bugs.gentoo.org/811462 Bug: https://bugs.gentoo.org/815877 Bug: https://bugs.gentoo.org/889046 Signed-off-by: Sam James <sam@gentoo.org>
91 lines
2.6 KiB
Bash
91 lines
2.6 KiB
Bash
# Copyright 1999-2023 Gentoo Authors
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
# @ECLASS: mono.eclass
|
|
# @MAINTAINER:
|
|
# maintainer-needed@gentoo.org
|
|
# @SUPPORTED_EAPIS: 7
|
|
# @BLURB: common settings and functions for mono and dotnet related packages
|
|
# @DEPRECATED: mono-env
|
|
# @DESCRIPTION:
|
|
# The mono eclass contains common environment settings that are useful for
|
|
# dotnet packages. Currently, it provides no functions, just exports
|
|
# MONO_SHARED_DIR and sets LC_ALL in order to prevent errors during compilation
|
|
# of dotnet packages.
|
|
|
|
case ${EAPI:-0} in
|
|
7) ;;
|
|
*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
|
|
esac
|
|
|
|
if [[ -z ${_MONO_ECLASS} ]] ; then
|
|
_MONO_ECLASS=1
|
|
|
|
inherit multilib
|
|
|
|
# >=mono-0.92 versions using mcs -pkg:foo-sharp require shared memory, so we set the
|
|
# shared dir to ${T} so that ${T}/.wapi can be used during the install process.
|
|
export MONO_SHARED_DIR="${T}"
|
|
|
|
# Building mono, nant and many other dotnet packages is known to fail if LC_ALL
|
|
# variable is not set to C. To prevent this all mono related packages will be
|
|
# build with LC_ALL=C (see bugs #146424, #149817)
|
|
export LC_ALL=C
|
|
|
|
# Monodevelop-using applications need this to be set or they will try to create config
|
|
# files in the user's ~ dir.
|
|
|
|
export XDG_CONFIG_HOME="${T}"
|
|
|
|
# Fix bug 83020:
|
|
# "Access Violations Arise When Emerging Mono-Related Packages with MONO_AOT_CACHE"
|
|
|
|
unset MONO_AOT_CACHE
|
|
|
|
egacinstall() {
|
|
gacutil -i "${1}" \
|
|
-root "${ED}"/usr/$(get_libdir) \
|
|
-gacdir /usr/$(get_libdir) \
|
|
-package ${2:-${GACPN:-${PN}}} \
|
|
|| die "installing ${1} into the Global Assembly Cache failed"
|
|
}
|
|
|
|
mono_multilib_comply() {
|
|
local dir finddirs=() mv_command=${mv_command:-mv}
|
|
if [[ -d "${ED}/usr/lib" && "$(get_libdir)" != "lib" ]]
|
|
then
|
|
if ! [[ -d "${ED}"/usr/"$(get_libdir)" ]]
|
|
then
|
|
mkdir "${ED}"/usr/"$(get_libdir)" || die "Couldn't mkdir ${ED}/usr/$(get_libdir)"
|
|
fi
|
|
${mv_command} "${ED}"/usr/lib/* "${ED}"/usr/"$(get_libdir)"/ || die "Moving files into correct libdir failed"
|
|
rm -rf "${ED}"/usr/lib
|
|
for dir in "${ED}"/usr/"$(get_libdir)"/pkgconfig "${ED}"/usr/share/pkgconfig
|
|
do
|
|
|
|
if [[ -d "${dir}" && "$(find "${dir}" -name '*.pc')" != "" ]]
|
|
then
|
|
pushd "${dir}" &> /dev/null
|
|
sed -i -r -e 's:/(lib)([^a-zA-Z0-9]|$):/'"$(get_libdir)"'\2:g' \
|
|
*.pc \
|
|
|| die "Sedding some sense into pkgconfig files failed."
|
|
popd "${dir}" &> /dev/null
|
|
fi
|
|
done
|
|
if [[ -d "${ED}/usr/bin" ]]
|
|
then
|
|
for exe in "${ED}/usr/bin"/*
|
|
do
|
|
if [[ "$(file -S "${exe}")" == *"shell script text"* ]]
|
|
then
|
|
sed -r -i -e ":/lib(/|$): s:/lib(/|$):/$(get_libdir)\1:" \
|
|
"${exe}" || die "Sedding some sense into ${exe} failed"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
fi
|
|
}
|
|
|
|
fi
|