Merge pull request #794 from Scrumplex/resolve-jars-dynamically
This commit is contained in:
commit
f1902a4471
@ -238,9 +238,6 @@ elseif(UNIX)
|
|||||||
# Set RPATH
|
# Set RPATH
|
||||||
SET(Launcher_BINARY_RPATH "$ORIGIN/")
|
SET(Launcher_BINARY_RPATH "$ORIGIN/")
|
||||||
|
|
||||||
# jars path is determined on runtime, relative to "Application root path", generally /usr or the root of the portable bundle
|
|
||||||
set(Launcher_APP_BINARY_DEFS "-DLAUNCHER_JARS_LOCATION=${JARS_DEST_DIR}")
|
|
||||||
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${Launcher_Desktop} DESTINATION ${LAUNCHER_DESKTOP_DEST_DIR})
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${Launcher_Desktop} DESTINATION ${LAUNCHER_DESKTOP_DEST_DIR})
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${Launcher_MetaInfo} DESTINATION ${LAUNCHER_METAINFO_DEST_DIR})
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${Launcher_MetaInfo} DESTINATION ${LAUNCHER_METAINFO_DEST_DIR})
|
||||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${Launcher_SVG} DESTINATION ${LAUNCHER_ICON_DEST_DIR})
|
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${Launcher_SVG} DESTINATION ${LAUNCHER_ICON_DEST_DIR})
|
||||||
|
@ -334,10 +334,6 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
|
|||||||
// on macOS, touch the root to force Finder to reload the .app metadata (and fix any icon change issues)
|
// on macOS, touch the root to force Finder to reload the .app metadata (and fix any icon change issues)
|
||||||
FS::updateTimestamp(m_rootPath);
|
FS::updateTimestamp(m_rootPath);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef LAUNCHER_JARS_LOCATION
|
|
||||||
m_jarsPath = TOSTRING(LAUNCHER_JARS_LOCATION);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString adjustedBy;
|
QString adjustedBy;
|
||||||
@ -1562,13 +1558,22 @@ shared_qobject_ptr<Meta::Index> Application::metadataIndex()
|
|||||||
return m_metadataIndex;
|
return m_metadataIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString Application::getJarsPath()
|
QString Application::getJarPath(QString jarFile)
|
||||||
{
|
{
|
||||||
if(m_jarsPath.isEmpty())
|
QStringList potentialPaths = {
|
||||||
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD)
|
||||||
|
FS::PathCombine(m_rootPath, "share/jars"),
|
||||||
|
#endif
|
||||||
|
FS::PathCombine(m_rootPath, "jars"),
|
||||||
|
FS::PathCombine(applicationDirPath(), "jars")
|
||||||
|
};
|
||||||
|
for(QString p : potentialPaths)
|
||||||
{
|
{
|
||||||
return FS::PathCombine(QCoreApplication::applicationDirPath(), "jars");
|
QString jarPath = FS::PathCombine(p, jarFile);
|
||||||
|
if (QFileInfo(jarPath).isFile())
|
||||||
|
return jarPath;
|
||||||
}
|
}
|
||||||
return FS::PathCombine(m_rootPath, m_jarsPath);
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
QString Application::getMSAClientID()
|
QString Application::getMSAClientID()
|
||||||
|
@ -157,7 +157,11 @@ public:
|
|||||||
|
|
||||||
shared_qobject_ptr<Meta::Index> metadataIndex();
|
shared_qobject_ptr<Meta::Index> metadataIndex();
|
||||||
|
|
||||||
QString getJarsPath();
|
/*!
|
||||||
|
* Finds and returns the full path to a jar file.
|
||||||
|
* Returns a null-string if it could not be found.
|
||||||
|
*/
|
||||||
|
QString getJarPath(QString jarFile);
|
||||||
|
|
||||||
QString getMSAClientID();
|
QString getMSAClientID();
|
||||||
QString getCurseKey();
|
QString getCurseKey();
|
||||||
@ -241,7 +245,6 @@ private:
|
|||||||
std::shared_ptr<GenericPageProvider> m_globalSettingsProvider;
|
std::shared_ptr<GenericPageProvider> m_globalSettingsProvider;
|
||||||
std::map<QString, std::unique_ptr<ITheme>> m_themes;
|
std::map<QString, std::unique_ptr<ITheme>> m_themes;
|
||||||
std::unique_ptr<MCEditTool> m_mcedit;
|
std::unique_ptr<MCEditTool> m_mcedit;
|
||||||
QString m_jarsPath;
|
|
||||||
QSet<QString> m_features;
|
QSet<QString> m_features;
|
||||||
|
|
||||||
QMap<QString, std::shared_ptr<BaseProfilerFactory>> m_profilers;
|
QMap<QString, std::shared_ptr<BaseProfilerFactory>> m_profilers;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "JavaCommon.h"
|
#include "JavaCommon.h"
|
||||||
|
#include "java/JavaUtils.h"
|
||||||
#include "ui/dialogs/CustomMessageBox.h"
|
#include "ui/dialogs/CustomMessageBox.h"
|
||||||
#include <MMCStrings.h>
|
#include <MMCStrings.h>
|
||||||
|
|
||||||
@ -65,6 +66,13 @@ void JavaCommon::javaBinaryWasBad(QWidget *parent, JavaCheckResult result)
|
|||||||
CustomMessageBox::selectable(parent, QObject::tr("Java test failure"), text, QMessageBox::Warning)->show();
|
CustomMessageBox::selectable(parent, QObject::tr("Java test failure"), text, QMessageBox::Warning)->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JavaCommon::javaCheckNotFound(QWidget *parent)
|
||||||
|
{
|
||||||
|
QString text;
|
||||||
|
text += QObject::tr("Java checker library could not be found. Please check your installation");
|
||||||
|
CustomMessageBox::selectable(parent, QObject::tr("Java test failure"), text, QMessageBox::Warning)->show();
|
||||||
|
}
|
||||||
|
|
||||||
void JavaCommon::TestCheck::run()
|
void JavaCommon::TestCheck::run()
|
||||||
{
|
{
|
||||||
if (!JavaCommon::checkJVMArgs(m_args, m_parent))
|
if (!JavaCommon::checkJVMArgs(m_args, m_parent))
|
||||||
@ -72,6 +80,11 @@ void JavaCommon::TestCheck::run()
|
|||||||
emit finished();
|
emit finished();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (JavaUtils::getJavaCheckPath().isEmpty()) {
|
||||||
|
javaCheckNotFound(m_parent);
|
||||||
|
emit finished();
|
||||||
|
return;
|
||||||
|
}
|
||||||
checker.reset(new JavaChecker());
|
checker.reset(new JavaChecker());
|
||||||
connect(checker.get(), SIGNAL(checkFinished(JavaCheckResult)), this,
|
connect(checker.get(), SIGNAL(checkFinished(JavaCheckResult)), this,
|
||||||
SLOT(checkFinished(JavaCheckResult)));
|
SLOT(checkFinished(JavaCheckResult)));
|
||||||
|
@ -10,12 +10,14 @@ namespace JavaCommon
|
|||||||
{
|
{
|
||||||
bool checkJVMArgs(QString args, QWidget *parent);
|
bool checkJVMArgs(QString args, QWidget *parent);
|
||||||
|
|
||||||
// Show a dialog saying that the Java binary was not usable
|
|
||||||
void javaBinaryWasBad(QWidget *parent, JavaCheckResult result);
|
|
||||||
// Show a dialog saying that the Java binary was not usable because of bad options
|
|
||||||
void javaArgsWereBad(QWidget *parent, JavaCheckResult result);
|
|
||||||
// Show a dialog saying that the Java binary was usable
|
// Show a dialog saying that the Java binary was usable
|
||||||
void javaWasOk(QWidget *parent, JavaCheckResult result);
|
void javaWasOk(QWidget *parent, JavaCheckResult result);
|
||||||
|
// Show a dialog saying that the Java binary was not usable because of bad options
|
||||||
|
void javaArgsWereBad(QWidget *parent, JavaCheckResult result);
|
||||||
|
// Show a dialog saying that the Java binary was not usable
|
||||||
|
void javaBinaryWasBad(QWidget *parent, JavaCheckResult result);
|
||||||
|
// Show a dialog if we couldn't find Java Checker
|
||||||
|
void javaCheckNotFound(QWidget *parent);
|
||||||
|
|
||||||
class TestCheck : public QObject
|
class TestCheck : public QObject
|
||||||
{
|
{
|
||||||
|
@ -16,7 +16,13 @@ JavaChecker::JavaChecker(QObject *parent) : QObject(parent)
|
|||||||
|
|
||||||
void JavaChecker::performCheck()
|
void JavaChecker::performCheck()
|
||||||
{
|
{
|
||||||
QString checkerJar = FS::PathCombine(APPLICATION->getJarsPath(), "JavaCheck.jar");
|
QString checkerJar = JavaUtils::getJavaCheckPath();
|
||||||
|
|
||||||
|
if (checkerJar.isEmpty())
|
||||||
|
{
|
||||||
|
qDebug() << "Java checker library could not be found. Please check your installation.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
QStringList args;
|
QStringList args;
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "java/JavaUtils.h"
|
#include "java/JavaUtils.h"
|
||||||
#include "java/JavaInstallList.h"
|
#include "java/JavaInstallList.h"
|
||||||
#include "FileSystem.h"
|
#include "FileSystem.h"
|
||||||
|
#include "Application.h"
|
||||||
|
|
||||||
#define IBUS "@im=ibus"
|
#define IBUS "@im=ibus"
|
||||||
|
|
||||||
@ -437,3 +438,8 @@ QList<QString> JavaUtils::FindJavaPaths()
|
|||||||
return addJavasFromEnv(javas);
|
return addJavasFromEnv(javas);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
QString JavaUtils::getJavaCheckPath()
|
||||||
|
{
|
||||||
|
return APPLICATION->getJarPath("JavaCheck.jar");
|
||||||
|
}
|
||||||
|
@ -39,4 +39,6 @@ public:
|
|||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
QList<JavaInstallPtr> FindJavaFromRegistryKey(DWORD keyType, QString keyName, QString keyJavaDir, QString subkeySuffix = "");
|
QList<JavaInstallPtr> FindJavaFromRegistryKey(DWORD keyType, QString keyName, QString keyJavaDir, QString subkeySuffix = "");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static QString getJavaCheckPath();
|
||||||
};
|
};
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "CheckJava.h"
|
#include "CheckJava.h"
|
||||||
|
#include "java/JavaUtils.h"
|
||||||
#include <launch/LaunchTask.h>
|
#include <launch/LaunchTask.h>
|
||||||
#include <FileSystem.h>
|
#include <FileSystem.h>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
@ -71,6 +72,14 @@ void CheckJava::executeTask()
|
|||||||
emit logLine("Java path is:\n" + m_javaPath + "\n\n", MessageLevel::Launcher);
|
emit logLine("Java path is:\n" + m_javaPath + "\n\n", MessageLevel::Launcher);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (JavaUtils::getJavaCheckPath().isEmpty())
|
||||||
|
{
|
||||||
|
const char *reason = QT_TR_NOOP("Java checker library could not be found. Please check your installation.");
|
||||||
|
emit logLine(tr(reason), MessageLevel::Fatal);
|
||||||
|
emitFailed(tr(reason));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
QFileInfo javaInfo(realJavaPath);
|
QFileInfo javaInfo(realJavaPath);
|
||||||
qlonglong javaUnixTime = javaInfo.lastModified().toMSecsSinceEpoch();
|
qlonglong javaUnixTime = javaInfo.lastModified().toMSecsSinceEpoch();
|
||||||
auto storedUnixTime = settings->get("JavaTimestamp").toLongLong();
|
auto storedUnixTime = settings->get("JavaTimestamp").toLongLong();
|
||||||
|
@ -96,6 +96,15 @@ bool fitsInLocal8bit(const QString & string)
|
|||||||
|
|
||||||
void LauncherPartLaunch::executeTask()
|
void LauncherPartLaunch::executeTask()
|
||||||
{
|
{
|
||||||
|
QString jarPath = APPLICATION->getJarPath("NewLaunch.jar");
|
||||||
|
if (jarPath.isEmpty())
|
||||||
|
{
|
||||||
|
const char *reason = QT_TR_NOOP("Launcher library could not be found. Please check your installation.");
|
||||||
|
emit logLine(tr(reason), MessageLevel::Fatal);
|
||||||
|
emitFailed(tr(reason));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
auto instance = m_parent->instance();
|
auto instance = m_parent->instance();
|
||||||
std::shared_ptr<MinecraftInstance> minecraftInstance = std::dynamic_pointer_cast<MinecraftInstance>(instance);
|
std::shared_ptr<MinecraftInstance> minecraftInstance = std::dynamic_pointer_cast<MinecraftInstance>(instance);
|
||||||
|
|
||||||
@ -112,7 +121,7 @@ void LauncherPartLaunch::executeTask()
|
|||||||
m_process.setDetachable(true);
|
m_process.setDetachable(true);
|
||||||
|
|
||||||
auto classPath = minecraftInstance->getClassPath();
|
auto classPath = minecraftInstance->getClassPath();
|
||||||
classPath.prepend(FS::PathCombine(APPLICATION->getJarsPath(), "NewLaunch.jar"));
|
classPath.prepend(jarPath);
|
||||||
|
|
||||||
auto natPath = minecraftInstance->getNativePath();
|
auto natPath = minecraftInstance->getNativePath();
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
|
@ -127,6 +127,11 @@ void JavaPage::loadSettings()
|
|||||||
|
|
||||||
void JavaPage::on_javaDetectBtn_clicked()
|
void JavaPage::on_javaDetectBtn_clicked()
|
||||||
{
|
{
|
||||||
|
if (JavaUtils::getJavaCheckPath().isEmpty()) {
|
||||||
|
JavaCommon::javaCheckNotFound(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
JavaInstallPtr java;
|
JavaInstallPtr java;
|
||||||
|
|
||||||
VersionSelectDialog vselect(APPLICATION->javalist().get(), tr("Select a Java version"), this, true);
|
VersionSelectDialog vselect(APPLICATION->javalist().get(), tr("Select a Java version"), this, true);
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
|
||||||
#include "java/JavaInstallList.h"
|
#include "java/JavaInstallList.h"
|
||||||
|
#include "java/JavaUtils.h"
|
||||||
#include "FileSystem.h"
|
#include "FileSystem.h"
|
||||||
|
|
||||||
|
|
||||||
@ -362,6 +363,11 @@ void InstanceSettingsPage::loadSettings()
|
|||||||
|
|
||||||
void InstanceSettingsPage::on_javaDetectBtn_clicked()
|
void InstanceSettingsPage::on_javaDetectBtn_clicked()
|
||||||
{
|
{
|
||||||
|
if (JavaUtils::getJavaCheckPath().isEmpty()) {
|
||||||
|
JavaCommon::javaCheckNotFound(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
JavaInstallPtr java;
|
JavaInstallPtr java;
|
||||||
|
|
||||||
VersionSelectDialog vselect(APPLICATION->javalist().get(), tr("Select a Java version"), this, true);
|
VersionSelectDialog vselect(APPLICATION->javalist().get(), tr("Select a Java version"), this, true);
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
#include <sys.h>
|
#include <sys.h>
|
||||||
|
|
||||||
|
#include "JavaCommon.h"
|
||||||
#include "java/JavaInstall.h"
|
#include "java/JavaInstall.h"
|
||||||
#include "java/JavaUtils.h"
|
#include "java/JavaUtils.h"
|
||||||
#include "FileSystem.h"
|
#include "FileSystem.h"
|
||||||
@ -133,6 +134,10 @@ void JavaSettingsWidget::initialize()
|
|||||||
|
|
||||||
void JavaSettingsWidget::refresh()
|
void JavaSettingsWidget::refresh()
|
||||||
{
|
{
|
||||||
|
if (JavaUtils::getJavaCheckPath().isEmpty()) {
|
||||||
|
JavaCommon::javaCheckNotFound(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
m_versionWidget->loadList();
|
m_versionWidget->loadList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user