All pastes #219552 Raw Edit

cyril

public text v1 · immutable
#219552 ·published 2006-10-24 19:17 UTC
rendered paste body
#!/bin/sh## Cyril Romain 2006# Script that bakes the used flags on a per package basis in a package.use hierarchy treePKGUSE=/etc/portage/package.use# check that package.use does not already exist as a file # note: portage >=2.1 accept package.use to be a directory[ -f $PKGUSE ] && (echo "$PKGUSE already exists but as a file. Please update to portage 2.1 or above and make it a directory." ; exit 1)usage(){	echo "Usage: `basename $0` [OPTION] packages"	echo "Try '`basename $0` --help' for more information."	exit $E_OPTERROR }# Exit and explain usage, if no argument(s) given.[ $# -eq 0 ] && usage# add a package to the package.use directory#  $1 the full package name to bake (e.g.' dev-lang/python')function add_package(){	# if the package is not in the package.use directory	is_installed=`equery u $1 2> /dev/null`	if [ "$is_installed" ] ; then 		# bake the used flags of the package		Iflags=`echo $is_installed | sed 's/[-+]\([-+]\)/\1/g' | sed 's/+//'`		bakeuse $1 $Iflags	else		# bake the ready-to-use USE flags of the package		emergeFind=`emerge -pv --columns $1`		if [ "`echo $emergeFind | grep Error`" ] ; then 			echo "Bad package name: $1"		else			available_flags=`echo $emergeFind | grep $1 | egrep -o 'USE="[^"]*' | sed 's/USE="//' | sed 's/[*%]//g'`			bakeuse $1 $available_flags		fi	fi}# bake the use flags of one package#  $1 the full package name to bake (e.g.' dev-lang/python')#  $2, $3, ..., $n the list of USE flagsfunction bakeuse(){	mkdir -p $PKGUSE/$1	echo "Add/update the package.use directory with $1"	echo $@ > $PKGUSE/$1/package.use}# bake the use flags of all installed packagesfunction bakeuse_installed(){	installed_packages=`emerge -pev --columns world | awk '{ if ($1 ~ /\[ebuild/) print $4 }'`	for p in $installed_packages ; do		Iflags=`equery u $p | sed 's/[-+]\([-+]\)/\1/g' | sed 's/+//'`		bakeuse $p $Iflags	done}# check for USE flag conflict - i.e. per-package vs global settings - of installed packagefunction bake_check(){	installed_packages=`emerge -pev --columns world | awk '{ if ($1 ~ /\[ebuild/) print $4 }'`	for p in $installed_packages ; do		flags=`equery u $p`		for i in $flags; do			globalOveride=`echo $i | grep '+-'` && echo "Warning: $p has $globalOveride" 		done	done}main(){	while getopts ":bc-:" Option	do		case $Option in			b ) echo "Bake the USE flags of all installed package."				bakeuse_installed;;			c ) echo "Check for conflict between per-package and global USE flags."				bake_check;;			- ) 				case $OPTARG in					bake ) echo "Bake the USE flags of all installed package."						bakeuse_installed;;					check) echo "Check for conflict between per-package and global USE flags."						bake_check;;					help ) echo "Usage: `basename $0` [OPTION] packages"						echo "Example: `basename $0` dev-lang/lua dev-lang/erlang"						echo						echo "Options:"						echo "  --bake (-b short option): to bake the USE flags of all installed package."						echo "  --check (-c short option): to check for conflict between per-package anf global USE flags."						echo "  --help to display this help."						return 0;;					*    ) echo "Illegal option chosen --$OPTARG"						usage						return 1;;   # DEFAULT				esac;;			* ) echo "Illegal option chosen $OPTARG"				usage				return 1;;   # DEFAULT		esac	done	shift $(($OPTIND - 1))	# add packages given in arguments	while [ -n "$1" ] ; do		add_package $1		shift	done}main $*exit 0