mirror of
https://github.com/ModOrganizer2/modorganizer.git
synced 2026-07-27 13:58:24 -07:00
Compare commits
74
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8006988b20 | ||
|
|
890bee5444 | ||
|
|
263eb6a552 | ||
|
|
ee6624f091 | ||
|
|
17a2e5ef31 | ||
|
|
5c264af63e | ||
|
|
5061ff5e59 | ||
|
|
c9f592049e | ||
|
|
20711bd3bf | ||
|
|
af52b779e6 | ||
|
|
0d699bd025 | ||
|
|
28f134cc86 | ||
|
|
c6516af5db | ||
|
|
d35ffb9751 | ||
|
|
64f9c998cd | ||
|
|
a02fabc06f | ||
|
|
62fe0a4c13 | ||
|
|
1993fee880 | ||
|
|
646723cac7 | ||
|
|
9d9370100c | ||
|
|
17e54ba347 | ||
|
|
f8ea6dedd0 | ||
|
|
1d5a40738c | ||
|
|
54a7e93878 | ||
|
|
d0d0a983bb | ||
|
|
bb4f3fd74b | ||
|
|
61ef16d08d | ||
|
|
c44ee31e9f | ||
|
|
08fc25d641 | ||
|
|
f305502c5d | ||
|
|
b6de58f2d3 | ||
|
|
75e24cd926 | ||
|
|
bafc058b7f | ||
|
|
71434efaa9 | ||
|
|
8f1dbe9f35 | ||
|
|
19fae10b2b | ||
|
|
7ed06a77c1 | ||
|
|
9c130cbf2f | ||
|
|
ea38fdc6ce | ||
|
|
89f39ef200 | ||
|
|
acd201157d | ||
|
|
f11925ab88 | ||
|
|
2395c13c25 | ||
|
|
cc92f6cf88 | ||
|
|
193442e773 | ||
|
|
a4f6298111 | ||
|
|
d3b647ab2b | ||
|
|
6d08d434a8 | ||
|
|
3d8bfdd1d4 | ||
|
|
fff03d34e2 | ||
|
|
88c386d74d | ||
|
|
c43535f5bc | ||
|
|
3d18f0cd38 | ||
|
|
a11617ff65 | ||
|
|
1871f32a8d | ||
|
|
fa82d1cca1 | ||
|
|
9ee4c5afe1 | ||
|
|
a1d199134d | ||
|
|
16423b2682 | ||
|
|
5adb1ec43d | ||
|
|
4472df8656 | ||
|
|
45c017de2f | ||
|
|
b350afee9e | ||
|
|
b3d27472cf | ||
|
|
e1932b34ea | ||
|
|
70a41a9b27 | ||
|
|
20aa98b511 | ||
|
|
783c05478f | ||
|
|
0315a88bd8 | ||
|
|
026fec4468 | ||
|
|
04eff9750f | ||
|
|
22714e5cdc | ||
|
|
8dd1637d1d | ||
|
|
2eade4c638 |
@@ -6,15 +6,47 @@ on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened]
|
||||
|
||||
env:
|
||||
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: windows-2022
|
||||
steps:
|
||||
- name: Build ModOrganizer 2
|
||||
uses: ModOrganizer2/build-with-mob-action@master
|
||||
# https://learn.microsoft.com/en-us/vcpkg/consume/binary-caching-github-actions-cache
|
||||
- name: Export GitHub Actions cache environment variables
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
qt-modules: qtpositioning qtwebchannel qtwebengine qtwebsockets
|
||||
mo2-third-parties:
|
||||
7z zlib fmt gtest libbsarch libloot openssl libffi bzip2 python lz4 spdlog
|
||||
boost boost-di sip pyqt pybind11 ss licenses explorerpp usvfs
|
||||
mo2-dependencies: cmake_common uibase githubpp bsatk esptk archive lootcli game_gamebryo
|
||||
script: |
|
||||
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v3
|
||||
with:
|
||||
version: 6.7.1
|
||||
modules: qtpositioning qtwebchannel qtwebengine qtwebsockets
|
||||
cache: true
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: "Set environmental variables"
|
||||
shell: bash
|
||||
run: |
|
||||
echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV
|
||||
|
||||
- name: Configure ModOrganizer
|
||||
shell: pwsh
|
||||
run: |
|
||||
cmake --preset vs2022-windows-standalone `
|
||||
"-DCMAKE_PREFIX_PATH=${env:QT_ROOT_DIR}\msvc2019_64" `
|
||||
"-DCMAKE_INSTALL_PREFIX=install"
|
||||
|
||||
- name: Build ModOrganizer
|
||||
run: cmake --build vsbuild --config RelWithDebInfo --target INSTALL
|
||||
|
||||
- name: Package ModOrganizer
|
||||
uses: actions/upload-artifact@master
|
||||
with:
|
||||
name: modorganizer
|
||||
path: ./install
|
||||
|
||||
@@ -10,8 +10,8 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Run clang-format
|
||||
uses: jidicula/clang-format-action@v4.11.0
|
||||
- name: Check format
|
||||
uses: ModOrganizer2/check-formatting-action@master
|
||||
with:
|
||||
clang-format-version: "15"
|
||||
check-path: "."
|
||||
exclude-regex: "third-party"
|
||||
|
||||
@@ -12,5 +12,6 @@ edit
|
||||
/msbuild.log
|
||||
/*std*.log
|
||||
/*build
|
||||
.vscode
|
||||
|
||||
/src/version.aps
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
syntax: glob
|
||||
scons_configure.py
|
||||
scons-ModOrganizer-*
|
||||
ModOrganizer-build-desktop*
|
||||
outputd/*
|
||||
output/*
|
||||
build-ModOrganizer-*
|
||||
source/NCC/*/bin
|
||||
source/NCC/*/obj
|
||||
source/NCC/bin
|
||||
*.orig
|
||||
source/plugins/proxyPython/build
|
||||
staging/*
|
||||
source - Copy/*
|
||||
ModOrganizer-build-*
|
||||
pdbs/*
|
||||
source/NCC/BossDummy.x/*
|
||||
*.ts
|
||||
staging_prepare/*
|
||||
staging_trans/*
|
||||
tools/python_zip/*
|
||||
Makefile
|
||||
html
|
||||
*.vcxproj
|
||||
*.pdb
|
||||
*.dll
|
||||
*.exp
|
||||
*.tlog
|
||||
*.user
|
||||
*.obj
|
||||
*.suo
|
||||
*.sln
|
||||
*.log
|
||||
*.filters
|
||||
*.lib
|
||||
source/organizer/resources/contents/icons
|
||||
source/plugins/build-*
|
||||
*/GeneratedFiles/*
|
||||
translations/*
|
||||
source/LocalPaths.pri
|
||||
source/*/Win32/Debug/*
|
||||
source/plugins/*/Win32/Debug/*
|
||||
*~
|
||||
syntax: regexp
|
||||
Makefile\.(Debug|Release)
|
||||
source/.*/debug/.*
|
||||
+12
-11
@@ -1,16 +1,17 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
# TODO: move these to cmake_common?
|
||||
set(OPENSSL_USE_STATIC_LIBS FALSE CACHE STRING "" FORCE)
|
||||
set(MySQL_INCLUDE_DIRS CACHE STRING "" FORCE)
|
||||
|
||||
if(DEFINED DEPENDENCIES_DIR)
|
||||
include(${DEPENDENCIES_DIR}/modorganizer_super/cmake_common/mo2.cmake)
|
||||
else()
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/../cmake_common/mo2.cmake)
|
||||
endif()
|
||||
# TODO: clean include directives
|
||||
set(MO2_CMAKE_DEPRECATED_UIBASE_INCLUDE ON)
|
||||
|
||||
project(organizer)
|
||||
add_subdirectory(src)
|
||||
|
||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dump_running_process.bat DESTINATION bin)
|
||||
find_package(mo2-cmake CONFIG REQUIRED)
|
||||
|
||||
set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
|
||||
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(themes)
|
||||
|
||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT organizer)
|
||||
|
||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/dump_running_process.bat DESTINATION ${MO2_INSTALL_BIN})
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"configurePresets": [
|
||||
{
|
||||
"errors": {
|
||||
"deprecated": true
|
||||
},
|
||||
"hidden": true,
|
||||
"name": "cmake-dev",
|
||||
"warnings": {
|
||||
"deprecated": true,
|
||||
"dev": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"cacheVariables": {
|
||||
"VCPKG_MANIFEST_NO_DEFAULT_FEATURES": {
|
||||
"type": "BOOL",
|
||||
"value": "ON"
|
||||
}
|
||||
},
|
||||
"toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
|
||||
"hidden": true,
|
||||
"name": "vcpkg"
|
||||
},
|
||||
{
|
||||
"binaryDir": "${sourceDir}/vsbuild",
|
||||
"architecture": {
|
||||
"strategy": "set",
|
||||
"value": "x64"
|
||||
},
|
||||
"cacheVariables": {
|
||||
"CMAKE_CXX_FLAGS": "/EHsc /MP /W3",
|
||||
"VCPKG_TARGET_TRIPLET": {
|
||||
"type": "STRING",
|
||||
"value": "x64-windows-static-md"
|
||||
}
|
||||
},
|
||||
"generator": "Visual Studio 17 2022",
|
||||
"inherits": ["cmake-dev", "vcpkg"],
|
||||
"name": "vs2022-windows",
|
||||
"toolset": "v143"
|
||||
},
|
||||
{
|
||||
"cacheVariables": {
|
||||
"VCPKG_MANIFEST_FEATURES": {
|
||||
"type": "STRING",
|
||||
"value": "standalone"
|
||||
},
|
||||
"MO2_INSTALL_IS_BIN": {
|
||||
"type": "BOOL",
|
||||
"value": "ON"
|
||||
}
|
||||
},
|
||||
"inherits": "vs2022-windows",
|
||||
"name": "vs2022-windows-standalone"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
-713
File diff suppressed because it is too large
Load Diff
@@ -1,77 +0,0 @@
|
||||
version: dev-appveyor{build}
|
||||
skip_branch_with_pr: true
|
||||
image: Visual Studio 2019
|
||||
init:
|
||||
- ps: >-
|
||||
# define build version depending on nightly or normal build
|
||||
|
||||
if($env:APPVEYOR_SCHEDULED_BUILD -eq 'True'){
|
||||
$timestamp= Get-Date -Format "ddMMyyyy-HHmm"
|
||||
Update-AppveyorBuild -Version "$($env:MO_VERSION)$($env:VER_STUB_NIGHTLY)$timestamp"
|
||||
} else {
|
||||
Update-AppveyorBuild -Version "$($env:MO_VERSION)$($env:VER_STUB_NORMAL)$($env:APPVEYOR_BUILD_NUMBER)"
|
||||
}
|
||||
|
||||
Write-Host Build version set to: $env:APPVEYOR_BUILD_VERSION
|
||||
environment:
|
||||
WEBHOOK_URL:
|
||||
secure: gOKbXaZM9ImtMD5XrYITvdyZUW/az082G9OIN1EC1VaKiI9iefpxhBavJ6Al6CzIZvQ+3pxnLqjmNgA7cDc22wcj2kB4hSG5qhbTI8wGa8jLQ5L65nuRZ3vrIqghBz9G3GLglgZkg6eqH9r3Kqc6UzcpCGzxxPOqm550nRcIiUU=
|
||||
MO_VERSION: 2.4.0
|
||||
VER_STUB_NORMAL: dev-appveyor-
|
||||
VER_STUB_NIGHTLY: dev-nightly-
|
||||
build_script:
|
||||
- pwsh: >-
|
||||
# Maintenance comments:
|
||||
|
||||
# APPVEYOR_BUILD_FOLDER= "c:\projects\modorganizer-slug"
|
||||
|
||||
# -Need to update py3 version used to invoke unimake.py once in a while.
|
||||
|
||||
# -Need update MO_VERSION env variable after each release.
|
||||
|
||||
# -Always clones umbrella master
|
||||
|
||||
# -Will checkout all the branches matching the one that triggered the build on the main repo.
|
||||
|
||||
# End comments.
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
git clone --depth=1 --no-single-branch https://github.com/ModOrganizer2/modorganizer-umbrella.git c:\projects\modorganizer-umbrella
|
||||
|
||||
New-Item -ItemType Directory -Path ${env:APPVEYOR_BUILD_FOLDER}\modorganizer-build
|
||||
|
||||
cd c:\projects\modorganizer-umbrella
|
||||
|
||||
($env:APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH -eq $null) ? ($branch = $env:APPVEYOR_REPO_BRANCH) : ($branch = $env:APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH)
|
||||
|
||||
git checkout $(git show-ref --verify --quiet refs/remotes/origin/${branch} || echo '-b') ${branch}
|
||||
|
||||
C:\Python38-x64\python.exe unimake.py -d ${env:APPVEYOR_BUILD_FOLDER}\modorganizer-build -s Appveyor_Build=True -s Feature_Branch=${env:APPVEYOR_REPO_BRANCH} -s override_build_version=${env:APPVEYOR_BUILD_VERSION}
|
||||
|
||||
if($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode ) }
|
||||
test: off
|
||||
artifacts:
|
||||
- path: '\modorganizer-build\install\bin\ModOrganizer.exe'
|
||||
name: Mod.Organizer-$(APPVEYOR_BUILD_VERSION)
|
||||
- path: '\modorganizer-build\install\pdb\ModOrganizer.pdb'
|
||||
name: PDB-Mod.Organizer-$(APPVEYOR_BUILD_VERSION)
|
||||
deploy: off
|
||||
on_success:
|
||||
- ps: >-
|
||||
Set-Location -Path $env:APPVEYOR_BUILD_FOLDER
|
||||
|
||||
Invoke-RestMethod https://raw.githubusercontent.com/DiscordHooks/appveyor-discord-webhook/master/send.ps1 -o send.ps1
|
||||
|
||||
if($env:APPVEYOR_SCHEDULED_BUILD -ne 'True'){
|
||||
./send.ps1 success $env:WEBHOOK_URL
|
||||
}
|
||||
on_failure:
|
||||
- ps: >-
|
||||
Set-Location -Path $env:APPVEYOR_BUILD_FOLDER
|
||||
|
||||
Invoke-RestMethod https://raw.githubusercontent.com/DiscordHooks/appveyor-discord-webhook/master/send.ps1 -o send.ps1
|
||||
|
||||
if($env:APPVEYOR_SCHEDULED_BUILD -ne 'True'){
|
||||
./send.ps1 failure $env:WEBHOOK_URL
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
[
|
||||
|
||||
# for boost???
|
||||
# These are probably correct but might need a revisit as if you look at the boost documentation pages, it
|
||||
# can give you huge lists of alternate includes...
|
||||
{ symbol: [ "BOOST_FOREACH", "private", "<boost/foreach.hpp>", "public" ] },
|
||||
|
||||
{ include: [ "@\"boost/bind/.*\"", "private", "<boost/bind.hpp>", "public" ] },
|
||||
{ include: [ "@\"boost/algorithm/string/.*\"", "private", "<boost/algorithm/string.hpp>", "public" ] },
|
||||
{ include: [ "@\"boost/assign/.*\"", "private", "<boost/assign.hpp>", "public" ] },
|
||||
{ include: [ "@\"boost/filesystem/.*\"", "private", "<boost/filesystem.hpp>", "public" ] },
|
||||
{ include: [ "@\"boost/format/.*\"", "private", "<boost/format.hpp>", "public" ] },
|
||||
{ include: [ "@\"boost/function/.*\"", "private", "<boost/function.hpp>", "public" ] },
|
||||
{ include: [ "@\"boost/local/.*\"", "private", "<boost/locale.hpp>", "public" ] },
|
||||
{ include: [ "@\"boost/python/.*\"", "private", "<boost/python.hpp>", "public" ] },
|
||||
{ include: [ "@\"boost/signals2/.*\"", "private", "<boost/signals2.hpp>", "public" ] },
|
||||
{ include: [ "\"boost/smart_ptr/scoped_array.hpp\"", "private", "<boost/scoped_array.hpp>", "public" ] },
|
||||
{ include: [ "\"boost/smart_ptr/shared_ptr.hpp\"", "private", "<boost/shared_ptr.hpp>", "public" ] },
|
||||
# this appears to be excessive
|
||||
#{ include: [ "@\"boost/thread/.*\"", "private", "<boost/thread.hpp>", "public" ] },
|
||||
|
||||
# And this is specific to us
|
||||
{ include: [ "\"appconfig.inc\"", "private", "\"appconfig.h\"", "public" ] },
|
||||
|
||||
]
|
||||
|
||||
# Ones I don't yet know how to deal with
|
||||
#include "boost/fusion/container/vector/vector10_fwd.hpp" // for fusion
|
||||
#include "boost/iterator/iterator_facade.hpp" // for operator!=
|
||||
#include "boost/iterator/iterator_facade.hpp"
|
||||
@@ -1,33 +0,0 @@
|
||||
# This python script contains the configuration for scons
|
||||
# Copy this to scons_configure.py and adjust to taste.
|
||||
|
||||
# Path to your boost install - it should have a boost/ subdirectory and a stage/
|
||||
# subdirectory. The scons script will use stage/lib if there, or the appropriate
|
||||
# version for your compiler, if you installed the multiple-build version
|
||||
BOOSTPATH = r"C:\Apps\boost_1_55_0"
|
||||
|
||||
# Version of Visual Studio to use, if you wish to use a specific version. If you
|
||||
# don't specify a version, the latest will be picked.. See the scons manual for
|
||||
# supported values.
|
||||
#MSVC_VERSION = '10.0Exp'
|
||||
|
||||
# Path to your python install
|
||||
# You don't really need to set this up but you might if (say) you have a 32- and
|
||||
# 64-bit python install and scons has been installed for the 64 bit version
|
||||
#PYTHONPATH=r"C:\Apps\Python"
|
||||
|
||||
# Path to your QT install. This might constrain the version of MSVC you can use.
|
||||
# This seems to be set by QTCreator
|
||||
#QTDIR = r"C:\Apps\Qt\4.8.6"
|
||||
|
||||
# Path to 7-zip sources
|
||||
SEVENZIPPATH = r"C:\Apps\7-Zip\7z920"
|
||||
|
||||
# Path to zlib. Please read the README file for more information about how this
|
||||
# needs to be set up
|
||||
ZLIBPATH = r"C:\Apps\zlib-1.2.8"
|
||||
|
||||
# Source control programs. Sadly I can't get this information from qt, even
|
||||
# though you have to set it up in the configuration
|
||||
GIT = r"C:\Program Files\git\bin\git.exe"
|
||||
MERCURIAL = r"C:\Program Files\TortoiseHg\hg.exe"
|
||||
+108
-22
@@ -1,30 +1,100 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
add_executable(organizer)
|
||||
set_target_properties(organizer PROPERTIES OUTPUT_NAME "ModOrganizer")
|
||||
mo2_configure_executable(organizer
|
||||
WARNINGS OFF
|
||||
EXTRA_TRANSLATIONS ${MO2_SUPER_PATH}/game_gamebryo/src ${MO2_UIBASE_PATH}/src
|
||||
PRIVATE_DEPENDS
|
||||
uibase githubpp bsatk esptk archive usvfs lootcli boost::program_options
|
||||
Qt::WebEngineWidgets Qt::WebSockets)
|
||||
target_link_libraries(organizer PUBLIC Shlwapi)
|
||||
mo2_install_target(organizer)
|
||||
find_package(mo2-cmake CONFIG REQUIRED)
|
||||
|
||||
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/dlls.manifest.qt5"
|
||||
DESTINATION bin/dlls
|
||||
find_package(usvfs CONFIG REQUIRED)
|
||||
|
||||
find_package(mo2-uibase CONFIG REQUIRED)
|
||||
find_package(mo2-archive CONFIG REQUIRED)
|
||||
find_package(mo2-lootcli-header CONFIG REQUIRED)
|
||||
find_package(mo2-bsatk CONFIG REQUIRED)
|
||||
find_package(mo2-esptk CONFIG REQUIRED)
|
||||
find_package(mo2-dds-header CONFIG REQUIRED)
|
||||
find_package(mo2-libbsarch CONFIG REQUIRED)
|
||||
|
||||
find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets WebSockets)
|
||||
find_package(Boost CONFIG REQUIRED COMPONENTS program_options thread interprocess signals2 uuid accumulators)
|
||||
find_package(7zip CONFIG REQUIRED)
|
||||
find_package(lz4 CONFIG REQUIRED)
|
||||
find_package(ZLIB REQUIRED)
|
||||
|
||||
add_executable(organizer)
|
||||
set_target_properties(organizer PROPERTIES
|
||||
OUTPUT_NAME "ModOrganizer"
|
||||
WIN32_EXECUTABLE TRUE)
|
||||
|
||||
# disable translations because we want to be able to install somewhere else if
|
||||
# required
|
||||
mo2_configure_target(organizer WARNINGS 3 TRANSLATIONS OFF)
|
||||
|
||||
# we add translations "manually" to handle MO2_INSTALL_IS_BIN
|
||||
mo2_add_translations(organizer
|
||||
INSTALL_RELEASE
|
||||
INSTALL_DIRECTORY "${MO2_INSTALL_BIN}/translations"
|
||||
SOURCES ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
mo2_set_project_to_run_from_install(
|
||||
organizer EXECUTABLE ${CMAKE_INSTALL_PREFIX}/${MO2_INSTALL_BIN}/ModOrganizer.exe)
|
||||
|
||||
target_link_libraries(organizer PRIVATE
|
||||
Shlwapi Bcrypt
|
||||
usvfs::usvfs mo2::uibase mo2::archive mo2::libbsarch
|
||||
mo2::bsatk mo2::esptk mo2::lootcli-header
|
||||
Boost::program_options Boost::signals2 Boost::uuid Boost::accumulators
|
||||
Qt6::WebEngineWidgets Qt6::WebSockets Version Dbghelp)
|
||||
|
||||
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/dlls.manifest.qt6"
|
||||
DESTINATION ${MO2_INSTALL_BIN}/dlls
|
||||
CONFIGURATIONS Release RelWithDebInfo
|
||||
RENAME dlls.manifest)
|
||||
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/dlls.manifest.debug.qt6"
|
||||
DESTINATION ${MO2_INSTALL_BIN}/dlls
|
||||
CONFIGURATIONS Debug
|
||||
RENAME dlls.manifest)
|
||||
|
||||
install(DIRECTORY
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/stylesheets"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/tutorials"
|
||||
DESTINATION bin)
|
||||
if (NOT MO2_SKIP_TUTORIALS_INSTALL)
|
||||
install(
|
||||
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tutorials"
|
||||
DESTINATION ${MO2_INSTALL_BIN})
|
||||
endif()
|
||||
|
||||
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/resources/markdown.html"
|
||||
DESTINATION bin/resources)
|
||||
DESTINATION ${MO2_INSTALL_BIN}/resources)
|
||||
|
||||
mo2_deploy_qt(BINARIES ModOrganizer.exe uibase.dll plugins/bsa_packer.dll)
|
||||
# install ModOrganizer.exe itself
|
||||
install(FILES $<TARGET_FILE:organizer> DESTINATION ${MO2_INSTALL_BIN})
|
||||
|
||||
# install dependencies DLLs
|
||||
install(FILES $<TARGET_FILE:mo2::libbsarch> DESTINATION ${MO2_INSTALL_BIN}/dlls)
|
||||
install(FILES $<TARGET_FILE:mo2::archive> DESTINATION ${MO2_INSTALL_BIN}/dlls)
|
||||
install(FILES $<TARGET_FILE:7zip::7zip> DESTINATION ${MO2_INSTALL_BIN}/dlls)
|
||||
|
||||
# this may copy over the ones from uibase/usvfs
|
||||
# - when building with mob, this should not matter as the files should be identical
|
||||
# - when building standalone, this should help having matching USVFS DLL between the
|
||||
# build and the installation
|
||||
# - this may cause issue with uibase in standalone mode if the installed version does
|
||||
# not match the one used for the build, but there would be other issue anyway (e.g.
|
||||
# different uibase.dll between modorganizer and plugins)
|
||||
#
|
||||
install(FILES
|
||||
$<TARGET_FILE:mo2::uibase>
|
||||
$<TARGET_FILE:usvfs_x64::usvfs_dll>
|
||||
$<TARGET_FILE:usvfs_x86::usvfs_dll>
|
||||
$<TARGET_FILE:usvfs_x64::usvfs_proxy>
|
||||
$<TARGET_FILE:usvfs_x86::usvfs_proxy>
|
||||
DESTINATION ${MO2_INSTALL_BIN})
|
||||
|
||||
# do not install PDB if CMAKE_INSTALL_PREFIX is "bin"
|
||||
if (NOT MO2_INSTALL_IS_BIN)
|
||||
install(FILES $<TARGET_PDB_FILE:organizer> DESTINATION pdb)
|
||||
endif()
|
||||
|
||||
mo2_deploy_qt(
|
||||
DIRECTORY ${MO2_INSTALL_BIN}
|
||||
BINARIES ModOrganizer.exe $<TARGET_FILE_NAME:mo2::uibase>)
|
||||
|
||||
# set source groups for VS
|
||||
mo2_add_filter(NAME src/application GROUPS
|
||||
iuserinterface
|
||||
commandline
|
||||
@@ -43,19 +113,20 @@ mo2_add_filter(NAME src/browser GROUPS
|
||||
)
|
||||
|
||||
mo2_add_filter(NAME src/categories GROUPS
|
||||
categories
|
||||
categories
|
||||
categoriestable
|
||||
categoriesdialog
|
||||
categoriesdialog
|
||||
categoryimportdialog
|
||||
)
|
||||
|
||||
mo2_add_filter(NAME src/core GROUPS
|
||||
archivefiletree
|
||||
github
|
||||
inibakery
|
||||
installationmanager
|
||||
nexusinterface
|
||||
nxmaccessmanager
|
||||
organizercore
|
||||
plugincontainer
|
||||
apiuseraccount
|
||||
processrunner
|
||||
qdirfiletree
|
||||
@@ -63,6 +134,16 @@ mo2_add_filter(NAME src/core GROUPS
|
||||
uilocker
|
||||
)
|
||||
|
||||
mo2_add_filter(NAME src/extensions GROUPS
|
||||
game_features
|
||||
thememanager
|
||||
translationmanager
|
||||
extensionmanager
|
||||
extensionwatcher
|
||||
pluginmanager
|
||||
proxyqt
|
||||
)
|
||||
|
||||
mo2_add_filter(NAME src/dialogs GROUPS
|
||||
aboutdialog
|
||||
activatemodsdialog
|
||||
@@ -196,7 +277,9 @@ mo2_add_filter(NAME src/profiles GROUPS
|
||||
|
||||
mo2_add_filter(NAME src/proxies GROUPS
|
||||
downloadmanagerproxy
|
||||
gamefeaturesproxy
|
||||
modlistproxy
|
||||
extensionlistproxy
|
||||
organizerproxy
|
||||
pluginlistproxy
|
||||
proxyutils
|
||||
@@ -213,6 +296,7 @@ mo2_add_filter(NAME src/register GROUPS
|
||||
)
|
||||
|
||||
mo2_add_filter(NAME src/settings GROUPS
|
||||
extensionsettings
|
||||
settings
|
||||
settingsutilities
|
||||
)
|
||||
@@ -223,7 +307,9 @@ mo2_add_filter(NAME src/settingsdialog GROUPS
|
||||
settingsdialoggeneral
|
||||
settingsdialognexus
|
||||
settingsdialogpaths
|
||||
settingsdialogplugins
|
||||
settingsdialogextensions
|
||||
settingsdialogextensionrow
|
||||
settingsdialogextensioninfo
|
||||
settingsdialogworkarounds
|
||||
settingsdialogmodlist
|
||||
settingsdialogtheme
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
TEMPLATE = subdirs
|
||||
|
||||
SUBDIRS = bsatk \
|
||||
shared \
|
||||
uibase \
|
||||
esptk \
|
||||
organizer \
|
||||
hookdll \
|
||||
archive \
|
||||
helper \
|
||||
plugins \
|
||||
nxmhandler \
|
||||
BossDummy \
|
||||
pythonRunner \
|
||||
loot_cli
|
||||
|
||||
pythonRunner.depends = uibase
|
||||
plugins.depends = pythonRunner uibase
|
||||
hookdll.depends = shared
|
||||
organizer.depends = shared uibase plugins
|
||||
|
||||
CONFIG(debug, debug|release) {
|
||||
DESTDIR = $$PWD/../outputd
|
||||
} else {
|
||||
DESTDIR = $$PWD/../output
|
||||
}
|
||||
|
||||
STATICDATAPATH = $${DESTDIR}\\..\\tools\\static_data\\dlls
|
||||
DLLSPATH = $${DESTDIR}\\dlls
|
||||
|
||||
otherlibs.path = $$DLLSPATH
|
||||
otherlibs.files += $${STATICDATAPATH}\\7z.dll \
|
||||
$${BOOSTPATH}\\stage\\lib\\boost_python-vc*-mt-1*.dll
|
||||
|
||||
qtlibs.path = $$DLLSPATH
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4) {
|
||||
QTLIBNAMES += Core Gui Network OpenGL Script Sql Svg Qml Quick Webkit Widgets Xml XmlPatterns
|
||||
} else {
|
||||
QTLIBNAMES += Core Declarative Gui Network OpenGL Script Sql Svg Webkit Xml XmlPatterns
|
||||
}
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 5) {
|
||||
QTLIBNAMES += OpenGLWidgets
|
||||
}
|
||||
|
||||
QTLIBSUFFIX = $${QT_MAJOR_VERSION}.dll
|
||||
CONFIG(debug, debug|release): QTLIBSUFFIX = "d$${QTLIBSUFFIX}" # Can't use Debug: .. here, it ignores the line - no idea why, as it works in BossDummy.pro
|
||||
|
||||
for(QTNAME, QTLIBNAMES) {
|
||||
QTFILE = Qt$${QTNAME}
|
||||
qtlibs.files += $$[QT_INSTALL_BINS]\\$${QTFILE}$${QTLIBSUFFIX}
|
||||
}
|
||||
|
||||
INSTALLS += qtlibs otherlibs
|
||||
|
||||
OTHER_FILES +=\
|
||||
../SConstruct\
|
||||
../scons_configure.py\
|
||||
SConscript
|
||||
-179
@@ -1,179 +0,0 @@
|
||||
import ctypes
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
def resolve_name(source):
|
||||
# Get the actual name of the file, after reparse points and symlinks are
|
||||
# taken into account.
|
||||
GENERIC_READ = 0x80000000
|
||||
FILE_SHARE_READ = 0x1
|
||||
OPEN_EXISTING = 0x3
|
||||
FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
|
||||
handle = ctypes.windll.kernel32.CreateFileA(source,
|
||||
GENERIC_READ,
|
||||
FILE_SHARE_READ,
|
||||
None,
|
||||
OPEN_EXISTING,
|
||||
FILE_FLAG_BACKUP_SEMANTICS,
|
||||
None)
|
||||
# get the target
|
||||
FILE_NAME_NORMALIZED = 0x0
|
||||
FILE_NAME_OPENED = 0x8
|
||||
buff = ctypes.create_string_buffer(1024)
|
||||
res = ctypes.windll.kernel32.GetFinalPathNameByHandleA(handle,
|
||||
buff,
|
||||
ctypes.sizeof(buff),
|
||||
FILE_NAME_NORMALIZED)
|
||||
target = buff.value
|
||||
ctypes.windll.kernel32.CloseHandle(handle)
|
||||
return target
|
||||
|
||||
def search_up(path, target):
|
||||
while True:
|
||||
if os.path.exists(os.path.join(path, target)):
|
||||
return True
|
||||
npath = os.path.dirname(path)
|
||||
if npath == path:
|
||||
break
|
||||
path = npath
|
||||
return False
|
||||
|
||||
Import('qt_env')
|
||||
|
||||
env = qt_env.Clone()
|
||||
|
||||
modules = [
|
||||
'Core',
|
||||
'Gui',
|
||||
'Network',
|
||||
'Script',
|
||||
'Sql',
|
||||
'WebKit',
|
||||
'Xml',
|
||||
'XmlPatterns',
|
||||
'Declarative'
|
||||
]
|
||||
|
||||
if env['QT_MAJOR_VERSION'] > 4:
|
||||
modules += [
|
||||
'Widgets',
|
||||
'Qml',
|
||||
'WebKitWidgets'
|
||||
]
|
||||
|
||||
env.EnableQtModules(*modules)
|
||||
|
||||
env.Uic(env.Glob('*.ui'))
|
||||
|
||||
env.RequireLibraries('uibase', 'shared', 'bsatk', 'esptk')
|
||||
|
||||
env.AppendUnique(LIBS = [
|
||||
'shell32',
|
||||
'user32',
|
||||
'ole32',
|
||||
'advapi32',
|
||||
'gdi32',
|
||||
'shlwapi',
|
||||
'Psapi',
|
||||
'Version'
|
||||
])
|
||||
|
||||
# We have to 'persuade' moc to generate certain other targets and inject them
|
||||
# into the list of cpps
|
||||
other_sources = env.AddExtraMoc(env.Glob('*.h'))
|
||||
|
||||
for file in env.Glob('*.rc'):
|
||||
other_sources.append(env.RES(file))
|
||||
|
||||
# Note the order of this is important, or you can pick up the wrong report.h...
|
||||
# Doing appendunique seems to throw the moc code into a tizzy
|
||||
env['CPPPATH'] += [
|
||||
'../archive',
|
||||
'../plugins/gamefeatures',
|
||||
'.', # Why is this necessary?
|
||||
'${LOOTPATH}',
|
||||
'${BOOSTPATH}',
|
||||
]
|
||||
|
||||
#########################FUDGE###############################
|
||||
env['CPPPATH'] += [
|
||||
'../plugins/gameGamebryo',
|
||||
]
|
||||
#############################################################
|
||||
|
||||
env.AppendUnique(CPPDEFINES = [
|
||||
'_UNICODE',
|
||||
'_CRT_SECURE_NO_WARNINGS',
|
||||
'_SCL_SECURE_NO_WARNINGS',
|
||||
'BOOST_DISABLE_ASSERTS',
|
||||
'NDEBUG',
|
||||
'QT_MESSAGELOGCONTEXT'
|
||||
])
|
||||
|
||||
# Boost produces very long names with msvc truncates. Doesn't seem to cause
|
||||
# problems.
|
||||
# Also note to remove the -wd4100 I hacked the boost headers (tagged_argument.hpp)
|
||||
# appropriately.
|
||||
env.AppendUnique(CPPFLAGS = [ '-wd4503' ])
|
||||
|
||||
env.AppendUnique(LINKFLAGS = [
|
||||
'/SUBSYSTEM:WINDOWS',
|
||||
'${EXE_MANIFEST_DEPENDENCY}'
|
||||
])
|
||||
|
||||
# modeltest is optional and it doesn't compile anyway...
|
||||
cpp_files = [
|
||||
x for x in env.Glob('*.cpp', source = True)
|
||||
if x.name != 'modeltest.cpp' and x.name != 'aboutdialog.cpp' and \
|
||||
not x.name.startswith('moc_') # I think this is a strange bug
|
||||
]
|
||||
|
||||
about_env = env.Clone()
|
||||
# This is somewhat of a hack until I can work out a way of setting up a build
|
||||
# with all the repos without using millions of junction points
|
||||
try:
|
||||
target = resolve_name(Dir('.').srcnode().abspath)
|
||||
if search_up(target, '.hg'):
|
||||
hgid = subprocess.check_output([env['MERCURIAL'], 'id', '-i']).rstrip()
|
||||
elif search_up(target, '.git'):
|
||||
hgid = subprocess.check_output([env['GIT'], '-C', target, 'describe',
|
||||
'--tag']).rstrip()
|
||||
else:
|
||||
hgid = "Unknown"
|
||||
except:
|
||||
hgid = "Problem determining version"
|
||||
|
||||
# FIXME: It'd be much easier to stringify this in the source code
|
||||
about_env.AppendUnique(CPPDEFINES = [ 'HGID=\\"%s\\"' % hgid ])
|
||||
other_sources.append(about_env.StaticObject('aboutdialog.cpp'))
|
||||
|
||||
env.AppendUnique(LIBPATH = "${ZLIBPATH}/build")
|
||||
env.AppendUnique(LIBS = 'zlibstatic')
|
||||
|
||||
prog = env.Program('ModOrganizer',
|
||||
cpp_files + env.Glob('*.qrc') + other_sources)
|
||||
|
||||
env.InstallModule(prog)
|
||||
|
||||
for subdir in ('tutorials', 'stylesheets'):
|
||||
env.Install(os.path.join(env['INSTALL_PATH'], subdir),
|
||||
env.Glob(os.path.join(subdir, '*')))
|
||||
|
||||
# FIXME Sort the translations. Except they don't exist on the 1.2 branch
|
||||
|
||||
res = env['QT_USED_MODULES']
|
||||
Return('res')
|
||||
|
||||
"""
|
||||
CONFIG(debug, debug|release) {
|
||||
} else {
|
||||
QMAKE_CXXFLAGS += /Zi /GL
|
||||
QMAKE_LFLAGS += /DEBUG /LTCG /OPT:REF /OPT:ICF
|
||||
}
|
||||
|
||||
TRANSLATIONS = organizer_en.ts
|
||||
|
||||
|
||||
QMAKE_POST_LINK += xcopy /y /s /I $$quote($$BASEDIR\\*.qm) $$quote($$DSTDIR)\\translations $$escape_expand(\\n)
|
||||
|
||||
"""
|
||||
+1
-1
@@ -127,7 +127,7 @@
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string notr="true"><html><head/><body><p>Copyright © 2011-2016 Sebastian Herbord<br/>Copyright © 2016-2021 Mod Organizer 2 Contributors</p></body></html></string>
|
||||
<string notr="true"><html><head/><body><p>Copyright © 2011-2016 Sebastian Herbord<br/>Copyright © 2016-2023 Mod Organizer 2 Contributors</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -28,6 +28,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <QtGlobal>
|
||||
|
||||
using namespace MOBase;
|
||||
|
||||
ActivateModsDialog::ActivateModsDialog(SaveGameInfo::MissingAssets const& missingAssets,
|
||||
QWidget* parent)
|
||||
: TutorableDialog("ActivateMods", parent), ui(new Ui::ActivateModsDialog)
|
||||
|
||||
@@ -24,9 +24,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "tutorabledialog.h"
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class QString;
|
||||
class QWidget;
|
||||
#include <QString>
|
||||
#include <QWidget>
|
||||
|
||||
#include <set>
|
||||
|
||||
@@ -49,7 +48,7 @@ public:
|
||||
* @param missingPlugins a map containing missing plugins that need to be activated
|
||||
* @param parent ... Defaults to 0.
|
||||
**/
|
||||
explicit ActivateModsDialog(SaveGameInfo::MissingAssets const& missingAssets,
|
||||
explicit ActivateModsDialog(MOBase::SaveGameInfo::MissingAssets const& missingAssets,
|
||||
QWidget* parent = 0);
|
||||
~ActivateModsDialog();
|
||||
|
||||
|
||||
@@ -20,8 +20,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
|
||||
#ifndef ARCHIVEFILENETRY_H
|
||||
#define ARCHIVEFILENTRY_H
|
||||
|
||||
#include "archive.h"
|
||||
#include "ifiletree.h"
|
||||
#include <archive/archive.h>
|
||||
#include <uibase/ifiletree.h>
|
||||
|
||||
/**
|
||||
*
|
||||
|
||||
+11
-15
@@ -74,7 +74,7 @@ void CategoryFactory::loadCategories()
|
||||
bool ok = false;
|
||||
int temp = iter->toInt(&ok);
|
||||
if (!ok) {
|
||||
log::error(tr("invalid category id {}").toStdString(), iter->constData());
|
||||
log::error(tr("invalid category id {0}"), iter->constData());
|
||||
}
|
||||
nexusCats.push_back(NexusCategory("Unknown", temp));
|
||||
}
|
||||
@@ -84,8 +84,7 @@ void CategoryFactory::loadCategories()
|
||||
int id = cells[0].toInt(&cell0Ok);
|
||||
int parentID = cells[3].trimmed().toInt(&cell3Ok);
|
||||
if (!cell0Ok || !cell3Ok) {
|
||||
log::error(tr("invalid category line {}: {}").toStdString(), lineNum,
|
||||
line.constData());
|
||||
log::error(tr("invalid category line {0}: {1}"), lineNum, line.constData());
|
||||
}
|
||||
addCategory(id, QString::fromUtf8(cells[1].constData()), nexusCats, parentID);
|
||||
} else if (cells.count() == 3) {
|
||||
@@ -94,14 +93,13 @@ void CategoryFactory::loadCategories()
|
||||
int id = cells[0].toInt(&cell0Ok);
|
||||
int parentID = cells[2].trimmed().toInt(&cell3Ok);
|
||||
if (!cell0Ok || !cell3Ok) {
|
||||
log::error(tr("invalid category line {}: {}").toStdString(), lineNum,
|
||||
line.constData());
|
||||
log::error(tr("invalid category line {0}: {1}"), lineNum, line.constData());
|
||||
}
|
||||
|
||||
addCategory(id, QString::fromUtf8(cells[1].constData()),
|
||||
std::vector<NexusCategory>(), parentID);
|
||||
} else {
|
||||
log::error(tr("invalid category line {}: {} ({} cells)").toStdString(), lineNum,
|
||||
log::error(tr("invalid category line {0}: {1} ({2} cells)"), lineNum,
|
||||
line.constData(), cells.count());
|
||||
}
|
||||
}
|
||||
@@ -122,19 +120,17 @@ void CategoryFactory::loadCategories()
|
||||
bool ok = false;
|
||||
int nexID = nexCells[2].toInt(&ok);
|
||||
if (!ok) {
|
||||
log::error(tr("invalid nexus ID {}").toStdString(),
|
||||
nexCells[2].constData());
|
||||
log::error(tr("invalid nexus ID {}"), nexCells[2].constData());
|
||||
}
|
||||
int catID = nexCells[0].toInt(&ok);
|
||||
if (!ok) {
|
||||
log::error(tr("invalid category id {}").toStdString(),
|
||||
nexCells[0].constData());
|
||||
log::error(tr("invalid category id {}"), nexCells[0].constData());
|
||||
}
|
||||
m_NexusMap.insert_or_assign(nexID, NexusCategory(nexName, nexID));
|
||||
m_NexusMap.at(nexID).setCategoryID(catID);
|
||||
} else {
|
||||
log::error(tr("invalid nexus category line {}: {} ({} cells)").toStdString(),
|
||||
lineNum, nexLine.constData(), nexCells.count());
|
||||
log::error(tr("invalid nexus category line {0}: {1} ({2} cells)"), lineNum,
|
||||
nexLine.constData(), nexCells.count());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -394,7 +390,7 @@ bool CategoryFactory::isDescendantOfImpl(int id, int parentID,
|
||||
return isDescendantOfImpl(m_Categories[index].parentID(), parentID, seen);
|
||||
}
|
||||
} else {
|
||||
log::warn(tr("{} is no valid category id").toStdString(), id);
|
||||
log::warn(tr("{} is no valid category id"), id);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -513,11 +509,11 @@ unsigned int CategoryFactory::resolveNexusID(int nexusID) const
|
||||
auto result = m_NexusMap.find(nexusID);
|
||||
if (result != m_NexusMap.end()) {
|
||||
if (m_IDMap.count(result->second.categoryID())) {
|
||||
log::debug(tr("nexus category id {} maps to internal {}").toStdString(), nexusID,
|
||||
log::debug(tr("nexus category id {0} maps to internal {1}"), nexusID,
|
||||
m_IDMap.at(result->second.categoryID()));
|
||||
return m_IDMap.at(result->second.categoryID());
|
||||
}
|
||||
}
|
||||
log::debug(tr("nexus category id {} not mapped").toStdString(), nexusID);
|
||||
log::debug(tr("nexus category id {} not mapped"), nexusID);
|
||||
return 0U;
|
||||
}
|
||||
|
||||
@@ -148,8 +148,9 @@ void CategoriesDialog::commitChanges()
|
||||
|
||||
for (int i = 0; i < ui->categoriesTable->rowCount(); ++i) {
|
||||
int index = ui->categoriesTable->verticalHeader()->logicalIndex(i);
|
||||
QVariantList nexusData =
|
||||
ui->categoriesTable->item(index, 3)->data(Qt::UserRole).toList();
|
||||
QVariantList nexusData;
|
||||
if (ui->categoriesTable->item(index, 3) != nullptr)
|
||||
nexusData = ui->categoriesTable->item(index, 3)->data(Qt::UserRole).toList();
|
||||
std::vector<CategoryFactory::NexusCategory> nexusCats;
|
||||
for (auto nexusCat : nexusData) {
|
||||
nexusCats.push_back(CategoryFactory::NexusCategory(
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user