Merge pull request #102 from ModOrganizer2/update-cmake-common-qt6

Update following cmake_common changes.
This commit is contained in:
Mikaël Capelle
2022-04-28 17:50:04 +02:00
committed by GitHub
10 changed files with 125 additions and 362 deletions
+5 -10
View File
@@ -1,18 +1,13 @@
cmake_minimum_required(VERSION 3.16)
project(plugin_python)
set(project_type plugin)
set(enable_warnings OFF)
set(create_translations ON)
set(additional_translations "${CMAKE_SOURCE_DIR}/src/runner")
if(DEFINED DEPENDENCIES_DIR)
include(${DEPENDENCIES_DIR}/modorganizer_super/cmake_common/project.cmake)
include(${DEPENDENCIES_DIR}/modorganizer_super/cmake_common/mo2.cmake)
else()
include(../cmake_common/project.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/../cmake_common/mo2.cmake)
endif()
add_subdirectory(src/proxy)
project(plugin_python)
# order matters!
add_subdirectory(src/runner)
add_subdirectory(src/proxy)
-108
View File
@@ -1,108 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en_US">
<context>
<name>ProxyPython</name>
<message>
<location filename="proxy/proxypython.cpp" line="159"/>
<source>Python Initialization failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="160"/>
<source>On a previous start the Python Plugin failed to initialize.
Either the value in Settings-&gt;Plugins-&gt;ProxyPython-&gt;plugin_dir is set incorrectly or it is empty and auto-detection doesn&apos;t work for whatever reason.
Do you want to try initializing python again (at the risk of another crash)?
Suggestion: Select &quot;no&quot;, and click the warning sign for further help. Afterwards you have to re-enable the python plugin.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="204"/>
<source>Python Proxy</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="214"/>
<source>Proxy Plugin to allow plugins written in python to be loaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="300"/>
<source>Python not installed or not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="303"/>
<source>Python version is incompatible</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="306"/>
<source>Invalid python path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="309"/>
<source>Initializing Python failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="312"/>
<source>Python auto-detection failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="315"/>
<source>ModOrganizer path contains a semicolon</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="318"/>
<source>invalid problem key %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="327"/>
<source>Some MO plugins require the python interpreter to be installed. These plugins will not even show up in settings-&amp;gt;plugins.&lt;br&gt;If you want to use those plugins, please install the 32-bit version of Python 2.7.x from &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;.&lt;br&gt;This is only required to use some extended functionality in MO, you do not need Python to play the game.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="333"/>
<source>The loaded version of python does not match the expected 3.10.&lt;br&gt;This may cause some or all python plugins to stop working.&lt;br&gt;The expected python libraries should come bundled with MO2,&lt;br&gt;you may want to perform a clean install of the application.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="339"/>
<source>Please set python_dir in Settings-&gt;Plugins-&gt;ProxyPython to the path of your python 2.7 (32 bit) installation.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="342"/>
<source>The auto-detection of the python path failed. I don&apos;t know why this would happen but you can try to fix it by setting python_dir in Settings-&gt;Plugins-&gt;ProxyPython to the path of your python 2.7 (32 bit) installation.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="346"/>
<source>Sorry, I don&apos;t know any details. Most likely your python installation is not supported.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxy/proxypython.cpp" line="349"/>
<source>The path to Mod Organizer (%1) contains a semicolon. &lt;br&gt;While this is legal on NTFS drives there is a lot of software that doesn&apos;t handle it correctly.&lt;br&gt;Unfortunately MO depends on libraries that seem to fall into that group.&lt;br&gt;As a result the python plugin can&apos;t be loaded.&lt;br&gt;The only solution I can offer is to remove the semicolon / move MO to a path without a semicolon.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="runner/error.h" line="68"/>
<source>An unexpected C++ exception was thrown in python code.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="runner/error.h" line="117"/>
<source>An unknown exception was thrown in python code.</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>
+6 -10
View File
@@ -1,12 +1,8 @@
cmake_minimum_required(VERSION 3.16)
# appveyor does not build modorganizer in its standard location, so use
# DEPENDENCIES_DIR to find cmake_common
if(DEFINED DEPENDENCIES_DIR)
include(${DEPENDENCIES_DIR}/modorganizer_super/cmake_common/src.cmake)
else()
include(../../../cmake_common/src.cmake)
endif()
requires_library(python)
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_SOURCE_DIR}/src/runner)
add_library(plugin_python SHARED)
mo2_configure_plugin(plugin_python
WARNINGS OFF
EXTRA_TRANSLATIONS ${CMAKE_CURRENT_SOURCE_DIR}/../runner)
target_link_libraries(plugin_python PRIVATE pythonrunner)
mo2_install_target(plugin_python)
-32
View File
@@ -1,32 +0,0 @@
import os
Import('qt_env')
env = qt_env.Clone()
env.AppendUnique(CPPDEFINES = [
'PROXYPYTHON_LIBRARY',
# suppress a few warnings caused by boost vs vc++ paranoia
'_SCL_SECURE_NO_WARNINGS'
])
env.AppendUnique(CPPPATH = [
'${BOOSTPATH}',
'..\\..\\pythonRunner'
])
env.AppendUnique(LIBS = 'shell32')
runner = env.File(os.path.join('..', '..', 'pythonRunner', 'pythonRunner.dll'))
runner_env = env.Clone()
runner_env.AppendUnique(CPPDEFINES = 'SCONS_BUILD')
runner_env.AppendUnique(CPPPATH = runner.dir)
# There's a whole load of unused C++ files in here.
lib = env.SharedLibrary('proxyPython', [ 'proxypython.cpp' ])
env.InstallModule(lib)
res = env['QT_USED_MODULES']
Return('res')
+88
View File
@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en_US">
<context>
<name>ProxyPython</name>
<message>
<location filename="proxypython.cpp" line="81"/>
<source>Python Initialization failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxypython.cpp" line="82"/>
<source>On a previous start the Python Plugin failed to initialize.
Do you want to try initializing python again (at the risk of another crash)?
Suggestion: Select &quot;no&quot;, and click the warning sign for further help. Afterwards you have to re-enable the python plugin.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxypython.cpp" line="118"/>
<source>Python Proxy</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxypython.cpp" line="128"/>
<source>Proxy Plugin to allow plugins written in python to be loaded</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxypython.cpp" line="201"/>
<source>ModOrganizer path contains a semicolon</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxypython.cpp" line="203"/>
<source>Python DLL not found</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxypython.cpp" line="205"/>
<source>Invalid Python DLL</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxypython.cpp" line="207"/>
<source>Initializing Python failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxypython.cpp" line="209"/>
<location filename="proxypython.cpp" line="231"/>
<source>invalid problem key %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxypython.cpp" line="218"/>
<source>The path to Mod Organizer (%1) contains a semicolon. &lt;br&gt;While this is legal on NTFS drives, many softwares do not handle it correctly.&lt;br&gt;Unfortunately MO depends on libraries that seem to fall into that group.&lt;br&gt;As a result the python plugin cannot be loaded, and the only solution we canoffer is to remove the semicolon or move MO to a path without a semicolon.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxypython.cpp" line="224"/>
<source>The Python plugin DLL was not found, maybe your antivirus deleted it. Re-installing MO2 might fix the problem.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxypython.cpp" line="226"/>
<source>The Python plugin DLL is invalid, maybe your antivirus is blocking it. Re-installing MO2 and adding exclusions for it to your AV might fix the problem.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="proxypython.cpp" line="229"/>
<source>The initialization of the Python plugin DLL failed, unfortunately without any details.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<location filename="../runner/error.h" line="68"/>
<source>An unexpected C++ exception was thrown in python code.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../runner/error.h" line="117"/>
<source>An unknown exception was thrown in python code.</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>
-48
View File
@@ -1,48 +0,0 @@
#-------------------------------------------------
#
# Project created by QtCreator 2013-04-05T18:26:04
#
#-------------------------------------------------
TARGET = proxyPython
TEMPLATE = lib
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += plugins
CONFIG += dll
CONFIG(release, debug|release) {
QMAKE_CXXFLAGS += /Zi
QMAKE_LFLAGS += /DEBUG
}
DEFINES += PROXYPYTHON_LIBRARY
# suppress a few warnings caused by boost vs vc++ paranoia
DEFINES += _SCL_SECURE_NO_WARNINGS
SOURCES += proxypython.cpp
HEADERS += proxypython.h \
resource.h
OTHER_FILES += \
proxypython.json \
SConscript
RC_FILE +=
include(../plugin_template.pri)
INCLUDEPATH += "../../pythonRunner" "$${BOOSTPATH}"
WINPWD = $$PWD
WINPWD ~= s,/,$$QMAKE_DIR_SEP,g
#QMAKE_POST_LINK += SET VS90COMNTOOLS=%VS100COMNTOOLS% $$escape_expand(\\n)
#QMAKE_POST_LINK += copy $$(PYTHONPATH)\\lib\\site-packages\\sip.pyd $$quote($$DSTDIR)\\plugins\\data\\ $$escape_expand(\\n)
#QMAKE_POST_LINK += copy $$(PYTHONPATH)\\lib\\site-packages\\PyQt4\\QtCore.pyd $$quote($$DSTDIR)\\plugins\\data\\PyQt4\\ $$escape_expand(\\n)
#QMAKE_POST_LINK += copy $$(PYTHONPATH)\\lib\\site-packages\\PyQt4\\QtGui.pyd $$quote($$DSTDIR)\\plugins\\data\\PyQt4\\ $$escape_expand(\\n)
+23 -25
View File
@@ -1,30 +1,28 @@
cmake_minimum_required(VERSION 3.16)
project(pythonrunner)
set(project_type plugin)
set(enable_warnings OFF)
set(enable_bigobj ON)
set(install_dir bin/plugins/data)
set(create_translations OFF)
# need to find Boost here with a dummy component to get Boost_LIBRARY_DIRS
find_package(Boost COMPONENTS thread REQUIRED)
add_compile_definitions(
QT_NO_KEYWORDS
PYTHONRUNNER_LIBRARY)
add_library(pythonrunner SHARED)
mo2_configure_library(pythonrunner
WARNINGS OFF
BIGOBJ ON
AUTOMOC ON
TRANSLATIONS OFF
PRIVATE_DEPENDS uibase boost Qt::Core
)
target_include_directories(pythonrunner PRIVATE ${PYTHON_ROOT}/Include)
# appveyor does not build modorganizer in its standard location, so use
# DEPENDENCIES_DIR to find cmake_common
if(DEFINED DEPENDENCIES_DIR)
include(${DEPENDENCIES_DIR}/modorganizer_super/cmake_common/project.cmake)
include(${DEPENDENCIES_DIR}/modorganizer_super/cmake_common/src.cmake)
else()
include(../../../cmake_common/project.cmake)
include(../../../cmake_common/src.cmake)
endif()
# this is kind of broken but it only works with this...
target_link_directories(pythonrunner
PRIVATE
${MO2_INSTALL_LIBS_PATH}
${Boost_LIBRARY_DIRS})
target_compile_definitions(pythonrunner
PRIVATE QT_NO_KEYWORDS PYTHONRUNNER_LIBRARY)
mo2_install_target(pythonrunner INSTALLDIR bin/plugins/data)
requires_project(game_features)
requires_library(python)
add_filter(NAME src/converters GROUPS
mo2_add_filter(NAME src/converters GROUPS
converters
pythonutils
shared_ptr_converter
@@ -32,19 +30,19 @@ add_filter(NAME src/converters GROUPS
variant_helper
)
add_filter(NAME src/runner GROUPS
mo2_add_filter(NAME src/runner GROUPS
pythonrunner
pylogger
widgets
)
add_filter(NAME src/utils GROUPS
mo2_add_filter(NAME src/utils GROUPS
error
gilock
sipapiaccess
)
add_filter(NAME src/wrappers GROUPS
mo2_add_filter(NAME src/wrappers GROUPS
gamefeatureswrappers
proxypluginwrappers
pythonwrapperutilities
-63
View File
@@ -1,63 +0,0 @@
Import('qt_env')
env = qt_env.Clone()
env.EnableQtModules('Core', 'Gui', 'Widgets')
env.AppendUnique(CPPDEFINES = 'PYTHONRUNNER_LIBRARY')
# suppress a few warnings caused by boost vs vc++ paranoia
# NB HAVE_ROUND causes a warning because it's defined in pythonrunner.cpp
env.AppendUnique(CPPDEFINES = [
'_SCL_SECURE_NO_WARNINGS',
'HAVE_ROUND'
])
# Boost produces very long names with msvc truncates. Doesn't seem to cause
# problems.
env.AppendUnique(CPPFLAGS = [ '-wd4503' ])
# QMAKE_CXXFLAGS += /Zi
# QMAKE_LFLAGS += /DEBUG
env.RequireLibraries('uibase')
# AppendUnique appears not to work with QT4
env['CPPPATH'] += [
'${BOOSTPATH}',
'${PYTHONPATH}\\include',
]
env.AppendUnique(LIBS = [
'python27', # Could be done better
])
env.AppendUnique(LIBPATH = [
'${PYTHONPATH}/libs', # Could be done better
])
# We have to 'persuade' moc to generate certain other targets and inject them
# into the list of cpps
targets = env.AddExtraMoc(env.Glob('*.h'))
# pythontoolwrapper doesnt compile and isn't in the project file
cpp_files = [
x for x in Glob('*.cpp') if x.name != 'pythontoolwrapper.cpp'
]
lib = env.SharedLibrary('pythonRunner', cpp_files + targets)
env.InstallModule(lib, 'plugins/data')
# However...
# we do need boost-python and pythonvv.dll and pythonvv.zip (though the last
# isn't needed to just bring up the module)
#env.Pseudo('install')
#env.Depends('install',
# (env.Install('${INSTALL_PATH}', 'pyCfg.py'),
# env.Install(os.path.join('${INSTALL_PATH}', 'data'),
# ( ui, rc, 'settings.json' )),
# ))
res = env['QT_USED_MODULES']
Return('res')
-66
View File
@@ -1,66 +0,0 @@
#-------------------------------------------------
#
# Project created by QtCreator 2013-09-01T15:55:01
#
#-------------------------------------------------
TARGET = pythonRunner
TEMPLATE = lib
CONFIG += dll
CONFIG += warn_on
QT += widgets
DEFINES += PYTHONRUNNER_LIBRARY
# suppress a few warnings caused by boost vs vc++ paranoia
DEFINES += _SCL_SECURE_NO_WARNINGS HAVE_ROUND NOMINMAX
!include(../LocalPaths.pri) {
message("paths to required libraries need to be set up in LocalPaths.pri")
}
SOURCES += pythonrunner.cpp \
gilock.cpp \
error.cpp \
pythonpluginwrapper.cpp \
proxypluginwrappers.cpp
HEADERS += pythonrunner.h \
gilock.h \
error.h \
uibasewrappers.h \
pythonpluginwrapper.h \
proxypluginwrappers.h
CONFIG(debug, debug|release) {
LIBS += -L$$OUT_PWD/../uibase/debug
} else {
LIBS += -L$$OUT_PWD/../uibase/release
msvc:QMAKE_CXXFLAGS += /Zi
msvc:QMAKE_LFLAGS += /DEBUG
}
INCLUDEPATH += "$${BOOSTPATH}" "$${PYTHONPATH}/include" "$${PYTHONPATH}/Lib/site-packages/PyQt6/include" ../uibase
LIBS += -L"$${PYTHONPATH}/libs" -L"$${BOOSTPATH}/stage/lib"
LIBS += -lpython27
LIBS += -luibase
CONFIG(debug, debug|release) {
SRCDIR = $$OUT_PWD/debug
DSTDIR = $$PWD/../../outputd
} else {
SRCDIR = $$OUT_PWD/release
DSTDIR = $$PWD/../../output
}
SRCDIR ~= s,/,$$QMAKE_DIR_SEP,g
DSTDIR ~= s,/,$$QMAKE_DIR_SEP,g
QMAKE_POST_LINK += xcopy /y /s /i $$quote($$SRCDIR\\$${TARGET}*.dll) $$quote($$DSTDIR)\\plugins\\data $$escape_expand(\\n)
QMAKE_POST_LINK += xcopy /y /I $$quote($$SRCDIR\\$${TARGET}*.pdb) $$quote($$DSTDIR)\\plugins $$escape_expand(\\n)
OTHER_FILES += \
SConscript\
CMakeLists.txt
+3
View File
@@ -37,6 +37,9 @@
#include <boost/mp11.hpp>
#endif
#include <fmt/format.h>
#include <fmt/xchar.h>
#include "tuple_helper.h"
#include "variant_helper.h"
#include "converters.h"