Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 2d1703b4f94e9b2b8873e1abe650beae > files > 2

weechat-0.3.5-1.fc14.src.rpm

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0e04ebc..c60105b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,27 +37,13 @@ SET(VERSION_PATCH "5")
 SET(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
 SET(LICENSE "GPL3")
 SET(PKG_STRING "${PROJECT_NAME} ${VERSION}")
-STRING(REPLACE "\";\"" "\ " PKG_STRING ${PKG_STRING})
-
-IF(DEFINED LIBDIR)
-  SET(LIBDIR ${LIBDIR}/${PROJECT_NAME})
-ELSE(DEFINED LIBDIR)
-  SET(LIBDIR ${CMAKE_INSTALL_PREFIX}/lib/${PROJECT_NAME})
-ENDIF(DEFINED LIBDIR)
 
-IF(NOT DEFINED SHAREDIR)
-  SET(SHAREDIR ${CMAKE_INSTALL_PREFIX}/share)
-ENDIF(NOT DEFINED SHAREDIR)
+SET(LIBDIR ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/${PROJECT_NAME})
+SET(SHAREDIR ${CMAKE_INSTALL_PREFIX}/share)
+SET(LOCALEDIR ${CMAKE_INSTALL_PREFIX}/share/locale)
+SET(INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/include/${PROJECT_NAME})
 
-IF(NOT DEFINED LOCALEDIR)
-  SET(LOCALEDIR ${SHAREDIR}/locale)
-ENDIF(NOT DEFINED LOCALEDIR)
-
-IF(DEFINED INCLUDEDIR)
-  SET(INCLUDEDIR ${INCLUDEDIR}/${PROJECT_NAME})
-ELSE(DEFINED INCLUDEDIR)
-  SET(INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/include/${PROJECT_NAME})
-ENDIF(DEFINED INCLUDEDIR)
+STRING(REPLACE "\";\"" "\ " PKG_STRING ${PKG_STRING})
 
 OPTION(ENABLE_NCURSES   "Enable Ncurses interface"         ON)
 OPTION(ENABLE_GTK       "Enable GTK interface"             OFF)
@@ -66,7 +52,7 @@ OPTION(ENABLE_GCRYPT    "Enable libgcrypt support"         ON)
 OPTION(ENABLE_GNUTLS    "Enable SSLv3/TLS support"         ON)
 OPTION(ENABLE_LARGEFILE "Enable Large File Support"        ON)
 OPTION(ENABLE_ALIAS     "Enable Alias plugin"              ON)
-OPTION(ENABLE_ASPELL    "Enable Aspell plugin"             ON)
+OPTION(ENABLE_SPELL     "Enable Spell plugin"              ON)
 OPTION(ENABLE_CHARSET   "Enable Charset plugin"            ON)
 OPTION(ENABLE_DEMO      "Enable Demo plugin"               OFF)
 OPTION(ENABLE_FIFO      "Enable FIFO plugin"               ON)
@@ -114,10 +100,10 @@ ADD_CUSTOM_TARGET(dist
 SET(PACKAGE "${PROJECT_NAME}")
 SET(prefix "${CMAKE_INSTALL_PREFIX}")
 SET(exec_prefix "\${prefix}")
-SET(libdir "\${exec_prefix}/lib")
+SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
 SET(includedir "\${prefix}/include")
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/weechat.pc.in ${CMAKE_CURRENT_BINARY_DIR}/weechat.pc @ONLY)
-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/weechat.pc DESTINATION ${LIBDIR}/../pkgconfig)
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/weechat.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/pkgconfig)
 
 # packages
 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Fast, light and extensible chat client")
diff --git a/Makefile.am b/Makefile.am
index fdda264..f7a5216 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -31,6 +31,7 @@ EXTRA_DIST = CMakeLists.txt \
              cmake/cmake_uninstall.cmake.in \
              cmake/FindAsciidoc.cmake \
              cmake/FindAspell.cmake \
+             cmake/FindENCHANT.cmake \
              cmake/FindGcrypt.cmake \
              cmake/FindGettext.cmake \
              cmake/FindGnuTLS.cmake \
diff --git a/cmake/FindENCHANT.cmake b/cmake/FindENCHANT.cmake
new file mode 100644
index 0000000..9c13c48
--- /dev/null
+++ b/cmake/FindENCHANT.cmake
@@ -0,0 +1,44 @@
+# - Try to find the Enchant spell checker
+# Once done this will define
+#
+#  ENCHANT_FOUND - system has ENCHANT
+#  ENCHANT_INCLUDE_DIR - the ENCHANT include directory
+#  ENCHANT_LIBRARIES - Link these to use ENCHANT
+#  ENCHANT_DEFINITIONS - Compiler switches required for using ENCHANT
+
+# Copyright (c) 2006, Zack Rusin, <zack@kde.org>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+
+if (ENCHANT_INCLUDE_DIR AND ENCHANT_LIBRARIES)
+
+  # in cache already
+  set(ENCHANT_FOUND TRUE)
+
+else (ENCHANT_INCLUDE_DIR AND ENCHANT_LIBRARIES)
+  if (NOT WIN32)
+    # use pkg-config to get the directories and then use these values
+    # in the FIND_PATH() and FIND_LIBRARY() calls
+    find_package(PkgConfig)
+    pkg_check_modules(PC_ENCHANT QUIET enchant)
+    set(ENCHANT_DEFINITIONS ${PC_ENCHANT_CFLAGS_OTHER})
+  endif (NOT WIN32)
+
+  find_path(ENCHANT_INCLUDE_DIR 
+            NAMES enchant++.h
+            HINTS ${PC_ENCHANT_INCLUDEDIR}
+                  ${PC_ENCHANT_INCLUDE_DIRS}
+            PATH_SUFFIXES enchant )
+
+  find_library(ENCHANT_LIBRARIES NAMES enchant
+               HINTS ${PC_ENCHANT_LIBDIR}
+                      ${PC_ENCHANT_LIBRARY_DIRS} )
+
+  include(FindPackageHandleStandardArgs)
+  find_package_handle_standard_args(ENCHANT  DEFAULT_MSG  ENCHANT_INCLUDE_DIR ENCHANT_LIBRARIES )
+
+  mark_as_advanced(ENCHANT_INCLUDE_DIR ENCHANT_LIBRARIES)
+
+endif (ENCHANT_INCLUDE_DIR AND ENCHANT_LIBRARIES)
diff --git a/configure.in b/configure.in
index 2454c0f..ceb62c8 100644
--- a/configure.in
+++ b/configure.in
@@ -107,7 +107,7 @@ AH_VERBATIM([HAVE_GCRYPT],      [#undef HAVE_GCRYPT])
 AH_VERBATIM([HAVE_GNUTLS],      [#undef HAVE_GNUTLS])
 AH_VERBATIM([HAVE_FLOCK],       [#undef HAVE_FLOCK])
 AH_VERBATIM([PLUGIN_ALIAS],     [#undef PLUGIN_ALIAS])
-AH_VERBATIM([PLUGIN_ASPELL],    [#undef PLUGIN_ASPELL])
+AH_VERBATIM([PLUGIN_SPELL],     [#undef PLUGIN_SPELL])
 AH_VERBATIM([PLUGIN_CHARSET],   [#undef PLUGIN_CHARSET])
 AH_VERBATIM([PLUGIN_DEMO],      [#undef PLUGIN_DEMO])
 AH_VERBATIM([PLUGIN_FIFO],      [#undef PLUGIN_FIFO])
@@ -133,7 +133,7 @@ AC_ARG_ENABLE(gcrypt,       [  --disable-gcrypt        turn off gcrypt support (
 AC_ARG_ENABLE(gnutls,       [  --disable-gnutls        turn off gnutls support (default=compiled if found)],enable_gnutls=$enableval,enable_gnutls=yes)
 AC_ARG_ENABLE(largefile,    [  --disable-largefile     turn off Large File Support (default=on)],enable_largefile=$enableval,enable_largefile=yes)
 AC_ARG_ENABLE(alias,        [  --disable-alias         turn off Alias plugin (default=compiled)],enable_alias=$enableval,enable_alias=yes)
-AC_ARG_ENABLE(aspell,       [  --disable-aspell        turn off Aspell plugin (default=compiled)],enable_aspell=$enableval,enable_aspell=yes)
+AC_ARG_ENABLE(spell,        [  --disable-spell         turn off Spell plugin (default=compiled)],enable_spell=$enableval,enable_spell=yes)
 AC_ARG_ENABLE(charset,      [  --disable-charset       turn off Charset plugin (default=compiled if found)],enable_charset=$enableval,enable_charset=yes)
 AC_ARG_ENABLE(demo,         [  --enable-demo           turn on Demo plugin (default=off)],enable_demo=$enableval,enable_demo=no)
 AC_ARG_ENABLE(fifo,         [  --disable-fifo          turn off Fifo plugin (default=compiled)],enable_fifo=$enableval,enable_fifo=yes)
@@ -310,36 +310,41 @@ else
     not_asked="$not_asked alias"
 fi
 
-# ---------------------------------- aspell ------------------------------------
+# ---------------------------------- spelling ----------------------------------
 
-if test "x$enable_aspell" = "xyes" ; then
-    ASPELL_CFLAGS=""
-    ASPELL_LFLAGS=""
+if test "x$enable_spell" = "xyes" ; then
+    # Check ENCHANT is available
+    PKG_CHECK_MODULES(ENCHANT, [enchant], [CFLAGS="$CFLAGS -DUSE_ENCHANT"], 
+    # otherwise Check ASPELL is available
+    [
+        ASPELL_CFLAGS=""
+        ASPELL_LFLAGS=""
 
-    AC_CHECK_HEADER(aspell.h,ac_found_aspell_header="yes",ac_found_aspell_header="no")
-    AC_CHECK_LIB(aspell,new_aspell_speller,ac_found_aspell_lib="yes",ac_found_aspell_lib="no")
+        AC_CHECK_HEADER(aspell.h,ac_found_aspell_header="yes",ac_found_aspell_header="no")
+        AC_CHECK_LIB(aspell,new_aspell_speller,ac_found_aspell_lib="yes",ac_found_aspell_lib="no")
 
-    AC_MSG_CHECKING(for aspell headers and librairies)
-    if test "x$ac_found_aspell_header" = "xno" -o "x$ac_found_aspell_lib" = "xno" ; then
-       AC_MSG_RESULT(no)
-       AC_MSG_WARN([
+        AC_MSG_CHECKING(for aspell headers and librairies)    
+        if test "x$ac_found_aspell_header" = "xno" -o "x$ac_found_aspell_lib" = "xno" ; then
+           AC_MSG_RESULT(no)
+           AC_MSG_WARN([
 *** Aspell headers and/or libraries couldn't be found on your system.
 *** Try to install them with your software package manager.
 *** WeeChat will be built without Aspell support.])
-       enable_aspell="no"
-       not_found="$not_found aspell"
-    else
-        AC_MSG_RESULT(yes)
-        ASPELL_LFLAGS="$ASPELL_LFLAGS -laspell"
+           enable_spell="no"
+           not_found="$not_found spell"
+        else
+           AC_MSG_RESULT(yes)
+	   ASPELL_LFLAGS="$ASPELL_LFLAGS -laspell"
+        fi
     fi
 else
-    not_asked="$not_asked aspell"
+    not_asked="$not_asked spell"
 fi
 
-if test "x$enable_aspell" = "xyes" ; then
+if test "x$enable_spell" = "xyes" ; then
     AC_SUBST(ASPELL_CFLAGS)
     AC_SUBST(ASPELL_LFLAGS)
-    AC_DEFINE(PLUGIN_ASPELL)
+    AC_DEFINE(PLUGIN_SPELL)
 fi
 
 # --------------------------------- charset ------------------------------------
@@ -989,7 +994,7 @@ AM_CONDITIONAL(GUI_WXWIDGETS,    test "$enable_wxwidgets" = "yes")
 AM_CONDITIONAL(GUI_GTK,          test "$enable_gtk" = "yes")
 AM_CONDITIONAL(GUI_QT,           test "$enable_qt" = "yes")
 AM_CONDITIONAL(PLUGIN_ALIAS,     test "$enable_alias" = "yes")
-AM_CONDITIONAL(PLUGIN_ASPELL,    test "$enable_aspell" = "yes")
+AM_CONDITIONAL(PLUGIN_SPELL,     test "$enable_spell" = "yes")
 AM_CONDITIONAL(PLUGIN_CHARSET,   test "$enable_charset" = "yes")
 AM_CONDITIONAL(PLUGIN_DEMO,      test "$enable_demo" = "yes")
 AM_CONDITIONAL(PLUGIN_FIFO,      test "$enable_fifo" = "yes")
@@ -1069,8 +1074,8 @@ listplugins=""
 if test "x$enable_alias" = "xyes"; then
     listplugins="$listplugins alias"
 fi
-if test "x$enable_aspell" = "xyes"; then
-    listplugins="$listplugins aspell"
+if test "x$enable_spell" = "xyes"; then
+    listplugins="$listplugins spell"
 fi
 if test "x$enable_charset" = "xyes"; then
     listplugins="$listplugins charset"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index db86c86..bac026d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -23,6 +23,7 @@ ADD_DEFINITIONS(-DHAVE_CONFIG_H)
 
 INCLUDE(CheckIncludeFiles)
 INCLUDE(CheckFunctionExists)
+INCLUDE(CheckCCompilerFlag)
 
 CHECK_INCLUDE_FILES("arpa/inet.h" HAVE_ARPA_INET_H)
 CHECK_INCLUDE_FILES("limits.h" HAVE_LIMITS_H)
@@ -66,6 +67,13 @@ CHECK_FUNCTION_EXISTS(mallinfo HAVE_MALLINFO)
 CHECK_INCLUDE_FILES("regex.h" HAVE_REGEX_H)
 CHECK_FUNCTION_EXISTS(regexec HAVE_REGEXEC)
 
+CHECK_C_COMPILER_FLAG(-fPIE HAVE_FPIE_SUPPORT)
+if (HAVE_FPIE_SUPPORT)
+  set (WEECHAT_PIE_CFLAGS "-fPIE")
+  set (WEECHAT_PIE_LDFLAGS "-pie")
+else(HAVE_FPIE_SUPPORT)
+  message(STATUS "Your compiler doesn't support PIE flag")
+endif(HAVE_FPIE_SUPPORT)
 
 #needs to be splitted in subdirectories
 # FIXME: weechat_gui_common MUST be the first lib in the list
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 7b4fdfd..8ea0f29 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -41,6 +41,8 @@ wee-upgrade-file.c wee-upgrade-file.h
 wee-utf8.c wee-utf8.h
 wee-util.c wee-util.h)
 
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WEECHAT_PIE_CFLAGS}")
+
 # Check for flock support
 INCLUDE(CheckSymbolExists)
 CHECK_INCLUDE_FILES("sys/file.h" HAVE_SYS_FILE_H)
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index 1096280..08aeb2d 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -36,6 +36,11 @@ gui-main.h
 gui-nicklist.c gui-nicklist.h
 gui-window.c gui-window.h)
 
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WEECHAT_PIE_CFLAGS}")
+SET(CMAKE_EXE_LINKER_FLAGS
+    "${CMAKE_EXE_LINKER_FLAGS} ${WEECHAT_PIE_LDFLAGS}")
+
+
 INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
 ADD_LIBRARY(weechat_gui_common STATIC ${LIB_GUI_COMMON_SRC})
 
diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt
index e884731..9cc1849 100644
--- a/src/plugins/CMakeLists.txt
+++ b/src/plugins/CMakeLists.txt
@@ -27,6 +27,11 @@ plugin-config.h plugin-config.c)
 INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
 ADD_LIBRARY(weechat_plugins STATIC ${LIB_PLUGINS_SRC})
 
+SET_TARGET_PROPERTIES(weechat_plugins
+  PROPERTIES COMPILE_FLAGS "${WEECHAT_PIE_CFLAGS}")
+
+SET(PLUGIN_INSTALL_DIR lib${LIB_SUFFIX}/${PROJECT_NAME}/plugins)
+
 INCLUDE(CheckIncludeFiles)
 INCLUDE(CheckFunctionExists)
 INCLUDE(CheckLibraryExists)
@@ -35,13 +40,19 @@ IF(ENABLE_ALIAS)
   ADD_SUBDIRECTORY( alias )
 ENDIF(ENABLE_ALIAS)
 
-IF(ENABLE_ASPELL)
-  # Check for aspell libraries
-  FIND_PACKAGE(Aspell)
-  IF(ASPELL_FOUND)
+IF(NOT DISABLE_SPELL)
+  # Check for enchant libraries
+  FIND_PACKAGE(ENCHANT)
+  IF(ENCHANT_FOUND)
     ADD_SUBDIRECTORY( aspell )
-  ENDIF(ASPELL_FOUND)
-ENDIF(ENABLE_ASPELL)
+  ELSE(ENCHANT_FOUND)
+    # Check for aspell libraries
+    FIND_PACKAGE(Aspell)
+    IF(ASPELL_FOUND)
+      ADD_SUBDIRECTORY( aspell )
+    ENDIF(ASPELL_FOUND)
+  ENDIF(ENCHANT_FOUND)
+ENDIF(NOT DISABLE_SPELL)
 
 IF(ENABLE_CHARSET)
   # Check for iconv support.
diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
index 63e392d..aae2bcc 100644
--- a/src/plugins/Makefile.am
+++ b/src/plugins/Makefile.am
@@ -34,7 +34,7 @@ if PLUGIN_ALIAS
 alias_dir = alias
 endif
 
-if PLUGIN_ASPELL
+if PLUGIN_SPELL
 aspell_dir = aspell
 endif
 
diff --git a/src/plugins/alias/CMakeLists.txt b/src/plugins/alias/CMakeLists.txt
index 2995719..5694627 100644
--- a/src/plugins/alias/CMakeLists.txt
+++ b/src/plugins/alias/CMakeLists.txt
@@ -25,4 +25,4 @@ SET_TARGET_PROPERTIES(alias PROPERTIES PREFIX "")
 
 TARGET_LINK_LIBRARIES(alias)
 
-INSTALL(TARGETS alias LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS alias LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/aspell/CMakeLists.txt b/src/plugins/aspell/CMakeLists.txt
index c0ab5b0..9636870 100644
--- a/src/plugins/aspell/CMakeLists.txt
+++ b/src/plugins/aspell/CMakeLists.txt
@@ -24,9 +24,15 @@ weechat-aspell-config.c weechat-aspell-config.h
 weechat-aspell-speller.c weechat-aspell-speller.h)
 SET_TARGET_PROPERTIES(aspell PROPERTIES PREFIX "")
 
-IF(ASPELL_FOUND)
-  INCLUDE_DIRECTORIES(${ASPELL_INCLUDE_PATH})
-  TARGET_LINK_LIBRARIES(aspell ${ASPELL_LIBRARY})
-ENDIF(ASPELL_FOUND)
+IF(ENCHANT_FOUND)
+  INCLUDE_DIRECTORIES(${ENCHANT_INCLUDE_DIR})
+  TARGET_LINK_LIBRARIES(aspell ${ENCHANT_LIBRARIES})
+  ADD_DEFINITIONS(-DUSE_ENCHANT)
+ELSE(ENCHANT_FOUND)
+  IF(ASPELL_FOUND)
+    INCLUDE_DIRECTORIES(${ASPELL_INCLUDE_PATH})
+    TARGET_LINK_LIBRARIES(aspell ${ASPELL_LIBRARY})
+  ENDIF(ASPELL_FOUND)
+ENDIF(ENCHANT_FOUND)
 
-INSTALL(TARGETS aspell LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS aspell LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/aspell/Makefile.am b/src/plugins/aspell/Makefile.am
index eae43fe..7aa64b4 100644
--- a/src/plugins/aspell/Makefile.am
+++ b/src/plugins/aspell/Makefile.am
@@ -18,7 +18,7 @@
 # along with WeeChat.  If not, see <http://www.gnu.org/licenses/>.
 #
 
-INCLUDES = -DLOCALEDIR=\"$(datadir)/locale\" $(ASPELL_CFLAGS)
+INCLUDES = -DLOCALEDIR=\"$(datadir)/locale\" $(ASPELL_CFLAGS) $(ENCHANT_CFLAGS)
 
 libdir = ${weechat_libdir}/plugins
 
@@ -31,6 +31,6 @@ aspell_la_SOURCES = weechat-aspell.c \
                     weechat-aspell-speller.c \
                     weechat-aspell-speller.h
 aspell_la_LDFLAGS = -module
-aspell_la_LIBADD  = $(ASPELL_LFLAGS)
+aspell_la_LIBADD  = $(ASPELL_LFLAGS) $(ENCHANT_LIBS)
 
 EXTRA_DIST = CMakeLists.txt
diff --git a/src/plugins/aspell/weechat-aspell-speller.c b/src/plugins/aspell/weechat-aspell-speller.c
index 51822c4..d5803dc 100644
--- a/src/plugins/aspell/weechat-aspell-speller.c
+++ b/src/plugins/aspell/weechat-aspell-speller.c
@@ -33,6 +33,9 @@
 struct t_aspell_speller *weechat_aspell_spellers = NULL;
 struct t_aspell_speller *last_weechat_aspell_speller = NULL;
 
+#ifdef USE_ENCHANT
+extern EnchantBroker *broker;
+#endif
 
 /*
  * weechat_aspell_speller_exists: return 1 if an aspell dict exists for a lang,
@@ -42,6 +45,9 @@ struct t_aspell_speller *last_weechat_aspell_speller = NULL;
 int
 weechat_aspell_speller_exists (const char *lang)
 {
+#ifdef USE_ENCHANT
+    return enchant_broker_dict_exists(broker, lang);
+#else
     struct AspellConfig *config;
     AspellDictInfoList *list;
     AspellDictInfoEnumeration *el;
@@ -67,6 +73,7 @@ weechat_aspell_speller_exists (const char *lang)
     delete_aspell_config (config);
     
     return rc;
+#endif
 }
 
 /*
@@ -129,9 +136,13 @@ struct t_aspell_speller *
 weechat_aspell_speller_new (const char *lang)
 {
     struct t_aspell_speller *new_speller;
+#ifdef USE_ENCHANT
+    EnchantDict *ret;
+#else
     AspellConfig *config;
     AspellCanHaveError *ret;
     struct t_infolist *infolist;
+#endif
     
     if (!lang)
         return NULL;
@@ -143,6 +154,17 @@ weechat_aspell_speller_new (const char *lang)
                         ASPELL_PLUGIN_NAME, lang);
     }
     
+#ifdef USE_ENCHANT
+    ret = enchant_broker_request_dict (broker, lang);
+    if (!ret)
+    {
+        weechat_printf (NULL,
+                        "%s%s: error: %s",
+                        weechat_prefix ("error"), ASPELL_PLUGIN_NAME,
+                        lang);
+        return NULL;
+    }
+#else
     /* create a speller instance for the newly created cell */
     config = new_aspell_config();
     aspell_config_replace (config, "lang", lang);
@@ -172,7 +194,8 @@ weechat_aspell_speller_new (const char *lang)
         delete_aspell_can_have_error (ret);
         return NULL;
     }
-    
+#endif
+
     /* create and add a new speller cell */
     new_speller = malloc (sizeof (*new_speller));
     if (!new_speller)
@@ -183,7 +206,11 @@ weechat_aspell_speller_new (const char *lang)
         return NULL;
     }
     
+#ifdef USE_ENCHANT
+    new_speller->speller = ret;
+#else
     new_speller->speller = to_aspell_speller (ret);
+#endif
     new_speller->lang = strdup (lang);
 
     /* add speller to list */
@@ -195,8 +222,10 @@ weechat_aspell_speller_new (const char *lang)
         weechat_aspell_spellers = new_speller;
     last_weechat_aspell_speller = new_speller;
     
+#ifndef USE_ENCHANT
     /* free config */
     delete_aspell_config (config);
+#endif
     
     return new_speller;
 }
@@ -221,8 +250,12 @@ weechat_aspell_speller_free (struct t_aspell_speller *speller)
     /* free data */
     if (speller->speller)
     {
+#ifdef USE_ENCHANT
+        enchant_broker_free_dict(broker, speller->speller);
+#else
         aspell_speller_save_all_word_lists (speller->speller);
         delete_aspell_speller (speller->speller);
+#endif
     }
     if (speller->lang)
         free (speller->lang);
diff --git a/src/plugins/aspell/weechat-aspell-speller.h b/src/plugins/aspell/weechat-aspell-speller.h
index 06156ec..9d503dc 100644
--- a/src/plugins/aspell/weechat-aspell-speller.h
+++ b/src/plugins/aspell/weechat-aspell-speller.h
@@ -23,7 +23,11 @@
 
 struct t_aspell_speller
 {
+#ifdef USE_ENCHANT
+    EnchantDict *speller;                  /* enchant speller                */
+#else
     AspellSpeller *speller;                /* aspell speller                */
+#endif
     char *lang;                            /* language                      */
     
     struct t_aspell_speller *prev_speller; /* pointer to next speller       */
diff --git a/src/plugins/aspell/weechat-aspell.c b/src/plugins/aspell/weechat-aspell.c
index cd37a86..2372595 100644
--- a/src/plugins/aspell/weechat-aspell.c
+++ b/src/plugins/aspell/weechat-aspell.c
@@ -48,6 +48,10 @@ struct t_gui_buffer *aspell_buffer_spellers = NULL;
 char *aspell_last_modifier_string = NULL; /* last str. received by modifier */
 char *aspell_last_modifier_result = NULL; /* last str. built by modifier    */
 
+#ifdef USE_ENCHANT
+EnchantBroker *broker;
+#endif
+
 /* aspell supported langs (updated on of 2008-10-17) */
 struct t_aspell_code langs_avail[] =
 {
@@ -381,6 +385,55 @@ weechat_aspell_iso_to_country (const char *code)
     return strdup ("Unknown");
 }
 
+#ifdef USE_ENCHANT
+void EnchantDictDescribe(const char * const lang_tag,
+    const char * const provider_name,
+    const char * const provider_desc,
+    const char * const provider_file,
+    void * user_data)
+{
+    char *country, *lang, *pos;
+    char buffer[192];
+    (void)provider_name;
+    (void)provider_desc;
+    (void)provider_file;
+    (void)user_data;
+
+    country = NULL;
+    pos = strchr (lang_tag, '_');
+    if (!pos)
+        pos = strchr (lang_tag, '-');
+    
+    if (pos)
+    {
+        pos[0] = '\0';
+        lang = weechat_aspell_iso_to_lang ((char*)lang_tag);
+        pos[0] = '_';
+        country = weechat_aspell_iso_to_country (pos + 1);
+    }
+    else
+        lang = weechat_aspell_iso_to_lang ((char*)lang_tag);
+    
+    if (pos)
+    {
+        snprintf (buffer, sizeof (buffer), "%-22s %s (%s)",
+                  lang_tag, lang, country);
+    }
+    else
+    {
+        snprintf (buffer, sizeof (buffer), "%-22s %s",
+                  lang_tag, lang);
+    }
+    
+    weechat_printf (NULL, "  %s", buffer);
+    
+    if (lang)
+        free (lang);
+    if (country)
+        free (country);
+}
+#endif
+
 /*
  * weechat_aspell_speller_list_dicts: list all aspell dict installed on system
  *                                    and display them
@@ -389,6 +442,7 @@ weechat_aspell_iso_to_country (const char *code)
 void
 weechat_aspell_speller_list_dicts ()
 {
+#ifndef USE_ENCHANT
     char *country, *lang, *pos;
     char buffer[192];
     struct AspellConfig *config;
@@ -399,13 +453,18 @@ weechat_aspell_speller_list_dicts ()
     config = new_aspell_config();
     list = get_aspell_dict_info_list (config);
     el = aspell_dict_info_list_elements (list);
-    
+   
+#endif 
+ 
     weechat_printf (NULL, "");
     weechat_printf (NULL,
                     /* TRANSLATORS: "%s" is "aspell" */
                     _( "%s dictionaries list:"),
                     ASPELL_PLUGIN_NAME);
-    
+
+#ifdef USE_ENCHANT
+    enchant_broker_list_dicts(broker, EnchantDictDescribe, NULL);
+#else
     while ((dict = aspell_dict_info_enumeration_next (el)))
     {
         country = NULL;
@@ -458,6 +517,7 @@ weechat_aspell_speller_list_dicts ()
     
     delete_aspell_dict_info_enumeration (el);
     delete_aspell_config (config);
+#endif
 }
 
 /*
@@ -487,6 +547,9 @@ weechat_aspell_add_word (const char *lang, const char *word)
         ptr_speller = new_speller;
     }
 
+#ifdef USE_ENCHANT
+    enchant_dict_add(ptr_speller->speller, word, strlen(word));
+#else
     if (aspell_speller_add_to_personal (ptr_speller->speller,
                                         word,
                                         strlen (word)) == 1)
@@ -502,6 +565,7 @@ weechat_aspell_add_word (const char *lang, const char *word)
                           "dictionary"),
                         weechat_prefix ("error"), ASPELL_PLUGIN_NAME);
     }
+#endif
     
     if (new_speller)
         weechat_aspell_speller_free (new_speller);
@@ -632,7 +696,11 @@ weechat_aspell_check_word (struct t_gui_buffer *buffer, const char *word)
                     for (ptr_speller = weechat_aspell_spellers; ptr_speller;
                          ptr_speller = ptr_speller->next_speller)
                     {
+#ifdef USE_ENCHANT
+                        if (enchant_dict_check(ptr_speller->speller, word, strlen(word)) == 0)
+#else
                         if (aspell_speller_check (ptr_speller->speller, word, -1) == 1)
+#endif
                         {
                             rc = 1;
                             break;
@@ -948,6 +1016,13 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[])
     (void) argv;
     
     weechat_plugin = plugin;
+
+#ifdef USE_ENCHANT
+    /* acquire enchant broker */
+    broker = enchant_broker_init();
+    if (!broker)
+        return WEECHAT_RC_ERROR;
+#endif
     
     if (!weechat_aspell_config_init ())
         return WEECHAT_RC_ERROR;
@@ -986,7 +1061,7 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[])
      */
     weechat_hook_modifier ("500|input_text_display",
                            &weechat_aspell_modifier_cb, NULL);
-    
+   
     return WEECHAT_RC_OK;
 }
 
@@ -1010,6 +1085,11 @@ weechat_plugin_end (struct t_weechat_plugin *plugin)
         free (aspell_last_modifier_result);
     
     weechat_aspell_config_free ();
+
+#ifdef USE_ENCHANT
+    /* release enchant broker */
+    enchant_broker_free (broker);
+#endif
     
     return WEECHAT_RC_OK;
 }
diff --git a/src/plugins/aspell/weechat-aspell.h b/src/plugins/aspell/weechat-aspell.h
index 88f6368..743b818 100644
--- a/src/plugins/aspell/weechat-aspell.h
+++ b/src/plugins/aspell/weechat-aspell.h
@@ -21,7 +21,11 @@
 #ifndef __WEECHAT_ASPELL_H
 #define __WEECHAT_ASPELL_H 1
 
-#include <aspell.h>
+#ifdef USE_ENCHANT
+#      include <enchant.h>
+#else
+#      include <aspell.h>
+#endif
 
 #define weechat_plugin weechat_aspell_plugin
 #define ASPELL_PLUGIN_NAME "aspell"
diff --git a/src/plugins/charset/CMakeLists.txt b/src/plugins/charset/CMakeLists.txt
index a49ab8b..6c915bc 100644
--- a/src/plugins/charset/CMakeLists.txt
+++ b/src/plugins/charset/CMakeLists.txt
@@ -29,4 +29,4 @@ IF(ICONV_FOUND)
   ENDIF(ICONV_LIBRARY)
 ENDIF(ICONV_FOUND)
 
-INSTALL(TARGETS charset LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS charset LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/demo/CMakeLists.txt b/src/plugins/demo/CMakeLists.txt
index 077578b..afeacd4 100644
--- a/src/plugins/demo/CMakeLists.txt
+++ b/src/plugins/demo/CMakeLists.txt
@@ -22,4 +22,4 @@ SET_TARGET_PROPERTIES(demo PROPERTIES PREFIX "")
 
 TARGET_LINK_LIBRARIES(demo)
 
-INSTALL(TARGETS demo LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS demo LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/fifo/CMakeLists.txt b/src/plugins/fifo/CMakeLists.txt
index 0ffd45d..40c054e 100644
--- a/src/plugins/fifo/CMakeLists.txt
+++ b/src/plugins/fifo/CMakeLists.txt
@@ -24,4 +24,4 @@ SET_TARGET_PROPERTIES(fifo PROPERTIES PREFIX "")
 
 TARGET_LINK_LIBRARIES(fifo)
 
-INSTALL(TARGETS fifo LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS fifo LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/irc/CMakeLists.txt b/src/plugins/irc/CMakeLists.txt
index 0754509..bed1295 100644
--- a/src/plugins/irc/CMakeLists.txt
+++ b/src/plugins/irc/CMakeLists.txt
@@ -58,4 +58,4 @@ ENDIF(GCRYPT_FOUND)
 
 TARGET_LINK_LIBRARIES(irc ${LINK_LIBS})
 
-INSTALL(TARGETS irc LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS irc LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/logger/CMakeLists.txt b/src/plugins/logger/CMakeLists.txt
index 7073f9d..3fe9d11 100644
--- a/src/plugins/logger/CMakeLists.txt
+++ b/src/plugins/logger/CMakeLists.txt
@@ -27,4 +27,4 @@ SET_TARGET_PROPERTIES(logger PROPERTIES PREFIX "")
 
 TARGET_LINK_LIBRARIES(logger)
 
-INSTALL(TARGETS logger LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS logger LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/relay/CMakeLists.txt b/src/plugins/relay/CMakeLists.txt
index 44c1fef..d95dd4a 100644
--- a/src/plugins/relay/CMakeLists.txt
+++ b/src/plugins/relay/CMakeLists.txt
@@ -34,4 +34,4 @@ SET_TARGET_PROPERTIES(relay PROPERTIES PREFIX "")
 
 TARGET_LINK_LIBRARIES(relay)
 
-INSTALL(TARGETS relay LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS relay LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/scripts/lua/CMakeLists.txt b/src/plugins/scripts/lua/CMakeLists.txt
index 4f9ecfa..40c8fd3 100644
--- a/src/plugins/scripts/lua/CMakeLists.txt
+++ b/src/plugins/scripts/lua/CMakeLists.txt
@@ -32,4 +32,4 @@ IF(LUA_FOUND)
   ENDIF(LUA_LIBRARY AND LUALIB_LIBRARY)
 ENDIF(LUA_FOUND)
 
-INSTALL(TARGETS lua LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS lua LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/scripts/perl/CMakeLists.txt b/src/plugins/scripts/perl/CMakeLists.txt
index a6fc4f3..5a3db0c 100644
--- a/src/plugins/scripts/perl/CMakeLists.txt
+++ b/src/plugins/scripts/perl/CMakeLists.txt
@@ -38,4 +38,4 @@ IF(PERL_FOUND)
   ENDIF(PERL_DYNALOADER)
 ENDIF(PERL_FOUND)
 
-INSTALL(TARGETS perl LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS perl LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/scripts/python/CMakeLists.txt b/src/plugins/scripts/python/CMakeLists.txt
index a236a01..84d36c7 100644
--- a/src/plugins/scripts/python/CMakeLists.txt
+++ b/src/plugins/scripts/python/CMakeLists.txt
@@ -28,4 +28,4 @@ IF(PYTHON_FOUND)
   TARGET_LINK_LIBRARIES(python ${PYTHON_LIBRARY} weechat_scripts)
 ENDIF(PYTHON_FOUND)
 
-INSTALL(TARGETS python LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS python LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/scripts/ruby/CMakeLists.txt b/src/plugins/scripts/ruby/CMakeLists.txt
index 72977ef..925684c 100644
--- a/src/plugins/scripts/ruby/CMakeLists.txt
+++ b/src/plugins/scripts/ruby/CMakeLists.txt
@@ -27,4 +27,4 @@ IF(RUBY_FOUND)
   TARGET_LINK_LIBRARIES(ruby ${RUBY_LIBRARY} weechat_scripts)
 ENDIF(RUBY_FOUND)
 
-INSTALL(TARGETS ruby LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS ruby LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/scripts/tcl/CMakeLists.txt b/src/plugins/scripts/tcl/CMakeLists.txt
index 68d05e4..540c480 100644
--- a/src/plugins/scripts/tcl/CMakeLists.txt
+++ b/src/plugins/scripts/tcl/CMakeLists.txt
@@ -34,4 +34,4 @@ IF(TCL_FOUND)
 
 ENDIF(TCL_FOUND)
 
-INSTALL(TARGETS tcl LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS tcl LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})
diff --git a/src/plugins/xfer/CMakeLists.txt b/src/plugins/xfer/CMakeLists.txt
index 1e629a9..75a0006 100644
--- a/src/plugins/xfer/CMakeLists.txt
+++ b/src/plugins/xfer/CMakeLists.txt
@@ -33,4 +33,4 @@ SET_TARGET_PROPERTIES(xfer PROPERTIES PREFIX "")
 
 TARGET_LINK_LIBRARIES(xfer)
 
-INSTALL(TARGETS xfer LIBRARY DESTINATION ${LIBDIR}/plugins)
+INSTALL(TARGETS xfer LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR})