Changes required to support FreeBSD

This commit is contained in:
Graeme Geldenhuys
2021-12-12 00:35:46 +00:00
parent 80beccb2c4
commit 7179e75e70
16 changed files with 94 additions and 20 deletions

View File

@ -186,7 +186,11 @@ QString MinecraftInstance::binRoot() const
QString MinecraftInstance::getNativePath() const
{
#if defined(Q_OS_FREEBSD)
QDir natives_dir("/usr/local/lib/lwjgl/");
#else
QDir natives_dir(FS::PathCombine(instanceRoot(), "natives/"));
#endif
return natives_dir.absolutePath();
}

View File

@ -17,6 +17,8 @@
OpSys OpSys_fromString(QString name)
{
if (name == "freebsd")
return Os_FreeBSD;
if (name == "linux")
return Os_Linux;
if (name == "windows")
@ -30,6 +32,8 @@ QString OpSys_toString(OpSys name)
{
switch (name)
{
case Os_FreeBSD:
return "freebsd";
case Os_Linux:
return "linux";
case Os_OSX:

View File

@ -18,6 +18,7 @@
enum OpSys
{
Os_Windows,
Os_FreeBSD,
Os_Linux,
Os_OSX,
Os_Other
@ -28,10 +29,10 @@ QString OpSys_toString(OpSys);
#ifdef Q_OS_WIN32
#define currentSystem Os_Windows
#else
#ifdef Q_OS_MAC
#elif Q_OS_MAC
#define currentSystem Os_OSX
#elif defined Q_OS_FREEBSD
#define currentSystem Os_FreeBSD
#else
#define currentSystem Os_Linux
#endif
#endif

View File

@ -23,6 +23,13 @@
#include "FileSystem.h"
#include <QDir>
#ifdef major
#undef major
#endif
#ifdef minor
#undef minor
#endif
static QString replaceSuffix (QString target, const QString &suffix, const QString &replacement)
{
if (!target.endsWith(suffix))

View File

@ -19,8 +19,9 @@
#include "PrintInstanceInfo.h"
#include <launch/LaunchTask.h>
#ifdef Q_OS_LINUX
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
namespace {
#if defined(Q_OS_LINUX)
void probeProcCpuinfo(QStringList &log)
{
std::ifstream cpuin("/proc/cpuinfo");
@ -66,7 +67,43 @@ void runLspci(QStringList &log)
}
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)
{
// FIXME: fixed size buffers...
@ -94,10 +131,14 @@ void PrintInstanceInfo::executeTask()
auto instance = m_parent->instance();
QStringList log;
#ifdef Q_OS_LINUX
#if defined(Q_OS_LINUX)
::probeProcCpuinfo(log);
::runLspci(log);
::runGlxinfo(log);
#elif defined(Q_OS_FREEBSD)
::runSysctlHwModel(log);
::runPciconf(log);
::runGlxinfo(log);
#endif
logLines(log, MessageLevel::Launcher);