summaryrefslogtreecommitdiffstats
path: root/scripts/kde-build
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/kde-build')
-rwxr-xr-xscripts/kde-build898
1 files changed, 898 insertions, 0 deletions
diff --git a/scripts/kde-build b/scripts/kde-build
new file mode 100755
index 00000000..5c9a111d
--- /dev/null
+++ b/scripts/kde-build
@@ -0,0 +1,898 @@
+#! /usr/bin/env bash
+################################################################################
+# Updates and recompiles a local KDE tree from SVN #
+# (c) 2000, 2001, 2002, 2003 by Frerich Raabe <raabe@kde.org> #
+# (c) 2002, 2003 by Stephan Kulow <coolo@kde.org> #
+################################################################################
+# Do not edit this file, change kde-buildrc instead! #
+################################################################################
+
+# These strings are defined as variables to make the output look more
+# consistent.
+#
+str_okay="done!"
+str_error="failed!"
+
+# The variables whose name is prefixed with ERR_ hold the error codes which
+# are returned by the script and depend on the reason for aborting the
+# execution.
+#
+# No error has been noticed, everything seems to be fine.
+#
+err_no_error="0"
+
+# Could not change into a directory of a module - wrong owner/access
+# settings?
+#
+err_change_into_mod_dir="1"
+
+# Could not find the file 'Makefile.in' for a module, mostly happens if
+# 'make -f Makefile.cvs' hasn't been executed for a module.
+#
+err_no_makefile_in="2"
+
+# The 'configure' command failed for a module because the system doesn't
+# support certain features - I hope you activated logfile generation... ;)
+#
+err_configure_fail="3"
+
+# The compilation of a module failed - if the module is defined in
+# $critical_modules (see below) the execution is aborted, otherwise the script
+# will continue with the next module.
+#
+err_compile_fail="4"
+
+# The installation of a module failed - this mostly happens if there's not
+# enough free disk space on the partition which $KDEDIRS is mounted to.
+#
+err_install_fail="5"
+
+# The $KDESRCDIR variable wasn't set or contains a non-existant directory.
+#
+err_inv_kdesrcdir="6"
+
+# The $QTDIR variable wasn't set, points to a non-existant directory or
+# doesn't contain a bin/, lib/, or include/ subdirectory.
+#
+err_inv_qtdir="7"
+
+# ....
+
+# The configuration file couldn't be found.
+#
+err_no_config="11"
+
+# You can't mix CVS_CLEAN and INCREMENTAL_BUILD
+#
+err_cvsclean_incremental="12"
+
+# You can't mix BUILD_CLEAN and INCREMENTAL_BUILD
+#
+err_buildclean_incremental="13"
+
+# Certain modules depend on others - those "base" modules which are required
+# by others to compile and/or run should be listed here to ensure that the
+# script is aborted in case on of these modules doesn't build.
+# These modules needs to be build and installed in this specific order!
+#
+critical_modules="arts kdelibs kdebase"
+
+# Internal variable, do not change.
+#
+dateformat="`date +%Y%m%d`"
+
+# Private variables fro controlling kppp
+#
+we_started_kppp="FALSE"
+
+# Connects to the internet using kppp if desired
+#
+kppp_connect()
+{
+if [ "$USE_KPPP" = "TRUE" ]; then
+ kppp_process=`dcopfind -a kppp-*`
+ if [ "$kppp_process" = "" ]; then
+ #kppp not running
+ kppp > /dev/null 2>&1 &
+ sleep $KPPP_LOAD_TIME
+ `dcop $(dcopfind -a kppp-*) KpppIface beginConnect`
+ #wait for a while
+ sleep $KPPP_CONNECT_TIME
+ kppp_connected=`dcop $(dcopfind -a kppp-*) KpppIface isConnected`
+ if [ "$kppp_connected" = "true" ]; then
+ we_started_kppp="TRUE"
+ echo Connected OK
+ else
+ echo Could not connect, maybe you need to increase KPPP_CONNECT_TIME
+ fi
+
+ else
+ kppp_connected=`dcop $(dcopfind -a kppp-*) KpppIface isConnected`
+ if [ "$kppp_connected" = "false" ]; then
+ #Start a connection
+ `dcop $(dcopfind -a kppp-*) KpppIface beginConnect`
+ #wait for a while
+ sleep $KPPP_CONNECT_TIME
+ kppp_connected=`dcop $(dcopfind -a kppp-*) KpppIface isConnected`
+ if [ "$kppp_connected" = "true" ]; then
+ we_started_kppp="TRUE"
+ echo Connected OK
+ else
+ echo Could not connect, maybe you need to increase KPPP_CONNECT_TIME
+ fi
+ else
+ echo Kppp is already connected to the internet
+ fi
+ fi
+fi
+}
+
+# Disconnects from the internet using kppp if desired
+#
+kppp_disconnect()
+{
+if [ "$USE_KPPP" = "TRUE" ]; then
+ if [ $(dcopfind -a kppp-*) = "" ]; then
+ #kppp not running
+ echo Kppp was not running so cannot be disconnected
+ else
+ if [ "$we_started_kppp" = "TRUE" ]; then
+ echo Disconnecting kppp
+ `dcop $(dcopfind -a kppp-*) KpppIface disconnect`
+ else
+ echo We didnt connect using kppp so we wont disconnect
+ fi
+ fi
+fi
+}
+
+# This method gives some kind of status message in the title bar of Konsole,
+# xterm, etc.. Thanks have to go to Malte Starostik
+# <malte@kde.org> for the code :-)
+set_title() {
+ which printf > /dev/null 2>&1 || return
+ if ([ "$TERM" = "xterm" ] || [ "$TERM" = "xterm-color" ] || [ "$TERM" = "screen" ]) && tty -s; then
+ printf "\033]0;$1\007"
+ fi
+}
+
+# moves a log file to be named $1, so one can see on first glance
+move_logfile() {
+ rename_logfile=`echo $logfile | sed -e "s,-build-,-$1-,"`
+ mv "$logfile" "$rename_logfile"
+ logfile=$rename_logfile
+}
+
+# Executes the given command, logging the output to $logfile if requested.
+#
+log_cmd() {
+ if [ -n "$logfile" ]; then
+ eval "$1 >> $logfile 2>&1"
+ else
+ eval "$1"
+ fi
+ return $?
+}
+
+module_variable() {
+ eval "$1=\$BASE_$1"
+ varname="$1_"`echo $module|tr a-z A-Z|tr - _|sed "s/\(.*\)-[0-9]*/\1/g"`; # e.g. $1_ARTS etc.
+ varvalue=`eval echo '$'$varname`
+ if [ -n "$varvalue" ]; then
+ eval "$1=\"$varvalue\""
+ fi
+}
+
+# Inserts a "-> blah <---" style separator into $logfile, and starts a timer
+log_section() {
+ [ -z "$logfile" ] && return 0
+ len=`echo $1 | wc -m | sed -e "s,^ *,,"`
+ echo "------------------------------------------------------------------------" \
+ | sed -e "s,^,-> $1 <," -e "s,.\{$len\}$,," >> $logfile 2>&1
+ starttime=`date +%s`
+}
+
+# Computes the time elapsed since the last log_section call,
+# inserts a "----" separator, and the time needed, into $logfile
+log_endsection() {
+ [ -z "$logfile" ] && return 0
+ compute_time
+ echo "----------------------------------------------------------------------------" >> $logfile 2>&1
+ printf "%s for module %s done. Time needed: %02d:%02d:%02d\n" "$1" $module $hours $minutes $seconds >> $logfile 2>&1
+ echo "" >> $logfile 2>&1
+}
+
+# This function computes the time which was needed for a certain task, using
+# expr (instead of shell-specific features) for portability.
+#
+compute_time() {
+ duration=`expr \`date +%s\` - $starttime`
+ hours=`expr $duration / 3600`
+ minutes=`expr $duration % 3600 / 60`
+ seconds=`expr $duration % 60`
+}
+
+prepare_update() {
+ # This checks whether the user wants a certain branch and generates the
+ # command line.
+ #
+ cmd_update="svn"
+ if test -d $KDESRCDIR/$module; then
+ test -z "$SUBDIR" && { cmd_update="$cmd_update update" ; return; }
+ cmd_update="$cmd_update switch -r HEAD"
+ else
+ cmd_update="$cmd_update co"
+ fi
+ if [ -z "$ACCOUNT" ]; then
+ cmd_update="$cmd_update $ANONSVNROOT$SUBDIR"
+ else
+ cmd_update="$cmd_update"
+ if [ "$SSHACCOUNT" = "yes" ]; then
+ cmd_update="$cmd_update svn+ssh://$ACCOUNT@svn.kde.org/home/kde$SUBDIR"
+ else
+ cmd_update="$cmd_update https://$ACCOUNT@svn.kde.org/home/kde$SUBDIR"
+ fi
+ fi
+ if [ -n "$CHECKOUT_PARTIAL" -a "$1" = "toponly" ]; then # TODO
+ cmd_update="$cmd_update -N"
+ fi
+ if test ! -d $KDESRCDIR/$module; then
+ cmd_update="$cmd_update $module"
+ fi
+}
+
+# This function installs a compiled CVS module.
+#
+install_module() {
+ echo -n " Installing..."
+ set_title "Installing module $module..."
+ log_section "Installation"
+
+ if log_cmd "$cmd_make_install"; then
+ log_endsection "Installation"
+ if [ -n "$KDELOGDIR" ]; then
+ echo "Build of module $module successfully finished at `date +%c`" >> $logfile
+ [ -n "$cmd_compress" ] && eval "$cmd_compress $logfile"
+ fi
+ echo "$str_okay"
+ echo "Module $module successfully installed in $KDEDIRS!"
+ move_logfile "finished"
+ else
+ echo "$str_error"
+ move_logfile "failed"
+ [ -n "$cmd_compress" ] && eval "$cmd_compress $logfile"
+ [ $critical -eq 0 ] || exit $err_compile_fail
+ fi
+}
+
+make_makefile_cvs() {
+ cmd_make_makefile_cvs="$MAKE -f Makefile.cvs"
+ if [ "$NICECOMPILE" = yes ]; then
+ cmd_make_makefile_cvs="nice $cmd_make_makefile_cvs"
+ fi
+ unset UNSERMAKE || true
+ if [ -n "$USE_UNSERMAKE" ] && \
+ !(echo $NO_UNSERMAKE_MODULES | grep $module > /dev/null 2>&1); then
+ export UNSERMAKE=$USE_UNSERMAKE
+ fi
+
+ if [ "$INCREMENTAL_BUILD" = "yes" -a -e "Makefile.in" ]; then
+ cmd_make_makefile_cvs="echo Warning: no Makefile.cvs for module $module - as requested"
+ fi
+
+ if log_cmd "$cmd_make_makefile_cvs"; then
+ echo "$str_okay"
+ else
+ echo "$str_error"
+ fi
+}
+
+# Disable zsh feature
+CDPATH=
+
+# Get current configuration, bail out if it couldn't be found.
+# Search order is $PWD:$HOME:`dirname $0`
+# The name in $HOME is .kde-buildrc (note the leading '.')
+if [ -e "$PWD/kde-buildrc" ]; then
+ rc_file="$PWD/kde-buildrc"
+else
+ if [ -e "$HOME/.kde-buildrc" ]; then
+ rc_file="$HOME/.kde-buildrc"
+ else
+ if [ -e "`dirname $0`/kde-buildrc" ]; then
+ rc_file="`dirname $0`/kde-buildrc"
+ else
+ echo "ERROR: Cannot locate configuration file kde-buildrc!"; exit $err_no_config
+ fi
+ fi
+fi
+
+INCREMENTAL_BUILD="no"
+
+. $rc_file
+
+if [ "${INCREMENTAL_BUILD}" = "yes" -a "${CVS_CLEAN}" = "yes" ]; then
+ echo "ERROR: Cannot use CVS_CLEAN=\"yes\" and INCREMENTAL_BUILD=\"yes\" together!"; exit $err_cvsclean_incremental
+fi
+
+if [ "${INCREMENTAL_BUILD}" = "yes" -a "${BUILD_CLEAN}" = "yes" ]; then
+ echo "ERROR: Cannot use BUILD_CLEAN=\"yes\" and INCREMENTAL_BUILD=\"yes\" together!"; exit $err_buildclean_incremental
+fi
+
+domakecvs=1
+dosvnupdate=1
+dousage=0
+specifiedModules=""
+
+# Parse args
+#
+while [ $# != 0 ]
+do
+ arg=$1
+ case "$arg" in
+ --help)
+ dousage=1
+ break ;;
+ --version)
+ # Show version
+ echo "$0 version 0.8.15"
+ exit $err_no_error ;;
+ --no-update)
+ dosvnupdate=0 ;;
+ --no-check)
+ domakecvs=0 ;;
+ --incremental)
+ INCREMENTAL_BUILD="yes"
+ ;;
+ --full)
+ INCREMENTAL_BUILD="no"
+ ;;
+ -*)
+ echo "Unhandled option $arg"
+ dousage=1
+ break ;;
+ *)
+ specifiedModules="$specifiedModules $arg" ;;
+ esac
+ shift
+done
+
+# Show help info
+if [ "$dousage" -eq 1 ]; then
+ echo "usage: $0 [--options] [modules]"
+ echo "--no-update Do not update from SVN."
+ echo "--no-check Do not re-run Makefile.cvs."
+ echo "--incremental Start make right after update - risky. This also"
+ echo " disables the BUILD_CLEAN and CVS_CLEAN options."
+ echo "--full Do full setup even when INCREMENTAL_BUILD is set."
+ echo "--help Show this message."
+ exit $err_no_error
+fi
+
+# Expand ~
+QTDIR=`echo "$QTDIR" | sed -e "s,^\~/,$HOME/,"`
+KDESRCDIR=`echo "$KDESRCDIR" | sed -e "s,^\~/,$HOME/,"`
+KDEBUILDDIR=`echo "$KDEBUILDDIR" |sed -e "s,^\~/,$HOME/,"`
+KDEDIRS=`echo "$KDEDIRS" |sed -e "s,^\~/,$HOME/,"`
+KDELOGDIR=`echo "$KDELOGDIR" |sed -e "s,^\~/,$HOME/,"`
+
+# Make sure some paths are according to the rc file. Note that there are AFAIK
+# UNIX flavors which don't support LD_LIBRARY_PATH
+PATH=$QTDIR/bin:$KDEDIRS/bin:$PATH
+MANPATH=$QTDIR/doc/man:$MANPATH
+LD_LIBRARY_PATH=$KDEDIRS/lib:$QTDIR/lib:$LD_LIBRARY_PATH
+
+if [ -n "$USE_UNSERMAKE" ]; then
+ if [ -n "$MAKE" ]; then
+ echo "overwriting MAKE=$USE_UNSERMAKE"
+ fi
+ MAKE=$USE_UNSERMAKE
+ UNSERMAKE_PATH=`dirname $USE_UNSERMAKE`
+ PATH=$UNSERMAKE_PATH:$PATH
+fi
+
+if [ -z "$MAKE" ]; then
+ MAKE=make
+fi
+
+if [ -n "$specifiedModules" ]; then
+ # In case someone with a kdebase dir in $PWD does autocompletion..
+ modules=$( echo $specifiedModules | sed -e 's/\///g' )
+else
+ if [ "$ONLYLISTEDMODULES" = yes ]; then
+ if [ "$USEKDESUPPORT" = yes ]; then
+ modules="kdesupport $critical_modules $KDEMODULES"
+ else
+ modules="$critical_modules $KDEMODULES"
+ fi
+ else
+ modules="$critical_modules"
+ # This generates in 'modules' a list of the modules which shall be updated.
+ #
+ potential_modules=`find $KDESRCDIR -type d -mindepth 1 \
+ -maxdepth 1 -follow | sed -e "s@.*/?*@@"`
+ for module in $potential_modules; do
+ if [ -d $KDESRCDIR/$module/CVS -a -w $KDESRCDIR/$module ] \
+ && !(echo $EXCLUDE | grep -q $module) \
+ && !(echo $modules | grep -q $module) ; then
+ modules="$modules $module"
+ fi
+ done
+ fi
+fi
+
+# Various checks to ensure that the user didn't specify invalid data which
+# would make our script break.
+#
+if [ -n "$KDELOGDIR" -a ! -d "$KDELOGDIR" ]; then
+ if ! mkdir -p "$KDELOGDIR" > /dev/null 2>&1; then
+ echo "WARNING: Could not create logfile-directory."
+ echo "WARNING: Logfile generation deactivated."
+ KDELOGDIR=""
+ fi
+else
+ if [ -n "$KDELOGDIR" -a ! -w "$KDELOGDIR" ]; then
+ echo "WARNING: Could not obtain write access to specified logfile-directory."
+ echo "WARNING: Logfile generation deactivated."
+ KDELOGDIR=""
+ fi
+fi
+
+if [ -n "$KDELOGDIR" ]; then
+ str_error="$str_error Check the logfile in $KDELOGDIR for further information."
+fi
+
+if [ ! -d "$KDESRCDIR" ]; then
+ echo "ERROR: Invalid source directory specified!"; exit $err_inv_kdesrcdir
+fi
+if [ ! -d "$QTDIR" -o ! -d "$QTDIR/lib" -o ! -d "$QTDIR/bin" -o ! -d "$QTDIR/include" ]; then
+ echo "ERROR: Invalid Qt directory specified!"; exit $err_inv_qtdir
+fi
+
+if [ "$COMPRESSLOGS" = yes ]; then
+ if which bzip2 > /dev/null 2>&1; then
+ cmd_compress="`which bzip2` -f "
+ else
+ if which gzip > /dev/null 2>&1; then
+ cmd_compress="`which gzip` -f "
+ else
+ echo "WARNING: Neither bzip2 nor gzip was found, disabling compression of logfiles."
+ cmd_compress=""
+ fi
+ fi
+fi
+
+if which sudo > /dev/null 2>&1; then
+ cmd_sudo="sudo"
+else
+ cmd_sudo="su -c"
+fi
+
+# Clean the installation directory if selected.
+#
+if test "$INSTALLFROMSCRATCH" = yes && test -z "$specifiedModules" ; then
+ mkdir -p $KDEDIRS 2> /dev/null
+ if [ ! -w $KDEDIRS ]; then
+ echo "Enter the root password to clean the installation directory."
+ echo "WARNING: All files and directories in $KDEDIRS will be deleted!"
+ echo -n "Please enter root "
+ eval "$cmd_sudo rm -rf $KDEDIRS/*"
+ else
+ rm -rf $KDEDIRS/*
+ fi
+fi
+
+# Optionally activate cheap tweaks.
+#
+if [ "$TWEAKCOMPILE" = yes ]; then
+ CFLAGS="-O0"
+ CXXFLAGS="-O0"
+ export CFLAGS CXXFLAGS
+fi
+
+# Preprocess configuration keys, expand keywords (DISTCC)
+#
+if echo $MAKE_OPTS_COMPILE | grep DISTCC > /dev/null; then
+ if [ -n "$DISTCC_HOSTS" ]; then
+ hosts=0
+ for host in $DISTCC_HOSTS; do
+ hosts=$((${hosts} + 1))
+ done
+ hosts=$((${hosts} * 2))
+ else
+ hosts=1
+ fi
+ MAKE_OPTS_COMPILE=`echo $MAKE_OPTS_COMPILE | sed -e "s,DISTCC,$hosts,"`
+fi
+
+if echo $MAKE_OPTS_COMPILE | grep TEAMBUILDER > /dev/null; then
+ if ! which tbcompiler > /dev/null 2>&1; then
+ echo "TEAMBUILDER is not in PATH and OPTS_COMPILE has TEAMBUILDER"
+ exit 1
+ fi
+ hosts=`tbcompiler -joblimit`
+ if [ -z "$hosts" ]; then
+ hosts=1
+ fi
+ MAKE_OPTS_COMPILE=`echo $MAKE_OPTS_COMPILE | sed -e "s,TEAMBUILDER,$hosts,"`
+fi
+
+#Connect to the internet before we start enything
+#
+kppp_connect
+
+# Guess what? We'll finally start checking out the modules. :-)
+#
+# If we want to use unsermake, update that at the very beginning, so that
+# all the modules make use of the most recent unsermake version.
+#
+if [ -n "$USE_UNSERMAKE" ] && [ "$dosvnupdate" -eq 1 ]; then
+ echo -n "Updating unsermake copy in $UNSERMAKE_PATH..."
+ cd "$UNSERMAKE_PATH"
+ svn up > /dev/null 2>&1
+ echo $str_okay
+fi
+
+BASE_CONFIGUREFLAGS="$CONFIGUREFLAGS"
+BASE_SUBDIR=$SUBDIR
+BASE_CHECKOUT_PARTIAL="$CHECKOUT_PARTIAL"
+
+for module in $modules; do
+ module_variable SUBDIR
+ SUBDIR=`echo $SUBDIR | sed -e "s,@MODULE@,$module,"`
+ module_variable CHECKOUT_PARTIAL
+
+ if [ -n "$KDELOGDIR" ]; then
+ rm -f $KDELOGDIR/$module-build-*
+ rm -f $KDELOGDIR/$module-failed-*
+ rm -f $KDELOGDIR/$module-finished-*
+ logfile="$KDELOGDIR/$module-build-$dateformat.log"
+ echo "===============================================================================" > $logfile
+ echo "Build log of module $module, started on `date +%c`" >> $logfile
+ echo "===============================================================================" >> $logfile
+ echo "" >> $logfile
+ fi
+
+ set_title "Updating module $module..."
+ if [ "$dosvnupdate" -eq 0 ]; then
+ echo -n "Checking module $module (no svn update)..."
+ cmd_update_raw="echo Warning: no svn update of module $module - as requested"
+ else
+ if [ -n "$BRANCH" ]; then
+ echo -n "Updating module $module ($BRANCH)..."
+ else
+ echo -n "Updating module $module ..."
+ fi
+ prepare_update
+ cmd_update_raw="$cmd_update"
+ fi
+
+ log_section "Update $cmd_update"
+
+ if [ "$dosvnupdate" -ne 0 -a -n "$CHECKOUT_PARTIAL" ]; then
+ cmd_update_raw="$cmd_update -l $module"
+ fi
+
+ if test -d $KDESRCDIR/$module; then
+ cd $KDESRCDIR/$module
+ else
+ cd $KDESRCDIR
+ fi
+
+ if ! log_cmd "$cmd_update_raw"; then
+ echo "$str_error"
+ continue
+ fi
+
+ if [ "$dosvnupdate" -ne 0 -a -n "$CHECKOUT_PARTIAL" ]; then
+ prepare_update toponly
+ echo "defined subdirs!"
+ for part_dir in $CHECKOUT_PARTIAL; do
+ echo -n "Updating subdirectory $part_dir"
+ log_cmd "$cmd_update $module/$part_dir"
+ echo " $str_okay"
+ done
+ echo -n "Final touch..."
+ fi
+
+ if [ "$CVS_CLEAN" = "yes" -a -e admin/Makefile.common -a "$INCREMENTAL_BUILD" != "yes" ]; then
+ cmd_make_cvs_clean="$MAKE -f admin/Makefile.common cvs-clean"
+ fi
+
+ if ! log_cmd "$cmd_make_cvs_clean"; then
+ echo "$str_error"
+ continue
+ fi
+
+ if [ ! -e Makefile.cvs ]; then
+ echo "$str_okay"
+ continue
+ fi
+
+ if [ $domakecvs = 1 ] ; then
+ make_makefile_cvs
+ else
+ echo "$src_okay"
+ continue
+ fi
+
+ log_endsection "Updating"
+done
+
+# Now disconnect from the internet as we've finished updating
+#
+kppp_disconnect
+
+for module in $modules; do
+ module_variable CONFIGUREFLAGS
+
+ # Nothing to do for kde-common
+ [ "$module" = "kde-common" ] && continue
+ logfile="$KDELOGDIR/$module-build-$dateformat.log"
+
+ critical=0
+ for m in $critical_modules; do if [ $m = $module ]; then critical=1; fi; done
+
+ if ! cd $KDESRCDIR/$module; then
+ if [ $critical -eq 1 ]; then
+ echo "ERROR: Could not change into directory $KDESRCDIR/$module!"
+ exit $err_change_into_mod_dir
+ else
+ echo "WARNING: Could not change into directory $KDESRCDIR/$module."
+ echo "WARNING: Skipping module $module."
+ continue
+ fi
+ fi
+
+ # Check whether 'make -f Makefile.cvs' has been called.
+ #
+ if [ ! -e "Makefile.in" ]; then
+ if [ $critical -eq 1 ]; then
+ echo "ERROR: Please execute '$MAKE -f Makefile.cvs' first for module $module!"
+ exit $err_no_makefile_in
+ else
+ echo "WARNING: '$MAKE -f Makefile.cvs' seems not to be executed for"
+ echo "WARNING: module $module, skipping compilation."
+ continue
+ fi
+ fi
+
+ echo "Building module: $module"
+
+ if [ -n "$KDEBUILDDIR" ]; then
+
+ if [ "$BUILD_CLEAN" = "yes" -a "$INCREMENTAL_BUILD" != "yes" ]; then
+ if [ -d $KDEBUILDDIR/$module ]; then
+ echo -n " Removing build dir..."
+ set_title "Removing build dir for module $module..."
+ rm -rf $KDEBUILDDIR/$module
+ echo $str_okay
+ fi
+ fi
+ mkdir -p $KDEBUILDDIR/$module
+ cd $KDEBUILDDIR/$module
+ fi
+
+ # Configure the module.
+ #
+ echo -n " Configuring..."
+ set_title "Configuring module $module..."
+ if [ -n "$KDEBUILDDIR" ]; then
+ cmd_configure="$KDESRCDIR/$module/configure $CONFIGUREFLAGS --with-qt-dir=$QTDIR"
+ else
+ cmd_configure="./configure $CONFIGUREFLAGS --with-qt-dir=$QTDIR"
+ fi
+ if echo $CONFIGUREFLAGS | grep -v -- "--prefix=" 2>/dev/null >/dev/null; then
+ cmd_configure="$cmd_configure --prefix=$KDEDIRS"
+ fi
+ [ "$NICECOMPILE" = yes ] && cmd_configure="nice $cmd_configure"
+ configure_skipped=0
+ if [ "$INCREMENTAL_BUILD" = "yes" -a -e "Makefile" ]; then
+ cmd_configure_orig=$cmd_configure
+ cmd_configure="echo Warning: no configure for module $module - as requested"
+ configure_skipped=1
+ fi
+ log_section "Configuration"
+ if [ -n "$KDELOGDIR" -a $configure_skipped -ne 1 ]; then
+ echo $cmd_configure >> $logfile
+ fi
+
+ if ! log_cmd "$cmd_configure"; then
+ echo "$str_error"
+ move_logfile "failed"
+ [ -n "$cmd_compress" ] && eval "$cmd_compress $logfile"
+ [ $critical -eq 0 ] || exit $err_compile_fail
+ continue
+ fi
+
+ log_endsection "Configuration"
+ if [ $configure_skipped -eq 1 ]; then
+ echo " skipped."
+ else
+ echo "$str_okay"
+ fi
+
+ if [ $configure_skipped -eq 1 ]; then
+ echo -n " Updating Makefile..."
+ cmd_make_makefile="$MAKE $MAKE_OPTS Makefile"
+ [ "$NICECOMPILE" = yes ] && cmd_make_makefile="nice $cmd_make_makefile"
+ log_section "Updating Makefile"
+ if [ -n "$KDELOGDIR" ]; then
+ echo $cmd_make_makefile >> $logfile
+ fi
+ if ! log_cmd "$cmd_make_makefile"; then
+ echo -n " Falling back to normal Makefile.cvs ..."
+ worked=0
+
+ if [ -n "$KDEBUILDDIR" ]; then
+ cd $KDESRCDIR/$module # get back to the supermarket
+ fi
+ rm Makefile.in
+ make_makefile_cvs
+ if [ -n "$KDEBUILDDIR" ]; then
+ cd $KDEBUILDDIR/$module # got the sugar, honey?
+ fi
+ echo -n " Configuring..."
+ if log_cmd "$cmd_configure_orig"; then
+ if log_cmd "$cmd_make_makefile"; then
+ worked=1
+ fi
+ fi
+ if [ $worked -ne 1 ]; then
+ echo "$str_error"
+ move_logfile "failed"
+ [ -n "$cmd_compress" ] && eval "$cmd_compress $logfile"
+ [ $critical -eq 0 ] || exit $err_compile_fail
+ continue
+ fi
+ fi
+
+ log_endsection "Updating Makefile"
+ echo "$str_okay"
+ fi
+
+ # Compile the module.
+ #
+ echo -n " Compiling..."
+ set_title "Compiling module $module..."
+ use_compile_target=no
+ [ -f $KDESRCDIR/$module/Makefile.am.in ] && [ -n "$MAKE_OPTS_COMPILE" ] && [ -n "$USE_UNSERMAKE" ] \
+ && ! (echo $NO_UNSERMAKE_MODULES | grep $module > /dev/null 2>&1) \
+ && use_compile_target=yes
+ if [ "$use_compile_target" = yes ]; then
+ cmd_make="$MAKE $MAKE_OPTS_COMPILE"
+ else
+ cmd_make="$MAKE $MAKE_OPTS"
+ fi
+
+ [ $critical -eq 0 ] && cmd_make="$cmd_make -k"
+ [ "$NICECOMPILE" = yes ] && cmd_make="nice $cmd_make"
+ [ "$use_compile_target" = yes ] && cmd_make="$cmd_make compile"
+
+ log_section "Compilation $cmd_make"
+ log_cmd "$cmd_make"
+ retval=$?
+
+ if [ $retval -eq 0 ]; then
+ log_endsection "Compilation"
+ echo "$str_okay"
+
+ # Link the module
+ if [ "$use_compile_target" = yes ]; then
+ echo -n " Linking..."
+ set_title "Linking module $module..."
+ cmd_make="$MAKE $MAKE_OPTS"
+ [ $critical -eq 0 ] && cmd_make="$cmd_make -k"
+ [ "$NICECOMPILE" = yes ] && cmd_make="nice $cmd_make"
+
+ log_section "Linking $cmd_make"
+ log_cmd "$cmd_make"
+ retval=$?
+ if [ $retval -eq 0 ]; then
+ log_endsection "Linking"
+ echo "$str_okay"
+ fi
+ fi
+ fi
+
+ if [ $retval -eq 0 ]; then
+ # Install the module.
+ #
+ cmd_make_install="$MAKE $MAKE_OPTS"
+ [ $critical -eq 0 ] && cmd_make_install="$cmd_make_install -k"
+ [ "$NICECOMPILE" = yes ] && cmd_make_install="nice $cmd_make_install"
+ cmd_make_install="$cmd_make_install install"
+ if [ ! -w $KDEDIRS ]; then
+ eval "$cmd_sudo \"$cmd_make_install\""
+ else
+ install_module
+ fi
+ else
+ echo "$str_error"
+ # Attempt to display the actual error
+ grep -m1 -A2 ":[0-9]*: error:" $logfile
+ move_logfile "failed"
+ [ -n "$cmd_compress" ] && eval "$cmd_compress $logfile"
+ [ $critical -eq 0 ] || exit $err_compile_fail
+ fi
+done
+
+set_title "KDE build finished."
+
+exit $err_no_error
+
+=head1 NAME
+
+kde-build - Updates and recompiles a tree of KDE modules
+
+=head1 SYNOPSIS
+
+ kde-build
+
+=head1 DESCRIPTION
+
+kde-build has been designed to keep a local copy of several KDE
+modules up to date and recompile them. Those modules have to be saved in a
+common directory, e.g. something like
+
+ ~/kde-src/
+ |
+ +-> kdelibs/
+ |
+ +-> kdebase/
+ |
+ \-> kdenetwork/
+
+In this case, the KDE source directory would be ~/kde-src/. The script will
+take care of compiling them in the correct order, checks for dependencies
+and resolves them as far as possible.
+
+Please note that, prior to first invocation of the script, the configuration
+file 'F<kde-buildrc>' has to be modified to reflect the local environment,
+such as paths etc.
+
+=head1 RETURN VALUE
+
+The following error codes are returned by the script.
+
+0 - No error seems to have occured.
+
+1 - The script could not change into the directory of a module.
+
+2 - The script could not open the file 'Makefile.in' of a module.
+
+3 - The configuration of a module failed.
+
+4 - The compilation of a module failed.
+
+5 - The installation of a module failed.
+
+6 - An invalid source directory was specified.
+
+7 - An invalid Qt directory was specified.
+
+11 - The configuration file F<kde-buildrc> couldn't be loaded.
+
+12 - Both CVS_CLEAN and INCREMENTAL_BUILD were set
+
+13 - Both BUILD_CLEAN and INCREMENTAL_BUILD were set
+
+=head1 EXAMPLES
+
+ cd ~/scripts/; vi ./kde-buildrc; ./kde-build
+
+=head1 BUGS
+
+Probably.
+
+=head1 TODO
+
+Add a DIAGNOSIS section to this man page.
+
+=head1 AUTHOR
+
+Frerich Raabe <raabe@kde.org>
+
+=cut
+
+# vim:et:ts=2:sw=2