Files
EZ4Connect/CMakeLists.txt
2026-08-10 19:04:20 +08:00

277 lines
10 KiB
CMake

cmake_minimum_required(VERSION 3.12)
project(EZ4Connect)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
option(NIGHTLY_BUILD "Set if built nightly.")
if(NIGHTLY_BUILD)
set(PROJ_VER "${GIT_HASH}-nightly")
elseif(DEFINED REL_VER)
set(PROJ_VER "${REL_VER}")
else()
set(PROJ_VER "dev")
endif()
add_compile_definitions(PROJ_VER="${PROJ_VER}")
message("PROJ_VER=${PROJ_VER}")
find_package(Qt6 6.5 COMPONENTS
Core
Concurrent
Gui
Widgets
Network
Svg
Core5Compat
WebEngineWidgets
REQUIRED
)
set(SOURCE_FILES
main.cpp
presentation/main/mainwindow.cpp
presentation/main/mainwindowcoordinator.cpp
presentation/coordinators/authdialogcoordinator.cpp
presentation/coordinators/connectionuicontroller.cpp
application/applicationlogger.cpp
application/commandlineoptions.cpp
application/coreprocess.h
application/connectionsession.cpp
application/profileservice.cpp
application/settingsmigrator.cpp
application/systemproxysession.cpp
application/defaultsettings.cpp
infrastructure/coreprocess/corecommandbuilder.cpp
infrastructure/coreprocess/consoleoutputdecoder.cpp
infrastructure/coreprocess/coreexecutable.cpp
infrastructure/coreprocess/devicetrust.cpp
infrastructure/coreprocess/coreoutputbuffer.cpp
infrastructure/coreprocess/coreoutputparser.cpp
core/connectionsessionstate.cpp
infrastructure/logging/applicationlogfile.cpp
infrastructure/platform/autostart.cpp
infrastructure/platform/privileges.cpp
infrastructure/settings/settingsprofileloader.cpp
infrastructure/storage/applicationpaths.cpp
infrastructure/update/updatechecker.cpp
infrastructure/platform/platformsystemproxybackend.cpp
infrastructure/platform/systemproxyfunctions.cpp
infrastructure/coreprocess/zjuconnectprocess.cpp
presentation/presentationhelpers.cpp
presentation/dialogs/extrasettingwindow/extrasettingwindow.cpp
presentation/dialogs/settingwindow/settingwindow.cpp
presentation/dialogs/loginwindow/loginwindow.cpp
presentation/dialogs/sudowindow/sudowindow.cpp
presentation/dialogs/ssologinwebview/ssologinwebview.cpp
presentation/dialogs/authinfowindow/authinfowindow.cpp
presentation/dialogs/configurationguidedialog/configurationguidedialog.cpp
presentation/dialogs/graphcaptchawindow/graphcaptchawindow.cpp
presentation/dialogs/graphcaptchawindow/captchacanvas.cpp
infrastructure/settings/profilemanager.cpp
resource.qrc
)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
if (WIN32)
message("Building for Windows")
enable_language("RC")
add_executable(${PROJECT_NAME} WIN32
${SOURCE_FILES}
${CMAKE_CURRENT_SOURCE_DIR}/resource/icon.rc
)
set(PLATFORM_LIBS wininet rasapi32 shell32)
elseif(APPLE)
message("Building for MacOS")
set(MACOSX_BUNDLE_ICON_FILE icon.icns)
set(app_icon_macos ${CMAKE_CURRENT_SOURCE_DIR}/resource/icon.icns)
set_source_files_properties(${app_icon_macos} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
add_executable(${PROJECT_NAME} MACOSX_BUNDLE
${SOURCE_FILES}
${app_icon_macos}
)
set_target_properties(${PROJECT_NAME}
PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/resource/Info.plist")
else()
add_executable(${PROJECT_NAME}
${SOURCE_FILES}
)
install(
TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
)
endif()
set(QAPPLICATION_CLASS QApplication CACHE STRING "Inheritance class for SingleApplication")
add_subdirectory(singleapplication)
target_link_libraries(${PROJECT_NAME}
Qt::Core
Qt::Concurrent
Qt::Gui
Qt::Widgets
Qt::Network
Qt::Svg
Qt::Core5Compat
Qt::WebEngineWidgets
SingleApplication::SingleApplication
${PLATFORM_LIBS}
)
include(CTest)
if(BUILD_TESTING)
add_executable(applicationlogger_test
tests/applicationlogger_test.cpp
application/applicationlogger.cpp
)
target_include_directories(applicationlogger_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(applicationlogger_test Qt::Core)
add_test(NAME applicationlogger_test COMMAND applicationlogger_test)
add_executable(applicationlogfile_test
tests/applicationlogfile_test.cpp
infrastructure/logging/applicationlogfile.cpp
)
target_include_directories(applicationlogfile_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(applicationlogfile_test Qt::Core)
add_test(NAME applicationlogfile_test COMMAND applicationlogfile_test)
add_executable(corecommandbuilder_test
tests/corecommandbuilder_test.cpp
infrastructure/coreprocess/corecommandbuilder.cpp
)
target_include_directories(corecommandbuilder_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(corecommandbuilder_test Qt::Core)
add_test(NAME corecommandbuilder_test COMMAND corecommandbuilder_test)
add_executable(coreoutputparser_test
tests/coreoutputparser_test.cpp
infrastructure/coreprocess/coreoutputparser.cpp
)
target_include_directories(coreoutputparser_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(coreoutputparser_test Qt::Core)
add_test(NAME coreoutputparser_test COMMAND coreoutputparser_test)
add_executable(coreoutputbuffer_test
tests/coreoutputbuffer_test.cpp
infrastructure/coreprocess/coreoutputbuffer.cpp
)
target_include_directories(coreoutputbuffer_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(coreoutputbuffer_test Qt::Core)
add_test(NAME coreoutputbuffer_test COMMAND coreoutputbuffer_test)
add_executable(settingsprofileloader_test
tests/settingsprofileloader_test.cpp
infrastructure/settings/settingsprofileloader.cpp
)
target_include_directories(settingsprofileloader_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(settingsprofileloader_test Qt::Core)
add_test(NAME settingsprofileloader_test COMMAND settingsprofileloader_test)
add_executable(connectionsessionstate_test
tests/connectionsessionstate_test.cpp
core/connectionsessionstate.cpp
)
target_include_directories(connectionsessionstate_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(connectionsessionstate_test Qt::Core)
add_test(NAME connectionsessionstate_test COMMAND connectionsessionstate_test)
add_executable(connectionsession_test
tests/connectionsession_test.cpp
application/coreprocess.h
application/connectionsession.cpp
core/connectionsessionstate.cpp
)
target_include_directories(connectionsession_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(connectionsession_test Qt::Core)
add_test(NAME connectionsession_test COMMAND connectionsession_test)
add_executable(systemproxysession_test
tests/systemproxysession_test.cpp
application/systemproxysession.cpp
)
target_include_directories(systemproxysession_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(systemproxysession_test Qt::Core Qt::Concurrent)
add_test(NAME systemproxysession_test COMMAND systemproxysession_test)
add_executable(updatechecker_test
tests/updatechecker_test.cpp
infrastructure/update/updatechecker.cpp
infrastructure/coreprocess/coreexecutable.cpp
)
target_include_directories(updatechecker_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(updatechecker_test Qt::Core Qt::Gui Qt::Widgets Qt::Network Qt::Core5Compat)
add_test(NAME updatechecker_test COMMAND updatechecker_test)
add_executable(settingsmigrator_test
tests/settingsmigrator_test.cpp
application/settingsmigrator.cpp
application/defaultsettings.cpp
)
target_include_directories(settingsmigrator_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(settingsmigrator_test Qt::Core)
add_test(NAME settingsmigrator_test COMMAND settingsmigrator_test)
add_executable(profileservice_test
tests/profileservice_test.cpp
application/profileservice.cpp
)
target_include_directories(profileservice_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(profileservice_test Qt::Core)
add_test(NAME profileservice_test COMMAND profileservice_test)
add_executable(profilemanager_test
tests/profilemanager_test.cpp
infrastructure/settings/profilemanager.cpp
)
target_include_directories(profilemanager_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(profilemanager_test Qt::Core)
add_test(NAME profilemanager_test COMMAND profilemanager_test)
add_executable(configurationguidedialog_test
tests/configurationguidedialog_test.cpp
presentation/dialogs/configurationguidedialog/configurationguidedialog.cpp
presentation/dialogs/authinfowindow/authinfowindow.cpp
infrastructure/coreprocess/consoleoutputdecoder.cpp
infrastructure/coreprocess/coreexecutable.cpp
)
target_include_directories(configurationguidedialog_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(configurationguidedialog_test
Qt::Core
Qt::Gui
Qt::Widgets
Qt::Core5Compat
)
add_test(NAME configurationguidedialog_test COMMAND configurationguidedialog_test)
set_tests_properties(configurationguidedialog_test PROPERTIES
ENVIRONMENT "QT_QPA_PLATFORM=offscreen"
)
add_executable(graphcaptchawindow_test
tests/graphcaptchawindow_test.cpp
presentation/dialogs/graphcaptchawindow/graphcaptchawindow.cpp
presentation/dialogs/graphcaptchawindow/captchacanvas.cpp
)
target_include_directories(graphcaptchawindow_test PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(graphcaptchawindow_test Qt::Core Qt::Gui Qt::Widgets)
add_test(NAME graphcaptchawindow_test COMMAND graphcaptchawindow_test)
set_tests_properties(graphcaptchawindow_test PROPERTIES
ENVIRONMENT "QT_QPA_PLATFORM=offscreen"
)
endif()