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})