diff --git a/src/auto/configure b/src/auto/configure
index c109822..794fd8f 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -309,7 +309,7 @@
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP AWK STRIP CPP_MM OS_EXTRA_SRC OS_EXTRA_OBJ VIMNAME EXNAME VIEWNAME line_break dovimdiff dogvimdiff compiledby vi_cv_path_mzscheme MZSCHEME_SRC MZSCHEME_OBJ MZSCHEME_PRO MZSCHEME_LIBS MZSCHEME_CFLAGS vi_cv_path_perl vi_cv_perllib shrpenv PERL_SRC PERL_OBJ PERL_PRO PERL_CFLAGS PERL_LIBS vi_cv_path_python PYTHON_CONFDIR PYTHON_LIBS PYTHON_GETPATH_CFLAGS PYTHON_CFLAGS PYTHON_SRC PYTHON_OBJ vi_cv_path_tcl TCL_SRC TCL_OBJ TCL_PRO TCL_CFLAGS TCL_LIBS vi_cv_path_ruby RUBY_SRC RUBY_OBJ RUBY_PRO RUBY_CFLAGS RUBY_LIBS WORKSHOP_SRC WORKSHOP_OBJ NETBEANS_SRC NETBEANS_OBJ SNIFF_SRC SNIFF_OBJ xmkmfpath X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS X_LIB MOC KDE_CONFIG KDE_LIBS KDE_INCLUDES KDE_PREFIX CXX CXXFLAGS ac_ct_CXX QT_LIBS QT_INCLUDES ROOTQT GTK_CONFIG GTK12_CONFIG PKG_CONFIG GTK_CFLAGS GTK_LIBS GTK_LIBNAME GNOME_LIBS GNOME_LIBDIR GNOME_INCLUDEDIR GNOME_CONFIG MOTIF_LIBNAME NARROW_PROTO GUI_INC_LOC GUI_LIB_LOC GUITYPE GUI_X_LIBS HANGULIN_SRC HANGULIN_OBJ TAGPRG INSTALL_LANGS INSTALL_TOOL_LANGS MSGFMT MAKEMO DEPEND_CFLAGS_FILTER LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP AWK STRIP CPP_MM OS_EXTRA_SRC OS_EXTRA_OBJ VIMNAME EXNAME VIEWNAME line_break dovimdiff dogvimdiff compiledby vi_cv_path_mzscheme MZSCHEME_SRC MZSCHEME_OBJ MZSCHEME_PRO MZSCHEME_LIBS MZSCHEME_CFLAGS vi_cv_path_perl vi_cv_perllib shrpenv PERL_SRC PERL_OBJ PERL_PRO PERL_CFLAGS PERL_LIBS vi_cv_path_python PYTHON_CONFDIR PYTHON_LIBS PYTHON_GETPATH_CFLAGS PYTHON_CFLAGS PYTHON_SRC PYTHON_OBJ vi_cv_path_tcl TCL_SRC TCL_OBJ TCL_PRO TCL_CFLAGS TCL_LIBS vi_cv_path_ruby RUBY_SRC RUBY_OBJ RUBY_PRO RUBY_CFLAGS RUBY_LIBS WORKSHOP_SRC WORKSHOP_OBJ NETBEANS_SRC NETBEANS_OBJ SNIFF_SRC SNIFF_OBJ xmkmfpath X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS X_LIB GTK_CONFIG GTK12_CONFIG PKG_CONFIG GTK_CFLAGS GTK_LIBS GTK_LIBNAME GNOME_LIBS GNOME_LIBDIR GNOME_INCLUDEDIR GNOME_CONFIG MOTIF_LIBNAME NARROW_PROTO GUI_INC_LOC GUI_LIB_LOC GUITYPE GUI_X_LIBS HANGULIN_SRC HANGULIN_OBJ TAGPRG INSTALL_LANGS INSTALL_TOOL_LANGS MSGFMT MAKEMO DEPEND_CFLAGS_FILTER LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -770,14 +770,6 @@
 ac_env_CPP_value=$CPP
 ac_cv_env_CPP_set=${CPP+set}
 ac_cv_env_CPP_value=$CPP
-ac_env_CXX_set=${CXX+set}
-ac_env_CXX_value=$CXX
-ac_cv_env_CXX_set=${CXX+set}
-ac_cv_env_CXX_value=$CXX
-ac_env_CXXFLAGS_set=${CXXFLAGS+set}
-ac_env_CXXFLAGS_value=$CXXFLAGS
-ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
-ac_cv_env_CXXFLAGS_value=$CXXFLAGS
 
 #
 # Report the --help message.
@@ -868,8 +860,7 @@
   --enable-hangulinput    Include Hangul input support.
   --enable-xim            Include XIM input support.
   --enable-fontset        Include X fontset output support.
-  --enable-gui=OPTS     X11 GUI default=auto OPTS=auto/no/gtk/gtk2/gnome/gnome2/kde/motif/athena/neXtaw/photon/carbon
-  --enable-kde-check      If auto-select GUI, check for KDE default=no
+  --enable-gui=OPTS     X11 GUI default=auto OPTS=auto/no/gtk/gtk2/gnome/gnome2/motif/athena/neXtaw/photon/carbon
   --enable-gtk-check      If auto-select GUI, check for GTK default=yes
   --enable-gtk2-check     If GTK GUI, check for GTK+ 2 default=yes
   --enable-gnome-check    If GTK GUI, check for GNOME default=no
@@ -877,9 +868,6 @@
   --enable-athena-check   If auto-select GUI, check for Athena default=yes
   --enable-nextaw-check   If auto-select GUI, check for neXtaw default=yes
   --enable-carbon-check   If auto-select GUI, check for Carbon default=yes
-  --enable-kde-toolbar   if KDE GUI is selected, enable a KDE-look toolbar default=no
-  --disable-rpath      Disable rpath.
-  --disable-kdetest	Do not try to compile and run a test KDE program
   --disable-gtktest       Do not try to compile and run a test GTK program
   --disable-acl           Don't check for ACL support.
   --disable-gpm           Don't use gpm (Linux mouse daemon).
@@ -899,12 +887,6 @@
   --with-python-config-dir=PATH  Python's config directory
   --with-tclsh=PATH       which tclsh to use (default: tclsh8.0)
   --with-x                use the X Window System
-  --with-qt-dir=DIR	Specify prefix of QT files
-  --with-qt-includes=DIR	Specify location of Qt headers
-  --with-qt-libs=DIR	Specify location of Qt libraries
-  --with-kde-prefix=PFX	Prefix where KDE is installed (optional)
-  --with-kde-includes=DIR	Specify location of KDE headers
-  --with-kde-libs=DIR	Specify location of KDE libraries
   --with-gtk-prefix=PFX   Prefix where GTK is installed (optional)
   --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)
   --with-gnome-includes=DIR Specify location of GNOME headers
@@ -921,8 +903,6 @@
   CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
               headers in a nonstandard directory <include dir>
   CPP         C preprocessor
-  CXX         C++ compiler command
-  CXXFLAGS    C++ compiler flags
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -4516,7 +4496,7 @@
 echo "${ECHO_T}$try/tclConfig.sh" >&6
 	    . $try/tclConfig.sh
 	    	    TCL_LIBS=`eval echo "$TCL_LIB_SPEC $TCL_LIBS"`
-	    	    	    TCL_DEFS=`echo $TCL_DEFS | sed -e 's/\\ /\\X/' | tr ' ' '\012' | sed -e '/^-[^D]/d' -e '/-D[^_]/d' -e 's/-D_/ -D_/' | tr -d '\012'`
+	    	    	    TCL_DEFS=`echo $TCL_DEFS | sed -e 's/\\\\ /\\\\X/g' | tr ' ' '\012' | sed -e '/^-[^D]/d' -e '/-D[^_]/d' -e 's/-D_/ -D_/' | tr '\012' ' ' | sed -e 's/\\\\X/\\\\ /g'`
 	    break
 	  fi
 	done
@@ -6916,7 +6896,6 @@
 SKIP_GTK=YES
 SKIP_GTK2=YES
 SKIP_GNOME=YES
-SKIP_KDE=YES
 SKIP_MOTIF=YES
 SKIP_ATHENA=YES
 SKIP_NEXTAW=YES
@@ -6972,9 +6951,6 @@
 		SKIP_ATHENA=
 		SKIP_NEXTAW=
 		SKIP_CARBON=;;
-    kde|Kde|KDE)	echo "$as_me:$LINENO: result: KDE 2.x or 3.x GUI support" >&5
-echo "${ECHO_T}KDE 2.x or 3.x GUI support" >&6
-    		SKIP_KDE=;;
     gtk)	echo "$as_me:$LINENO: result: GTK+ 1.x GUI support" >&5
 echo "${ECHO_T}GTK+ 1.x GUI support" >&6
 		SKIP_GTK=;;
@@ -7006,23 +6982,6 @@
 
 fi
 
-if test "x$SKIP_KDE" != "xYES" -a "$enable_gui_canon" != "kde"; then
-    echo "$as_me:$LINENO: checking whether or not to look for KDE" >&5
-echo $ECHO_N "checking whether or not to look for KDE... $ECHO_C" >&6
-    # Check whether --enable-kde-check or --disable-kde-check was given.
-if test "${enable_kde_check+set}" = set; then
-  enableval="$enable_kde_check"
-
-else
-  enable_kde_check="no"
-fi;
-    echo "$as_me:$LINENO: result: $enable_kde_check" >&5
-echo "${ECHO_T}$enable_kde_check" >&6;
-    if test "x$enable_kde_check" = "xno"; then
-       SKIP_KDE=YES
-    fi
-fi
-
 if test "x$SKIP_GTK" != "xYES" -a "$enable_gui_canon" != "gtk" -a "$enable_gui_canon" != "gtk2"; then
   echo "$as_me:$LINENO: checking whether or not to look for GTK" >&5
 echo $ECHO_N "checking whether or not to look for GTK... $ECHO_C" >&6
@@ -7146,932 +7105,6 @@
 fi
 
 
-if test -z "$SKIP_KDE"; then
-
-# Check whether --with-qt-dir or --without-qt-dir was given.
-if test "${with_qt_dir+set}" = set; then
-  withval="$with_qt_dir"
-
-						 ROOTQT="$withval"
-						 MOC="$withval"/bin/moc
-						 QT_INCLUDES="$withval"/include
-						 QT_LIBS="$withval"/lib
-
-fi;
-
-if test "x$ROOTQT" = "x"; then
-  if test -z "$QTDIR"; then
-            # Extract the first word of "moc", so it can be a program name with args.
-set dummy moc; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_MOC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $MOC in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MOC="$MOC" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MOC="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_path_MOC" && ac_cv_path_MOC="no"
-  ;;
-esac
-fi
-MOC=$ac_cv_path_MOC
-
-if test -n "$MOC"; then
-  echo "$as_me:$LINENO: result: $MOC" >&5
-echo "${ECHO_T}$MOC" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    if test "x$MOC" = "xno"; then
-      { { echo "$as_me:$LINENO: error: could not find Qt directory" >&5
-echo "$as_me: error: could not find Qt directory" >&2;}
-   { (exit 1); exit 1; }; }
-    else
-      ROOTQT=`echo $MOC | sed 's+/bin/moc++'`
-    fi
-  else
-    ROOTQT="$QTDIR"
-  fi
-fi
-MOC="$ROOTQT"/bin/moc
-QT_INCLUDES="$ROOTQT"/include
-QT_LIBS="$ROOTQT"/lib
-
-
-# Check whether --with-qt-includes or --without-qt-includes was given.
-if test "${with_qt_includes+set}" = set; then
-  withval="$with_qt_includes"
-  QT_INCLUDES="$withval"
-
-fi;
-
-
-# Check whether --with-qt-libraries or --without-qt-libraries was given.
-if test "${with_qt_libraries+set}" = set; then
-  withval="$with_qt_libraries"
-  QT_LIBS="$withval"
-
-fi;
-
-if test "x$QT_LIBS" = "x" ; then
-	QT_LIBS="$ROOTQT"/lib
-fi
-if test "x$QT_INCLUDES" = "x" ; then
-	QT_INCLUDES="$ROOTQT"/include
-fi
-
-echo "$as_me:$LINENO: checking whether or not to use a KDE Toolbar in KVim" >&5
-echo $ECHO_N "checking whether or not to use a KDE Toolbar in KVim... $ECHO_C" >&6
-# Check whether --enable-kde-toolbar or --disable-kde-toolbar was given.
-if test "${enable_kde_toolbar+set}" = set; then
-  enableval="$enable_kde_toolbar"
-
-else
-  enable_kde_toolbar="no"
-fi;
-if test "x$enable_kde_toolbar" != "xno"; then
-  cat >>confdefs.h <<\_ACEOF
-#define FEAT_KDETOOLBAR 1
-_ACEOF
-
-fi
-echo "$as_me:$LINENO: result: $enable_kde_toolbar" >&5
-echo "${ECHO_T}$enable_kde_toolbar" >&6;
-fi
-
-
-if test -z "$SKIP_KDE"; then
-
-
-
-
-echo "$as_me:$LINENO: checking --disable-rpath argument" >&5
-echo $ECHO_N "checking --disable-rpath argument... $ECHO_C" >&6
-# Check whether --enable-rpath or --disable-rpath was given.
-if test "${enable_rpath+set}" = set; then
-  enableval="$enable_rpath"
-
-else
-  enable_rpath="yes"
-fi;
-if test "$enable_rpath" = "yes"; then
-	echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-else
-	echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-fi
-
-echo "$as_me:$LINENO: checking --with-kde-prefix argument" >&5
-echo $ECHO_N "checking --with-kde-prefix argument... $ECHO_C" >&6
-
-# Check whether --with-kde-prefix or --without-kde-prefix was given.
-if test "${with_kde_prefix+set}" = set; then
-  withval="$with_kde_prefix"
-  kde_config_prefix="$withval";
-echo "$as_me:$LINENO: result: $kde_config_prefix" >&5
-echo "${ECHO_T}$kde_config_prefix" >&6
-else
-  kde_config_prefix="";echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi;
-
-
-# Check whether --with-kde-includes or --without-kde-includes was given.
-if test "${with_kde_includes+set}" = set; then
-  withval="$with_kde_includes"
-  KDE_INCLUDES="$withval"
-
-fi;
-
-
-# Check whether --with-kde-libraries or --without-kde-libraries was given.
-if test "${with_kde_libraries+set}" = set; then
-  withval="$with_kde_libraries"
-  KDE_LIBS="$withval"
-
-fi;
-
-echo "$as_me:$LINENO: checking --disable-kdetest argument" >&5
-echo $ECHO_N "checking --disable-kdetest argument... $ECHO_C" >&6
-# Check whether --enable-kdetest or --disable-kdetest was given.
-if test "${enable_kdetest+set}" = set; then
-  enableval="$enable_kdetest"
-  enable_kdetest=yes
-fi;
-
-if test "x$enable_kdetest" = "xyes" ; then
-	echo "$as_me:$LINENO: result: kde test enabled" >&5
-echo "${ECHO_T}kde test enabled" >&6
-else
-	echo "$as_me:$LINENO: result: kde test disabled" >&5
-echo "${ECHO_T}kde test disabled" >&6
-fi
-
-if test "x$kde_config_prefix" != "x" ; then
-	KDE_CONFIG=$kde_config_prefix/bin/kde-config
-fi
-
-if test "X$KDE_CONFIG" = "X"; then
-	# Extract the first word of "kde-config", so it can be a program name with args.
-set dummy kde-config; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_KDE_CONFIG+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $KDE_CONFIG in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_KDE_CONFIG="$KDE_CONFIG" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_KDE_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-  test -z "$ac_cv_path_KDE_CONFIG" && ac_cv_path_KDE_CONFIG="no"
-  ;;
-esac
-fi
-KDE_CONFIG=$ac_cv_path_KDE_CONFIG
-
-if test -n "$KDE_CONFIG"; then
-  echo "$as_me:$LINENO: result: $KDE_CONFIG" >&5
-echo "${ECHO_T}$KDE_CONFIG" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-else
-	echo "$as_me:$LINENO: result: Using KDE configuration program $KDE_CONFIG" >&5
-echo "${ECHO_T}Using KDE configuration program $KDE_CONFIG" >&6
-fi
-
-if test "X$KDE_CONFIG" != "X" ; then
-
-	if test "X$KDE_CONFIG" != "X"; then
-	  min_kde_version=2.0.0
-	  echo "$as_me:$LINENO: checking for KDE version >= $min_kde_version" >&5
-echo $ECHO_N "checking for KDE version >= $min_kde_version... $ECHO_C" >&6
-	  no_kde=""
-	  if test "$KDE_CONFIG" = "no" ; then
-		no_kde=yes
-	  else
-		KDE_PREFIX=`$KDE_CONFIG --prefix`
-		if test "x$KDE_LIBS" = "x"; then
-		  KDE_LIBS="$KDE_PREFIX/lib"
-		fi
-		if test "x$KDE_INCLUDES" = "x"; then
-		  KDE_INCLUDES="$KDE_PREFIX/include"
-		  if test -d "$KDE_INCLUDES/kde"; then
-		    KDE_INCLUDES="$KDE_INCLUDES/kde"
-		  fi
-		fi
-		kde_major_version=`$KDE_CONFIG --version | grep KDE | \
-sed 's/KDE:\ //' | sed 's/\([0-9]*\).\([0-9]*.*\)/\1/'`
-		kde_minor_version=`$KDE_CONFIG --version | grep KDE | \
-sed 's/KDE:\ //' | sed 's/\([0-9]*\).\([0-9]*.*\)/\2/'`
-
-		qt_major_version=`$KDE_CONFIG --version | grep Qt | sed -e \
-'s/Qt:\ //' | sed 's/\([0-9]*\).\([0-9]*.*\)/\1/'`
-		qt_minor_version=`$KDE_CONFIG --version | grep Qt | sed -e \
-'s/Qt:\ //' | sed 's/\([0-9]*\).\([0-9]*.*\)/\2/'`
-
-								if test "x$enable-kdetest" = "xyes" ; then
-			ac_save_LIBS="$LIBS"
-			LIBS="$LIBS $KDE_LIBS"
-
-						if test "$cross_compiling" = yes; then
-  echo $ac_n "cross compiling KDE ? ? how can i remove that ? :)"
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-#include <stdio.h>
-int
-main()
-{ return 0; }
-
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-no_kde=yes
-fi
-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-			LIBS="$ac_save_LIBS"
-		fi
-	fi
-	if test "x$no_kde" = x ; then
-	  echo "$as_me:$LINENO: result: found KDE $kde_major_version.$kde_minor_version" >&5
-echo "${ECHO_T}found KDE $kde_major_version.$kde_minor_version" >&6
-	  GUI_LIB_LOC="-L$KDE_LIBS -lkdeui -lkdecore -lDCOP"
-							 GUI_INC_LOC="-I$KDE_INCLUDES"
-							 KDEDIR="$KDE_PREFIX"
-	else
-	  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-	  KDE_LIBS=""
-	  :
-	fi
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-  KDE_LIBS=""
-  :
-fi
-
-
-
-
-
-	if test "x$KDE_PREFIX" != "x"; then
-		echo "$as_me:$LINENO: checking for QT version $qt_major_version.x" >&5
-echo $ECHO_N "checking for QT version $qt_major_version.x... $ECHO_C" >&6
-		if test "x$ROOTQT" != "x" ; then
-			GUI_INC_LOC="-I$QT_INCLUDES $GUI_INC_LOC"
-			if test $qt_major_version -lt 2; then
-				{ { echo "$as_me:$LINENO: error: Your QT version is prior to 2.0; KDE 2.x and 3.x require at least QT 2" >&5
-echo "$as_me: error: Your QT version is prior to 2.0; KDE 2.x and 3.x require at least QT 2" >&2;}
-   { (exit 1); exit 1; }; }
-			fi
-						if test "`(uname) 2>/dev/null`" = "FreeBSD"; then
-				CFLAGS="$CFLAGS -D_THREAD_SAFE"
-				CXXFLAGS="$CXXFLAGS -D_THREAD_SAFE"
-				GUI_LIB_LOC="$GUI_LIB_LOC -pthread"
-				LIBS="$LIBS -pthread"
-			fi
-
-						if test "x$enable_rpath" = "xyes"; then
-				if test $qt_major_version = 2; then
-					GUI_LIB_LOC="-L$KDE_LIBS -lkfile -L$QT_LIBS -lqt $GUI_LIB_LOC \
--Wl,--rpath -Wl,$KDE_LIBS -Wl,--rpath -Wl,$QT_LIBS"
-				else
-					GUI_LIB_LOC="-L$KDE_LIBS -lkio -L$QT_LIBS -lqt-mt $GUI_LIB_LOC \
--Wl,--rpath -Wl,$KDE_LIBS -Wl,--rpath -Wl,$QT_LIBS"
-				fi
-			else
-				if test $qt_major_version = 2; then
-					GUI_LIB_LOC="-L$KDE_LIBS -lkfile -L$QT_LIBS -lqt $GUI_LIB_LOC"
-				else
-					GUI_LIB_LOC="-L$KDE_LIBS -lkio -L$QT_LIBS -lqt-mt $GUI_LIB_LOC"
-				fi
-			fi
-
-						GUI_INC_LOC="`echo $GUI_INC_LOC\ | sed 's%-I/usr/include %%'`"
-
-			echo "$as_me:$LINENO: result: found $qt_major_version.$qt_minor_version in $ROOTQT" >&5
-echo "${ECHO_T}found $qt_major_version.$qt_minor_version in $ROOTQT" >&6
-
-
-  qt_incdir=NO
-  for i in $QT_INCLUDES;
-    do
-      for j in qstyle.h;
-      do
-       echo "configure: 7522: $i/$j" >&5
-       if test -r "$i/$j"; then
-         echo "taking that" >&5
-         qt_incdir=$i
-         break 2
-       fi
-      done
-    done
-
-                       if test "x$qt_incdir" = "xNO"; then
-                               { { echo "$as_me:$LINENO: error: Could not find Qt headers in $QT_INCLUDES" >&5
-echo "$as_me: error: Could not find Qt headers in $QT_INCLUDES" >&2;}
-   { (exit 1); exit 1; }; }
-                       fi
-
-  kde_incdir=NO
-  for i in $KDE_INCLUDES;
-    do
-      for j in kapplication.h;
-      do
-       echo "configure: 7542: $i/$j" >&5
-       if test -r "$i/$j"; then
-         echo "taking that" >&5
-         kde_incdir=$i
-         break 2
-       fi
-      done
-    done
-
-                       if test "x$kde_incdir" = "xNO"; then
-                               { { echo "$as_me:$LINENO: error: Could not find KDE headers in $KDE_INCLUDES" >&5
-echo "$as_me: error: Could not find KDE headers in $KDE_INCLUDES" >&2;}
-   { (exit 1); exit 1; }; }
-                       fi
-
-
-
-                       ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-		       ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  echo "$as_me:$LINENO: result: $CXX" >&5
-echo "${ECHO_T}$CXX" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-echo "${ECHO_T}$ac_ct_CXX" >&6
-else
-  echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-  test -n "$ac_ct_CXX" && break
-done
-test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
-
-  CXX=$ac_ct_CXX
-fi
-
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO:" \
-     "checking for C++ compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-  (eval $ac_compiler --version </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-  (eval $ac_compiler -v </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-  (eval $ac_compiler -V </dev/null >&5) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_compiler_gnu=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
-GXX=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-CXXFLAGS="-g"
-echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
-if test "${ac_cv_prog_cxx_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_prog_cxx_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-ac_cv_prog_cxx_g=no
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  fi
-fi
-for ac_declaration in \
-   '' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-#include <stdlib.h>
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-continue
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_declaration
-int
-main ()
-{
-exit (42);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  break
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest*
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-                       ac_save_LIBS="$LIBS"
-                       LIBS="$GUI_LIB_LOC"
-                       ac_save_CXXFLAGS="$CXXFLAGS"
-                       CXXFLAGS="$CXXFLAGS $GUI_INC_LOC"
-                       echo "$as_me:$LINENO: checking whether Qt libraries are usable" >&5
-echo $ECHO_N "checking whether Qt libraries are usable... $ECHO_C" >&6
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <qapplication.h>
-int
-main ()
-{
-
-                           int argc;
-                           char** argv;
-                           QApplication app(argc, argv);
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6;{ { echo "$as_me:$LINENO: error: Qt fails to link a simple application" >&5
-echo "$as_me: error: Qt fails to link a simple application" >&2;}
-   { (exit check your installation and settings); exit check your installation and settings; }; }
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-
-                       echo "$as_me:$LINENO: checking whether KDE libraries are usable" >&5
-echo $ECHO_N "checking whether KDE libraries are usable... $ECHO_C" >&6
-                       cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <kapplication.h>
-int
-main ()
-{
-
-                           int argc;
-                           char** argv;
-                           KApplication app(argc, argv);
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-	 { ac_try='test -z "$ac_cxx_werror_flag"
-			 || test ! -s conftest.err'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } &&
-	 { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6;{ { echo "$as_me:$LINENO: error: KDE fails to link a simple application" >&5
-echo "$as_me: error: KDE fails to link a simple application" >&2;}
-   { (exit check your installation and settings); exit check your installation and settings; }; }
-fi
-rm -f conftest.err conftest.$ac_objext \
-      conftest$ac_exeext conftest.$ac_ext
-
-                       LIBS="$ac_save_LIBS"
-                       CXXFLAGS="$ac_save_CXXFLAGS"
-                       ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-			SKIP_GTK=YES
-			SKIP_ATHENA=YES
-			SKIP_MOTIF=YES
-			GUITYPE=KDE
-
-
-
-
-
-			cat >>confdefs.h <<\_ACEOF
-#define FEAT_GUI_KDE 1
-_ACEOF
-
-		else
-			{ { echo "$as_me:$LINENO: error: Detected QT version mismatched" >&5
-echo "$as_me: error: Detected QT version mismatched" >&2;}
-   { (exit 1); exit 1; }; }
-		fi
-	else
-		{ { echo "$as_me:$LINENO: error: Could not find KDE installation prefix" >&5
-echo "$as_me: error: Could not find KDE installation prefix" >&2;}
-   { (exit 1); exit 1; }; }
-	fi
-fi
-fi
-
 if test "x$MACOSX" = "xyes" -a -z "$SKIP_CARBON" -a "x$CARBON" = "xyes"; then
   echo "$as_me:$LINENO: checking for Carbon GUI" >&5
 echo $ECHO_N "checking for Carbon GUI... $ECHO_C" >&6
@@ -9957,11 +8990,6 @@
 echo "${ECHO_T}GTK+ 2 GUI selected; fontset has been disabled" >&6
   enable_fontset="no"
 fi
-if test "x$GUITYPE:$enable_fontset" = "xKDE:yes"; then
-  echo "$as_me:$LINENO: result: KDE GUI selected; fontset has been disabled" >&5
-echo "${ECHO_T}KDE GUI selected; fontset has been disabled" >&6
-  enable_fontset="no"
-fi
 
 if test -z "$SKIP_PHOTON"; then
   GUITYPE=PHOTONGUI
@@ -11354,6 +10382,12 @@
 
 done
 
+if test "x$MACOSX" = "xyes"; then
+    cat >>confdefs.h <<\_ACEOF
+#define NO_STRINGS_WITH_STRING_H 1
+_ACEOF
+
+else
 
 echo "$as_me:$LINENO: checking if strings.h can be included after string.h" >&5
 echo $ECHO_N "checking if strings.h can be included after string.h... $ECHO_C" >&6
@@ -11425,6 +10459,7 @@
 fi
 rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 CPPFLAGS=$cppflags_save
+fi
 
 if test $ac_cv_c_compiler_gnu = yes; then
     echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5
@@ -16744,17 +15779,6 @@
 s,@X_LIBS@,$X_LIBS,;t t
 s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t
 s,@X_LIB@,$X_LIB,;t t
-s,@MOC@,$MOC,;t t
-s,@KDE_CONFIG@,$KDE_CONFIG,;t t
-s,@KDE_LIBS@,$KDE_LIBS,;t t
-s,@KDE_INCLUDES@,$KDE_INCLUDES,;t t
-s,@KDE_PREFIX@,$KDE_PREFIX,;t t
-s,@CXX@,$CXX,;t t
-s,@CXXFLAGS@,$CXXFLAGS,;t t
-s,@ac_ct_CXX@,$ac_ct_CXX,;t t
-s,@QT_LIBS@,$QT_LIBS,;t t
-s,@QT_INCLUDES@,$QT_INCLUDES,;t t
-s,@ROOTQT@,$ROOTQT,;t t
 s,@GTK_CONFIG@,$GTK_CONFIG,;t t
 s,@GTK12_CONFIG@,$GTK12_CONFIG,;t t
 s,@PKG_CONFIG@,$PKG_CONFIG,;t t
