#!/bin/bash # Copyright 1999-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 portageq() { PYTHONPATH=${PORTAGE_PYM_PATH}${PYTHONPATH:+:}${PYTHONPATH} \ "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}/portageq" "$@" } register_die_hook() { local x for x in $* ; do has $x $EBUILD_DEATH_HOOKS || \ export EBUILD_DEATH_HOOKS="$EBUILD_DEATH_HOOKS $x" done } register_success_hook() { local x for x in $* ; do has $x $EBUILD_SUCCESS_HOOKS || \ export EBUILD_SUCCESS_HOOKS="$EBUILD_SUCCESS_HOOKS $x" done } strip_duplicate_slashes() { if [[ -n $1 ]] ; then local removed=$1 while [[ ${removed} == *//* ]] ; do removed=${removed//\/\///} done echo ${removed} fi } # this is a function for removing any directory matching a passed in pattern from # PATH remove_path_entry() { save_IFS IFS=":" stripped_path="${PATH}" while [ -n "$1" ]; do cur_path="" for p in ${stripped_path}; do if [ "${p/${1}}" == "${p}" ]; then cur_path="${cur_path}:${p}" fi done stripped_path="${cur_path#:*}" shift done restore_IFS PATH="${stripped_path}" } # Set given variables unless these variable have been already set (e.g. during emerge # invocation) to values different than values set in make.conf. set_unless_changed() { if [[ $# -lt 1 ]]; then die "${FUNCNAME}() requires at least 1 argument: VARIABLE=VALUE" fi local argument value variable for argument in "$@"; do if [[ ${argument} != *=* ]]; then die "${FUNCNAME}(): Argument '${argument}' has incorrect syntax" fi variable="${argument%%=*}" value="${argument#*=}" if eval "[[ \${${variable}} == \$(env -u ${variable} portageq envvar ${variable}) ]]"; then eval "${variable}=\"\${value}\"" fi done } # Unset given variables unless these variable have been set (e.g. during emerge # invocation) to values different than values set in make.conf. unset_unless_changed() { if [[ $# -lt 1 ]]; then die "${FUNCNAME}() requires at least 1 argument: VARIABLE" fi local variable for variable in "$@"; do if eval "[[ \${${variable}} == \$(env -u ${variable} portageq envvar ${variable}) ]]"; then unset ${variable} fi done } KV_major() { [[ -z $1 ]] && return 1 local KV=$@ echo "${KV%%.*}" } KV_minor() { [[ -z $1 ]] && return 1 local KV=$@ KV=${KV#*.} echo "${KV%%.*}" } KV_micro() { [[ -z $1 ]] && return 1 local KV=$@ KV=${KV#*.*.} echo "${KV%%[^[:digit:]]*}" } KV_to_int() { [[ -z $1 ]] && return 1 local KV_MAJOR=$(KV_major "$1") local KV_MINOR=$(KV_minor "$1") local KV_MICRO=$(KV_micro "$1") local KV_int=$(( KV_MAJOR * 65536 + KV_MINOR * 256 + KV_MICRO )) # We make version 2.2.0 the minimum version we will handle as # a sanity check ... if its less, we fail ... if [[ ${KV_int} -ge 131584 ]] ; then echo "${KV_int}" return 0 fi return 1 } _RC_GET_KV_CACHE="" get_KV() { [[ -z ${_RC_GET_KV_CACHE} ]] \ && _RC_GET_KV_CACHE=$(uname -r) echo $(KV_to_int "${_RC_GET_KV_CACHE}") return $? }