OS (Haiku): calcuate OS version
Some checks are pending
CI / spellcheck (push) Waiting to run
CI / No-features-test (push) Waiting to run
CI / Linux-amd64 (push) Waiting to run
CI / Linux-aarch64 (push) Waiting to run
CI / Linux-armv7l (push) Waiting to run
CI / Linux-armv6l (push) Waiting to run
CI / Linux-riscv64 (push) Waiting to run
CI / Linux-ppc64le (push) Waiting to run
CI / Linux-s390x (push) Waiting to run
CI / Musl-amd64 (push) Waiting to run
CI / macOS-universal (push) Waiting to run
CI / SunOS-amd64 (push) Waiting to run
CI / FreeBSD-amd64 (push) Waiting to run
CI / DragonFly-amd64 (push) Waiting to run
CI / OpenBSD-amd64 (push) Waiting to run
CI / NetBSD-amd64 (push) Waiting to run
CI / Windows-amd64 (push) Waiting to run
CI / Release (push) Blocked by required conditions

This commit is contained in:
李通洲 2025-02-19 10:47:21 +08:00
parent c0c59a890a
commit 143b3df771
No known key found for this signature in database
GPG Key ID: 269AD4F5325A22A3

View File

@ -2,39 +2,8 @@
#include <OS.h>
#include <image.h>
// https://github.com/haiku/haiku/blob/e63683b2fb337d2034059a7e053c170eaf978142/headers/os/BeBuild.h#L36
#ifndef B_HAIKU_VERSION_1_PRE_BETA_6
#define B_HAIKU_VERSION_1_PRE_BETA_6 0x00000901
#endif
#ifndef B_HAIKU_VERSION_1_BETA_6
#define B_HAIKU_VERSION_1_BETA_6 0x00000A00
#endif
#ifndef B_HAIKU_VERSION_1_PRE_BETA_7
#define B_HAIKU_VERSION_1_PRE_BETA_7 0x00000A01
#endif
#ifndef B_HAIKU_VERSION_1_BETA_7
#define B_HAIKU_VERSION_1_BETA_7 0x00000B00
#endif
#ifndef B_HAIKU_VERSION_1_PRE_BETA_8
#define B_HAIKU_VERSION_1_PRE_BETA_8 0x00000B01
#endif
#ifndef B_HAIKU_VERSION_1_BETA_8
#define B_HAIKU_VERSION_1_BETA_8 0x00000C00
#endif
#ifndef B_HAIKU_VERSION_1_PRE_BETA_9
#define B_HAIKU_VERSION_1_PRE_BETA_9 0x00000C01
#endif
#ifndef B_HAIKU_VERSION_1_BETA_9
#define B_HAIKU_VERSION_1_BETA_9 0x00000D00
#endif
#ifndef B_HAIKU_VERSION_1
#define B_HAIKU_VERSION_1 0x00010000
#endif
void ffDetectOSImpl(FFOSResult* os)
{
system_info sys;
ffStrbufSetStatic(&os->name, "Haiku");
ffStrbufSetStatic(&os->id, "haiku");
@ -43,49 +12,61 @@ void ffDetectOSImpl(FFOSResult* os)
int32 cookie = 0;
while (get_next_image_info(B_SYSTEM_TEAM, &cookie, &image) == B_OK)
{
if (image.api_version > 0)
int32 ver = image.api_version;
if (ver == 0) continue;
// https://github.com/haiku/haiku/blob/e63683b2fb337d2034059a7e053c170eaf978142/headers/os/BeBuild.h#L36
if (ver < B_HAIKU_VERSION_1_ALPHA_1)
{
switch (image.api_version)
switch (ver)
{
#define FF_TEST_HAIKU_VERSION(versionNum, versionStr) \
case B_HAIKU_VERSION_ ## versionNum: \
ffStrbufSetStatic(&os->version, versionStr); \
break;
FF_TEST_HAIKU_VERSION(1_ALPHA_1, "R1A1")
FF_TEST_HAIKU_VERSION(1_PRE_ALPHA_2, "R1A2-")
FF_TEST_HAIKU_VERSION(1_ALPHA_2, "R1A2")
FF_TEST_HAIKU_VERSION(1_PRE_ALPHA_3, "R1A3-")
FF_TEST_HAIKU_VERSION(1_ALPHA_3, "R1A3")
FF_TEST_HAIKU_VERSION(1_PRE_ALPHA_4, "R1A4-")
FF_TEST_HAIKU_VERSION(1_ALPHA_4, "R1A4")
FF_TEST_HAIKU_VERSION(1_PRE_BETA_1, "R1B1-")
FF_TEST_HAIKU_VERSION(1_BETA_1, "R1B1")
FF_TEST_HAIKU_VERSION(1_PRE_BETA_2, "R1B2-")
FF_TEST_HAIKU_VERSION(1_BETA_2, "R1B2")
FF_TEST_HAIKU_VERSION(1_PRE_BETA_3, "R1B3-")
FF_TEST_HAIKU_VERSION(1_BETA_3, "R1B3")
FF_TEST_HAIKU_VERSION(1_PRE_BETA_4, "R1B4-")
FF_TEST_HAIKU_VERSION(1_BETA_4, "R1B4")
FF_TEST_HAIKU_VERSION(1_PRE_BETA_5, "R1B5-")
FF_TEST_HAIKU_VERSION(1_BETA_5, "R1B5")
FF_TEST_HAIKU_VERSION(1_PRE_BETA_6, "R1B6-")
FF_TEST_HAIKU_VERSION(1_BETA_6, "R1B6")
FF_TEST_HAIKU_VERSION(1_PRE_BETA_7, "R1B7-")
FF_TEST_HAIKU_VERSION(1_BETA_7, "R1B7")
FF_TEST_HAIKU_VERSION(1_PRE_BETA_8, "R1B8-")
FF_TEST_HAIKU_VERSION(1_BETA_8, "R1B8")
FF_TEST_HAIKU_VERSION(1_PRE_BETA_9, "R1B9-")
FF_TEST_HAIKU_VERSION(1_BETA_9, "R1B9")
FF_TEST_HAIKU_VERSION(1, "R1")
case B_HAIKU_VERSION_BEOS:
ffStrbufSetStatic(&os->version, "BEOS");
break;
case B_HAIKU_VERSION_BONE:
ffStrbufSetStatic(&os->version, "BONE");
break;
case B_HAIKU_VERSION_DANO:
ffStrbufSetStatic(&os->version, "DANO");
break;
}
}
else
{
int32 relVer = ver / 0x10000;
ver %= 0x10000;
if (ver == 0)
{
ffStrbufSetF(&os->version, "R%d", relVer);
}
else
{
relVer++;
break;
bool isPre = !!(ver & 1);
if (ver < B_HAIKU_VERSION_1_PRE_BETA_1)
{
int32 alphaVer = ver / 0x100;
if (isPre)
ffStrbufSetF(&os->version, "R%dA%d-", relVer, alphaVer + 1);
else
ffStrbufSetF(&os->version, "R%dA%d", relVer, alphaVer);
}
else if (ver < 0x00010000 /* B_HAIKU_VERSION_1 */)
{
int32 betaVer = (ver - B_HAIKU_VERSION_1_ALPHA_4) / 0x100;
if (isPre)
ffStrbufSetF(&os->version, "R%dB%d-", relVer, betaVer + 1);
else
ffStrbufSetF(&os->version, "R%dB%d", relVer, betaVer);
}
}
}
}
if (!os->version.length)
{
system_info sys;
if (get_system_info(&sys) == B_OK)
ffStrbufAppendF(&os->version, "R%ldx", sys.kernel_version);
}