# Copyright 1999-2005 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ #echo $EBUILD_PHASE > /dev/stderr # - /etc/portage/bashrc # -solar 2004 # - update Nov 30 hasq() { local x local me=$1 shift # All the TTY checks really only help out depend. Which is nice. # Logging kills all this anyway. Everything becomes a pipe. --NJ for x in "$@"; do if [ "${x}" == "${me}" ]; then return 0 fi done return 1 } has() { if hasq "$@"; then return 0 fi return 1 } auto_overlay() { [ "$PORTDIR_OVERLAY" != "/dev/shm/portage" ] && return 0; rsync --archive --update --delete-after -C \ --exclude metadata.xml --exclude ChangeLog \ $(dirname ${EBUILD}) /dev/shm/portage/$CATEGORY/ x=${PORTDIR}/local/patches/$CATEGORY/$PN/$(basename $EBUILD).patch if [ -e ${x} ]; then echo save_pwd=$PWD cd /dev/shm/portage/$CATEGORY/$PN/ for c in 0 1 2 3 4 5; do cat ${x} | patch --dry -p$c >/dev/null if [ $? = 0 ]; then echo "Patching $P at level [$c]" cat ${x} | patch --verbose -p$c base_EBUILD=$(basename $EBUILD) sum=$(md5sum ${EBUILD} | awk '{print $1}') size=$(/bin/ls -1l ${EBUILD} | awk '{print $5}') new_size=$(/bin/ls -1l ${base_EBUILD} | awk '{print $5}') old="$sum $base_EBUILD $size" new="$(md5sum $base_EBUILD | awk '{print $1}') $base_EBUILD $new_size" sed -i -e s/"$old"/"$new"/g Manifest \ && (echo Updated md5sums in the Manifest for $EBUILD to $base_EBUILD ; echo $old ; echo $new) # gotta use sed hacks to work around lockfiles. # && ebuild $base_EBUILD digest fi done cd $save_pwd fi } eecho() { #[ "$NOCOLOR" = "false" ] && echo -ne '\e[1;34m>\e[1;36m>\e[1;35m>\e[0m ' || echo -n ">>> " echo -ne '\e[1;34m>\e[1;36m>\e[1;35m>\e[0m ' || echo -n ">>> " echo "$*" } has-sandbox() { #echo LD_PRELOAD="${LD_PRELOAD}" for PRELOAD in $(echo ${LD_PRELOAD} | /bin/tr : ' '); do #echo PRELOAD=$PRELOAD - BASE_PRELOAD=${PRELOAD##*/} [ "${PRELOAD##*/}" = "libsandbox.so" ] && return 0 done return 1 } package-distdir-clean() { local a x for a in ${FEATURES} ; do if [ "$a" = "distclean" ]; then for x in ${SRC_URI}; do x=$(/bin/basename $x) if [[ -f $DISTDIR/$x ]]; then size="$(/bin/ls -lh ${DISTDIR}/${x} | /bin/awk '{print $5}')" eecho "All done with ${x} Removing it to save ${size}" /bin/rm ${DISTDIR}/${x} fi done fi done } append-cflags() { export CFLAGS="${CFLAGS} $*" export CXXFLAGS="${CXXFLAGS} $*" return 0 } package-cflags() { local target flags flag i; # bail if file does not exist or is not readable. [ -r ${ROOT}/etc/portage/package.cflags ] || return 0 # need bash >= 3 if [ "${BASH_VERSINFO[0]}" -le 2 ]; then eecho "Need bash3 for this bashrc script to work" return 0 fi while read -a target; do if [[ ${target[@]%%#*} ]]; then # valid syntax no >=" ]]; then skip=0 if [[ ${target} != ${CATEGORY} ]] ; then if [[ ${target} != ${CATEGORY}/${PN} ]] ; then skip=1 fi fi if [ "${skip}" == 0 ] ; then flags=(${target[@]:1}) if [[ ${flags[@]} =~ 'CFLAGS' ]]; then for (( i = 0; i < ${#flags[@]}; i++ )); do if [[ ${flags[$i]} =~ 'CFLAGS' ]]; then appened-cflags $(eval echo "${flags[$i]}") unset flags[$i] fi done fi for flag in ${flags[@]}; do if [[ ${CFLAGS} =~ ${flag} ]]; then continue 1 else append-cflags "${flag}" fi done export -n C{,XX}FLAGS #eecho "Using package.cflags entry for target ${target} for ${CATEGORY}/${PN}" fi fi fi done < ${ROOT}/etc/portage/package.cflags } if : ; then PATH=$PATH:/usr/sbin:/usr/bin:/bin:/sbin /bin/mkdir -p /var/tmp/portage/PORT_LOGDIR/ /dev/shm/portage case "$*" in # try to stay quiet here. #depend) : auto_overlay ;; depend) : ;; prerm|postrm|clean) : ;; setup|unpack|postinst|compile) if has-sandbox ; then [ "$NOCOLOR" = "false" ] && i=$(echo -ne '\e[1;32m+\e[0m') || i="+" else [ "$NOCOLOR" = "false" ] && i=$(echo -ne '\e[1;31m-\e[0m') || i="-" fi eecho "$USER ${i}sandbox($*)" package-cflags if [ "`hasq debug ${FEATURES}`" != "" -a "$*" = "setup" ]; then DEBUG="yes" RESTRICT="$RESTRICT nostrip" export CFLAGS="${CFLAGS/-fomit-frame-pointer/} -g3" export CXXFLAGS="${CXXFLAGS/-fomit-frame-pointer/} -g3" export LDFLAGS="${LDFLAGS} -ggdb" fi if [ "$*" = "postinst" ];then package-distdir-clean fi ;; esac else echo "This bashrc does not know anything about $0" fi if [[ $AUTOPATCH != "" ]] && [[ $EBUILD_PHASE == compile ]]; then [[ ! -d "$PATCH_OVERLAY" ]] && eecho "PATCH_OVERLAY=$PATCH_OVERLAY is not a dir" if [ ! -r /etc/portage/bashrc.autopatch ]; then eecho "bashrc.autopatch is not readable" else eecho "Checking for auto patches" source /etc/portage/bashrc.autopatch fi fi :