#!/bin/bash # # Last Update: July 13 2009 # # Based on http://www.mono-project.com/Parallel_Mono_Environments , with the # following modifications: # # - Aliases for make: # - mk = make # - mki = make install # - mku = make uninstall # - mkuci = make uninstall, clean, autogen and install # - mkc = make clean # - mkdc = make dist-clean # - autogenmono = autogen.sh with prefix, you also add your arguments # - configuremono = configure with prefix, you also add your arguments # - bootstrapmono = bootstrap with prefix, you also add your arguments # - Success/Failure messages raised depending on executed command. # # You will need to add the following alias into your .bashrc: # # function exportmono { # source ~/path/to/mono-dev $1 # } # # so you can use: # - "exportmono trunk" # - "exportmono 2.4" # - "exportmono whatever" # to use multiple parallel environments, when no argument is used "trunk" # is set by default. # # # You can also use "lcustom" to load custom scripts, for example # if you need to define environment variables instead of adding those here # you will write a custom-var.sh and will use: # # "lcustom ~/custom-var.sh" # Use this variable to add local enviroment paths # (i.e. to include a custom executable script) EXTRA_PATH=$HOME/Documents/Repository/uia2atk/tools # Use this variable if you want to change the default terminal header TERMINAL_HEADER="@mono-dev:" # Colors, based on http://wiki.archlinux.org/index.php/Color_Bash_Prompt NO_COLOR='\e[0m' # regular colors BLACK='\e[0;30m' RED='\e[0;31m' GREEN='\e[0;32m' YELLOW='\e[0;33m' BLUE='\e[0;34m' MAGENTA='\e[0;35m' CYAN='\e[0;36m' WHITE='\e[0;37m' # emphasized (bolded) colors EBLACK='\e[1;30m' ERED='\e[1;31m' EGREEN='\e[1;32m' EYELLOW='\e[1;33m' EBLUE='\e[1;34m' EMAGENTA='\e[1;35m' ECYAN='\e[1;36m' EWHITE='\e[1;37m' # underlined colors UBLACK='\e[4;30m' URED='\e[4;31m' UGREEN='\e[4;32m' UYELLOW='\e[4;33m' UBLUE='\e[4;34m' UMAGENTA='\e[4;35m' UCYAN='\e[4;36m' UWHITE='\e[4;37m' # background colors BBLACK='\e[40m' BRED='\e[41m' BGREEN='\e[42m' BYELLOW='\e[43m' BBLUE='\e[44m' BMAGENTA='\e[45m' BCYAN='\e[46m' BWHITE='\e[47m' # We are going to load CUSTOM FILES # # Basically the idea is to split multiple development paths or variables # into different files, that way we can keep this file as clean as possible. # This magic function tries to load those files. function lcustom { if test x"$1" = x; then echo -e "${RED}>>${NO_COLOR} Nothing to do, no arguments provided." else source $1 && echo -e "${RED}>>${NO_COLOR} Loaded: '$1'" || echo -e "${RED}>>${NO_COLOR} Not loaded" fi } MONO_REV=$1 if test x"$MONO_REV" = x; then MONO_REV="trunk" fi HOME_ROOT=$HOME/.root-dev/$MONO_REV MONO_PREFIX=$HOME_ROOT GNOME_PREFIX=$HOME_ROOT if [ -d $HOME_ROOT ]; then echo -e "${RED}>>${NO_COLOR} Using environment: ${RED}$MONO_REV" else mkdir -p $HOME_ROOT && echo -e "${RED}>>${NO_COLOR} Using environment (for the first time): ${RED}$MONO_REV" || echo -e "${RED}>>${NO_COLOR} Unable to create local path." fi # configure-related functions function autogenmono { _nameTerminalUpdate "autogenmono: `basename $PWD`" ./autogen.sh --prefix=$MONO_PREFIX $* && _mynotify "autogenmono" || _mynotify 1 "autogenmono" _nameTerminalUpdate } function configuremono { _nameTerminalUpdate "configure: `basename $PWD`" ./configure --prefix=$MONO_PREFIX $* && _mynotify "configuremono" || _mynotify 1 "configuremono" _nameTerminalUpdate } function bootstrapmono { _nameTerminalUpdate "boostrap: `basename $PWD`" if test x"$1" = x; then echo -e "${RED}>>${NO_COLOR} Use bootstrapmono bootstrap-file" echo -e "${RED}>>${NO_COLOR} For example: bootstrapmono bootstrap-2.12" else ./$1 --prefix=$MONO_PREFIX $2 && _mynotify "bootstrapmono" || _mynotify 1 "bootstrapmono" fi _nameTerminalUpdate } # make-related functions function mkuci { _nameTerminalUpdate "make uninstall/clean/autogen/install: `basename $DIR`" make uninstall && make clean && autogenmono $* && make install && _mynotify "mkuci" || _mynotify 1 "mkuci" _nameTerminalUpdate } function mk { _nameTerminalUpdate "make: `basename $PWD`" make $* && _mynotify "mk" || _mynotify 1 "mk" _nameTerminalUpdate } function mki { _nameTerminalUpdate "make install: `basename $PWD`" make install $* && _mynotify "mki" || _mynotify 1 "mki" _nameTerminalUpdate } function mku { _nameTerminalUpdate "make uninstall: `basename $PWD`" make uninstall && _mynotify "mku" || _mynotify 1 "mku" _nameTerminalUpdate } function mkc { _nameTerminalUpdate "make clean: `basename $PWD`" make clean && _mynotify "mkc" || _mynotify 1 "mkc" _nameTerminalUpdate } function mkdc { _nameTerminalUpdate "make dist-clean: `basename $PWD`" make dist-clean && _mynotify "mkdc" || _mynotify 1 "mkdc" _nameTerminalUpdate } # SVN related functions function svnup { svn update && _mynotify "svnup" || _mynotify 1 "svnup" } function svnupa { ORIG_PWD=$PWD echo -e "${RED}>>${NO_COLOR} Calling svn update in current folder: '${RED}${PWD}${NO_COLOR}'" for DIR in `ls -d $PWD/*/`; do if [ -d $DIR/.svn ]; then _nameTerminalUpdate "svn up: `basename $DIR`" cd $DIR && svnup fi done _nameTerminalUpdate cd $ORIG_PWD } # "Private" functions function _mynotify { MSG_CONTENT=$1 MSG_URGENCY="normal" MSG_RESULT="done" echo $1 | grep "[^0-9]" > /dev/null 2>&1 # Is first argument a numeric value? if [ "$?" -ne "0" ]; then if [ "$1" -eq "1" ]; then MSG_CONTENT=$2 MSG_URGENCY="critical" MSG_RESULT="failed" fi fi notify-send -t 2500 -u $MSG_URGENCY "$MSG_CONTENT $MSG_RESULT: '`basename $PWD`'" } # Ripped-off from: http://fvue.nl/wiki/NameTerminal function _nameTerminal { [ "${TERM:0:5}" = "xterm" ] && local ansiNrTab=0 [ "$TERM" = "rxvt" ] && local ansiNrTab=61 [ "$TERM" = "konsole" ] && local ansiNrTab=30 ansiNrWindow=0 # Change tab title [ $ansiNrTab ] && echo -n $'\e'"]$ansiNrTab;$1"$'\a' # If terminal support separate window title, change window title as well [ $ansiNrWindow -a "$2" ] && echo -n $'\e'"]$ansiNrWindow;$2"$'\a' } # nameTerminal() function _nameTerminalUpdate { if test x"$1" = x; then _nameTerminal "$TERMINAL_HEADER$MONO_REV" else _nameTerminal "$TERMINAL_HEADER$MONO_REV -> $1" fi } export DYLD_LIBRARY_PATH=$MONO_PREFIX/lib:$DYLD_LIBRARY_PATH export LD_LIBRARY_PATH=$MONO_PREFIX/lib:$LD_LIBRARY_PATH export C_INCLUDE_PATH=$MONO_PREFIX/include:$GNOME_PREFIX/include export ACLOCAL_PATH=$MONO_PREFIX/share/aclocal export PKG_CONFIG_PATH=$MONO_PREFIX/lib/pkgconfig:$GNOME_PREFIX/lib/pkgconfig export MANPATH=$MONO_PREFIX/share/man:$MANPATH # a11y support export GTK_MODULES=gail:atk-bridge PATH=$EXTRA_PATH:$PATH PATH=$MONO_PREFIX/bin:$PATH PS1="$WHITE@mono-dev$NO_COLOR:$RED$MONO_REV$NO_COLOR:\w-> " _nameTerminal "$TERMINAL_HEADER$MONO_REV"