CMAKE_MINIMUM_REQUIRED(VERSION 3.7)
project(dxirc-qt)
set(PROJECT_VERSION "1.40.1")

option(QT6 "Compile with Qt6" FALSE)

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(DXIRCQT_LIBS "")
SET(DXIRCQT_INCLUDE_DIRS "")

if(ENABLE_NLS)
    list(APPEND DXIRCQT_LIBS ${LIBINTL_LIBRARIES})
    list(APPEND DXIRCQT_INCLUDE_DIRS ${LIBINTL_INCLUDE_DIR})
endif()

if(HAVE_LUA)
    list(APPEND DXIRCQT_INCLUDE_DIRS ${LUA_INCLUDE_DIR})
    list(APPEND DXIRCQT_LIBS ${LUA_LIBRARIES})
endif(HAVE_LUA)

set(HAVE_ENCHANT FALSE)
set(HAVE_ENCHANT2 FALSE)
if(NOT APPLE)
    if(USE_ENCHANT)
        if(PKG_CONFIG_FOUND)
            pkg_check_modules(ENCHANT enchant-2)
            list(APPEND DXIRCQT_LIBS ${ENCHANT_LIBRARIES})
            list(APPEND DXIRCQT_INCLUDE_DIRS ${ENCHANT_INCLUDE_DIRS})
            set(HAVE_ENCHANT TRUE)
            if(${ENCHANT_VERSION} VERSION_GREATER "1.6")
                set(HAVE_ENCHANT2 TRUE)
            endif()
            if(NOT ENCHANT_FOUND)
                pkg_check_modules(ENCHANT enchant)
                list(APPEND DXIRCQT_LIBS ${ENCHANT_LIBRARIES})
                list(APPEND DXIRCQT_INCLUDE_DIRS ${ENCHANT_INCLUDE_DIRS})
                set(HAVE_ENCHANT TRUE)
                if(${ENCHANT_VERSION} VERSION_GREATER "1.6")
                    set(HAVE_ENCHANT2 TRUE)
                endif()
            endif()
        endif(PKG_CONFIG_FOUND)
        if(NOT ENCHANT_FOUND)
            set(ENCHANT_INCLUDE_DIR "" CACHE PATH "Path to enchant include dir")
            set(ENCHANT_LIBRARY "" CACHE FILEPATH "Filepath to enchant library")
            set(ENCHANT_VERSION "" CACHE STRING "Enchant verison")
            if(ENCHANT_INCLUDE_DIR)
                list(APPEND DXIRCQT_LIBS ${ENCHANT_LIBRARY})
                list(APPEND DXIRCQT_INCLUDE_DIRS ${ENCHANT_INCLUDE_DIR})
                set(HAVE_ENCHANT TRUE)
                if(${ENCHANT_VERSION} VERSION_GREATER "1.6")
                    set(HAVE_ENCHANT2 TRUE)
                endif()
            else()
                set(HAVE_ENCHANT FALSE)
            endif()
        endif()
    endif(USE_ENCHANT)
endif(NOT APPLE)

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

add_definitions(-DHAVE_CONFIG_H)

set(SOURCES
dxirc.cpp
dxutils.cpp
preferences.cpp
notify/notifywindow.cpp
dialogs/aboutdialog.cpp
dialogs/connectdialog.cpp
dialogs/userdialog.cpp
dialogs/serverdialog.cpp
dialogs/aliasdialog.cpp
dialogs/helpdialog.cpp
dialogs/scriptdialog.cpp
dialogs/dccsenddialog.cpp
dialogs/configdialog.cpp
dialogs/keydialog.cpp
dialogs/listdialog.cpp
engine/dxsocket.cpp
engine/ircengine.cpp
engine/dccengine.cpp
tabitems/dxtabitem.cpp
tabitems/dcctabitem.cpp
tabitems/ircitem.cpp
tabitems/ircitemmodel.cpp
tabitems/ircitemsortmodel.cpp
tabitems/irctabitem.cpp
tabitems/fttabitem.cpp
tabitems/tabwidget.cpp
tabitems/tetristabitem.cpp
tabitems/boatstabitem.cpp
logviewer/logdialog.cpp
logviewer/logitem.cpp
logviewer/logitemmodel.cpp
logviewer/logview.cpp
widgets/colorbutton.cpp
widgets/linespell.cpp
)

set(HEADERS
dxirc.h
notify/notifywindow.h
dialogs/aboutdialog.h
dialogs/connectdialog.h
dialogs/userdialog.h
dialogs/serverdialog.h
dialogs/aliasdialog.h
dialogs/helpdialog.h
dialogs/scriptdialog.h
dialogs/dccsenddialog.h
dialogs/configdialog.h
dialogs/keydialog.h
engine/dxsocket.h
engine/ircengine.h
engine/dccengine.h
tabitems/dxtabitem.h
tabitems/dcctabitem.h
tabitems/ircitemsortmodel.h
tabitems/irctabitem.h
tabitems/fttabitem.h
tabitems/tabwidget.h
tabitems/tetristabitem.h
tabitems/boatstabitem.h
logviewer/logdialog.h
logviewer/logview.h
widgets/colorbutton.h
widgets/linespell.h
)

set(RESOURCES
dxirc.qrc
)

set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
if(QT6)
    find_package(Qt6Widgets)
    add_definitions(${Qt6Widgets_DEFINITIONS})
    list(APPEND DXIRCQT_LIBS ${Qt6Widgets_LIBRARIES})
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt6Widgets_EXECUTABLE_COMPILE_FLAGS}")
    find_package(Qt6Network)
    add_definitions(${Qt6Network_DEFINITIONS})
    list(APPEND DXIRCQT_LIBS ${Qt6Network_LIBRARIES})
    include_directories(
    ${Qt6Widgets_INCLUDE_DIRS}
    ${Qt6Network_INCLUDE_DIRS}
    ${CMAKE_CURRENT_BINARY_DIR}
    ${DXIRCQT_INCLUDE_DIRS}
     .
    )
    qt6_add_resources(RESOURCES_ADD ${RESOURCES})
else(QT6)
    find_package(Qt5Widgets)
    add_definitions(${Qt5Widgets_DEFINITIONS})
    list(APPEND DXIRCQT_LIBS ${Qt5Widgets_LIBRARIES})
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
    find_package(Qt5Network)
    add_definitions(${Qt5Network_DEFINITIONS})
    list(APPEND DXIRCQT_LIBS ${Qt5Network_LIBRARIES})
    find_package(Qt5Multimedia)
    add_definitions(${Qt5Multimedia_DEFINITIONS})
    list(APPEND DXIRCQT_LIBS ${Qt5Multimedia_LIBRARIES})
    include_directories(
    ${Qt5Widgets_INCLUDE_DIRS}
    ${Qt5Network_INCLUDE_DIRS}
    ${Qt5Multimedia_INCLUDE_DIRS}
    ${CMAKE_CURRENT_BINARY_DIR}
    ${DXIRCQT_INCLUDE_DIRS}
     .
    )
    qt5_add_resources(RESOURCES_ADD ${RESOURCES})
endif(QT6)

if(APPLE)
    find_library(COCOA_LIBRARY Cocoa)
    if(ENABLE_OSX_BUNDLE)
        set(PROGNAME dxirc)
        set(MACOSX_BUNDLE_ICON_FILE dxirc.icns)
        set(MACOSX_BUNDLE_GUI_IDENTIFIER "org.dxirc.dxirc")
        set(MACOSX_BUNDLE_SHORT_VERSION_STRING 1.40.1)
        set(MACOSX_BUNDLE_VERSION 1.40.1)
        set(MACOSX_BUNDLE_LONG_VERSION_STRING Version 1.40.1)
        set(SOURCES ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/dxirc.icns)
        set(SOURCES ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/widgets/macspellcheck.mm)
        set(SOURCES ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/notify/macnotify.mm)
        add_executable(dxirc MACOSX_BUNDLE ${SOURCES} ${MOC_SRCS} ${RESOURCES_ADD})
        target_link_libraries(dxirc ${DXIRCQT_LIBS} ${COCOA_LIBRARY})
        install(TARGETS dxirc DESTINATION bin)
        set(dxirc_RESOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/dxirc.app/Contents/Resources)
        set(dxirc_ICONS_DIR ${CMAKE_CURRENT_BINARY_DIR}/dxirc.app/Contents/Resources/icons)
        set(dxirc_SMILEYS_DIR ${CMAKE_CURRENT_BINARY_DIR}/dxirc.app/Contents/Resources/icons/smileys)
        set(dxirc_FLAGS_DIR ${CMAKE_CURRENT_BINARY_DIR}/dxirc.app/Contents/Resources/icons/flags)
        set(dxirc_THEME_DIR ${CMAKE_CURRENT_BINARY_DIR}/dxirc.app/Contents/Resources/icons/default)
        set(dxirc_SOUNDS_DIR ${CMAKE_CURRENT_BINARY_DIR}/dxirc.app/Contents/Resources/sounds)
        set(dxirc_TRANSLATION_DIR ${CMAKE_CURRENT_BINARY_DIR}/dxirc.app/Contents/MacOS/locale)
        add_custom_command(TARGET dxirc POST_BUILD
        COMMAND mkdir ARGS -p ${dxirc_RESOURCE_DIR}
        COMMAND mkdir ARGS -p ${dxirc_TRANSLATION_DIR}
        COMMAND mkdir ARGS -p ${dxirc_TRANSLATION_DIR}/cs/LC_MESSAGES
        COMMAND mkdir ARGS -p ${dxirc_TRANSLATION_DIR}/sk/LC_MESSAGES
        COMMAND mkdir ARGS -p ${dxirc_ICONS_DIR}
        COMMAND mkdir ARGS -p ${dxirc_SMILEYS_DIR}
        COMMAND mkdir ARGS -p ${dxirc_FLAGS_DIR}
        COMMAND mkdir ARGS -p ${dxirc_THEME_DIR}
        COMMAND mkdir ARGS -p ${dxirc_SOUNDS_DIR}
        COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/${MACOSX_BUNDLE_ICON_FILE} ${dxirc_RESOURCE_DIR}
        COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/*.png ${dxirc_ICONS_DIR}
        COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/smileys/*.png ${dxirc_SMILEYS_DIR}
        COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/smileys/*.smiley ${dxirc_SMILEYS_DIR}
        COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/flags/*.png ${dxirc_FLAGS_DIR}
        COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/default/*.png ${dxirc_THEME_DIR}
        COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/../data/sounds/*.wav ${dxirc_SOUNDS_DIR}
        COMMAND cp ARGS -f ${CMAKE_CURRENT_BINARY_DIR}/../data/translations/cs.gmo ${dxirc_TRANSLATION_DIR}/cs/LC_MESSAGES/dxirc.mo
        COMMAND cp ARGS -f ${CMAKE_CURRENT_BINARY_DIR}/../data/translations/sk.gmo ${dxirc_TRANSLATION_DIR}/sk/LC_MESSAGES/dxirc.mo
        COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/../COPYING ${dxirc_RESOURCE_DIR}
        COMMENT Setting up translations & resources)
    else()
        set(SOURCES ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/dxirc.icns)
        set(SOURCES ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/widgets/macspellcheck.mm)
        set(SOURCES ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/notify/macnotify.mm)
        add_executable(dxirc-qt ${SOURCES} ${MOC_SRCS} ${RESOURCES_ADD})
        target_link_libraries(dxirc-qt ${DXIRCQT_LIBS} ${COCOA_LIBRARY})
        install(TARGETS dxirc-qt DESTINATION bin)
    endif(ENABLE_OSX_BUNDLE)
else()
    if(MINGW)
        # resource compilation for MinGW
        add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/windxirc.o
                        COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_CURRENT_SOURCE_DIR} -i${CMAKE_CURRENT_SOURCE_DIR}/dxirc-qt.rc
                        -o ${CMAKE_CURRENT_BINARY_DIR}/windxirc.o )
        set(SOURCES ${SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/windxirc.o)
    else(MINGW)
        set(SOURCES ${SOURCES} dxirc-qt.rc)
    endif(MINGW)

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

    install(TARGETS dxirc-qt DESTINATION bin)
endif(APPLE)

message(STATUS "dxirc-qt")
if(ENABLE_OSX_BUNDLE)
    message(STATUS "Install prefix:                             dxirc.app bundle")
else()
    message(STATUS "Install prefix:                             ${CMAKE_INSTALL_PREFIX}")
endif(ENABLE_OSX_BUNDLE)
if(HAVE_LUA)
message(STATUS "Build with lua scripting support:           ${HAVE_LUA}/${LUA_VERSION_STRING}")
else(HAVE_LUA)
message(STATUS "Build with lua scripting support:           ${HAVE_LUA}")
endif(HAVE_LUA)
if(APPLE)
message(STATUS "Build with spellchecking support:           ON")
else()
if(HAVE_ENCHANT)
message(STATUS "Build with spellchecking support:           ${HAVE_ENCHANT}/${ENCHANT_VERSION}")
else(HAVE_ENCHANT)
message(STATUS "Build with spellchecking support:           ${HAVE_ENCHANT}")
endif(HAVE_ENCHANT)
endif(APPLE)
