# Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd.
#
# Author:     zhangteng <zhangteng@uniontech.com>
#
# Maintainer: zhangteng <zhangteng@uniontech.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

set(APP_QRC "../dde-introduction.qrc")

ADD_COMPILE_OPTIONS(-fno-access-control)

# 设置添加gocv相关信息的输出
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fprofile-arcs -ftest-coverage")

set(qt_required_components Core DBus Gui Widgets Sql Multimedia Test)

if (QT_DESIRED_VERSION MATCHES 6)
    list(APPEND qt_required_components Core5Compat)
else()
    # list(APPEND qt_required_components X11Extras )
endif()

find_package(Qt${QT_DESIRED_VERSION} REQUIRED COMPONENTS ${qt_required_components})
find_package(Dtk${DTK_VERSION_MAJOR} REQUIRED COMPONENTS Widget Gui Core)

set(LINK_LIBS
    Qt${QT_DESIRED_VERSION}::Core
    Qt${QT_DESIRED_VERSION}::DBus
    Qt${QT_DESIRED_VERSION}::Gui
    Qt${QT_DESIRED_VERSION}::Widgets
    Qt${QT_DESIRED_VERSION}::Sql
    Qt${QT_DESIRED_VERSION}::Multimedia
    Qt${QT_DESIRED_VERSION}::Test
    Dtk${DTK_VERSION_MAJOR}::Widget
    Dtk${DTK_VERSION_MAJOR}::Gui
    Dtk${DTK_VERSION_MAJOR}::Core
)

if (QT_DESIRED_VERSION MATCHES 6)
    list(APPEND LINK_LIBS Qt${QT_DESIRED_VERSION}::Core5Compat)
    # list(APPEND LINK_LIBS Qt${QT_VERSION_MAJOR}::GuiPrivate)
else()
    # list(APPEND LINK_LIBS Qt${QT_VERSION_MAJOR}::WidgetsPrivate)
    # list(APPEND LINK_LIBS Qt${QT_DESIRED_VERSION}::X11Extras)
endif()

find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
include_directories(src)

set(PROJECT_NAME_TEST
    ${PROJECT_NAME}-test)

#Include all app own subdirectorys

file(GLOB_RECURSE INTRODUCTION_SRC_TEST ${CMAKE_CURRENT_LIST_DIR}/../src/*.cpp)
file(GLOB_RECURSE INTRODUCTION_SRC_TEST1 ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp)

list(REMOVE_ITEM INTRODUCTION_SRC_TEST "${CMAKE_CURRENT_LIST_DIR}/../src/main.cpp")
#ADD_DEFINITIONS("-D DISABLE_VIDEO")
#LIST(REMOVE_ITEM INTRODUCTION_SRC_TEST "${CMAKE_CURRENT_LIST_DIR}/../src/modules/videowidget.cpp")
#LIST(REMOVE_ITEM INTRODUCTION_SRC_TEST1 "${CMAKE_CURRENT_LIST_DIR}/src/modules/ut_videowidget.cpp")


if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
    ADD_DEFINITIONS("-D DISABLE_VIDEO")
    LIST(REMOVE_ITEM INTRODUCTION_SRC_TEST ${CMAKE_CURRENT_LIST_DIR}/../src/modules/videowidget.cpp)
    LIST(REMOVE_ITEM INTRODUCTION_SRC_TEST1 ${CMAKE_CURRENT_LIST_DIR}/src/modules/ut_videowidget.cpp)
endif()

# 生成测试可执行程序
add_executable(${PROJECT_NAME_TEST}
    ${INTRODUCTION_SRC_TEST}
    ${INTRODUCTION_SRC_TEST1}
    ${APP_QRC}
    )

# 生成测试可执行程序的依赖库QApplication
target_link_libraries(${PROJECT_NAME_TEST} 
    ${LINK_LIBS}
    ${GSTREAMER_LIBRARIES}
    ${LIBDMR_LIBRARIES}
    ${GTEST_LIBRARYS}
    ${GTEST_MAIN_LIBRARYS}
    gtest
    gtest_main
    -pthread
)

if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
    pkg_check_modules(LIBDMR REQUIRED libdmr)
    include_directories(${LIBDMR_INCLUDE_DIRS})
    target_link_libraries(${PROJECT_NAME_TEST} ${LIBDMR_LIBRARIES})
endif()

# target_include_directories(${PROJECT_NAME_TEST} PUBLIC ${DtkWidget_INCLUDE_DIRS}
#                                                        ${DtkCore_INCLUDE_DIRS}
#                                                        ${DtkGui_INCLUDE_DIRS})

# ------------------------------ 创建'make test'指令---------------------------------------
add_custom_target(test)
add_custom_command(TARGET test
    COMMAND echo " =================== TEST BEGIN ==================== "
    COMMAND ${PROJECT_NAME_TEST}
    )
add_dependencies(test ${PROJECT_NAME_TEST})

#安全测试加固编译参数
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -z relro -z now -z noexecstack -pie")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -z relro -z now -z noexecstack -pie")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -fstack-protector-all")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -fstack-protector-all")

#ASAN安全性检测标志
set(CMAKE_SAFETYTEST "${CMAKE_SAFETYTEST_ARG}")
if(CMAKE_SAFETYTEST STREQUAL "")
    set(CMAKE_SAFETYTEST "CMAKE_SAFETYTEST_ARG_OFF")
endif()

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${CMAKE_SAFETYTEST}")
if(CMAKE_SAFETYTEST STREQUAL "CMAKE_SAFETYTEST_ARG_ON")
  #安全测试选项
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -fsanitize=undefined,address -O2")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=undefined,address -O2")
endif()
