#!/bin/sh # VERSION=2018-01-28.2 # TODO: Register failed packes to /var/eos/precompile.failed # and skip on rerun # # script based on idea of # sven vermeulen http://blog.siphos.be/2013/04/gentoo-protip-using-buildpkgonly/ echo "Start w/ eix-sync" | logger -t precompile eix-sync -q LIST=$(mktemp); #emerge -puDN --with-bdeps=y --color=n --columns --quiet=y world | grep "^.*[a-z][a-z][a-z]-.*/[a-z0-9].*" | awk '{print $2}' > ${LIST}; # New: Skip already compiled packages, by excluding result starting with [binary # New: Include --binpkg-respect-use=y, should be default in this case, but just to be sure. # New: Set PORTAGE_ELOG_SYSTEM-env-var so we won't get per-package-mails from ebuild on systems having sending mails enabled in make.conf PORTAGE_ELOG_SYSTEM="save" emerge -puDNk --with-bdeps=y --changed-deps=y --binpkg-respect-use=y --color=n --quiet=y world | grep "^\[ebuild " | sed -nr 's/^\[.+\]\ ([^\ ]+)(\ .*|$)/\1/p' > ${LIST}; for PACKAGE in $(cat ${LIST}); do skip=0 if [ -f /etc/eos/precompile.exclude ]; then for i in `cat /etc/eos/precompile.exclude | grep -v "^#"`; do if [ "`echo ${PACKAGE} | grep "^${i}" | wc -l`" == "1" ]; then skip=1 break; fi done fi if [ "$skip" == "1" ]; then echo "Skipping ${PACKAGE} due to /etc/eos/precompile.exclude" echo "Skipping ${PACKAGE} due to /etc/eos/precompile.exclude" | logger -t precompile else printf "Building binary package for ${PACKAGE}... " emerge -1uN --quiet-build --quiet=y --changed-deps=y --buildpkgonly =${PACKAGE}; if [[ $? -eq 0 ]]; then echo "ok"; echo "OK: ${PACKAGE} " | logger -t precompile else echo "failed"; echo "FAILED: ${PACKAGE} " | logger -t precompile fi fi done echo "Cleaning distfiles + packages" | logger -t precompile eclean packages eclean distfiles rm $LIST echo "Ending" | logger -t precompile