Merge pull request #4345 from graemeg/freebsd-support
Adds FreeBSD support to MultiMC
This commit is contained in:
commit
3efcccf334
@ -47,6 +47,9 @@ if(UNIX AND APPLE)
|
|||||||
endif()
|
endif()
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Werror=return-type")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Werror=return-type")
|
||||||
|
|
||||||
|
# Fix build with Qt 5.13
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_DEPRECATED_WARNINGS=Y")
|
||||||
|
|
||||||
##################################### Set Application options #####################################
|
##################################### Set Application options #####################################
|
||||||
|
|
||||||
######## Set URLs ########
|
######## Set URLs ########
|
||||||
|
@ -521,7 +521,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
|
|||||||
// Set up paths
|
// Set up paths
|
||||||
{
|
{
|
||||||
// Root path is used for updates.
|
// Root path is used for updates.
|
||||||
#ifdef Q_OS_LINUX
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
QDir foo(FS::PathCombine(binPath, ".."));
|
QDir foo(FS::PathCombine(binPath, ".."));
|
||||||
m_rootPath = foo.absolutePath();
|
m_rootPath = foo.absolutePath();
|
||||||
#elif defined(Q_OS_WIN32)
|
#elif defined(Q_OS_WIN32)
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
/**
|
/**
|
||||||
* This shouldn't exist, but until QTBUG-9328 and other unreported bugs are fixed, it needs to be a thing.
|
* This shouldn't exist, but until QTBUG-9328 and other unreported bugs are fixed, it needs to be a thing.
|
||||||
*/
|
*/
|
||||||
#if defined(Q_OS_LINUX)
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -83,7 +83,7 @@ bool openDirectory(const QString &path, bool ensureExists)
|
|||||||
{
|
{
|
||||||
return QDesktopServices::openUrl(QUrl::fromLocalFile(dir.absolutePath()));
|
return QDesktopServices::openUrl(QUrl::fromLocalFile(dir.absolutePath()));
|
||||||
};
|
};
|
||||||
#if defined(Q_OS_LINUX)
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
return IndirectOpen(f);
|
return IndirectOpen(f);
|
||||||
#else
|
#else
|
||||||
return f();
|
return f();
|
||||||
@ -97,7 +97,7 @@ bool openFile(const QString &path)
|
|||||||
{
|
{
|
||||||
return QDesktopServices::openUrl(QUrl::fromLocalFile(path));
|
return QDesktopServices::openUrl(QUrl::fromLocalFile(path));
|
||||||
};
|
};
|
||||||
#if defined(Q_OS_LINUX)
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
return IndirectOpen(f);
|
return IndirectOpen(f);
|
||||||
#else
|
#else
|
||||||
return f();
|
return f();
|
||||||
@ -107,7 +107,7 @@ bool openFile(const QString &path)
|
|||||||
bool openFile(const QString &application, const QString &path, const QString &workingDirectory, qint64 *pid)
|
bool openFile(const QString &application, const QString &path, const QString &workingDirectory, qint64 *pid)
|
||||||
{
|
{
|
||||||
qDebug() << "Opening file" << path << "using" << application;
|
qDebug() << "Opening file" << path << "using" << application;
|
||||||
#if defined(Q_OS_LINUX)
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
// FIXME: the pid here is fake. So if something depends on it, it will likely misbehave
|
// FIXME: the pid here is fake. So if something depends on it, it will likely misbehave
|
||||||
return IndirectOpen([&]()
|
return IndirectOpen([&]()
|
||||||
{
|
{
|
||||||
@ -121,7 +121,7 @@ bool openFile(const QString &application, const QString &path, const QString &wo
|
|||||||
bool run(const QString &application, const QStringList &args, const QString &workingDirectory, qint64 *pid)
|
bool run(const QString &application, const QStringList &args, const QString &workingDirectory, qint64 *pid)
|
||||||
{
|
{
|
||||||
qDebug() << "Running" << application << "with args" << args.join(' ');
|
qDebug() << "Running" << application << "with args" << args.join(' ');
|
||||||
#if defined(Q_OS_LINUX)
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
// FIXME: the pid here is fake. So if something depends on it, it will likely misbehave
|
// FIXME: the pid here is fake. So if something depends on it, it will likely misbehave
|
||||||
return IndirectOpen([&]()
|
return IndirectOpen([&]()
|
||||||
{
|
{
|
||||||
@ -139,7 +139,7 @@ bool openUrl(const QUrl &url)
|
|||||||
{
|
{
|
||||||
return QDesktopServices::openUrl(url);
|
return QDesktopServices::openUrl(url);
|
||||||
};
|
};
|
||||||
#if defined(Q_OS_LINUX)
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
return IndirectOpen(f);
|
return IndirectOpen(f);
|
||||||
#else
|
#else
|
||||||
return f();
|
return f();
|
||||||
|
@ -403,7 +403,7 @@ QString getDesktopDir()
|
|||||||
bool createShortCut(QString location, QString dest, QStringList args, QString name,
|
bool createShortCut(QString location, QString dest, QStringList args, QString name,
|
||||||
QString icon)
|
QString icon)
|
||||||
{
|
{
|
||||||
#if defined Q_OS_LINUX
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
location = PathCombine(location, name + ".desktop");
|
location = PathCombine(location, name + ".desktop");
|
||||||
|
|
||||||
QFile f(location);
|
QFile f(location);
|
||||||
|
@ -93,7 +93,7 @@ void UpdateController::installUpdates()
|
|||||||
qDebug() << "Installing updates.";
|
qDebug() << "Installing updates.";
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
QString finishCmd = QApplication::applicationFilePath();
|
QString finishCmd = QApplication::applicationFilePath();
|
||||||
#elif defined Q_OS_LINUX
|
#elif defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
QString finishCmd = FS::PathCombine(m_root, BuildConfig.LAUNCHER_NAME);
|
QString finishCmd = FS::PathCombine(m_root, BuildConfig.LAUNCHER_NAME);
|
||||||
#elif defined Q_OS_MAC
|
#elif defined Q_OS_MAC
|
||||||
QString finishCmd = QApplication::applicationFilePath();
|
QString finishCmd = QApplication::applicationFilePath();
|
||||||
|
@ -78,7 +78,7 @@ void Version::parse()
|
|||||||
// FIXME: this is bad. versions can contain a lot more separators...
|
// FIXME: this is bad. versions can contain a lot more separators...
|
||||||
QStringList parts = m_string.split('.');
|
QStringList parts = m_string.split('.');
|
||||||
|
|
||||||
for (const auto &part : parts)
|
for (const auto& part : parts)
|
||||||
{
|
{
|
||||||
m_sections.append(Section(part));
|
m_sections.append(Section(part));
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ JavaUtils::JavaUtils()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Q_OS_LINUX
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
static QString processLD_LIBRARY_PATH(const QString & LD_LIBRARY_PATH)
|
static QString processLD_LIBRARY_PATH(const QString & LD_LIBRARY_PATH)
|
||||||
{
|
{
|
||||||
QDir mmcBin(QCoreApplication::applicationDirPath());
|
QDir mmcBin(QCoreApplication::applicationDirPath());
|
||||||
@ -83,7 +83,7 @@ QProcessEnvironment CleanEnviroment()
|
|||||||
qDebug() << "Env: ignoring" << key << value;
|
qDebug() << "Env: ignoring" << key << value;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#ifdef Q_OS_LINUX
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
// Do not pass LD_* variables to java. They were intended for MultiMC
|
// Do not pass LD_* variables to java. They were intended for MultiMC
|
||||||
if(key.startsWith("LD_"))
|
if(key.startsWith("LD_"))
|
||||||
{
|
{
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
OpSys OpSys_fromString(QString name)
|
OpSys OpSys_fromString(QString name)
|
||||||
{
|
{
|
||||||
|
if (name == "freebsd")
|
||||||
|
return Os_FreeBSD;
|
||||||
if (name == "linux")
|
if (name == "linux")
|
||||||
return Os_Linux;
|
return Os_Linux;
|
||||||
if (name == "windows")
|
if (name == "windows")
|
||||||
@ -30,6 +32,8 @@ QString OpSys_toString(OpSys name)
|
|||||||
{
|
{
|
||||||
switch (name)
|
switch (name)
|
||||||
{
|
{
|
||||||
|
case Os_FreeBSD:
|
||||||
|
return "freebsd";
|
||||||
case Os_Linux:
|
case Os_Linux:
|
||||||
return "linux";
|
return "linux";
|
||||||
case Os_OSX:
|
case Os_OSX:
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
enum OpSys
|
enum OpSys
|
||||||
{
|
{
|
||||||
Os_Windows,
|
Os_Windows,
|
||||||
|
Os_FreeBSD,
|
||||||
Os_Linux,
|
Os_Linux,
|
||||||
Os_OSX,
|
Os_OSX,
|
||||||
Os_Other
|
Os_Other
|
||||||
@ -28,10 +29,10 @@ QString OpSys_toString(OpSys);
|
|||||||
|
|
||||||
#ifdef Q_OS_WIN32
|
#ifdef Q_OS_WIN32
|
||||||
#define currentSystem Os_Windows
|
#define currentSystem Os_Windows
|
||||||
#else
|
#elif Q_OS_MAC
|
||||||
#ifdef Q_OS_MAC
|
|
||||||
#define currentSystem Os_OSX
|
#define currentSystem Os_OSX
|
||||||
|
#elif defined Q_OS_FREEBSD
|
||||||
|
#define currentSystem Os_FreeBSD
|
||||||
#else
|
#else
|
||||||
#define currentSystem Os_Linux
|
#define currentSystem Os_Linux
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
@ -23,6 +23,13 @@
|
|||||||
#include "FileSystem.h"
|
#include "FileSystem.h"
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
|
||||||
|
#ifdef major
|
||||||
|
#undef major
|
||||||
|
#endif
|
||||||
|
#ifdef minor
|
||||||
|
#undef minor
|
||||||
|
#endif
|
||||||
|
|
||||||
static QString replaceSuffix (QString target, const QString &suffix, const QString &replacement)
|
static QString replaceSuffix (QString target, const QString &suffix, const QString &replacement)
|
||||||
{
|
{
|
||||||
if (!target.endsWith(suffix))
|
if (!target.endsWith(suffix))
|
||||||
|
@ -19,8 +19,9 @@
|
|||||||
#include "PrintInstanceInfo.h"
|
#include "PrintInstanceInfo.h"
|
||||||
#include <launch/LaunchTask.h>
|
#include <launch/LaunchTask.h>
|
||||||
|
|
||||||
#ifdef Q_OS_LINUX
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
namespace {
|
namespace {
|
||||||
|
#if defined(Q_OS_LINUX)
|
||||||
void probeProcCpuinfo(QStringList &log)
|
void probeProcCpuinfo(QStringList &log)
|
||||||
{
|
{
|
||||||
std::ifstream cpuin("/proc/cpuinfo");
|
std::ifstream cpuin("/proc/cpuinfo");
|
||||||
@ -66,7 +67,43 @@ void runLspci(QStringList &log)
|
|||||||
}
|
}
|
||||||
pclose(lspci);
|
pclose(lspci);
|
||||||
}
|
}
|
||||||
|
#elif defined(Q_OS_FREEBSD)
|
||||||
|
void runSysctlHwModel(QStringList &log)
|
||||||
|
{
|
||||||
|
char buff[512];
|
||||||
|
FILE *hwmodel = popen("sysctl hw.model", "r");
|
||||||
|
while (fgets(buff, 512, hwmodel) != NULL)
|
||||||
|
{
|
||||||
|
log << QString::fromUtf8(buff);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pclose(hwmodel);
|
||||||
|
}
|
||||||
|
|
||||||
|
void runPciconf(QStringList &log)
|
||||||
|
{
|
||||||
|
char buff[512];
|
||||||
|
std::string strcard;
|
||||||
|
FILE *pciconf = popen("pciconf -lv -a vgapci0", "r");
|
||||||
|
while (fgets(buff, 512, pciconf) != NULL)
|
||||||
|
{
|
||||||
|
if (strncmp(buff, " vendor", 10) == 0)
|
||||||
|
{
|
||||||
|
std::string str(buff);
|
||||||
|
strcard.append(str.substr(str.find_first_of("'") + 1, str.find_last_not_of("'") - (str.find_first_of("'") + 2)));
|
||||||
|
strcard.append(" ");
|
||||||
|
}
|
||||||
|
else if (strncmp(buff, " device", 10) == 0)
|
||||||
|
{
|
||||||
|
std::string str2(buff);
|
||||||
|
strcard.append(str2.substr(str2.find_first_of("'") + 1, str2.find_last_not_of("'") - (str2.find_first_of("'") + 2)));
|
||||||
|
}
|
||||||
|
log << QString::fromStdString(strcard);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pclose(pciconf);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
void runGlxinfo(QStringList & log)
|
void runGlxinfo(QStringList & log)
|
||||||
{
|
{
|
||||||
// FIXME: fixed size buffers...
|
// FIXME: fixed size buffers...
|
||||||
@ -94,10 +131,14 @@ void PrintInstanceInfo::executeTask()
|
|||||||
auto instance = m_parent->instance();
|
auto instance = m_parent->instance();
|
||||||
QStringList log;
|
QStringList log;
|
||||||
|
|
||||||
#ifdef Q_OS_LINUX
|
#if defined(Q_OS_LINUX)
|
||||||
::probeProcCpuinfo(log);
|
::probeProcCpuinfo(log);
|
||||||
::runLspci(log);
|
::runLspci(log);
|
||||||
::runGlxinfo(log);
|
::runGlxinfo(log);
|
||||||
|
#elif defined(Q_OS_FREEBSD)
|
||||||
|
::runSysctlHwModel(log);
|
||||||
|
::runPciconf(log);
|
||||||
|
::runGlxinfo(log);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
logLines(log, MessageLevel::Launcher);
|
logLines(log, MessageLevel::Launcher);
|
||||||
|
@ -5,6 +5,13 @@
|
|||||||
#include <minecraft/PackProfile.h>
|
#include <minecraft/PackProfile.h>
|
||||||
#include <minecraft/VersionFilterData.h>
|
#include <minecraft/VersionFilterData.h>
|
||||||
|
|
||||||
|
#ifdef major
|
||||||
|
#undef major
|
||||||
|
#endif
|
||||||
|
#ifdef minor
|
||||||
|
#undef minor
|
||||||
|
#endif
|
||||||
|
|
||||||
void VerifyJavaInstall::executeTask() {
|
void VerifyJavaInstall::executeTask() {
|
||||||
auto m_inst = std::dynamic_pointer_cast<MinecraftInstance>(m_parent->instance());
|
auto m_inst = std::dynamic_pointer_cast<MinecraftInstance>(m_parent->instance());
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ QString MCEditTool::getProgramPath()
|
|||||||
#else
|
#else
|
||||||
const QString mceditPath = path();
|
const QString mceditPath = path();
|
||||||
QDir mceditDir(mceditPath);
|
QDir mceditDir(mceditPath);
|
||||||
#ifdef Q_OS_LINUX
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
if (mceditDir.exists("mcedit.sh"))
|
if (mceditDir.exists("mcedit.sh"))
|
||||||
{
|
{
|
||||||
return mceditDir.absoluteFilePath("mcedit.sh");
|
return mceditDir.absoluteFilePath("mcedit.sh");
|
||||||
|
@ -320,7 +320,7 @@ Description: Make it so that the QIcon loader honors /usr/share/pixmaps
|
|||||||
icon theme specification.
|
icon theme specification.
|
||||||
Bug: https://bugreports.qt.nokia.com/browse/QTBUG-12874
|
Bug: https://bugreports.qt.nokia.com/browse/QTBUG-12874
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
#ifdef Q_OS_LINUX
|
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
|
||||||
/* Freedesktop standard says to look in /usr/share/pixmaps last */
|
/* Freedesktop standard says to look in /usr/share/pixmaps last */
|
||||||
if (entries.isEmpty())
|
if (entries.isEmpty())
|
||||||
{
|
{
|
||||||
|
@ -47,6 +47,7 @@ Sys::KernelInfo Sys::getKernelInfo()
|
|||||||
uint64_t Sys::getSystemRam()
|
uint64_t Sys::getSystemRam()
|
||||||
{
|
{
|
||||||
std::string token;
|
std::string token;
|
||||||
|
#ifdef Q_OS_LINUX
|
||||||
std::ifstream file("/proc/meminfo");
|
std::ifstream file("/proc/meminfo");
|
||||||
while(file >> token)
|
while(file >> token)
|
||||||
{
|
{
|
||||||
@ -65,6 +66,19 @@ uint64_t Sys::getSystemRam()
|
|||||||
// ignore rest of the line
|
// ignore rest of the line
|
||||||
file.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
file.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
||||||
}
|
}
|
||||||
|
#elif defined(Q_OS_FREEBSD)
|
||||||
|
char buff[512];
|
||||||
|
FILE *fp = popen("sysctl hw.physmem", "r");
|
||||||
|
if (fp != NULL)
|
||||||
|
{
|
||||||
|
while(fgets(buff, 512, fp) != NULL)
|
||||||
|
{
|
||||||
|
std::string str(buff);
|
||||||
|
uint64_t mem = std::stoull(str.substr(12, std::string::npos));
|
||||||
|
return mem * 1024ull;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return 0; // nothing found
|
return 0; // nothing found
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user