2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-09 17:47:43 +00:00

Work on URDE version detection and downloading

This commit is contained in:
Jack Andersen
2017-12-26 14:48:34 -10:00
parent d3223f0db4
commit a686debdcf
14 changed files with 275 additions and 142 deletions

View File

@@ -1,4 +1,9 @@
#include "Common.hpp"
#include <QStringList>
#ifndef _WIN32
#include <unistd.h>
#endif
#if __APPLE__
const QString CurPlatformString = QStringLiteral("macos");
@@ -25,22 +30,13 @@ QString PlatformToString(Platform plat)
}
}
#if ZEUS_ARCH_X86_64
const QString CurArchitectureString = QStringLiteral("x86_64");
#elif ZEUS_ARCH_X86
const QString CurArchitectureString = QStringLiteral("x86");
#elif ZEUS_ARCH_ARM
const QString CurArchitectureString = QStringLiteral("arm");
#elif ZEUS_ARCH_AARCH64
const QString CurArchitectureString = QStringLiteral("aarch64");
#else
#error HECL does not know which architecture to fetch for
#endif
Architecture CurArchitecture = Architecture::Invalid;
QString CurArchitectureString;
Platform StringToPlatform(const QString& str)
{
for (int i = 1; i < int(Platform::MAXPlatform); ++i)
if (str.contains(PlatformToString(Platform(i)), Qt::CaseInsensitive))
if (!str.compare(PlatformToString(Platform(i)), Qt::CaseInsensitive))
return Platform(i);
return Platform::Invalid;
}
@@ -65,7 +61,7 @@ QString ArchitectureToString(Architecture arch)
Architecture StringToArchitecture(const QString& str)
{
for (int i = 1; i < int(Architecture::MAXArchitecture); ++i)
if (str.contains(ArchitectureToString(Architecture(i)), Qt::CaseInsensitive))
if (!str.compare(ArchitectureToString(Architecture(i)), Qt::CaseInsensitive))
return Architecture(i);
return Architecture::Invalid;
}
@@ -96,7 +92,62 @@ QString VectorISAToString(VectorISA visa)
VectorISA StringToVectorISA(const QString& str)
{
for (int i = 1; i < int(VectorISA::MAXVectorISA); ++i)
if (str.contains(VectorISAToString(VectorISA(i)), Qt::CaseInsensitive))
if (!str.compare(VectorISAToString(VectorISA(i)), Qt::CaseInsensitive))
return VectorISA(i);
return VectorISA::Invalid;
}
URDEVersion::URDEVersion(const QString& filename)
{
int idx;
QString useFilename = filename;
if ((idx = filename.indexOf('.')) >= 0)
{
m_extension = QString(filename).remove(0, idx);
useFilename.truncate(idx);
}
QStringList list = useFilename.split('-');
if (list.size() >= 2)
m_version = list[1].toInt();
if (list.size() >= 3)
m_platform = StringToPlatform(list[2]);
if (list.size() >= 4)
m_architecture = StringToArchitecture(list[3]);
if (list.size() >= 5)
m_vectorISA = StringToVectorISA(list[4]);
}
QString URDEVersion::fileString(bool withExtension) const
{
if (m_version < 0)
return {};
if (withExtension && !m_extension.isEmpty())
return QString("urde-%1-%2-%3-%4%5").arg(QString::number(m_version),
PlatformToString(m_platform),
ArchitectureToString(m_architecture),
VectorISAToString(m_vectorISA),
m_extension);
else
return QString("urde-%1-%2-%3-%4").arg(QString::number(m_version),
PlatformToString(m_platform),
ArchitectureToString(m_architecture),
VectorISAToString(m_vectorISA));
}
void InitializePlatform()
{
#if ZEUS_ARCH_X86_64
const_cast<Architecture&>(CurArchitecture) = Architecture::X86_64;
#elif ZEUS_ARCH_X86
#if !defined(__APPLE__) && !defined(_WIN32)
const_cast<Architecture&>(CurArchitecture) =
(sysconf(_SC_WORD_BIT) == 64 ? Architecture::X86_64 : Architecture::X86);
#elif _WIN32
bool isWOW = false;
IsWow64Process(GetCurrentProcess(), &isWOW);
const_cast<Architecture&>(CurArchitecture) =
(isWOW ? Architecture::X86_64 : Architecture::X86);
#endif
#endif
const_cast<QString&>(CurArchitectureString) = ArchitectureToString(CurArchitecture);
}