cmake_minimum_required (VERSION 3.10)
project (Planes)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 1)

find_package(Qt6 COMPONENTS Core Widgets Quick Network Test WebSockets Sql)

option(With_Asan "Compile with Address Sanitizer support" OFF)


if (UNIX)
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++17 ")
	if (With_Asan)
		set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
		set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
	endif (With_Asan)
endif (UNIX)

add_subdirectory(PlanesWidget)
add_subdirectory(PlanesGraphicsScene)
add_subdirectory(PlanesQML)
add_subdirectory(singleround)
add_subdirectory(multiround)
add_subdirectory(bcrypt)
add_subdirectory(tests/commobjtests)
add_subdirectory(tests/singleroundtests)


set(ROOT_PATH ${Qt6_DIR}/../../../)

if (NOT UNIX)
	install(FILES ${ROOT_PATH}/bin/Qt6Widgets.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6Gui.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6Test.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6Core.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6Qml.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6QmlWorkerScript.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6QmlModels.dll DESTINATION bin)	
	install(FILES ${ROOT_PATH}/bin/Qt6Network.dll DESTINATION bin)
    install(FILES ${ROOT_PATH}/bin/Qt6DBus.dll DESTINATION bin)
    install(FILES ${ROOT_PATH}/bin/Qt6OpenGL.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6QuickControls2Impl.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6QuickLayouts.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6QuickControls2.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6Quick.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6QuickTemplates2.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6QuickDialogs2.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6QuickDialogs2QuickImpl.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6QuickDialogs2Utils.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6WebSockets.dll DESTINATION bin)
	install(FILES ${ROOT_PATH}/bin/Qt6Sql.dll DESTINATION bin)

	install(FILES ${ROOT_PATH}/qml/QtQuick/qtquick2plugin.dll DESTINATION bin/QtQuick/)
    install(FILES ${ROOT_PATH}/qml/QtQuick/plugins.qmltypes DESTINATION bin/QtQuick/)
    install(FILES ${ROOT_PATH}/qml/QtQuick/qmldir DESTINATION bin/QtQuick/)  	
	install(DIRECTORY ${ROOT_PATH}/qml/QtQuick/Controls DESTINATION bin/QtQuick/)
	install(DIRECTORY ${ROOT_PATH}/qml/QtQuick/Dialogs DESTINATION bin/QtQuick/)
	install(DIRECTORY ${ROOT_PATH}/qml/QtQuick/Layouts DESTINATION bin/QtQuick/)
	install(DIRECTORY ${ROOT_PATH}/qml/QtQuick/Templates DESTINATION bin/QtQuick/)
	install(DIRECTORY ${ROOT_PATH}/qml/QtQuick/Window DESTINATION bin/QtQuick/)	
	install(DIRECTORY ${ROOT_PATH}/qml/QtQuick/NativeStyle DESTINATION bin/QtQuick/)	
	install(DIRECTORY ${ROOT_PATH}/qml/QtQml DESTINATION bin)
	install(FILES ${ROOT_PATH}/plugins/platforms/qwindows.dll DESTINATION bin/platforms)
	install(DIRECTORY ${ROOT_PATH}/plugins/tls DESTINATION bin)
	install(DIRECTORY ${ROOT_PATH}/plugins/sqldrivers DESTINATION bin)

	install(FILES $ENV{OPENSSL_HOME}/bin/libcrypto-1_1-x64.dll DESTINATION bin)
	install(FILES $ENV{OPENSSL_HOME}/bin/libssl-1_1-x64.dll DESTINATION  bin)

	install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/planes.db PERMISSIONS OWNER_WRITE OWNER_READ DESTINATION bin)

endif (NOT UNIX)

#uses mingw in windows to create windows installer
if (MINGW)
	install(FILES $ENV{MINGW_HOME}/bin/libgcc_s_seh-1.dll DESTINATION bin)
	install(FILES $ENV{MINGW_HOME}/bin/libstdc++-6.dll DESTINATION  bin)
	install(FILES $ENV{MINGW_HOME}/bin/libwinpthread-1.dll DESTINATION  bin)
endif (MINGW)

string(REGEX MATCH "[0-9]\\.[0-9]+\\.[0-9]+" QT_VERSION ${ROOT_PATH})
string(REPLACE "." ";" QT_VERSION_LIST ${QT_VERSION})
list(GET QT_VERSION_LIST 0 QT_MAJOR)
list(GET QT_VERSION_LIST 1 QT_MINOR)
list(GET QT_VERSION_LIST 2 QT_REVISION)
message("Used Qt Version: " ${QT_MAJOR} " " ${QT_MINOR} " " ${QT_REVISION})


if (UNIX)
	install(FILES ${ROOT_PATH}/lib/libQt6Widgets.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6Gui.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6Test.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6Core.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6Qml.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QmlWorkerScript.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QmlModels.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)	
	install(FILES ${ROOT_PATH}/lib/libQt6Network.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
    install(FILES ${ROOT_PATH}/lib/libQt6DBus.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
    install(FILES ${ROOT_PATH}/lib/libQt6XcbQpa.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
    install(FILES ${ROOT_PATH}/lib/libQt6OpenGL.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickControls2Impl.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickLayouts.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickControls2.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6Quick.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickTemplates2.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickDialogs2.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickDialogs2QuickImpl.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickDialogs2Utils.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6WebSockets.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6Sql.so.${QT_MAJOR}.${QT_MINOR}.${QT_REVISION} DESTINATION lib)
	

	install(FILES ${ROOT_PATH}/lib/libQt6Widgets.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6Gui.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6Test.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6Core.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6Qml.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QmlWorkerScript.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QmlModels.so.${QT_MAJOR} DESTINATION lib)	
	install(FILES ${ROOT_PATH}/lib/libQt6Network.so.${QT_MAJOR} DESTINATION lib)
    install(FILES ${ROOT_PATH}/lib/libQt6DBus.so.${QT_MAJOR} DESTINATION lib)
    install(FILES ${ROOT_PATH}/lib/libQt6XcbQpa.so.${QT_MAJOR} DESTINATION lib)
    install(FILES ${ROOT_PATH}/lib/libQt6OpenGL.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickControls2Impl.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickLayouts.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickControls2.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6Quick.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickTemplates2.so.${QT_MAJOR} DESTINATION lib)	
	install(FILES ${ROOT_PATH}/lib/libQt6QuickDialogs2.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickDialogs2QuickImpl.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickDialogs2Utils.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6QuickLayouts.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6WebSockets.so.${QT_MAJOR} DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libQt6Sql.so.${QT_MAJOR} DESTINATION lib)

	install(FILES ${ROOT_PATH}/lib/libicuuc.so.56.1 DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libicudata.so.56.1 DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libicui18n.so.56.1 DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libicuuc.so.56 DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libicudata.so.56 DESTINATION lib)
	install(FILES ${ROOT_PATH}/lib/libicui18n.so.56 DESTINATION lib)
	install(DIRECTORY ${ROOT_PATH}/plugins/platforms/ DESTINATION bin/platforms/)
	install(DIRECTORY ${ROOT_PATH}/plugins/xcbglintegrations DESTINATION bin)
	install(DIRECTORY ${ROOT_PATH}/plugins/tls DESTINATION bin)
	install(FILES ${ROOT_PATH}/plugins/sqldrivers/libqsqlite.so DESTINATION bin/sqldrivers)

 	install(FILES ${ROOT_PATH}/qml/QtQuick/libqtquick2plugin.so DESTINATION bin/QtQuick/)
    install(FILES ${ROOT_PATH}/qml/QtQuick/plugins.qmltypes DESTINATION bin/QtQuick/)
    install(FILES ${ROOT_PATH}/qml/QtQuick/qmldir DESTINATION bin/QtQuick/)  	
	install(DIRECTORY ${ROOT_PATH}/qml/QtQuick/Controls DESTINATION bin/QtQuick/)
	install(DIRECTORY ${ROOT_PATH}/qml/QtQuick/Dialogs DESTINATION bin/QtQuick/)
	install(DIRECTORY ${ROOT_PATH}/qml/QtQuick/Layouts DESTINATION bin/QtQuick/)
	install(DIRECTORY ${ROOT_PATH}/qml/QtQuick/Templates DESTINATION bin/QtQuick/)	
	install(DIRECTORY ${ROOT_PATH}/qml/QtQuick/Window DESTINATION bin/QtQuick/)	
	install(DIRECTORY ${ROOT_PATH}/qml/QtQml DESTINATION bin)

	install(FILES $ENV{OPENSSL_HOME}/libcrypto.so.3 DESTINATION lib)
	install(FILES $ENV{OPENSSL_HOME}/libssl.so.3 DESTINATION  lib)
	#install(FILES $ENV{OPENSSL_HOME}/libcrypto.so DESTINATION lib)
	#install(FILES $ENV{OPENSSL_HOME}/libssl.so DESTINATION  lib)
	install(FILES $ENV{SQLITE_HOME}/sqlite3 DESTINATION sqlite)
	
	install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/PlanesWidget.sh PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ DESTINATION .)
	install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/PlanesGraphicsScene.sh PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ DESTINATION .)
	install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/PlanesQML.sh PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ DESTINATION .)
	install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/runTests.sh PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ DESTINATION .)
	install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/planes.db PERMISSIONS OWNER_WRITE OWNER_READ DESTINATION bin)
	SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
endif (UNIX)
