###
## A script to setup some needed variables and functions for KDE 4 development.
##
## Peeled and pureed by the openSUSE KDE team - opensuse-kde@opensuse.org
##
##
## Unless you created a separate user whose .profile sources this file, you 
## always have to source this file before doing any KDE 4 developement
##
## Example
##   . ~/kde4-build-env

# First pull in the runtime variables from their file
. ~/bin/kde4-run-env

# build and src folders
# you might want to change these!
KDE_DEVEL_PREFIX=$HOME/kdesvn

export KDE_BUILD=$KDE_DEVEL_PREFIX/build
export KDE_SRC=$KDE_DEVEL_PREFIX/src

# XDG
unset XDG_DATA_DIRS # to avoid seeing kde3 files from /usr
unset XDG_CONFIG_DIRS

# This will make the debug output prettier
export KDE_COLOR_DEBUG=1
export QTEST_COLORED=1

# Make
# Tell many scripts how to switch from source dir to build dir:
export OBJ_REPLACEMENT="s#$KDE_SRC#$KDE_BUILD#"

# Use makeobj instead of make, to automatically switch to the build dir.
# If you don't have makeobj, install the package named kdesdk-scripts or 
# kdesdk, or check out kdesdk/scripts from svn, or just don't set the alias
# yet.
makeobjpath=`which makeobj 2>/dev/null`
if [ -x "$makeobjpath" ]
then
    alias make=makeobj
fi

##
# IMPORTANT!  Uncomment the following lines if DBus is not running. DBus is not
# running if, when you run `dbus-uuidgen --ensure && qdbus`, you get an error.
#
# alias dbusstart="eval `PATH=$DBUSDIR/bin \
#  $DBUSDIR/bin/dbus-launch --auto-syntax`"

##
# A function to easily build the current directory of KDE.
#
# This builds only the sources in the current ~/{src,build}/KDE subdirectory.
# Usage: cs KDE/kdebase && cmakekde
#   will build/rebuild the sources in ~/src/KDE/kdebase
#
function cmakekde {
        if test -n "$1"; then
                # srcFolder is defined via command line argument
                srcFolder=$1
        else
                # get srcFolder for current dir
                srcFolder=`pwd | sed -e s,$KDE_BUILD,$KDE_SRC,`
        fi
        # we are in the src folder, change to build directory
        # Alternatively, we could just use makeobj in the commands below...
        if [ "$srcFolder" = `pwd` ]; then
                cb
        fi
        # to enable tests, add -DKDE4_BUILD_TESTS=TRUE to the next line.
        # you can also change "debugfull" to "debug" to save disk space.
        # added "nice make..." to allow the user to work on the box while
        # compiling
        # Note: To speed up compiling, change 'make -j2' to 'make -jx',
        #   where x is your number of processors +1
        if [ -n "$LIB_SUFFIX" ]
        then
            LIB_SUFFIX_SWITCH=-DLIB_SUFFIX\=$LIB_SUFFIX
        fi
        echo cmake $srcFolder -DCMAKE_INSTALL_PREFIX=$KDE_INSTALL_PREFIX -DCMAKE_BUILD_TYPE=debugfull $LIB_SUFFIX_SWITCH
        cmake $srcFolder -DKDE4_BUILD_TESTS=TRUE -DCMAKE_INSTALL_PREFIX=$KDE_INSTALL_PREFIX \
                -DCMAKE_BUILD_TYPE=debugfull $LIB_SUFFIX_SWITCH && \
        nice make -j3 && \
        make install
}
##
# for the lazy ones, add/comment other directories
# it is advised to do a manual build the first time in each module to
# ensure cmake found everything it needs - this is not a replacement for
# kdesvnbuild
function cmakekdeall {
        #cs kdesupport && svn up
        cs KDE && svn up kdelibs kdepimlibs kdebase kdepim kdegraphics \
                kdemultimedia kdenetwork kdeutils
        cs KDE/kdelibs && cmakekde
        cs KDE/kdepimlibs && cmakekde
        cs KDE/kdebase && cmakekde
        cs KDE/kdepim && cmakekde
        cs KDE/kdegraphics && cmakekde
        cs KDE/kdemultimedia && cmakekde
        cs KDE/kdenetwork && cmakekde
        cs KDE/kdeutils && cmakekde
        cs extragear/plasma && svn up && cmakekde
}

##
# A function to easily change to the build directory.
# Usage: cb KDE/kdebase
#   will change to $KDE_BUILD/KDE/kdebase
# Usage: cb
#   will simply go to the build folder if you are currently in a src folder
#   Example:
#     $ pwd
#     /home/user/src/KDE/kdebase
#     $ cb && pwd
#     /home/user/build/KDE/kdebase
#
function cb {
        # Make sure build directory exists.
        mkdir -p $KDE_BUILD

        # command line argument
        if test -n "$1"; then
                cd $KDE_BUILD/$1
                return
        fi
        # substitute src dir with build dir
        dest=`pwd | sed -e s,$KDE_SRC,$KDE_BUILD,`
        if test ! -d $dest; then
                # build directory does not exist, create
                mkdir -p $dest
        fi
        cd $dest
}

##
# Change to the source directory.  Same as cb, except this
# switches to $KDE_SRC instead of $KDE_BUILD.
# Usage: cs KDE/kdebase
#       will change to $KDE_SRC/KDE/kdebase
# Usage: cs
#   will simply go to the source folder if you are currently in a build folder
#   Example:
#     $ pwd
#     /home/user/build/KDE/kdebase
#     $ cs && pwd
#     /home/user/src/KDE/kdebase
#
function cs {
        # Make sure source directory exists.
        mkdir -p $KDE_SRC

        # command line argument
        if test -n "$1"; then
                cd $KDE_SRC/$1
        else
                # substitute build dir with src dir
                dest=`pwd | sed -e s,$KDE_BUILD,$KDE_SRC,`
                if [ $dest = `pwd` ]; then
                cd $KDE_SRC
                else
                cd $dest
                fi
        fi
}

##
# Add autocompletion to cs function
#
function _cs_scandir
{
        base=$1
        ext=$2
        if [ -d $base ]; then
                for d in `ls $base`; do
                        if [ -d $base/$d ]; then
                                dirs="$dirs $ext$d/"
                        fi
                done
        fi
}

function _cs()
{
        local cur dirs
        _cs_scandir "$KDE_SRC"
        _cs_scandir "$KDE_SRC/KDE" "KDE/"
        COMPREPLY=()
        cur="${COMP_WORDS[COMP_CWORD]}"
        COMPREPLY=( $(compgen -W "${dirs}" -- ${cur}) )
}

# Remove comment on next line to enable cs autocompletion
#complete -F _cs cs

