mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
install-qa-check.d: Move 08gentoo-paths check outta Portage
Signed-off-by: Michał Górny <mgorny@gentoo.org> Bug: https://bugs.gentoo.org/show_bug.cgi?id=667604
This commit is contained in:
77
metadata/install-qa-check.d/08gentoo-paths
Normal file
77
metadata/install-qa-check.d/08gentoo-paths
Normal file
@@ -0,0 +1,77 @@
|
||||
# Check whether ebuilds are not installing new, non-Gentoo-ey paths.
|
||||
|
||||
gentoo_path_check() {
|
||||
# allowed path definitions
|
||||
# ------------------------
|
||||
|
||||
# directories common to / and /usr
|
||||
local allowed_common_dirs=(
|
||||
bin lib lib32 lib64 libx32 sbin
|
||||
)
|
||||
|
||||
# toplevel directories which can be installed to by ebuilds
|
||||
# /home is not included as no ebuilds should install files there
|
||||
local allowed_paths_toplevel=(
|
||||
"${allowed_common_dirs[@]}"
|
||||
boot dev etc opt srv usr var
|
||||
)
|
||||
|
||||
# directories in /usr which can be installed to by ebuilds
|
||||
# /usr/games is not included as it is banned nowadays
|
||||
local allowed_paths_usr=(
|
||||
"${allowed_common_dirs[@]}"
|
||||
include libexec share src
|
||||
# toolchain stuff
|
||||
"${CHOST}" "${CTARGET}"
|
||||
)
|
||||
|
||||
|
||||
# the logic
|
||||
# ---------
|
||||
local bad_paths=()
|
||||
local x
|
||||
|
||||
local shopt_save=$(shopt -p nullglob)
|
||||
shopt -s nullglob
|
||||
|
||||
# 1. check for unexpected top-level directories
|
||||
local toplevel_dirs=( "${ED%/}"/* )
|
||||
for x in "${toplevel_dirs[@]##*/}"; do
|
||||
if ! has "${x}" "${allowed_paths_toplevel[@]}"; then
|
||||
bad_paths+=( "/${x}" )
|
||||
fi
|
||||
done
|
||||
|
||||
# 2. check for unexpected /usr subdirectories
|
||||
local usr_dirs=( "${ED%/}"/usr/* )
|
||||
for x in "${usr_dirs[@]##*/}"; do
|
||||
if ! has "${x}" "${allowed_paths_usr[@]}"; then
|
||||
bad_paths+=( "/usr/${x}" )
|
||||
fi
|
||||
done
|
||||
|
||||
# 3. check for unexpected /usr/share/doc subdirectories
|
||||
local doc_dirs=( "${ED%/}"/usr/share/doc/* )
|
||||
for x in "${doc_dirs[@]##*/}"; do
|
||||
if [[ ${x} != ${PF} ]]; then
|
||||
bad_paths+=( "/usr/share/doc/${x}" )
|
||||
fi
|
||||
done
|
||||
|
||||
${shopt_save}
|
||||
|
||||
# report
|
||||
# ------
|
||||
if [[ -n ${bad_paths[@]} ]]; then
|
||||
eqawarn "The ebuild is installing to one or more unexpected paths:"
|
||||
eqawarn
|
||||
eqatag -v non-gentoo-paths "${bad_paths[@]}"
|
||||
eqawarn
|
||||
eqawarn "Please fix the ebuild to use correct FHS/Gentoo policy paths."
|
||||
fi
|
||||
}
|
||||
|
||||
gentoo_path_check
|
||||
: # guarantee successful exit
|
||||
|
||||
# vim:ft=sh
|
||||
Reference in New Issue
Block a user