cmake_minimum_required(VERSION 3.7)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14" CACHE STRING "Minimum OS X deployment version")
project(dxreminders)
set(PROJECT_VERSION "1.20.0")

set(DXREMINDERS_INCLUDE_DIRS "")
set(DXREMINDERS_LIBS "")

if(MSVC_VERSION LESS "1900")
    message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
    return()
endif()

if(NOT MSVC)
    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()

set(LANGS
cs
)

set(DX_WX_CONFIG wx-config CACHE STRING "wx-config executable")
if(MSYS)
    set(wxWidgets_FIND_STYLE "unix")
endif(MSYS)
if(UNIX)
    execute_process(COMMAND which ${DX_WX_CONFIG} OUTPUT_VARIABLE WX_TOOL OUTPUT_STRIP_TRAILING_WHITESPACE)
    if(NOT WX_TOOL)
        message(FATAL_ERROR "\nNo functional wx_config script was found in your PATH.\nIs the wxWidgets development package installed?")
    else()
        execute_process(COMMAND sh ${WX_TOOL} --version OUTPUT_VARIABLE WX_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
        string(SUBSTRING "${WX_VERSION}" "0" "1" wxMAJOR_VERSION)
        string(SUBSTRING "${WX_VERSION}" "2" "1" wxMINOR_VERSION)
        string(SUBSTRING "${WX_VERSION}" "4" "1" wxRELEASE_NUMBER)
        if(wxMAJOR_VERSION LESS 3)
        message(FATAL_ERROR "\nI'm afraid your wxWidgets version is too old.\nBuilding dxde requires at least wxWidgets-3.0.0")
        endif()
    endif()
    message("-- wx-config used is: ${WX_TOOL}")
    message("-- wxWidgets version is: ${WX_VERSION}")
    if(NOT APPLE AND NOT MINGW)
        # Is the wx we are using built on gtk2 or 3?
        execute_process(COMMAND ${WX_TOOL} --selected_config OUTPUT_VARIABLE WX_GTK_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
        string(SUBSTRING "${WX_GTK_VERSION}" "3" "1" GTK_VERSION)
        message("-- gtk version is: ${GTK_VERSION}")
    endif()
    set(wxWidgets_CONFIG_EXECUTABLE ${WX_TOOL})
endif(UNIX)

set(wxWidgets_USE_LIBS)
option(WX_MONOLITHIC "Use wx monolithic build" FALSE)
if(WX_MONOLITHIC)
    find_package(wxWidgets COMPONENTS mono)
else(WX_MONOLITHIC)
    find_package(wxWidgets COMPONENTS core base adv net html)
endif(WX_MONOLITHIC)
if(wxWidgets_FOUND)
   include("${wxWidgets_USE_FILE}")
else(wxWidgets_FOUND)
   # For convenience. When we cannot continue, inform the user
   message("wxWidgets not found!")
endif(wxWidgets_FOUND)

set(HAVE_CURL FALSE)
find_package(CURL)
if(CURL_FOUND)
    list(APPEND DXREMINDERS_INCLUDE_DIRS ${CURL_INCLUDE_DIRS})
    list(APPEND DXREMINDERS_LIBS ${CURL_LIBRARIES})
    set(HAVE_CURL TRUE)
else()
    set(CURL_INCLUDE_DIR "" CACHE PATH "Path to curl include dir")
    set(CURL_LIBRARY "" CACHE FILEPATH "Filepath to curl library")
    if(CURL_INCLUDE_DIR AND CURL_LIBRARY)
        set(HAVE_CURL TRUE)
        list(APPEND DXREMINDERS_LIBS ${CURL_LIBRARY})
        list(APPEND DXREMINDERS_INCLUDE_DIRS ${CURL_INCLUDE_DIR})
    endif()
endif()

if(NOT WIN32)
# Source distribution
set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${PROJECT_VERSION})
add_custom_target(dist COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} &&
    rm -rf ${ARCHIVE_NAME} &&
    svn export . ${ARCHIVE_NAME} &&
    tar czf ${ARCHIVE_NAME}.tar.gz ${ARCHIVE_NAME} &&
    rm -rf ${ARCHIVE_NAME}
)
endif(NOT WIN32)

add_subdirectory(src/lib)
add_subdirectory(data)

set(SRCS
src/widgets/dxcalendarctrl.cpp
src/widgets/dxcalendarpickerctrl.cpp
src/widgets/dxtimepickerctrl.cpp
src/widgets/dxlistctrl.cpp
src/widgets/dxtoolbar.cpp
src/data/event.cpp
src/data/holiday.cpp
src/data/calendarday.cpp
src/data/engine.cpp
src/eventdialog.cpp
src/eventmsgdialog.cpp
src/dxsettings.cpp
src/dxoptions.cpp
src/dxreminders.cpp
src/dxutils.cpp
src/dxicons.cpp
src/mergedialog.cpp
src/phdialog.cpp
src/calendarpopup.cpp
src/passdialog.cpp
src/daydialog.cpp
src/filters/filter.cpp
src/filters/eventfilter.cpp
src/helpdialog.cpp
)

if(WIN32)
    set(SRCS ${SRCS} src/resource.rc)
endif(WIN32)

if(NOT WIN32)
    if(APPLE)
    add_definitions(-DLOCALEDIR="../Resources")
    else()
    add_definitions(-DDESKTOPDIR="${CMAKE_INSTALL_PREFIX}/share/applications")
    add_definitions(-DLOCALEDIR="${CMAKE_INSTALL_PREFIX}/share/locale")
    add_definitions(-DDXREMINDERS_DATADIR="${CMAKE_INSTALL_PREFIX}/share/dxreminders")
    endif(APPLE)
else()
    add_definitions(-DLOCALEDIR="./locale")
    add_definitions(-DDXREMINDERS_DATADIR=".")
endif(NOT WIN32)

if(CMAKE_BUILD_TYPE MATCHES Debug)
add_definitions(-DDEBUG)
endif(CMAKE_BUILD_TYPE MATCHES Debug)

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

include_directories(${CMAKE_CURRENT_BINARY_DIR}
 ${CMAKE_CURRENT_SOURCE_DIR}
 ${CMAKE_CURRENT_SOURCE_DIR}/src
 ${CMAKE_BINARY_DIR}
 ${WXSQLITE3_INCLUDE_DIRS}
  ${DXREMINDERS_INCLUDE_DIRS}
)

if(APPLE)
    CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/src/Info.plist ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
    set(PROGNAME dxreminders)
    add_executable(dxreminders MACOSX_BUNDLE ${SRCS})
    SET_TARGET_PROPERTIES(dxreminders PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
    set(dxreminders_RESOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/dxreminders.app/Contents/Resources)
    set(dxreminders_ICONS ${CMAKE_CURRENT_BINARY_DIR}/dxreminders.app/Contents/Resources/icons)
    ADD_CUSTOM_COMMAND(TARGET dxreminders POST_BUILD
    COMMAND mkdir ARGS -p ${dxreminders_RESOURCE_DIR}
    COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/data/icons/dxreminders.icns ${dxreminders_RESOURCE_DIR}
    COMMAND mkdir ARGS -p ${dxreminders_ICONS}
    COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/data/icons/*.png ${dxreminders_ICONS}
    COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/data/icons/dxreminders.png ${dxreminders_ICONS}/dxreminders_tray.png
    COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/data/icons/dxreminders.png ${dxreminders_ICONS}/dxreminders_prog.png
    COMMENT Setting up resources)
    foreach(lang ${LANGS})
        ADD_CUSTOM_COMMAND(TARGET dxreminders POST_BUILD
        COMMAND mkdir ARGS -p ${dxreminders_RESOURCE_DIR}/${lang}.lproj
        COMMAND cp ARGS -f ${CMAKE_CURRENT_SOURCE_DIR}/data/translations/${lang}.mo ${dxreminders_RESOURCE_DIR}/${lang}.lproj/dxreminders.mo
        COMMENT Setting up translations)
    endforeach(lang)
else()
    add_executable(dxreminders WIN32 ${SRCS})
endif(APPLE)

target_link_libraries(dxreminders ${wxWidgets_LIBRARIES} ${WXSQLITE3_LIBRARIES} ${DXREMINDERS_LIBS})

install(TARGETS dxreminders DESTINATION bin)

# uninstall target
configure_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/cmake/uninstall.cmake.in
    ${CMAKE_CURRENT_BINARY_DIR}/cmake/uninstall.cmake
    IMMEDIATE @ONLY)
add_custom_target(uninstall
    ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/uninstall.cmake)

message(STATUS "dxreminders")
message(STATUS "Install prefix:    ${CMAKE_INSTALL_PREFIX}")
message(STATUS "Build type:        ${CMAKE_BUILD_TYPE}")
message(STATUS "wxWidgets version: ${WX_VERSION}")
if(NOT APPLE AND NOT MINGW)
    message(STATUS " gtk version:      ${GTK_VERSION}")
endif()
if(HAVE_CURL)
    message(STATUS "Curl version:      ${PC_CURL_VERSION}")
endif()
