CMAKE_MINIMUM_REQUIRED(VERSION 3.7)
project(dxim-gtkmm)
set(PROJECT_VERSION "1.00.svn")

set(DXIMGTKMM_LIBS "")
set(DXIMGTKMM_INCLUDE_DIRS "")

list(APPEND DXIMGTKMM_LIBS ${PURPLEMM_LIBRARIES})
list(APPEND DXIMGTKMM_INCLUDE_DIRS ${PURPLEMM_INCLUDE_DIRS})

if(ENABLE_NLS)
    list(APPEND DXIMQT_LIBS ${Intl_LIBRARIES})
    list(APPEND DXIMQT_INCLUDE_DIRS ${Intl_INCLUDE_DIRS})
endif()

if(PKG_CONFIG_FOUND)
    pkg_check_modules(GTKMM gtkmm-3.0)
    list(APPEND DXIMGTKMM_LIBS ${GTKMM_LIBRARIES})
    list(APPEND DXIMGTKMM_INCLUDE_DIRS ${GTKMM_INCLUDE_DIRS})
endif(PKG_CONFIG_FOUND)

if(NOT GTKMM_FOUND)
    set(GTKMM_INCLUDE_DIR "" CACHE PATH "Path to gtkmm-3.0 include dir")
    set(GTKMM_CONFIG_INCLUDE_DIR "" CACHE PATH "Path to gtkmmconfig.h file for gtkmm-3.0")
    set(GTKMM_LIBRARY "" CACHE FILEPATH "Filepath to gtkmm-3.0 library")
    set(GTK_INCLUDE_DIR "" CACHE PATH "Path to gtk-3.0 include dir")
    set(GTK_LIBRARY "" CACHE FILEPATH "Filepath to gtk-3.0 library")
    set(GDKMM_INCLUDE_DIR "" CACHE PATH "Path to gdkmm-3.0 include dir")
    set(GDKMM_CONFIG_INCLUDE_DIR "" CACHE PATH "Path to gdkmmconfig.h file for gdkmm-3.0")
    set(GDKMM_LIBRARY "" CACHE FILEPATH "Filepath to gdkmm-3.0 library")
    set(GDK_INCLUDE_DIR "" CACHE PATH "Path to gdk-3.0 include dir")
    set(GDK_LIBRARY "" CACHE FILEPATH "Filepath to gdk-3.0 library")
    set(GDK_CONFIG_INCLUDE_DIR "" CACHE PATH "Path to gdkconfig.h file for gdk-3.0")
    set(GTKMM_ROOT_INCLUDE_DIR "" CACHE PATH "Path to gtkmm root include dir")
    set(ATKMM_INCLUDE_DIR "" CACHE PATH "Path to atkmm-1.6 include dir")
    set(ATKMM_LIBRARY "" CACHE FILEPATH "Filepath to atkmm-1.6 library")
    set(ATKMM_CONFIG_INCLUDE_DIR "" CACHE PATH "Path to atkmmconfig.h file for atkmm-1.6")
    set(GIOMM_INCLUDE_DIR "" CACHE PATH "Path to giomm-2.4 include dir")
    set(GIOMM_CONFIG_INCLUDE_DIR "" CACHE PATH "Path to giommconfig.h file for giomm-2.4")
    set(GIOMM_LIBRARY "" CACHE FILEPATH "Filepath to giomm-2.4 library")
    set(GIO_LIBRARY "" CACHE FILEPATH "Filepath to gio-2.0 library")
    set(PANGOMM_INCLUDE_DIR "" CACHE PATH "Path to pangomm-1.4 include dir")
    set(PANGOMM_LIBRARY "" CACHE FILEPATH "Filepath to pangomm-1.4 library")
    set(PANGOMM_CONFIG_INCLUDE_DIR "" CACHE PATH "Path to pangomconfig.h file for pangomm-1.4")
    set(ATK_INCLUDE_DIR "" CACHE PATH "Path to atk-1.0 include dir")
    set(ATK_LIBRARY "" CACHE FILEPATH "Filepath to atk-1.0 library")
    set(GLIB_INCLUDE_DIR "" CACHE PATH "Path to glib-2.0 include dir")
    set(GLIB_CONFIG_INCLUDE_DIR "" CACHE PATH "Path to glibconfig.h file for glib-2.0")
    set(GLIB_LIBRARY "" CACHE FILEPATH "Filepath to glib-2.0 library")
    set(GOBJECT_LIBRARY "" CACHE FILEPATH "Filepath to gobject-2.0 library")
    set(GMODULE_LIBRARY "" CACHE FILEPATH "Filepath to gmodule-2.0 library")
    set(GTHREAD_LIBRARY "" CACHE FILEPATH "Filepath to gthread-2.0 library")
    set(GLIBMM_INCLUDE_DIR "" CACHE PATH "Path to glibmm-2.4 include dir")
    set(GLIBMM_CONFIG_INCLUDE_DIR "" CACHE PATH "Path to glibmmconfig.h file for glibmm-2.4")
    set(GLIBMM_LIBRARY "" CACHE FILEPATH "Filepath to glibmm-2.4 library")
    set(SIGC_INCLUDE_DIR "" CACHE PATH "Path to sigc++-2.0 include dir")
    set(SIGC_CONFIG_INCLUDE_DIR "" CACHE PATH "Path to sigc++config.h file for sigc++-2.0")
    set(SIGC_LIBRARY "" CACHE FILEPATH "Filepath to sigc++-2.0 library")
    set(CAIROMM_INCLUDE_DIR "" CACHE PATH "Path to cairomm-1.0 include dir")
    set(CAIROMM_LIBRARY "" CACHE FILEPATH "Filepath to cairomm-1.0 library")
    set(PANGO_INCLUDE_DIR "" CACHE PATH "Path to pango-1.0 include dir")
    set(PANGO_LIBRARY "" CACHE FILEPATH "Filepath to pango-1.0 library")
    set(PANGOCAIRO_LIBRARY "" CACHE FILEPATH "Filepath to pangocairo-1.0 library")
    set(CAIRO_INCLUDE_DIR "" CACHE PATH "Path to cairo include dir")
    set(CAIRO_LIBRARY "" CACHE FILEPATH "Filepath to cairo library")
    set(FREETYPE_INCLUDE_DIR "" CACHE PATH "Path to freetype2 include dir")
    if(GTKMM_INCLUDE_DIR AND GTKMM_CONFIG_INCLUDE_DIR AND GTKMM_ROOT_INCLUDE_DIR AND GTKMM_LIBRARY
     AND ATKMM_INCLUDE_DIR AND ATKMM_LIBRARY AND ATKMM_CONFIG_INCLUDE_DIR
     AND GIOMM_INCLUDE_DIR AND GIOMM_CONFIG_INCLUDE_DIR AND GIOMM_LIBRARY
     AND PANGOMM_INCLUDE_DIR AND PANGOMM_LIBRARY AND PANGOMM_CONFIG_INCLUDE_DIR
     AND GTK_INCLUDE_DIR AND GTK_LIBRARY
     AND GDKMM_INCLUDE_DIR AND GDKMM_CONFIG_INCLUDE_DIR AND GDKMM_LIBRARY
     AND ATK_INCLUDE_DIR AND ATK_LIBRARY
     AND GLIB_INCLUDE_DIR AND GLIB_CONFIG_INCLUDE_DIR AND GLIB_LIBRARY AND GOBJECT_LIBRARY AND GMODULE_LIBRARY AND GTHREAD_LIBRARY
     AND GLIBMM_INCLUDE_DIR AND GLIBMM_CONFIG_INCLUDE_DIR AND GLIBMM_LIBRARY
     AND SIGC_INCLUDE_DIR AND SIGC_CONFIG_INCLUDE_DIR AND SIGC_LIBRARY
     AND CAIROMM_INCLUDE_DIR AND CAIROMM_LIBRARY
     AND PANGO_INCLUDE_DIR AND PANGO_LIBRARY AND PANGOCAIRO_LIBRARY
     AND CAIRO_INCLUDE_DIR AND CAIRO_LIBRARY
     AND GDK_INCLUDE_DIR AND GDK_LIBRARY AND GDK_CONFIG_INCLUDE_DIR)
        set(GTKMM_FOUND true)
    endif()
    list(APPEND DXIMGTKMM_LIBS ${GTKMM_LIBRARY} ${ATKMM_LIBRARY} ${GIOMM_LIBRARY} ${GIO_LIBRARY}
     ${PANGOMM_LIBRARY} ${GTK_LIBRARY} ${GDKMM_LIBRARY} ${ATK_LIBRARY}
     ${GLIB_LIBRARY} ${GOBJECT_LIBRARY} ${GMODULE_LIBRARY} ${GTHREAD_LIBRARY} ${GLIBMM_LIBRARY} ${SIGC_LIBRARY} ${CAIROMM_LIBRARY}
     ${PANGO_LIBRARY} ${PANGOCAIRO_LIBRARY} ${CAIRO_LIBRARY} ${GDK_LIBRARY})
    list(APPEND DXIMGTKMM_INCLUDE_DIRS ${GTKMM_INCLUDE_DIR} ${GTKMM_CONFIG_INCLUDE_DIR} ${GTKMM_ROOT_INCLUDE_DIR}
     ${ATKMM_INCLUDE_DIR} ${ATKMM_CONFIG_INCLUDE_DIR} ${GIOMM_INCLUDE_DIR} ${GIOMM_CONFIG_INCLUDE_DIR}
     ${PANGOMM_INCLUDE_DIR} ${PANGOMM_CONFIG_INCLUDE_DIR} ${GTK_INCLUDE_DIR} ${GDKMM_INCLUDE_DIR} ${GDKMM_CONFIG_INCLUDE_DIR}
     ${ATK_INCLUDE_DIR} ${GLIB_INCLUDE_DIR} ${GLIB_CONFIG_INCLUDE_DIR}
     ${GLIBMM_INCLUDE_DIR} ${GLIBMM_CONFIG_INCLUDE_DIR} ${SIGC_INCLUDE_DIR} ${SIGC_CONFIG_INCLUDE_DIR}
     ${CAIROMM_INCLUDE_DIR} ${PANGO_INCLUDE_DIR} ${CAIRO_INCLUDE_DIR} ${GDK_INCLUDE_DIR} ${GDK_CONFIG_INCLUDE_DIR}
     ${FREETYPE_INCLUDE_DIR})
endif()

if(NOT GTKMM_FOUND)
    message("Gtkmm library not found. Can't build dxim")
    return()
endif()

if(WIN32)
    add_definitions(-mms-bitfields)
    list(APPEND DXIMGTKMM_LIBS "winmm")
    include(CheckCXXCompilerFlag)
    CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
    if(COMPILER_SUPPORTS_CXX11)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    else()
        message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
        return()
    endif()
endif(WIN32)

if(UNIX AND NOT APPLE)
    if(PKG_CONFIG_FOUND)
        pkg_check_modules(X11 x11)
        list(APPEND DXIMGTKMM_LIBS ${X11_LIBRARIES})
        list(APPEND DXIMGTKMM_INCLUDE_DIRS ${X11_INCLUDE_DIRS})
        pkg_check_modules(XSS xscrnsaver)
        if(XSS_FOUND)
            set(USE_SCREENSAVER ON)
            list(APPEND DXIMGTKMM_LIBS ${XSS_LIBRARIES})
            list(APPEND DXIMGTKMM_INCLUDE_DIRS ${XSS_INCLUDE_DIRS})
        else(XSS_FOUND)
            message(STATUS "Warning: libxss not found, idle detection won't be accurate")
        endif(XSS_FOUND)
    endif(PKG_CONFIG_FOUND)
endif(UNIX AND NOT APPLE)

configure_file(config.h.cmake
               ${CMAKE_CURRENT_BINARY_DIR}/config.h
)
list(APPEND DXIMGTKMM_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR})

add_definitions(-DHAVE_CONFIG_H)

SET(SOURCES
dxim.cpp
dxpipe.cpp
dxutils.cpp
icons.cpp
preferences.cpp
settings.cpp
../logger/logger.cpp
callback/callback.cpp
dialogs/accountdialog.cpp
dialogs/accounteditor.cpp
dialogs/actionrequestdialog.cpp
dialogs/configdialog.cpp
dialogs/chatdialog.cpp
dialogs/chatjoindialog.cpp
dialogs/choicerequestdialog.cpp
dialogs/fieldsrequestdialog.cpp
dialogs/imdialog.cpp
dialogs/inputrequestdialog.cpp
dialogs/logdialog.cpp
dialogs/plugindialog.cpp
dialogs/plugineditor.cpp
dialogs/roomlistdialog.cpp
dialogs/selectaccountdialog.cpp
notify/notifywindow.cpp
roster/roster.cpp
tabitems/convtabitem.cpp
tabitems/chattabitem.cpp
tabitems/fttabitem.cpp
tabitems/imtabitem.cpp
tabitems/msgtabitem.cpp
tabitems/tabbook.cpp
tabitems/tabitem.cpp
widgets/imagelabel.cpp
widgets/linklabel.cpp
widgets/dxcolor.cpp
emojis/emojis.cpp
)

INCLUDE_DIRECTORIES(${DXIMGTKMM_INCLUDE_DIRS}
 ${CMAKE_CURRENT_SOURCE_DIR}
 ${CMAKE_CURRENT_BINARY_DIR}
 ${CMAKE_BINARY_DIR}
)

if(MINGW)
    # resource compilation for MinGW
    ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/windxim.o
                    COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_CURRENT_SOURCE_DIR} -i${CMAKE_CURRENT_SOURCE_DIR}/dxim-gtkmm.rc
                    -o ${CMAKE_CURRENT_BINARY_DIR}/windxim.o )
    set(SOURCES ${SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/windxim.o)
else(MINGW)
    set(SOURCES ${SOURCES} dxim-gtkmm.rc)
endif(MINGW)

ADD_EXECUTABLE(dxim-gtkmm ${SOURCES})
if(WIN32)
    TARGET_LINK_LIBRARIES(dxim-gtkmm "-Wl,--subsystem,windows -mwindows" ${DXIMGTKMM_LIBS})
else(WIN32)
    TARGET_LINK_LIBRARIES(dxim-gtkmm ${DXIMGTKMM_LIBS})
endif(WIN32)

INSTALL(TARGETS dxim-gtkmm DESTINATION bin)
