Remove empty directories in install-qa-check phase in order to prevent Portage from installing them, and therefore from developers relying on them being installed.
The PMS specifies the behavior upon merging empty directories as undefined, and specifically prohibits ebuilds from attempting to install empty directories. However, ebuilds occasionally still fall into the trap of relying on 'dodir' preserving the directory. Make the Portage behavior more strict in order to prevent that. Use 'install-qa-check.d' machinery for this as this provides an easy way for users to restore the old behavior (by overriding the check) if they need it for their private ebuilds. It also makes it possible to extend the check with some QA warnings, if we figure out how to do them. Currently no QA warnings are emitted as we do not want to pursue upstream build systems that create empty directories but the packages themselves do not rely on them being installed, e.g. when some files are installed into the directory conditionally. --- bin/install-qa-check.d/95empty-dirs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 bin/install-qa-check.d/95empty-dirs diff --git a/bin/install-qa-check.d/95empty-dirs b/bin/install-qa-check.d/95empty-dirs new file mode 100644 index 000000000..6b8790f59 --- /dev/null +++ b/bin/install-qa-check.d/95empty-dirs @@ -0,0 +1,21 @@ +# Remove empty directories installed by ebuild. + +# Rationale: PMS prohibits ebuilds from installing empty directories. +# Cleaning them up from the installation image provides an easy way +# to make sure that ebuilds are not relying on it while making it easy +# for users to override this if they need to. +# +# Technically, we could emit QA warnings here. However, we do not want +# to pursue every upstream build system that creates a directory +# and does not install any file into it (think of files installed +# conditionally), as long as the package functions correctly without +# the directory being actually installed. + +strip_empty_dirs() { + find "${ED}" -mindepth 1 -type d -empty -delete +} + +strip_empty_dirs +: # guarantee successful exit + +# vim:ft=sh -- 2.16.0.rc1