diff --git a/CMakeLists.txt b/CMakeLists.txt index a0a8c5ec..d1c6ac3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,6 +47,9 @@ if(UNIX AND APPLE) endif() 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 URLs ######## diff --git a/launcher/Application.cpp b/launcher/Application.cpp index 2d0c81bb..625f99ad 100644 --- a/launcher/Application.cpp +++ b/launcher/Application.cpp @@ -512,7 +512,7 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv) // Set up paths { // Root path is used for updates. -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) QDir foo(FS::PathCombine(binPath, "..")); m_rootPath = foo.absolutePath(); #elif defined(Q_OS_WIN32) diff --git a/launcher/DesktopServices.cpp b/launcher/DesktopServices.cpp index 5368ddc8..dcc1b0ce 100644 --- a/launcher/DesktopServices.cpp +++ b/launcher/DesktopServices.cpp @@ -7,7 +7,7 @@ /** * 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 #include @@ -83,7 +83,7 @@ bool openDirectory(const QString &path, bool ensureExists) { return QDesktopServices::openUrl(QUrl::fromLocalFile(dir.absolutePath())); }; -#if defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) return IndirectOpen(f); #else return f(); @@ -97,7 +97,7 @@ bool openFile(const QString &path) { return QDesktopServices::openUrl(QUrl::fromLocalFile(path)); }; -#if defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) return IndirectOpen(f); #else return f(); @@ -107,7 +107,7 @@ bool openFile(const QString &path) bool openFile(const QString &application, const QString &path, const QString &workingDirectory, qint64 *pid) { 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 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) { 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 return IndirectOpen([&]() { @@ -139,7 +139,7 @@ bool openUrl(const QUrl &url) { return QDesktopServices::openUrl(url); }; -#if defined(Q_OS_LINUX) +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) return IndirectOpen(f); #else return f(); diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp index 13f05b86..6de20de6 100644 --- a/launcher/FileSystem.cpp +++ b/launcher/FileSystem.cpp @@ -403,7 +403,7 @@ QString getDesktopDir() bool createShortCut(QString location, QString dest, QStringList args, QString name, QString icon) { -#if defined Q_OS_LINUX +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) location = PathCombine(location, name + ".desktop"); QFile f(location); diff --git a/launcher/UpdateController.cpp b/launcher/UpdateController.cpp index 136e22fd..f9b7d349 100644 --- a/launcher/UpdateController.cpp +++ b/launcher/UpdateController.cpp @@ -93,7 +93,7 @@ void UpdateController::installUpdates() qDebug() << "Installing updates."; #ifdef Q_OS_WIN 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); #elif defined Q_OS_MAC QString finishCmd = QApplication::applicationFilePath(); diff --git a/launcher/Version.cpp b/launcher/Version.cpp index 6392a50f..b9090e29 100644 --- a/launcher/Version.cpp +++ b/launcher/Version.cpp @@ -78,7 +78,7 @@ void Version::parse() // FIXME: this is bad. versions can contain a lot more separators... QStringList parts = m_string.split('.'); - for (const auto &part : parts) + for (const auto& part : parts) { m_sections.append(Section(part)); } diff --git a/launcher/install_prereqs.cmake.in b/launcher/install_prereqs.cmake.in index e4408d16..f627369c 100644 --- a/launcher/install_prereqs.cmake.in +++ b/launcher/install_prereqs.cmake.in @@ -23,5 +23,5 @@ set(gp_cmd_paths ${gp_cmd_paths} ) include(BundleUtilities) -fixup_bundle("@APPS@" "${QTPLUGINS}" "@DIRS@") + diff --git a/launcher/java/JavaUtils.cpp b/launcher/java/JavaUtils.cpp index 6b58db37..87aee2bf 100644 --- a/launcher/java/JavaUtils.cpp +++ b/launcher/java/JavaUtils.cpp @@ -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) { QDir mmcBin(QCoreApplication::applicationDirPath()); @@ -83,7 +83,7 @@ QProcessEnvironment CleanEnviroment() qDebug() << "Env: ignoring" << key << value; 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 if(key.startsWith("LD_")) { diff --git a/launcher/minecraft/MinecraftInstance.cpp b/launcher/minecraft/MinecraftInstance.cpp index 4c16e572..bed25ead 100644 --- a/launcher/minecraft/MinecraftInstance.cpp +++ b/launcher/minecraft/MinecraftInstance.cpp @@ -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(); } diff --git a/launcher/minecraft/OpSys.cpp b/launcher/minecraft/OpSys.cpp index f6a4ed1c..093ec419 100644 --- a/launcher/minecraft/OpSys.cpp +++ b/launcher/minecraft/OpSys.cpp @@ -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: diff --git a/launcher/minecraft/OpSys.h b/launcher/minecraft/OpSys.h index 63c750b1..c6ed5222 100644 --- a/launcher/minecraft/OpSys.h +++ b/launcher/minecraft/OpSys.h @@ -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 \ No newline at end of file diff --git a/launcher/minecraft/launch/ExtractNatives.cpp b/launcher/minecraft/launch/ExtractNatives.cpp index d57499aa..8cd439b1 100644 --- a/launcher/minecraft/launch/ExtractNatives.cpp +++ b/launcher/minecraft/launch/ExtractNatives.cpp @@ -23,6 +23,13 @@ #include "FileSystem.h" #include +#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)) diff --git a/launcher/minecraft/launch/PrintInstanceInfo.cpp b/launcher/minecraft/launch/PrintInstanceInfo.cpp index 3da17902..e8fbcb9b 100644 --- a/launcher/minecraft/launch/PrintInstanceInfo.cpp +++ b/launcher/minecraft/launch/PrintInstanceInfo.cpp @@ -19,8 +19,9 @@ #include "PrintInstanceInfo.h" #include -#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); diff --git a/launcher/tools/MCEditTool.cpp b/launcher/tools/MCEditTool.cpp index 880327c7..21e1a3b0 100644 --- a/launcher/tools/MCEditTool.cpp +++ b/launcher/tools/MCEditTool.cpp @@ -52,7 +52,7 @@ QString MCEditTool::getProgramPath() #else const QString mceditPath = path(); QDir mceditDir(mceditPath); -#ifdef Q_OS_LINUX +#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) if (mceditDir.exists("mcedit.sh")) { return mceditDir.absoluteFilePath("mcedit.sh"); diff --git a/libraries/iconfix/internal/qiconloader.cpp b/libraries/iconfix/internal/qiconloader.cpp index 41cf3d50..0d8466f0 100644 --- a/libraries/iconfix/internal/qiconloader.cpp +++ b/libraries/iconfix/internal/qiconloader.cpp @@ -320,7 +320,7 @@ Description: Make it so that the QIcon loader honors /usr/share/pixmaps icon theme specification. 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 */ if (entries.isEmpty()) { diff --git a/libraries/systeminfo/src/sys_unix.cpp b/libraries/systeminfo/src/sys_unix.cpp index fb96c72c..b3098522 100644 --- a/libraries/systeminfo/src/sys_unix.cpp +++ b/libraries/systeminfo/src/sys_unix.cpp @@ -47,6 +47,7 @@ Sys::KernelInfo Sys::getKernelInfo() uint64_t Sys::getSystemRam() { std::string token; +#ifdef Q_OS_LINUX std::ifstream file("/proc/meminfo"); while(file >> token) { @@ -65,6 +66,19 @@ uint64_t Sys::getSystemRam() // ignore rest of the line file.ignore(std::numeric_limits::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 }