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

if(UNIX)
    if(BSD)
        set(CMAKE_THREAD_LIBS -pthread)
        set(CMAKE_USE_PTHREADS ON)
        set(CMAKE_EXE_LINKER_FLAGS -pthread)
    endif(BSD)
endif(UNIX)

set(DXIMQT_LIBS "")
set(DXIMQT_INCLUDE_DIRS "")

list(APPEND DXIMQT_LIBS ${PURPLEMM_LIBRARIES})
list(APPEND DXIMQT_INCLUDE_DIRS ${PURPLEMM_INCLUDE_DIRS})

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

option(QT6 "Compile with Qt6" FALSE)

if(WIN32)
    set(GTHREAD_INCLUDE_DIR "" CACHE PATH "Path to gthread include dir")
    set(GTHREAD_LIBRARY "" CACHE FILEPATH "Filepath to gthread library")
    list(APPEND DXIMQT_LIBS ${GTHREAD_LIBRARY})
    list(APPEND DXIMQT_INCLUDE_DIRS ${GTHREAD_INCLUDE_DIR})
endif(WIN32)

if(UNIX AND NOT APPLE)
    if(PKG_CONFIG_FOUND)
    pkg_check_modules(X11 x11)
        pkg_check_modules(XSS xscrnsaver)
        if(X11_FOUND AND XSS_FOUND)
            add_definitions(-DHAVE_XSS)
            list(APPEND DXIMQT_LIBS ${X11_LIBRARIES} ${XSS_LIBRARIES})
            list(APPEND DXIMQT_INCLUDE_DIRS ${X11_INCLUDE_DIRS} ${XSS_INCLUDE_DIRS})
        else(X11_FOUND AND XSS_FOUND)
            message(STATUS "Warning: libxss not found, idle detection won't be accurate")
        endif(X11_FOUND AND XSS_FOUND)
    endif(PKG_CONFIG_FOUND)
endif(UNIX AND NOT APPLE)

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

add_definitions(-DHAVE_CONFIG_H)

set(SOURCES
dxim.cpp
dxutils.cpp
preferences.cpp
../logger/logger.cpp
callback/callback.cpp
dialogs/aboutdialog.cpp
dialogs/accountdialog.cpp
dialogs/accounteditordialog.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/roomlistdialog.cpp
dialogs/plugindialog.cpp
dialogs/plugineditordialog.cpp
idle/idle.cpp
idle/idle_mac.cpp
idle/idle_win.cpp
idle/idle_x11.cpp
logviewer/logdialog.cpp
logviewer/logitem.cpp
logviewer/logitemmodel.cpp
logviewer/logview.cpp
notify/notifywindow.cpp
roster/rosteritem.cpp
roster/rosteritemmodel.cpp
roster/rosteritemsortmodel.cpp
roster/rosterview.cpp
tabitems/chatitem.cpp
tabitems/chatitemmodel.cpp
tabitems/chatitemsortmodel.cpp
tabitems/chattabitem.cpp
tabitems/fttabitem.cpp
tabitems/imtabitem.cpp
tabitems/msgtabitem.cpp
tabitems/tabwidget.cpp
widgets/colorbutton.cpp
emojis/emojis.cpp
emojis/emojisdialog.cpp
)

set(HEADERS
dxim.h
callback/callback.h
dialogs/aboutdialog.h
dialogs/accountdialog.h
dialogs/accounteditordialog.h
dialogs/actionrequestdialog.h
dialogs/configdialog.h
dialogs/chatdialog.h
dialogs/chatjoindialog.h
dialogs/choicerequestdialog.h
dialogs/fieldsrequestdialog.h
dialogs/imdialog.h
dialogs/inputrequestdialog.h
dialogs/roomlistdialog.h
dialogs/plugindialog.h
dialogs/plugineditordialog.h
idle/idle.h
logviewer/logdialog.h
logviewer/logview.h
notify/notifywindow.h
roster/rosteritemsortmodel.h
roster/rosterview.h
tabitems/chattabitem.h
tabitems/fttabitem.h
tabitems/imtabitem.h
tabitems/msgtabitem.h
tabitems/tabwidget.h
widgets/colorbutton.h
)

set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
if(QT6)
    find_package(Qt6Widgets)
    add_definitions(${Qt6Widgets_DEFINITIONS})
    list(APPEND DXIMQT_LIBS ${Qt6Widgets_LIBRARIES})
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt6Widgets_EXECUTABLE_COMPILE_FLAGS}")
    include_directories(
    ${Qt6Widgets_INCLUDE_DIRS}
    ${CMAKE_CURRENT_BINARY_DIR}
    ${DXIMQT_INCLUDE_DIRS}
     .
    )
else(QT6)
    find_package(Qt5Widgets)
    add_definitions(${Qt5Widgets_DEFINITIONS})
    list(APPEND DXIMQT_LIBS ${Qt5Widgets_LIBRARIES})
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
    find_package(Qt5Multimedia)
    add_definitions(${Qt5Multimedia_DEFINITIONS})
    list(APPEND DXIMQT_LIBS ${Qt5Multimedia_LIBRARIES})
    include_directories(
    ${Qt5Widgets_INCLUDE_DIRS}
    ${Qt5Multimedia_INCLUDE_DIRS}
    ${CMAKE_CURRENT_BINARY_DIR}
    ${DXIMQT_INCLUDE_DIRS}
     .
    )
endif(QT6)

if(QT_QCONFIG MATCHES "glib")
#set(QT_WITH_GLIB TRUE CACHE INTERNAL "QT with glib event loop")
add_definitions(-DQT_WITH_GLIB)
endif(QT_QCONFIG MATCHES "glib")

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-qt.rc
                    -o ${CMAKE_CURRENT_BINARY_DIR}/windxim.o )
    set(SOURCES ${SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/windxim.o)
else(MINGW)
    set(SOURCES ${SOURCES} dxim-qt.rc)
endif(MINGW)

add_executable(dxim-qt ${SOURCES} ${MOC_SRCS})
if(WIN32)
    target_link_libraries(dxim-qt "-Wl,--subsystem,windows -mwindows" ${DXIMQT_LIBS})
else(WIN32)
    target_link_libraries(dxim-qt ${DXIMQT_LIBS})
endif(WIN32)

install(TARGETS dxim-qt DESTINATION bin)
