cmake_minimum_required(VERSION 3.5)

project(tedseditor VERSION 0.1)

set(PRJ_APP_TITLE  "TEDS Editor")
set(PRJ_DESCR_EN "Tool for view and edit TEDS-sensor data")
set(PRJ_DESCR_RU "Программа просмотра и редактирования данных TEDS")

if(NOT ${CMAKE_VERSION}  VERSION_LESS "3.0.0")
    string(TIMESTAMP CURRENT_YEAR "%Y")
endif()

if(WIN32)
    SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS,5.01")
endif(WIN32)


configure_file(version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

include_directories(${CMAKE_CURRENT_BINARY_DIR}
                    ${CMAKE_CURRENT_SOURCE_DIR}
                    )

include_directories(subs/LQError subs/QLedIndicator)

set(SOURCES
    main.cpp

    Device/teds_writer_proto.h
    Device/UsbDeviceErrors.h
    Device/UsbDeviceErrors.cpp
    Device/UsbDevice.h
    Device/UsbDevice.cpp
    Device/TedsWriterDevice.h
    Device/TedsWriterDevice.cpp
    Device/TedsWriterDeviceInfo.h
    Device/TedsWriterDevceDetector.h
    Device/TedsWriterDevceDetector.cpp
    Device/TedsWriterDeviceErrors.h
    Device/TedsWriterDeviceErrors.cpp

    subs/LQError/LQError.h
    subs/LQError/LQError.cpp
    subs/QLedIndicator/QLedIndicator.h
    subs/QLedIndicator/QLedIndicator.cpp

    UI/MainWindow.h
    UI/MainWindow.cpp
    UI/MainWindow.ui
    UI/Device/TedsWriterDevBaseWidget.h
    UI/Device/TedsWriterDevBaseWidget.cpp
    UI/Device/TedsWriterInfoWidget.h
    UI/Device/TedsWriterInfoWidget.cpp
    UI/Device/TedsWriterInfoWidget.ui
    UI/Device/TedsWriterDevStateWidget.h
    UI/Device/TedsWriterDevStateWidget.cpp
    UI/Device/TedsWriterDevStateWidget.ui
    UI/Device/TedsWriterMemTest.h
    UI/Device/TedsWriterMemTest.cpp
    UI/Device/TedsWriterMemTest.ui
)


include(CheckIncludeFiles)
include(CheckFunctionExists)
include(CheckLibraryExists)
include(CheckTypeSize)
include(CheckSymbolExists)

find_package(Qt5 COMPONENTS Core Widgets)

set(LIBS Qt5::Core Qt5::Widgets)


#добавляем путь к модулям cmake в path для cmake
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/subs/cmake_modules/")

find_package(LibUSB REQUIRED)
include_directories(${LIBUSB_INCLUDE_DIR})
set(LIBS ${LIBS} ${LIBUSB_LIBRARIES})

set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${LIBUSB_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LIBUSB_LIBRARIES})
check_function_exists(libusb_error_name HAVE_LIBUSB_ERROR_NAME)


add_executable(${PROJECT_NAME} WIN32 ${SOURCES})

target_link_libraries(${PROJECT_NAME} ${LIBS})

source_group("Sources" ${PROJECT_SOURCE_DIR})



if(UNIX)
    install(TARGETS ${PROJECT_NAME} DESTINATION bin)
    configure_file(tedseditor.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.desktop)
    install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.desktop DESTINATION share/applications )

    if(NOT UDEV_RULES_DIR)
        set(UDEV_RULES_DIR lib/udev/rules.d)
    endif(NOT UDEV_RULES_DIR)
    install(FILES tedswriter.rules DESTINATION ${UDEV_RULES_DIR})


    set(PACKAGE_NAME     ${PROJECT_NAME})
    set(PACKAGE_VERSION  ${PROJECT_VERSION})

    execute_process(COMMAND "date" "+%Y" OUTPUT_VARIABLE PACKAGE_BUILD_YEAR)
    string(STRIP ${PACKAGE_BUILD_YEAR} PACKAGE_BUILD_YEAR)


    set(PACKAGE_VER_NAME ${PACKAGE_NAME}-${PACKAGE_VERSION})
    set(PACKAGE_SRC_TAR_NAME     ${PACKAGE_NAME}_${PACKAGE_VERSION}.tar.gz)

    if(NOT PACKAGE_SRC_DIR)
        set(PACKAGE_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
    endif(NOT PACKAGE_SRC_DIR)

    if(EXISTS ${PACKAGE_SRC_DIR}/debian/changelog.in)
        configure_file(${PACKAGE_SRC_DIR}/debian/changelog.in
                   ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_VER_NAME}/debian/changelog @ONLY)
    endif()

    if(EXISTS ${PACKAGE_SRC_DIR}/debian/control.in)
        configure_file(${PACKAGE_SRC_DIR}/debian/control.in
                   ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_VER_NAME}/debian/control @ONLY)
    endif()

    if(EXISTS ${PACKAGE_SRC_DIR}/debian/copyright.in)
        configure_file(${PACKAGE_SRC_DIR}/debian/copyright.in
                   ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_VER_NAME}/debian/copyright @ONLY)
    endif()

    add_custom_target(${PACKAGE_NAME}-src-prepare
            #копируем исходники, чтобы не засорять исходную папку результатами
            COMMAND cmake -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_VER_NAME}
            COMMAND cp -r ${CMAKE_CURRENT_SOURCE_DIR}/* ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_VER_NAME}
            COMMAND chmod -f +x ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_VER_NAME}/debian/rules || :
            COMMAND tar -caf ${PACKAGE_SRC_TAR_NAME} ${PACKAGE_VER_NAME}
            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
            )

    #цель для создания бинарного deb-пакета
    add_custom_target(${PACKAGE_NAME}-deb
        COMMAND debuild -us -uc -Zgzip -d
        DEPENDS ${PACKAGE_NAME}-src-prepare
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_VER_NAME}
        )
    #цель для сборки deb-пакета с исходниками
    add_custom_target(${PACKAGE_NAME}-deb-src
        COMMAND debuild -us -uc -Zgzip -S -d
        DEPENDS ${PACKAGE_NAME}-src-prepare
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_VER_NAME}
        )

    if(NOT OSC_PROJECT)
        set(OSC_PROJECT      home:l-card:testing)
    endif(NOT OSC_PROJECT)

    set(OSC_COPY_FILES ${OSC_COPY_FILES}
            ${PACKAGE_NAME}_${PACKAGE_VERSION}.dsc
            ${PACKAGE_SRC_TAR_NAME}
        )
    #получение текущего пакета с сервера и замена файлов
    add_custom_target(${PACKAGE_NAME}-osc-prepare
        #удаляем старые файлы
        COMMAND rm -rf ${OSC_PROJECT}
        #получаем текущую версию с сервера
        #COMMAND osc checkout ${OSC_PROJECT} ${PACKAGE_NAME}
        #удаляем из нее все файлы
        COMMAND rm -rf ${OSC_PROJECT}/${PACKAGE_NAME}
        COMMAND osc checkout -M ${OSC_PROJECT} ${PACKAGE_NAME}
        COMMAND rm ${OSC_PROJECT}/${PACKAGE_NAME}/_meta
        #копируем нужные файлы
        COMMAND cp ${PACKAGE_NAME}_${PACKAGE_VERSION}.dsc ${OSC_PROJECT}/${PACKAGE_NAME}
        COMMAND cp ${PACKAGE_SRC_TAR_NAME} ${OSC_PROJECT}/${PACKAGE_NAME}
        DEPENDS ${PACKAGE_NAME}-deb-src
        DEPENDS ${OSC_COPY_FILES}
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
        VERBATIM
        )
    #фиксирование изменений и заливка измененного пакета на сервер
    add_custom_target(${PACKAGE_NAME}-osc
        COMMAND osc addremove
        COMMAND osc commit -v -m "new version"
        DEPENDS ${PACKAGE_NAME}-osc-prepare
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${OSC_PROJECT}/${PACKAGE_NAME}
        )

endif(UNIX)



