#################################################
#
#  (C) 2010-2011 Serghei Amelian
#  serghei (DOT) amelian (AT) gmail.com
#
#  Improvements and feedback are welcome
#
#  This file is released under GPL >= 2
#
#################################################


##### set project version ########################

include( TDEVersion )
cmake_minimum_required( VERSION ${TDE_CMAKE_MINIMUM_VERSION} )
tde_set_project_version( )


##### general package setup #####################

project( tdepim )
set( PACKAGE tdepim )


##### include essential cmake modules ###########

include( FindPkgConfig )
include( CheckIncludeFile )
include( CheckTypeSize )
include( CheckCSourceCompiles )
include( CheckCXXSourceCompiles )
include( CheckLibraryExists )
include( CheckSymbolExists )
enable_testing( )


##### include our cmake modules #################

include( TDEMacros )


##### setup install paths #######################

include( TDESetupPaths )
tde_setup_paths( )


##### add apidox targets ############

add_custom_target( apidox
  COMMAND ${CMAKE_COMMAND} -E env
    "TQTDOCDIR=/usr/share/tqt3/doc/html"
    "DOXDATA=${HTML_INSTALL_DIR}/en/common"
    ${CMAKE_SOURCE_DIR}/admin/doxygen.sh
    --no-modulename
    ${CMAKE_SOURCE_DIR}
  COMMAND
    find ${CMAKE_BINARY_DIR}/apidocs -name '*.html' |
    xargs -r sed -i 's|${CMAKE_BINARY_DIR}/apidocs|${HTML_INSTALL_DIR}/en/${PROJECT_NAME}-apidocs|g'
  COMMAND
    find ${CMAKE_BINARY_DIR}/apidocs -name '*.tag' |
    xargs -r sed -i 's|${CMAKE_SOURCE_DIR}/|${PROJECT_NAME}/|g'
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)

add_custom_target( install-apidox
  COMMAND ${CMAKE_COMMAND} -E echo Apidox installed in ${HTML_INSTALL_DIR}/en/${PROJECT_NAME}-apidocs
)

install( CODE "
  if( EXISTS ${CMAKE_BINARY_DIR}/apidocs )
    file(
      INSTALL ${CMAKE_BINARY_DIR}/apidocs/
      DESTINATION ${HTML_INSTALL_DIR}/en/${PROJECT_NAME}-apidocs
      PATTERN doxygen_sqlite3.db EXCLUDE
      PATTERN installdox-slow EXCLUDE
    )
  endif()"
)


##### optional stuff ############################

option( WITH_ALL_OPTIONS "Enable all optional support" OFF )
option( WITH_ARTS "Enable aRts support" ${WITH_ALL_OPTIONS} )
option( WITH_SASL "Enable cyrus-sasl support" ${WITH_ALL_OPTIONS} )
option( WITH_NEWDISTRLISTS "Enable the new distribution lists" ON )
option( WITH_GNOKII "Enable gnokii support" ${WITH_ALL_OPTIONS} )
option( WITH_EXCHANGE "Enable Microsoft Exchange 2000 support" ${WITH_ALL_OPTIONS} )
option( WITH_EGROUPWARE "Enable egroupware support" ${WITH_ALL_OPTIONS} )
option( WITH_KOLAB "Enable kolab support" ${WITH_ALL_OPTIONS} )
option( WITH_SLOX "Enable slox support" ${WITH_ALL_OPTIONS} )
option( WITH_GROUPWISE "Enable groupwise support" ${WITH_ALL_OPTIONS} )
option( WITH_FEATUREPLAN "Enable featureplan support" ${WITH_ALL_OPTIONS} )
option( WITH_GROUPDAV "Enable groupdav support" ${WITH_ALL_OPTIONS} )
option( WITH_BIRTHDAYS "Enable birthdays support" ${WITH_ALL_OPTIONS} )
option( WITH_NEWEXCHANGE "Enable newexchange support" ${WITH_ALL_OPTIONS} )
option( WITH_SCALIX "Enable scalix support" ${WITH_ALL_OPTIONS} )
option( WITH_CALDAV "Enable caldav support" ${WITH_ALL_OPTIONS} )
option( WITH_CARDDAV "Enable carddav support" ${WITH_ALL_OPTIONS} )
option( WITH_INDEXLIB "Enable indexlib support (in kmail)" ${WITH_ALL_OPTIONS} )
option( WITH_XSCREENSAVER "Enable xscreensaver support (idle detection in karm)" ${WITH_ALL_OPTIONS} )

if( NOT WITH_ARTS )
  set( WITHOUT_ARTS 1 )
endif( )

if( WITH_NEWDISTRLISTS )
  set( TDEPIM_NEW_DISTRLISTS 1 )
endif( )


##### options comments ##########################

# WITH_ARTS   affects kalarm
# WITH_ARTS   description without arts kalarm won't play sounds
#                         with messages.
# WITH_SASL   affects tdeioslave(sieve imap4)
# WITH_SASL   description sieve tdeioslave won't build without sasl and 
#	                      imap4 tdeioslave will lose the ability of SASL
#	                      authentification
# WITH_SASL   requires libgsasl
# WITH_NEWDISTRLISTS affects kabc kadressbook
# WITH_NEWDISTRLISTS description if set use new version of the KAB
#                                Distribution Mail List Plugin otherwise use
#                                the old one.
# 
# WITH_GNOKII        affects kphonebook kmobile
# WITH_GNOKII        description in kphonebook gnoki adds some
#                                phone-synchronization features
# WITH_EXCHANGE      affects tderesources korganizer
# WITH_EGROUPWARE    affects tderesources wizards
# WITH_KOLAB         affects tderesources wizards
# WITH_SLOX          affects tderesources wizards
# WITH_GROUPWISE     affects tderesources wizards
# WITH_FEATUREPLAN   affects tderesources
# WITH_GROUPDAV      affects tderesources
# WITH_BIRTHDAYS     affects tderesources
# WITH_NEWEXCHANGE   affects tderesources wizards
# WITH_SCALIX        affects tderesources wizards
# WITH_CALDAV        affects tderesources
# WITH_CARDDAV       affects tderesources
# WITH_INDEXLIB      affects kmail


# NOTE: WITH_GNOKII support in kmobile is outdated and permanently disabled
#       for now
# NOTE: WITH_{EGROUPWARE,KOLAB,SLOX,GROUPWISE,FEATUREPLAN,GROUPDAV,BIRTHDAYS,
#             NEWEXCHANGE,SCALIX,CALDAV,CARDDAV} in tderesources selects which
#       its modules would be built. 


##### user requested modules ####################

option( BUILD_ALL "Build all" OFF )
option( BUILD_INDEXLIB "Build indexlib" ${BUILD_ALL} )
option( BUILD_LIBKMIME "Build libkmime" ${BUILD_ALL} )
option( BUILD_KTNEF "Build ktnef" ${BUILD_ALL} )
option( BUILD_LIBKCAL "Build libkcal" ${BUILD_ALL} )
option( BUILD_LIBTDEPIM "Build libtdepim" ${BUILD_ALL} )
option( BUILD_LIBKPIMIDENTITIES "Build libkpimidentities" ${BUILD_ALL} )
option( BUILD_LIBTDENETWORK "Build libtdenetwork" ${BUILD_ALL} )
option( BUILD_CERTMANAGER "Build certmanager" ${BUILD_ALL} )
option( BUILD_LIBKPGP "Build libkpgp" ${BUILD_ALL} )
option( BUILD_MIMELIB "Build mimelib" ${BUILD_ALL} )
option( BUILD_LIBKSIEVE "Build libksieve" ${BUILD_ALL} )
option( BUILD_LIBKPIMEXCHANGE "Build libkpimexchange" ${BUILD_ALL} )
option( BUILD_TDEIOSLAVE "Build tdeioslave" ${BUILD_ALL} )
option( BUILD_KMAIL "Build kmail" ${BUILD_ALL} )
option( BUILD_AKREGATOR "Build akregator" ${BUILD_ALL} )
option( BUILD_KALARM "Build kalarm" ${BUILD_ALL} )
option( BUILD_KADDRESSBOOK "Build kaddressbook" ${BUILD_ALL} )
option( BUILD_KORN "Build korn" ${BUILD_ALL} )
option( BUILD_KGANTT "Build kgantt" ${BUILD_ALL} )
option( BUILD_LIBKHOLIDAYS "Build libkholidays" ${BUILD_ALL} )
option( BUILD_KORGANIZER "Build korganizer" ${BUILD_ALL} )
option( BUILD_PLUGINS "Build plugins" ${BUILD_ALL} )
option( BUILD_KNOTES "Build knotes" ${BUILD_ALL} )
option( BUILD_KODE "Build kode" ${BUILD_ALL} )
option( BUILD_TDERESOURCES "Build tderesources" ${BUILD_ALL} )
option( BUILD_WIZARDS "Build wizards" ${BUILD_ALL} )
option( BUILD_TDEABC "Build tdeabc" ${BUILD_ALL} )
option( BUILD_KONSOLEKALENDAR "Build konsolekalendar" ${BUILD_ALL} )
option( BUILD_KMAILCVT "Build kmailcvt" ${BUILD_ALL} )
option( BUILD_KARM "Build karm" ${BUILD_ALL} )
option( BUILD_TDEFILE_PLUGINS "Build tdefile-plugins" ${BUILD_ALL} )
option( BUILD_KANDY "Build kandy" ${BUILD_ALL} )
option( BUILD_KNODE "Build knode" ${BUILD_ALL} )
option( BUILD_KMOBILE "Build kmobile" ${BUILD_ALL} )
option( BUILD_DOC "Build doc" ${BUILD_ALL} )
option( BUILD_KONTACT "Build kontact" ${BUILD_ALL} )


##### configure checks ##########################

include( ConfigureChecks.cmake )


###### global compiler settings #################

add_definitions(
  -DHAVE_CONFIG_H
)

set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TQT_CXX_FLAGS}" )
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined" )
set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined" )


##### activate dependencies #####################

if( BUILD_LIBKCAL OR BUILD_LIBTDEPIM OR BUILD_LIBKPIMIDENTITIES OR BUILD_TDEIOSLAVE OR BUILD_KMAIL OR BUILD_KNODE )
  add_subdirectory( libemailfunctions )
endif()

if( BUILD_KADDRESSBOOK OR (BUILD_TDERESOURCES AND (WITH_EGROUPWARE OR WITH_BIRTHDAYS)) )
    add_subdirectory( kaddressbook/common )
endif()


##### tdepim directories ########################

tde_conditional_add_subdirectory( BUILD_INDEXLIB indexlib )
tde_conditional_add_subdirectory( BUILD_LIBKMIME libkmime )
tde_conditional_add_subdirectory( BUILD_KTNEF ktnef )
tde_conditional_add_subdirectory( BUILD_LIBKCAL libkcal )
tde_conditional_add_subdirectory( BUILD_LIBTDEPIM pixmaps )
tde_conditional_add_subdirectory( BUILD_LIBTDEPIM libtdepim )
tde_conditional_add_subdirectory( BUILD_LIBKPIMIDENTITIES libkpimidentities )
tde_conditional_add_subdirectory( BUILD_LIBTDENETWORK libtdenetwork )
tde_conditional_add_subdirectory( BUILD_CERTMANAGER certmanager )
tde_conditional_add_subdirectory( BUILD_LIBKPGP libkpgp )
tde_conditional_add_subdirectory( BUILD_MIMELIB mimelib )
tde_conditional_add_subdirectory( BUILD_LIBKSIEVE libksieve )
tde_conditional_add_subdirectory( BUILD_LIBKPIMEXCHANGE libkpimexchange )
tde_conditional_add_subdirectory( BUILD_TDEIOSLAVE tdeioslave )
tde_conditional_add_subdirectory( BUILD_KMAIL kmail )
tde_conditional_add_subdirectory( BUILD_AKREGATOR akregator )
tde_conditional_add_subdirectory( BUILD_KALARM kalarm )
tde_conditional_add_subdirectory( BUILD_KADDRESSBOOK kaddressbook )
tde_conditional_add_subdirectory( BUILD_KORN korn )
tde_conditional_add_subdirectory( BUILD_KGANTT kgantt )
tde_conditional_add_subdirectory( BUILD_LIBKHOLIDAYS libkholidays )
tde_conditional_add_subdirectory( BUILD_KORGANIZER kdgantt )
tde_conditional_add_subdirectory( BUILD_KORGANIZER korganizer )
tde_conditional_add_subdirectory( BUILD_PLUGINS plugins )
tde_conditional_add_subdirectory( BUILD_KNOTES knotes )
tde_conditional_add_subdirectory( BUILD_KODE kode )
tde_conditional_add_subdirectory( BUILD_TDERESOURCES tderesources )
tde_conditional_add_subdirectory( BUILD_WIZARDS wizards )
tde_conditional_add_subdirectory( BUILD_TDEABC tdeabc )
tde_conditional_add_subdirectory( BUILD_KONSOLEKALENDAR konsolekalendar )
tde_conditional_add_subdirectory( BUILD_KMAILCVT kmailcvt )
tde_conditional_add_subdirectory( BUILD_KARM karm )
tde_conditional_add_subdirectory( BUILD_TDEFILE_PLUGINS tdefile-plugins )
tde_conditional_add_subdirectory( BUILD_KANDY kandy )
tde_conditional_add_subdirectory( BUILD_KNODE knode )
tde_conditional_add_subdirectory( BUILD_KMOBILE kmobile )
tde_conditional_add_subdirectory( BUILD_DOC doc )
tde_conditional_add_subdirectory( BUILD_KONTACT kontact )


##### write configure files #####################

configure_file( config.h.cmake config.h @ONLY )