diff options
Diffstat (limited to 'src/CMakeLists.txt')
| -rw-r--r-- | src/CMakeLists.txt | 584 |
1 files changed, 39 insertions, 545 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7452a01b..68060a0b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,350 +1,7 @@ -CMAKE_MINIMUM_REQUIRED (VERSION 2.8.11) +cmake_minimum_required(VERSION 3.16) +include(../../cmake_common/src.cmake) -CMAKE_POLICY(SET CMP0020 NEW) -#CMAKE_POLICY(SET CMP0043 NEW) - -SET(PROJ_AUTHOR Tannin) -SET(PROJ_ARCH x86) -IF(CMAKE_SIZEOF_VOID_P EQUAL 8) - SET(PROJ_ARCH x64) -ENDIF() - -macro(add_msvc_precompiled_header PrecompiledHeader PrecompiledSource SourcesVar HeadersVar) - if(MSVC) - get_filename_component(PrecompiledBasename ${PrecompiledHeader} NAME_WE) - set(PrecompiledBinary "${CMAKE_CURRENT_BINARY_DIR}/${PrecompiledBasename}.pch") - set(Sources ${${SourcesVar}}) - - set_source_files_properties( - ${PrecompiledSource} PROPERTIES - COMPILE_FLAGS "/Yc\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\"" - OBJECT_OUTPUTS "${PrecompiledBinary}") - - set_source_files_properties( - ${Sources} PROPERTIES - COMPILE_FLAGS "/Yu\"${PrecompiledHeader}\" /FI\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\"" - OBJECT_DEPENDS "${PrecompiledBinary}") - - list(APPEND ${SourcesVar} ${PrecompiledSource}) - list(APPEND ${HeadersVar} ${PrecompiledHeader}) - endif(MSVC) -endmacro(add_msvc_precompiled_header) - - -SET(organizer_SRCS - transfersavesdialog.cpp - syncoverwritedialog.cpp - spawn.cpp - singleinstance.cpp - settingsdialog.cpp - settingsdialogdiagnostics.cpp - settingsdialoggeneral.cpp - settingsdialognexus.cpp - settingsdialogpaths.cpp - settingsdialogplugins.cpp - settingsdialogsteam.cpp - settingsdialogworkarounds.cpp - settings.cpp - settingsutilities.cpp - selfupdater.cpp - selectiondialog.cpp - queryoverwritedialog.cpp - profilesdialog.cpp - profile.cpp - pluginlistsortproxy.cpp - pluginlist.cpp - pluginlistview.cpp - overwriteinfodialog.cpp - nxmaccessmanager.cpp - nexusinterface.cpp - motddialog.cpp - modlistsortproxy.cpp - modlist.cpp - modidlineedit.cpp - modinfodialog.cpp - modinfodialogcategories.cpp - modinfodialogconflicts.cpp - modinfodialogconflictsmodels.cpp - modinfodialogesps.cpp - modinfodialogfiletree.cpp - modinfodialogimages.cpp - modinfodialognexus.cpp - modinfodialogtab.cpp - modinfodialogtextfiles.cpp - modinfo.cpp - modinfobackup.cpp - modinfoforeign.cpp - modinfooverwrite.cpp - modinforegular.cpp - modinfoseparator.cpp - modinfowithconflictinfo.cpp - messagedialog.cpp - mainwindow.cpp - main.cpp - loghighlighter.cpp - loglist.cpp - loadmechanism.cpp - installationmanager.cpp - filedialogmemory.cpp - executableslist.cpp - editexecutablesdialog.cpp - downloadmanager.cpp - downloadlistwidget.cpp - downloadlistsortproxy.cpp - downloadlist.cpp - directoryrefresher.cpp - credentialsdialog.cpp - categoriesdialog.cpp - categories.cpp - bbcode.cpp - activatemodsdialog.cpp - moapplication.cpp - profileinputdialog.cpp - icondelegate.cpp - csvbuilder.cpp - savetextasdialog.cpp - qtgroupingproxy.cpp - modlistview.cpp - problemsdialog.cpp - serverinfo.cpp - browserview.cpp - browserdialog.cpp - persistentcookiejar.cpp - noeditdelegate.cpp - previewgenerator.cpp - previewdialog.cpp - aboutdialog.cpp - modflagicondelegate.cpp - modconflicticondelegate.cpp - genericicondelegate.cpp - organizerproxy.cpp - viewmarkingscrollbar.cpp - plugincontainer.cpp - organizercore.cpp - instancemanager.cpp - usvfsconnector.cpp - moshortcut.cpp - listdialog.cpp - lcdnumber.cpp - forcedloaddialog.cpp - forcedloaddialogwidget.cpp - statusbar.cpp - apiuseraccount.cpp - filerenamer.cpp - texteditor.cpp - env.cpp - envfs.cpp - envmetrics.cpp - envmodule.cpp - envsecurity.cpp - envshell.cpp - envshortcut.cpp - envwindows.cpp - colortable.cpp - sanitychecks.cpp - processrunner.cpp - uilocker.cpp - loot.cpp - lootdialog.cpp - filterlist.cpp - datatab.cpp - filetree.cpp - filetreemodel.cpp - filetreeitem.cpp - iconfetcher.cpp - - shared/windows_error.cpp - shared/error_report.cpp - shared/directoryentry.cpp - shared/fileentry.cpp - shared/filesorigin.cpp - shared/fileregister.cpp - shared/originconnection.cpp - shared/util.cpp - shared/appconfig.cpp - shared/leaktrace.cpp - shared/stackdata.cpp - ) - -SET(organizer_HDRS - transfersavesdialog.h - syncoverwritedialog.h - spawn.h - singleinstance.h - settingsdialog.h - settingsdialogdiagnostics.h - settingsdialoggeneral.h - settingsdialognexus.h - settingsdialogpaths.h - settingsdialogplugins.h - settingsdialogsteam.h - settingsdialogworkarounds.h - settings.h - settingsutilities.h - selfupdater.h - selectiondialog.h - queryoverwritedialog.h - profilesdialog.h - profile.h - pluginlistsortproxy.h - pluginlist.h - pluginlistview.h - overwriteinfodialog.h - nxmaccessmanager.h - nexusinterface.h - motddialog.h - modlistsortproxy.h - modlist.h - modidlineedit.h - modinfodialog.h - modinfodialogcategories.h - modinfodialogconflicts.h - modinfodialogconflictsmodels.h - modinfodialogesps.h - modinfodialogfiletree.h - modinfodialogfwd.h - modinfodialogimages.h - modinfodialognexus.h - modinfodialogtab.h - modinfodialogtextfiles.h - modinfo.h - modinfobackup.h - modinfoforeign.h - modinfooverwrite.h - modinforegular.h - modinfoseparator.h - modinfowithconflictinfo.h - messagedialog.h - mainwindow.h - loghighlighter.h - loglist.h - loadmechanism.h - installationmanager.h - filedialogmemory.h - executableslist.h - editexecutablesdialog.h - downloadmanager.h - downloadlistwidget.h - downloadlistsortproxy.h - downloadlist.h - directoryrefresher.h - credentialsdialog.h - categoriesdialog.h - categories.h - bbcode.h - activatemodsdialog.h - moapplication.h - profileinputdialog.h - icondelegate.h - csvbuilder.h - savetextasdialog.h - qtgroupingproxy.h - modlistview.h - problemsdialog.h - serverinfo.h - browserview.h - browserdialog.h - persistentcookiejar.h - noeditdelegate.h - previewgenerator.h - previewdialog.h - aboutdialog.h - modflagicondelegate.h - modconflicticondelegate.h - genericicondelegate.h - organizerproxy.h - viewmarkingscrollbar.h - plugincontainer.h - organizercore.h - iuserinterface.h - instancemanager.h - usvfsconnector.h - moshortcut.h - listdialog.h - lcdnumber.h - forcedloaddialog.h - forcedloaddialogwidget.h - statusbar.h - apiuseraccount.h - filerenamer.h - texteditor.h - env.h - envfs.h - envmetrics.h - envmodule.h - envsecurity.h - envshell.h - envshortcut.h - envwindows.h - colortable.h - processrunner.h - uilocker.h - loot.h - lootdialog.h - json.h - filterlist.h - datatab.h - filetree.h - filetreeitem.h - filetreemodel.h - iconfetcher.h - - shared/windows_error.h - shared/error_report.h - shared/directoryentry.h - shared/fileentry.h - shared/filesorigin.h - shared/fileregister.h - shared/fileregisterfwd.h - shared/originconnection.h - shared/util.h - shared/appconfig.h - shared/appconfig.inc - shared/leaktrace.h - shared/stackdata.h - ) - -SET(organizer_UIS - transfersavesdialog.ui - syncoverwritedialog.ui - settingsdialog.ui - selectiondialog.ui - queryoverwritedialog.ui - profilesdialog.ui - overwriteinfodialog.ui - motddialog.ui - modinfodialog.ui - messagedialog.ui - mainwindow.ui - editexecutablesdialog.ui - credentialsdialog.ui - categoriesdialog.ui - activatemodsdialog.ui - profileinputdialog.ui - savetextasdialog.ui - problemsdialog.ui - previewdialog.ui - browserdialog.ui - aboutdialog.ui - listdialog.ui - forcedloaddialog.ui - forcedloaddialogwidget.ui - ) - -SET(organizer_QRCS - resources.qrc - stylesheet_resource.qrc - ) - -SET(organizer_RCS - app_icon.rc - version.rc - ) - - -source_group(src REGULAR_EXPRESSION ".*\\.(h|cpp|ui)") - -set(application +add_filter(NAME src/application GROUPS iuserinterface main moapplication @@ -354,12 +11,12 @@ set(application singleinstance ) -set(browser +add_filter(NAME src/browser GROUPS browserdialog browserview ) -set(core +add_filter(NAME src/core GROUPS categories installationmanager instancemanager @@ -373,7 +30,7 @@ set(core uilocker ) -set(dialogs +add_filter(NAME src/dialogs GROUPS aboutdialog activatemodsdialog categoriesdialog @@ -394,14 +51,14 @@ set(dialogs waitingonclosedialog ) -set(downloads +add_filter(NAME src/downloads GROUPS downloadlist downloadlistsortproxy downloadlistwidget downloadmanager ) -set(env +add_filter(NAME src/env GROUPS env envfs envmetrics @@ -412,17 +69,17 @@ set(env envwindows ) -set(executables +add_filter(NAME src/executables GROUPS executableslist editexecutablesdialog ) -set(loot +add_filter(NAME src/loot GROUPS loot lootdialog ) -set(mainwindow +add_filter(NAME src/mainwindow GROUPS datatab iconfetcher filetree @@ -433,7 +90,7 @@ set(mainwindow statusbar ) -set(modinfo +add_filter(NAME src/modinfo GROUPS modinfo modinfobackup modinfoforeign @@ -443,7 +100,7 @@ set(modinfo modinfowithconflictinfo ) -set(modinfo\\dialog +add_filter(NAME src/modinfo/dialog GROUPS modinfodialog modinfodialogcategories modinfodialogconflicts @@ -456,31 +113,31 @@ set(modinfo\\dialog modinfodialogtab modinfodialogtextfiles ) -set(modlist +add_filter(NAME src/modlist GROUPS modlist modlistsortproxy modlistview ) -set(plugins +add_filter(NAME src/plugins GROUPS plugincontainer pluginlist pluginlistsortproxy pluginlistview ) -set(previews +add_filter(NAME src/previews GROUPS previewdialog previewgenerator ) -set(profiles +add_filter(NAME src/profiles GROUPS profile profileinputdialog profilesdialog ) -set(register +add_filter(NAME src/register GROUPS shared/directoryentry shared/fileentry shared/filesorigin @@ -490,12 +147,12 @@ set(register directoryrefresher ) -set(settings +add_filter(NAME src/settings GROUPS settings settingsutilities ) -set(settingsdialog +add_filter(NAME src/settingsdialog GROUPS settingsdialog settingsdialogdiagnostics settingsdialoggeneral @@ -506,7 +163,7 @@ set(settingsdialog settingsdialogworkarounds ) -set(utilities +add_filter(NAME src/utilities GROUPS shared/appconfig bbcode csvbuilder @@ -522,7 +179,7 @@ set(utilities json ) -set(widgets +add_filter(NAME src/widgets GROUPS colortable genericicondelegate filerenamer @@ -539,196 +196,33 @@ set(widgets viewmarkingscrollbar ) -set(src_filters - application core browser dialogs downloads env executables loot mainwindow - modinfo modinfo\\dialog modlist plugins previews profiles register settings - settingsdialog utilities widgets -) - -foreach(filter in list ${src_filters}) - set(files) - foreach(d in lists ${${filter}}) - set(files ${files} ${d}.cpp ${d}.h ${d}.inc ${d}.ui) - endforeach() - - source_group(src\\${filter} FILES ${files}) -endforeach() - -file(GLOB_RECURSE rule_files ../vsbuild/CMakeFiles/*.rule) -file(GLOB qm_files ../vsbuild/src/*.qm) - -set(organizer_misc ../modorganizer.natvis) - -source_group(cmake FILES CMakeLists.txt) -source_group(autogen FILES ${rule_files} ${qm_files}) -source_group(resources FILES ${organizer_RCS} ${organizer_QRCS}) - -# MO projects -SET(dependency_project_path "${DEPENDENCIES_DIR}") -SET(default_project_path "${DEPENDENCIES_DIR}/modorganizer_super") -GET_FILENAME_COMPONENT(${default_project_path} ${default_project_path} REALPATH) -SET(project_path "${default_project_path}" CACHE PATH "path to the other mo projects") - -add_msvc_precompiled_header("pch.h" "pch.cpp" organizer_SRCS organizer_HDRS) -#TODO this should not be a hardcoded path -SET(lib_path "${project_path}/../../install/libs") - -# Qt5 -SET(CMAKE_INCLUDE_CURRENT_DIR ON) -SET(CMAKE_AUTOMOC ON) -SET(CMAKE_AUTOUIC ON) -SET(CMAKE_AUTORCC ON) - -FIND_PACKAGE(Qt5Widgets REQUIRED) -FIND_PACKAGE(Qt5QuickWidgets REQUIRED) -FIND_PACKAGE(Qt5Quick REQUIRED) -FIND_PACKAGE(Qt5Network REQUIRED) -FIND_PACKAGE(Qt5WinExtras REQUIRED) -FIND_PACKAGE(Qt5WebEngineWidgets REQUIRED) -FIND_PACKAGE(Qt5WebSockets REQUIRED) -FIND_PACKAGE(Qt5Qml REQUIRED) -FIND_PACKAGE(Qt5LinguistTools) - -SET(mo_translation_sources ${CMAKE_SOURCE_DIR}/src ${project_path}/uibase/src) -set_property(GLOBAL PROPERTY USE_FOLDERS ON) -set_property(GLOBAL PROPERTY AUTOGEN_SOURCE_GROUP autogen) -set_property(GLOBAL PROPERTY AUTOMOC_SOURCE_GROUP autogen) -set_property(GLOBAL PROPERTY AUTORCC_SOURCE_GROUP autogen) - -QT5_CREATE_TRANSLATION(organizer_translations_qm ${mo_translation_sources} ${CMAKE_SOURCE_DIR}/src/organizer_en.ts OPTIONS -silent) -ADD_CUSTOM_TARGET(translations DEPENDS ${organizer_translations_qm}) - -INCLUDE_DIRECTORIES(${Qt5Declarative_INCLUDES}) - -ADD_DEFINITIONS(-DQT_MESSAGELOGCONTEXT) - -# Boost -SET(Boost_USE_STATIC_LIBS OFF) -SET(Boost_USE_MULTITHREADED ON) -SET(Boost_USE_STATIC_RUNTIME OFF) -FIND_PACKAGE(Boost REQUIRED) - -INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) -LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) - - -FIND_PACKAGE(zlib REQUIRED) -# TODO FindZlib doesn't find the static zlib library - -# fmt -find_package(fmt REQUIRED) - -INCLUDE_DIRECTORIES(${project_path}/uibase/src - ${project_path}/bsatk/src - ${project_path}/esptk/src - ${project_path}/archive/src - ${project_path}/lootcli/include - ${dependency_project_path}/usvfs/include - ${project_path}/game_gamebryo/src/gamebryo - ${project_path}/game_gamebryo/src/creation - ${project_path}/game_features/src - ${project_path}/githubpp/src - ${SPDLOG_ROOT}/include - ${LZ4_ROOT}/lib) - -INCLUDE_DIRECTORIES(shared ${ZLIB_INCLUDE_DIRS}) -LINK_DIRECTORIES(${lib_path} - ${ZLIB_ROOT}/lib - ${LZ4_ROOT}/bin) -EXECUTE_PROCESS( - COMMAND git log -1 --format=%h - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_COMMIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE +target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE + ${modorganizer_super_path}/game_features/src + ${modorganizer_super_path}/lootcli/include + ${modorganizer_super_path}/githubpp/src + ${modorganizer_super_path}/bsatk/src + ${modorganizer_super_path}/archive/src + ${modorganizer_super_path}/esptk/src + ${modorganizer_build_path}/usvfs/include ) -ADD_DEFINITIONS(-D_UNICODE -DUNICODE -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS -DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE -DGITID="${GIT_COMMIT_HASH}") - -IF("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") - SET(usvfs_name usvfs_x64) -ELSE() - SET(usvfs_name usvfs_x86) -ENDIF() - -ADD_EXECUTABLE( - ModOrganizer WIN32 - ${organizer_HDRS} ${organizer_SRCS} ${organizer_UIS} ${organizer_RCS} - ${organizer_QRCS} ${organizer_translations_qm} ${organizer_misc}) - -TARGET_LINK_LIBRARIES(ModOrganizer - Qt5::Widgets Qt5::WinExtras Qt5::WebEngineWidgets Qt5::Quick - Qt5::Qml Qt5::QuickWidgets Qt5::Network Qt5::WebSockets - ${Boost_LIBRARIES} fmt::fmt - zlibstatic - uibase esptk bsatk githubpp - ${usvfs_name} - Dbghelp advapi32 Version Shlwapi liblz4 Crypt32) - -IF (MSVC) - SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES COMPILE_FLAGS "/std:c++latest /permissive-") -ENDIF() -IF (MSVC AND "${CMAKE_SIZEOF_VOID_P}" EQUAL 4) - # 32 bits - SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES LINK_FLAGS "/LARGEADDRESSAWARE") -ENDIF() - -IF (NOT "${OPTIMIZE_COMPILE_FLAGS}" STREQUAL "") - SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES COMPILE_FLAGS_RELWITHDEBINFO ${OPTIMIZE_COMPILE_FLAGS}) -ENDIF() -IF (NOT "${OPTIMIZE_LINK_FLAGS}" STREQUAL "") - SET_TARGET_PROPERTIES(ModOrganizer PROPERTIES LINK_FLAGS_RELWITHDEBINFO ${OPTIMIZE_LINK_FLAGS}) -ENDIF() - - -############### -## Installation - -SET(qt5bin ${Qt5Core_DIR}/../../../bin) +target_link_libraries(${CMAKE_PROJECT_NAME} + uibase usvfs_x64 bsatk esptk githubpp +) -FIND_PROGRAM(WINDEPLOYQT_COMMAND windeployqt PATHS ${qt5bin} NO_DEFAULT_PATH) -INSTALL(TARGETS ModOrganizer - RUNTIME DESTINATION bin) -INSTALL(FILES $<TARGET_PDB_FILE:ModOrganizer> - DESTINATION pdb) -INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dlls.manifest.qt5 +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dlls.manifest.qt5 DESTINATION bin/dlls RENAME dlls.manifest) -INSTALL(FILES ${organizer_translations_qm} DESTINATION bin/translations) +install(FILES ${qm_files} DESTINATION bin/translations) -INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/stylesheets +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/stylesheets ${CMAKE_CURRENT_SOURCE_DIR}/tutorials DESTINATION bin) -#We should do this last, since windeployqt.exe scans the folders in bin for required modules e.g QtQuick.2 required by tutorials. -# use windeployqt.exe to install all required libraries -SET(windeploy_parameters "--no-translations --plugindir qtplugins --libdir dlls --release-with-debug-info --no-compiler-runtime") -INSTALL( - CODE - "EXECUTE_PROCESS(COMMAND - ${qt5bin}/windeployqt.exe --verbose 0 ModOrganizer.exe --webenginewidgets --websockets ${windeploy_parameters} - WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin - ) - EXECUTE_PROCESS(COMMAND - ${qt5bin}/windeployqt.exe --verbose 0 uibase.dll ${windeploy_parameters} - WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin - ) - EXECUTE_PROCESS(COMMAND - ${qt5bin}/windeployqt.exe --verbose 0 plugins/bsa_packer.dll ${windeploy_parameters} - WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin - ) - file(REMOVE_RECURSE ${CMAKE_INSTALL_PREFIX}/bin/platforms) - file(REMOVE_RECURSE ${CMAKE_INSTALL_PREFIX}/bin/styles) - file(REMOVE_RECURSE ${CMAKE_INSTALL_PREFIX}/bin/dlls/imageformats) - file(RENAME ${CMAKE_INSTALL_PREFIX}/bin/qtplugins/platforms ${CMAKE_INSTALL_PREFIX}/bin/platforms) - file(RENAME ${CMAKE_INSTALL_PREFIX}/bin/qtplugins/styles ${CMAKE_INSTALL_PREFIX}/bin/styles) - file(RENAME ${CMAKE_INSTALL_PREFIX}/bin/qtplugins/imageformats ${CMAKE_INSTALL_PREFIX}/bin/dlls/imageformats) - file(REMOVE_RECURSE ${CMAKE_INSTALL_PREFIX}/bin/qtplugins)" -) - -# qdds.dll needs installing manually as Qt no longer ships with it by default. -INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../qdds.dll DESTINATION bin/dlls/imageformats) +deploy_qt(BINARIES ModOrganizer.exe uibase.dll plugins/bsa_packer.dll) -INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/markdown.html DESTINATION bin/resources) +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../qdds.dll DESTINATION bin/dlls/imageformats) +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/markdown.html DESTINATION bin/resources) |
