From 443a516e1a8e2703bdd25a4a89f385969128d3b3 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sun, 11 Sep 2011 16:39:10 -0700 Subject: ebuild.sh: split out bashrc-functions.sh --- bin/bashrc-functions.sh | 89 +++++++++++++++++++++++++++++++++++++++++++++ bin/ebuild.sh | 97 +++---------------------------------------------- 2 files changed, 94 insertions(+), 92 deletions(-) create mode 100644 bin/bashrc-functions.sh diff --git a/bin/bashrc-functions.sh b/bin/bashrc-functions.sh new file mode 100644 index 000000000..91ff6d738 --- /dev/null +++ b/bin/bashrc-functions.sh @@ -0,0 +1,89 @@ +#!/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 +} diff --git a/bin/ebuild.sh b/bin/ebuild.sh index 832b39dc9..a781c2e05 100755 --- a/bin/ebuild.sh +++ b/bin/ebuild.sh @@ -119,31 +119,6 @@ esyslog() { return 0 } -portageq() { - if [ "${EBUILD_PHASE}" == "depend" ]; then - die "portageq calls are not allowed in the global scope" - fi - - 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 -} - # Ensure that $PWD is sane whenever possible, to protect against # exploitation of insecure search path for python -c in ebuilds. # See bug #239560. @@ -156,16 +131,6 @@ fi #(not secretive, but not stupid) umask 022 -strip_duplicate_slashes() { - if [[ -n $1 ]] ; then - local removed=$1 - while [[ ${removed} == *//* ]] ; do - removed=${removed//\/\///} - done - echo ${removed} - fi -} - # debug-print() gets called from many places with verbose status information useful # for tracking down problems. The output is in $T/eclass-debug.log. # You can set ECLASS_DEBUG_OUTPUT to redirect the output somewhere else as well. @@ -354,61 +319,6 @@ EXPORT_FUNCTIONS() { eval $__export_funcs_var+=\" $*\" } -# 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 -} - PORTAGE_BASHRCS_SOURCED=0 # @FUNCTION: source_all_bashrcs @@ -715,17 +625,20 @@ trap 'exit 1' SIGTERM if [[ $EBUILD_PHASE != depend ]] ; then source "${PORTAGE_BIN_PATH}/phase-functions.sh" source "${PORTAGE_BIN_PATH}/phase-helpers.sh" + source "${PORTAGE_BIN_PATH}/bashrc-functions.sh" else # These dummy functions are for things that are likely to be called # in global scope, even though they are completely useless during # the "depend" phase. for x in diropts docompress exeopts insopts \ - keepdir libopts use useq usev use_with use_enable ; do + keepdir libopts register_die_hook register_success_hook \ + remove_path_entry set_unless_changed strip_duplicate_slashes \ + unset_unless_changed use useq usev use_with use_enable ; do eval "${x}() { : ; }" done # These functions die because calls to them during the "depend" phase # are considered to be severe QA violations. - for x in best_version has_version ; do + for x in best_version has_version portageq ; do eval "${x}() { die \"\${FUNCNAME} calls are not allowed in global scope\"; }" done unset x -- cgit v1.2.3-1-g7c22