project(aspell)

cmake_minimum_required(VERSION 2.6)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)

option(COMPILE_IN_FILTERS "include some filters into the library" ON)

if(WIN32 OR WINCE)
    include_directories(${CMAKE_CURRENT_SOURCE_DIR}/win32)
    if(MSVC)
        add_definitions(-D_CRT_SECURE_NO_WARNINGS -wd4996 -wd4351 -wd4800 -wd4521 -wd4522)
    endif(MSVC)
    add_definitions(-DENABLE_WIN32_RELOCATABLE)
endif(WIN32 OR WINCE)

if(WINCE)
    find_package(Wcecompat REQUIRED)
    find_package(Qt4 REQUIRED)
    include_directories(${WCECOMPAT_INCLUDE_DIR})
    include_directories(${QT_INCLUDES})
    set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${WCECOMPAT_INCLUDE_DIR})
    set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${WCECOMPAT_LIBRARIES})
    set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${QT_QTCORE_LIBRARY})
endif(WINCE)

IF(MSVC)
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
ENDIF(MSVC)

include_directories(
    ${CMAKE_CURRENT_BINARY_DIR} 
    ${CMAKE_CURRENT_BINARY_DIR}/gen
    ${CMAKE_CURRENT_SOURCE_DIR}/common
    ${CMAKE_CURRENT_SOURCE_DIR}/interfaces/cc
    ${CMAKE_CURRENT_SOURCE_DIR}/modules/speller/default
)

set(static_optfiles
    ${CMAKE_CURRENT_SOURCE_DIR}/modules/filter/url-filter.info
)

if(COMPILE_IN_FILTERS)
    set(static_optfiles
        ${static_optfiles}
        ${CMAKE_CURRENT_SOURCE_DIR}/modules/filter/email-filter.info
        ${CMAKE_CURRENT_SOURCE_DIR}/modules/filter/tex-filter.info
        ${CMAKE_CURRENT_SOURCE_DIR}/modules/filter/sgml-filter.info
        ${CMAKE_CURRENT_SOURCE_DIR}/modules/filter/html-filter.info
        ${CMAKE_CURRENT_SOURCE_DIR}/modules/filter/context-filter.info
        ${CMAKE_CURRENT_SOURCE_DIR}/modules/filter/nroff-filter.info
        ${CMAKE_CURRENT_SOURCE_DIR}/modules/filter/texinfo-filter.info
    )
endif(COMPILE_IN_FILTERS)


find_package(Perl REQUIRED)

# $prefix, $data, $lib, $conf
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/dirs.h
                   COMMAND ${PERL_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/gen/mk-dirs_h.pl ${CMAKE_INSTALL_PREFIX} lib lib share > ${CMAKE_CURRENT_BINARY_DIR}/dirs.h)

file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/gen)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gen/static_filters.src.cpp
                   COMMAND ${PERL_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/gen/mk-static-filter.pl ${static_optfiles}
                   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
        
set(aspell_SRCS
  common/cache.cpp
  common/string.cpp
  common/getdata.cpp
  common/itemize.cpp
  common/file_util.cpp
  common/string_map.cpp
  common/string_list.cpp
  common/config.cpp
  common/posib_err.cpp
  common/errors.cpp
  common/error.cpp
  common/fstream.cpp
  common/iostream.cpp
  common/info.cpp
  common/can_have_error.cpp
  common/convert.cpp
  common/tokenizer.cpp
  common/speller.cpp
  common/document_checker.cpp
  common/filter.cpp
  common/objstack.cpp 
  common/strtonum.cpp
  common/gettext_init.cpp
  common/file_data_util.cpp
  modules/speller/default/readonly_ws.cpp
  modules/speller/default/suggest.cpp
  modules/speller/default/data.cpp
  modules/speller/default/multi_ws.cpp
  modules/speller/default/phonetic.cpp
  modules/speller/default/writable.cpp
  modules/speller/default/speller_impl.cpp
  modules/speller/default/phonet.cpp
  modules/speller/default/typo_editdist.cpp
  modules/speller/default/editdist.cpp
  modules/speller/default/primes.cpp
  modules/speller/default/language.cpp
  modules/speller/default/leditdist.cpp
  modules/speller/default/affix.cpp
  modules/tokenizer/basic.cpp
  lib/filter-c.cpp
  lib/word_list-c.cpp
  lib/info-c.cpp
  lib/mutable_container-c.cpp
  lib/error-c.cpp
  lib/document_checker-c.cpp
  lib/string_map-c.cpp
  lib/new_config.cpp
  lib/config-c.cpp
  lib/string_enumeration-c.cpp
  lib/can_have_error-c.cpp
  lib/dummy.cpp
  lib/new_filter.cpp
  lib/new_fmode.cpp
  lib/string_list-c.cpp
  lib/find_speller.cpp
  lib/speller-c.cpp
  lib/string_pair_enumeration-c.cpp
  lib/new_checker.cpp
)
if(WINCE)
   set(aspell_SRCS
       ${aspell_SRCS}
       common/new.cpp)
endif(WINCE)

if(COMPILE_IN_FILTERS)
    set(aspell_SRCS
        ${aspell_SRCS}
        modules/filter/url.cpp
        modules/filter/email.cpp
        modules/filter/tex.cpp
        modules/filter/sgml.cpp
        modules/filter/context.cpp
        modules/filter/nroff.cpp
        modules/filter/texinfo.cpp
    )
endif(COMPILE_IN_FILTERS)

set_source_files_properties(common/config.cpp PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/dirs.h)
set_source_files_properties(lib/new_filter.cpp PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/gen/static_filters.src.cpp)
if(WIN32)
    set(aspell_SRCS 
        win32/dirent.c
        ${aspell_SRCS}
    )
endif(WIN32)

if(ASPELL_STATIC)
add_library(aspell STATIC ${aspell_SRCS})
add_definitions(-DASPELL_STATIC)
else(ASPELL_STATIC)
add_library(aspell SHARED ${aspell_SRCS})
endif(ASPELL_STATIC)
set_target_properties(aspell PROPERTIES DEFINE_SYMBOL MAKE_ASPELL_LIB)

if(WINCE)
    target_link_libraries(aspell ${WCECOMPAT_LIBRARIES} ${QT_QTCORE_LIBRARY})
endif(WINCE)

add_library(pspell SHARED lib/dummy.cpp)
target_link_libraries(pspell aspell)

add_executable(aspell_bin prog/aspell.cpp prog/check_funs.cpp prog/checker_string.cpp)
target_link_libraries(aspell_bin aspell)
set_target_properties(aspell_bin PROPERTIES RUNTIME_OUTPUT_NAME aspell)

add_executable(prezip-bin prog/prezip.c)

add_executable(word-list-compress prog/compress.c)

install(TARGETS aspell pspell aspell_bin prezip-bin word-list-compress RUNTIME DESTINATION bin
                     LIBRARY DESTINATION lib
                     ARCHIVE DESTINATION lib)

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/interfaces/cc/aspell.h DESTINATION include)  
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/interfaces/cc/aspell.h DESTINATION include/pspell) 

######################### data files ##########################################
set(pkgdata_DATA
    data/cp1250.cmap
    data/cp1250.cset
    data/cp1251.cmap
    data/cp1251.cset
    data/cp1252.cmap
    data/cp1252.cset
    data/cp1253.cmap
    data/cp1253.cset
    data/cp1254.cmap
    data/cp1254.cset
    data/cp1255.cmap
    data/cp1255.cset
    data/cp1256.cmap
    data/cp1256.cset
    data/cp1257.cmap
    data/cp1257.cset
    data/cp1258.cmap
    data/cp1258.cset
    data/iso-8859-1.cmap
    data/iso-8859-1.cset  
    data/iso-8859-2.cmap
    data/iso-8859-2.cset  
    data/iso-8859-3.cmap
    data/iso-8859-3.cset  
    data/iso-8859-4.cmap
    data/iso-8859-4.cset  
    data/iso-8859-5.cmap
    data/iso-8859-5.cset  
    data/iso-8859-6.cmap
    data/iso-8859-6.cset  
    data/iso-8859-7.cmap
    data/iso-8859-7.cset  
    data/iso-8859-8.cmap
    data/iso-8859-8.cset  
    data/iso-8859-9.cmap
    data/iso-8859-9.cset  
    data/iso-8859-10.cmap
    data/iso-8859-10.cset
    data/iso-8859-11.cmap
    data/iso-8859-11.cset
    data/iso-8859-13.cmap
    data/iso-8859-13.cset
    data/iso-8859-14.cmap
    data/iso-8859-14.cset
    data/iso-8859-15.cmap
    data/iso-8859-15.cset
    data/iso-8859-16.cmap
    data/iso-8859-16.cset
    data/koi8-r.cmap
    data/koi8-r.cset
    data/koi8-u.cmap
    data/koi8-u.cset
    data/dvorak.kbd
    data/split.kbd
    data/standard.kbd
)

install(FILES ${pkgdata_DATA} DESTINATION lib/aspell-0.60)