User:Dhaumann/Compiling KDE4

From KDE TechBase

This HOWTO describes step by step what to do to have a basic KDE4 environment.

In the end, there will be a KDE4 installation which runs parallel to KDE3 as the same user. Thus, if you for example want to try KMail without touching your original Mail folder, better run the scripts from a separate user.

Requirements

Make sure the following packages are NOT installed in your distribution:

  • kde4 distribution packages
  • strigi
  • soprano

Required software

  • libxine version >=1.1.9


Lots of free disk space

  • qt-copy, kdesupport, kdelibs, kdepimlibs, kdebase need ~7 GB
  • more modules need even more space, of course

Directory structure

Create a basic directory structure:

mkdir -p ~/kde/src

As a preview, this is how the directory structure looks like later

~/kde                     base directory for scripts, source and build
~/kde/src                 base directory for all svn checkouts
~/kde/src/qt-copy         source of qt-copy
~/kde/src/kdesupport      source of kdesupport
~/kde/src/kdelibs         source of kdelibs
~/kde/src/<kde-module>    source of <kde-module> ....
~/kde/build               build directory
~/kde/build/kdesupport    build files for kdesupport
...

~/kde/kde4                install path of KDE4
~/kde/kde4/bin
...

~/.kde4                   local kde configuration directory

File structure

In order to make life easy, save the following files. Make them executable by calling afterwards

chmod 755 ~/kde/*.sh

~/kde/build-qt-copy.sh

Script to build qt-copy

#!/bin/bash
# compile qt-copy
export QTDIR=$HOME/kde/src/qt-copy
export PATH=$QTDIR/bin:$PATH
cd $QTDIR
./configure -qt-gif -no-exceptions -debug -fast -prefix $QTDIR -qdbus -pch -nomake examples -nomake demos
#./configure -qt-gif -no-exceptions -release -fast -prefix $QTDIR -qdbus -pch -nomake examples -nomake demos
make
# Note: no make install !!

~/kde/build-module.sh

Build KDE-module

#!/bin/bash
if [ -z "$*" ]
then
  echo "usage: ./build-module.sh module [module, ...]"
  exit 1
fi

# set ENV variables
export BUILDDIR=$HOME/kde/build
export SRCDIR=$HOME/kde/src

export QTDIR=$SRCDIR/qt-copy
export KDEDIRS=$HOME/kde/kde4
export KDEDIR=$KDEDIRS

export PATH=$QTDIR/bin:$KDEDIR/bin:$PATH
export CMAKE_INCLUDE_PATH=$QTDIR/include:$KDEDIR/include
export CMAKE_LIBRARY_PATH=$QTDIR/lib:$KDEDIR/lib
export LD_LIBRARY_PATH=$QTDIR/lib:$KDEDIR/lib
export PKG_CONFIG_PATH=$QTDIR/lib:$KDEDIR/lib/pkgconfig

# language of compiler output: english
export LC_ALL=C

# export QTTELEPATHY_LIBRARIES=$KDEDIR/lib

box() {
  echo "#######################################################"
  echo "# building module: $1, `date`"
  echo "#######################################################"
}
 
for module in $@
do
  [ -d "$SRCDIR/$module" ] || continue
  box $module
  [ -d "$BUILDDIR/$module" ] || mkdir -p "$BUILDDIR/$module"
  cd "$BUILDDIR/$module"

  # bootstrap
  cmake -DCMAKE_BUILD_TYPE=debugfull -DCMAKE_INSTALL_PREFIX=$KDEDIR "$SRCDIR/$module"
  make -j 2 -k
  make install

  cd -
done

~/kde/run-kde4-app.sh

Run KDE4-app in KDE4-environment.

#!/bin/bash

export KDEDIR=$HOME/kde/kde4
export KDEDIRS=$KDEDIR
export QTDIR=$HOME/kde/src/qt-copy

export KDEHOME=$HOME/.kde4
export KDETMP=/tmp/kde4-$USER
export KDEVARTMP=/var/tmp/kde4-$USER
export KDESYCOCA=$KDEVARTMP/ksycoca

export QT_PLUGIN_PATH=$KDEDIR/lib/kde4/plugins:$QT_PLUGIN_PATH
export PKG_CONFIG_PATH=$QTDIR/lib/pkgconfig:$PKG_CONFIG_PATH

export LD_LIBRARY_PATH=$KDEDIR/lib:$QTDIR/lib:$LD_LIBRARY_PATH

export PATH=$KDEDIR/bin:$QTDIR/bin:/usr/bin:/bin

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

[ -d "$KDETMP/kde-$USER" ] || mkdir -p $KDETMP/kde-$USER
[ -d "$KDEVARTMP" ] || mkdir $KDEVARTMP

# start app
$@

~/kde/list-kde4-apps.sh

List all running KDE4 processes.

#!/bin/sh
ls /proc/*/exe 2>/dev/null | while read f; do
  link=`readlink $f`
  if echo "$link" | grep -q kde4; then
    pid=`echo $f | sed -e 's/[^0-9]//g'`
    echo "$link, pid $pid"
  fi
    if echo "$link" | grep -q valgrind; then
    echo "$link - WARNING, valgrind running"
  fi
done

~/kde/kill-kde4-apps.sh

Kill all running KDE4 processes.

#!/bin/sh
ls /proc/*/exe 2>/dev/null | while read f; do
  link=`readlink $f`
  if echo "$link" | grep -q kde4; then
    pid=`echo $f | sed -e 's/[^0-9]//g'`
    echo "Killing $link, pid $pid"
    kill $pid
  fi
done

~/.bashrc

If you add the following functions to the ~/.bashrc file, you can later switch with a simple cs and cb between source and build directory.

Example:

cd ~/kde/src/kdelibs/kate
cb
# now we are in ~/kde/build/kdelibs/kate
make install
cs
# now we are back in ~/kde/src/kdelibs/kate

Code for ~/.bashrc:

# substitue src dir with build dir
function cb {
  dest=`pwd | sed -e s,$HOME/kde/src,$HOME/kde/build,`
  cd $dest
}

# substitue build dir with src dir
function cs {
  dest=`pwd | sed -e s,$HOME/kde/build,$HOME/kde/src,`
  cd $dest
}

Getting the Sources

Checkout the sources from KDE's subversion repository:

cd ~/kde/src
svn checkout svn://anonsvn.kde.org/home/kde/trunk/qt-copy
svn checkout svn://anonsvn.kde.org/home/kde/trunk/kdesupport
svn checkout svn://anonsvn.kde.org/home/kde/trunk/KDE/kdelibs
svn checkout svn://anonsvn.kde.org/home/kde/trunk/KDE/kdepimlibs
svn checkout svn://anonsvn.kde.org/home/kde/trunk/KDE/kdebase

To update a module, simply change into the module-directory and execute svn update:

cd ~/kde/src/kdelibs
svn update

Compiling the Sources

Compile qt-copy and all the KDE-modules kdesupport, kdelibs, kdepimlibs and kdebase. If compilation fails, look at the error and fix it. Then restart with the module that had the error.

This takes roughly 3-4 hours.

cd ~/kde

# build Qt4 snapshot
./build-qt-copy.sh # wait until finished successfully

# build kde-module: ./build-module.sh module [module ...]
./build-module.sh kdesupport kdelibs kdepimlibs kdebase # wait until finished successfully

Running a KDE4-app

If kdebase was compiled and installed successfully, you can start a kde4 app as follows:

cd ~/kde
./run-kde4-app.sh dolphin

Running a full KDE4-desktop:

# start X server in failsafe mode.
cd ~/kde
./run-kde4-app.sh startkde

Now the splashscreen should appear, along with the desktop (plasma) and the windowmanager (kwin).

KDE4 Development

KDE4 is compiled and installed. Now you can modify the sources, then change into the build directory and compile and install again. Example:

cd ~/kde/src/kdelibs/kate   # assume we have changed code in kdelibs/kate
cb                          # change to build directory
make install                # recompile and install
cs

Now you can test your changes with the run-kde4-app.sh script.

Weblinks

Notes

Tested with

  • Gentoo
  • Kubuntu
  • openSUSE