if(POLICY CMP0017)
   cmake_policy(SET CMP0017 NEW)
endif(POLICY CMP0017)

# set(CMAKE_AUTOMOC ON)

FIND_PACKAGE ( KDE4 REQUIRED )

ADD_DEFINITIONS(
   ${KDE4_DEFINITIONS}
   ${QT_DEFINITIONS}
   -fexceptions
   -Wno-deprecated-declarations
   -DDATA_INSTALL_DIR="\\\"${DATA_INSTALL_DIR}\\\""
   -DSHARE_INSTALL_PREFIX="\\\"${SHARE_INSTALL_PREFIX}\\\""
   -Werror
   -Wall
   -Wextra
#    -Wmissing-declarations
   -Wmissing-noreturn
   -Wpointer-arith
   -Wcast-align
   -Wwrite-strings
   -Wformat-nonliteral
   -Wformat-security
   -Wswitch-enum
   -Winit-self
   -Wmissing-include-dirs
   -Wundef
   -Wmissing-format-attribute
   -Wno-reorder
   -Wunused
   -Wuninitialized
#    -Wsuggest-attribute=const
#    -Wsystem-headers
)

if (CMAKE_COMPILER_IS_GNUCC)
   execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
   if (GCC_VERSION VERSION_LESS 4.6.9 OR GCC_VERSION VERSION_EQUAL 4.6)
      #GCC 4.6 version of those warnings does detect valid C++0x/C++11 as invalid.
      ADD_DEFINITIONS(
         -Wno-error=pragmas
         -Wno-pragmas
         -Wno-error
      )
   endif()
   if (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7)
      ADD_DEFINITIONS(
         -Wmaybe-uninitialized
         -Wunused-local-typedefs
         -pedantic
      )
   endif()
   if (GCC_VERSION VERSION_GREATER 4.8 OR GCC_VERSION VERSION_EQUAL 4.8)
#       ADD_DEFINITIONS("-Wzero-as-null-pointer-constant")
#       ADD_DEFINITIONS( -DENABLE_IGNORE_NULL=true )
   endif()
endif()

ADD_DEFINITIONS("-std=c++0x")

#Build pure Qt Library
add_subdirectory( lib  )

#Make sure it can access DBUS autogenerated files
include_directories(SYSTEM ${KDE4_INCLUDES} ${CMAKE_BINARY_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR}/lib )

#Build KDE specific files
add_subdirectory( klib )

MESSAGE("CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")

IF(${CMAKE_BUILD_TYPE} MATCHES Release)
   MESSAGE("NO DEBUG OUTPUT")
   ADD_DEFINITIONS( -DQT_NO_DEBUG_OUTPUT)
ENDIF(${CMAKE_BUILD_TYPE} MATCHES Release)

SET ( KDE4_KABC_LIBS  -lkabc )

# Delegates
SET(
   sflphone_client_kde_DELEGATES
   delegates/conferencedelegate.cpp
   delegates/contactdelegate.cpp
   delegates/historydelegate.cpp
   delegates/categorizeddelegate.cpp
   delegates/phonenumberdelegate.cpp
   delegates/delegatedropoverlay.cpp
   delegates/dialpaddelegate.cpp
   delegates/imdelegate.cpp
   delegates/autocompletiondelegate.cpp
   delegates/ringtonedelegate.cpp
)

# Configuration pages
SET(
   sflphone_client_kde_CONF
   conf/configurationdialog.cpp
   conf/dlggeneral.cpp
   conf/dlgdisplay.cpp
   conf/dlgaccounts.cpp
   conf/dlgaudio.cpp
   conf/dlgaddressbook.cpp
   conf/dlghooks.cpp
   conf/dlgaccessibility.cpp
   conf/dlgpresence.cpp
)

# Widgets
SET(
   sflphone_client_kde_WIDGETS
   widgets/sflphonetray.cpp
   widgets/dialpad.cpp
   widgets/contactdock.cpp
   widgets/historydock.cpp
   widgets/bookmarkdock.cpp
   widgets/categorizedtreeview.cpp
   widgets/immanager.cpp
   widgets/callviewoverlay.cpp
   widgets/overlaytoolbar.cpp
   widgets/callviewtoolbar.cpp
   widgets/tips/conftip.cpp
   widgets/tips/dialpadtip.cpp
   widgets/tips/ringingtip.cpp
   widgets/tips/connectionlosttip.cpp
   widgets/tips/tipcollection.cpp
   widgets/tips/removeconferencetip.cpp
   widgets/player.cpp
   widgets/playeroverlay.cpp
   widgets/filterlineedit.cpp
   widgets/kphonenumberselector.cpp
   widgets/contactview.cpp
   widgets/presence.cpp
   widgets/autocompletion.cpp
   widgets/groupedtoolbutton.cpp
)

# Video Widgets
IF(${ENABLE_VIDEO} MATCHES true)
   SET(
      sflphone_client_kde_VIDEO
      widgets/videodock.cpp
#       widgets/videowidget.cpp #Software rendering, can still be useful
      widgets/videowidget2.cpp #Needed for preview
      widgets/videowidget3.cpp
      widgets/videoglframe.cpp
      widgets/videoscene.cpp
      widgets/videotoolbar.cpp
      conf/dlgvideo.cpp
   )
ENDIF(${ENABLE_VIDEO} MATCHES true)

SET(
   sflphone_client_kde_SRCS
   main.cpp
   extendedaction.cpp
   sflphoneview.cpp
   sflphone.cpp
   sflphonecmd.cpp
   sflphoneapplication.cpp
   errormessage.cpp
   kspeechinterfacesingleton.cpp
   sflphoneaccessibility.cpp
   accountwizard.cpp
   canvasobjectmanager.cpp
   eventmanager.cpp
   actioncollection.cpp
   implementation.cpp
   ${sflphone_client_kde_DELEGATES}
   ${sflphone_client_kde_CONF}
   ${sflphone_client_kde_WIDGETS}
   ${sflphone_client_kde_VIDEO}
)


# generate rules for building source files from the resources
SET(QtApp_RCCS qrc/resources.qrc)
QT4_ADD_RESOURCES(QtApp_RCC_SRCS ${QtApp_RCCS})


# kde4_automoc(${sflphone_client_kde_SRCS})
SET(
   config_ui_files
   conf/dlggeneralbase.ui
   conf/dlgdisplaybase.ui
   conf/dlgaccountsbase.ui
   conf/dlgaudiobase.ui
   conf/dlgaddressbookbase.ui
   conf/dlghooksbase.ui
   conf/dlgaccessibility.ui
   conf/dlgpresence.ui
   widgets/ui/player.ui
   widgets/ui/playeroverlay.ui
   widgets/ui/dockbase.ui
   widgets/ui/contactdock.ui
   widgets/ui/transfer.ui
   widgets/ui/presence.ui
)

# add_subdirectory( test   ) #Enable again some day, it cause compile problems for some users

IF(${ENABLE_VIDEO} MATCHES true)
   MESSAGE("VIDEO enabled")
   SET(ENABLE_VIDEO 1 CACHE BOOLEAN "Enable video")
   add_definitions( -DENABLE_VIDEO=true )
   SET (
      config_ui_files
      ${config_ui_files}
      conf/dlgvideobase.ui
   )
ENDIF(${ENABLE_VIDEO} MATCHES true)

IF(${DISABLE_UNIQUE_APPLICATION} MATCHES true)
   MESSAGE("KUniqueApplication disabled")
   SET(DISABLE_UNIQUE_APPLICATION 1 CACHE BOOLEAN "Disable KUniqueApplication")
   add_definitions( -DDISABLE_UNIQUE_APPLICATION=true )
ENDIF(${DISABLE_UNIQUE_APPLICATION} MATCHES true)

KDE4_ADD_UI_FILES(sflphone_client_kde_SRCS ui/SFLPhoneView_base.ui  ${config_ui_files}  )
QT4_WRAP_UI(sflphone_client_kde_SRCS ${config_ui_files} )

QT4_ADD_DBUS_INTERFACES(sflphone_client_kde_SRCS ${KDE4_DBUS_INTERFACES_DIR}/org.kde.KSpeech.xml)

# QT4_WRAP_CPP(sflphone_client_kde_SRCS)
# QT4_AUTOMOC( ${sflphone_client_kde_SRCS} )
KDE4_ADD_EXECUTABLE(sflphone-client-kde ${sflphone_client_kde_SRCS} ${QtApp_RCC_SRCS})

IF(${ENABLE_VIDEO} MATCHES true)
   SET( OPENGL_link   ${QT_QTOPENGL_LIBRARY} -lGL -lGLU)
ENDIF(${ENABLE_VIDEO} MATCHES true)

TARGET_LINK_LIBRARIES(sflphone-client-kde ksflphone qtsflphone  ${KDE4_KDEUI_LIBS} ${OPENGL_link} ${KDE4_KIO_LIBS} ${KDEPIMLIBS_AKONADI_KMIME_LIBS} ${KDEPIMLIBS_AKONADI_LIBS} ${KDEPIMLIBS_AKONADI_CONTACT_LIBS} ${X11_LIBRARIES})

########### install files ###############

INSTALL(TARGETS sflphone-client-kde              DESTINATION  ${BIN_INSTALL_DIR}                           )
INSTALL( FILES icons/transferarrow.png           DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/transfertarrow.svg          DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/confBlackWhite.svg          DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/overlay_right_corner.svg    DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/overlay_left_corner.svg     DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/confBlackWhite.png          DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/voicemail.png               DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/presence-icon.png           DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/presence-icon.svg           DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/conf-small.png              DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/hangup_grayscale.svg        DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/mutemic_grayscale.svg       DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/record_grayscale.svg        DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/transfer_grayscale.svg      DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/hangup_grayscale.png        DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/mutemic_grayscale.png       DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/record_grayscale.png        DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/transfer_grayscale.png      DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/hold_grayscale.png          DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/unhold_grayscale.png        DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/refuse_grayscale.png        DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/pickup_grayscale.png        DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/record.png                  DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde      )
INSTALL( FILES icons/tips/keyboard.svg           DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/tips )
INSTALL( FILES icons/tips/upArrow.svg            DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/tips )
INSTALL( FILES icons/tips/downArrow.svg          DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/tips )
INSTALL( FILES icons/tips/dragAndDrop.svg        DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/tips )
INSTALL( FILES icons/tips/ringing.svg            DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/tips )
INSTALL( FILES icons/tips/reload.svg             DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/tips )
INSTALL( FILES icons/tips/phoneDown.svg          DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/tips )
INSTALL( FILES icons/tips/ring1.svg              DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/tips )
INSTALL( FILES icons/tips/ring2.svg              DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/tips )
INSTALL( FILES icons/tips/ring3.svg              DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/tips )
INSTALL( FILES icons/tips/removeconference.svg   DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/tips )
INSTALL( FILES icons/miniicons/car.png           DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/mini )
INSTALL( FILES icons/miniicons/home.png          DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/mini )
INSTALL( FILES icons/miniicons/mail.png          DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/mini )
INSTALL( FILES icons/miniicons/mobile.png        DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/mini )
INSTALL( FILES icons/miniicons/pager.png         DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/mini )
INSTALL( FILES icons/miniicons/preferred.png     DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/mini )
INSTALL( FILES icons/miniicons/video.png         DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/mini )
INSTALL( FILES icons/miniicons/work.png          DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/mini )
INSTALL( FILES icons/miniicons/call.png          DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde/mini )
