Enhancement: Fixes #370, sysdm - Fill in SKU details

This commit is contained in:
Rory Fewell
2024-11-10 00:35:04 +00:00
parent 156d592b92
commit 79baee1e97
8 changed files with 272 additions and 37 deletions

View File

@@ -16,26 +16,80 @@ set(PROJECT_ROOT ${CMAKE_CURRENT_LIST_DIR})
include(../../packaging/cmake-inc/common/CMakeLists.txt)
include(../../packaging/cmake-inc/packaging/CMakeLists.txt)
# Add target
# Set up variables
#
set(GENTAG_TOOL ${REPO_ROOT}/tools/bldutils/gentag/gentag.sh)
set(TAG_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bldtag)
set(OUT_PATH_RELEASE ${CMAKE_BINARY_DIR}/release)
set(GENTAG_TOOL ${REPO_ROOT}/tools/bldutils/gentag/gentag.sh)
add_custom_command(
OUTPUT ${TAG_OUTPUT_PATH}
execute_process(
COMMAND bash ${GENTAG_TOOL}
WORKING_DIRECTORY ${PROJECT_ROOT}
COMMAND bash ${GENTAG_TOOL} > ${TAG_OUTPUT_PATH}
VERBATIM
OUTPUT_VARIABLE REL_BUILD_TAG
)
add_custom_target(
gen-buildtag ALL
DEPENDS
${TAG_OUTPUT_PATH}
)
if (${WINTC_SKU} MATCHES "^xpclient-(.+)")
set(REL_SKU_NAME "Microsoft Windows XP")
set(REL_SKU_TAGLINE "Version 2002")
if (${CMAKE_MATCH_1} STREQUAL "per")
set(REL_SKU_EDITION "Home Edition")
elseif (${CMAKE_MATCH_1} STREQUAL "pro")
if (
${CMAKE_SYSTEM_PROCESSOR} STREQUAL "amd64" OR
${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64"
)
set(REL_SKU_EDITION "Professional x64 Edition")
set(REL_SKU_TAGLINE "Version 2003")
elseif (
${CMAKE_SYSTEM_PROCESSOR} STREQUAL "ia64" OR
${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64" OR
${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv8"
)
set(REL_SKU_EDITION "64-Bit Edition")
else()
set(REL_SKU_EDITION "Professional")
endif()
elseif (${CMAKE_MATCH_1} STREQUAL "mce")
set(REL_SKU_EDITION "Media Center Edition 2005")
elseif (${CMAKE_MATCH_1} STREQUAL "tabletpc")
set(REL_SKU_EDITION "Tablet PC Edition 2005")
elseif (${CMAKE_MATCH_1} STREQUAL "embedded")
set(REL_SKU_EDITION "Embedded")
endif()
elseif (${WINTC_SKU} MATCHES "^dnsrv(_r2)?-(.+)")
set(REL_SKU_NAME "Microsoft Windows Server 2003")
if ("${CMAKE_MATCH_1}" STREQUAL "_r2")
set(REL_SKU_NAME "Microsoft Windows Server 2003 R2")
endif()
if (${CMAKE_MATCH_2} STREQUAL "std")
set(REL_SKU_EDITION "Standard Edition")
elseif (${CMAKE_MATCH_2} STREQUAL "ent")
set(REL_SKU_EDITION "Enterprise Edition")
elseif (${CMAKE_MATCH_2} STREQUAL "dtc")
set(REL_SKU_EDITION "Datacenter Edition")
elseif (${CMAKE_MATCH_2} STREQUAL "app")
set(REL_SKU_EDITION "Appliance Edition")
elseif (${CMAKE_MATCH_2} STREQUAL "bla")
set(REL_SKU_EDITION "Web Edition")
elseif (${CMAKE_MATCH_2} STREQUAL "sbs")
set(REL_SKU_EDITION "Small Business Server")
elseif (${CMAKE_MATCH_2} STREQUAL "ccs")
set(REL_SKU_EDITION "Compute Cluster Edition")
elseif (${CMAKE_MATCH_2} STREQUAL "ss")
set(REL_SKU_EDITION "Storage Server")
endif()
elseif (${WINTC_SKU} STREQUAL "homesrv")
set(REL_SKU_NAME "Microsoft Windows Home Server")
endif()
set(REL_PRETTY_NAME "${REL_SKU_NAME} ${REL_SKU_EDITION}")
# Installation
#
wintc_configure_and_install_packaging()
install(FILES ${TAG_OUTPUT_PATH} DESTINATION ${WINTC_ASSETS_INSTALL_DIR})
configure_file(release.in ${OUT_PATH_RELEASE} @ONLY)
install(FILES ${OUT_PATH_RELEASE} DESTINATION ${WINTC_ASSETS_INSTALL_DIR})

6
base/bldtag/release.in Normal file
View File

@@ -0,0 +1,6 @@
[Version]
PrettyName=@REL_PRETTY_NAME@
SkuName=@REL_SKU_NAME@
SkuEdition=@REL_SKU_EDITION@
SkuTagline=@REL_SKU_TAGLINE@
BuildTag=@REL_BUILD_TAG@

View File

@@ -16,11 +16,39 @@
*/
gboolean wintc_build_is_debug(void);
/**
* Retrieves the 'pretty name' of the installed version of WinTC.
*
* @return The 'pretty name' of the installed version of WinTC.
*/
const gchar* wintc_build_get_pretty_name(void);
/**
* Retrieves the edition of the installed version of WinTC.
*
* @return The edition of the installed version of WinTC.
*/
const gchar* wintc_build_get_sku_edition(void);
/**
* Retrieves the name of the installed version of WinTC.
*
* @return The name of the installed version of WinTC.
*/
const gchar* wintc_build_get_sku_name(void);
/**
* Retrieves the build tag identifying the installed version of WinTC.
*
* @return The WinTC build tag (caller is responsible for freeing).
* @return The WinTC build tag.
*/
gchar* wintc_build_get_tag(void);
const gchar* wintc_build_get_tag(void);
/**
* Retrieves the tagline of the installed version of WinTC.
*
* @return The tagline of the installed version of WinTC.
*/
const gchar* wintc_build_get_tagline(void);
#endif

View File

@@ -1,7 +1,28 @@
#include <glib.h>
#include "../public/errors.h"
#include "../public/version.h"
//
// PRIVATE CONSTANTS
//
static const gchar* S_KEYFILE_GROUP = "Version";
//
// STATIC DATA
//
static gboolean s_keyfile_loaded;
static GKeyFile* s_keyfile_version;
//
// FORWARD DECLARATIONS
//
gboolean ensure_keyfile(void);
gchar* get_keyfile_entry(
const gchar* key,
const gchar* default_str
);
//
// PUBLIC FUNCTIONS
//
@@ -14,21 +35,110 @@ gboolean wintc_build_is_debug(void)
#endif
}
gchar* wintc_build_get_tag(void)
const gchar* wintc_build_get_pretty_name(void)
{
gchar* build_tag = NULL;
static gchar* pretty_name = NULL;
if (
!g_file_get_contents(
"@CMAKE_INSTALL_PREFIX@/@WINTC_ASSETS_INSTALL_DIR@/bldtag",
&build_tag,
NULL,
NULL
)
)
if (!pretty_name)
{
build_tag = g_strdup_printf("%s", "no tag");
pretty_name = get_keyfile_entry("PrettyName", "Unknown System");
}
return pretty_name;
}
const gchar* wintc_build_get_sku_edition(void)
{
static gchar* skued = NULL;
if (!skued)
{
skued = get_keyfile_entry("SkuEdition", "");
}
return skued;
}
const gchar* wintc_build_get_sku_name(void)
{
static gchar* skuname = NULL;
if (!skuname)
{
skuname = get_keyfile_entry("SkuName", "Unknown System");
}
return skuname;
}
const gchar* wintc_build_get_tag(void)
{
static gchar* build_tag = NULL;
if (!build_tag)
{
build_tag = get_keyfile_entry("BuildTag", "no tag");
}
return build_tag;
}
const gchar* wintc_build_get_tagline(void)
{
static gchar* skuver = NULL;
if (!skuver)
{
skuver = get_keyfile_entry("SkuTagline", "");
}
return skuver;
}
//
// PRIVATE FUNCTIONS
//
gboolean ensure_keyfile(void)
{
GError* error = NULL;
if (s_keyfile_loaded)
{
return TRUE;
}
if (!s_keyfile_version)
{
s_keyfile_version = g_key_file_new();
}
s_keyfile_loaded =
g_key_file_load_from_file(
s_keyfile_version,
"@CMAKE_INSTALL_PREFIX@/@WINTC_ASSETS_INSTALL_DIR@/release",
G_KEY_FILE_NONE,
&error
);
wintc_log_error_and_clear(&error);
return s_keyfile_loaded;
}
gchar* get_keyfile_entry(
const gchar* key,
const gchar* default_str
)
{
if (ensure_keyfile())
{
return g_key_file_get_string(
s_keyfile_version,
S_KEYFILE_GROUP,
key,
NULL
);
}
return g_strdup_printf("%s", default_str);
}

View File

@@ -27,6 +27,10 @@
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="resource">/uk/oddmatics/wintc/cpl-sysdm/comphi.png</property>
<style>
<class name="wintc-mt-lg" />
</style>
</object>
<packing>
<property name="expand">False</property>
@@ -52,6 +56,10 @@
<property name="can-focus">False</property>
<property name="label" translatable="yes">System:</property>
<property name="xalign">0.0</property>
<style>
<class name="wintc-mt-lg" />
</style>
</object>
<packing>
<property name="expand">False</property>
@@ -60,11 +68,15 @@
</packing>
</child>
<child>
<object class="GtkLabel">
<object class="GtkLabel" id="label-skuname">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="no">WINTC_PROJECT_NAME</property>
<property name="xalign">0.0</property>
<style>
<class name="wintc-ml-lg" />
</style>
</object>
<packing>
<property name="expand">False</property>
@@ -73,11 +85,15 @@
</packing>
</child>
<child>
<object class="GtkLabel">
<object class="GtkLabel" id="label-skued">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="no">WINTC_SKU</property>
<property name="xalign">0.0</property>
<style>
<class name="wintc-ml-lg" />
</style>
</object>
<packing>
<property name="expand">False</property>
@@ -86,11 +102,15 @@
</packing>
</child>
<child>
<object class="GtkLabel">
<object class="GtkLabel" id="label-skuver">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="no">Version 2002</property>
<property name="xalign">0.0</property>
<style>
<class name="wintc-ml-lg" />
</style>
</object>
<packing>
<property name="expand">False</property>

View File

@@ -45,6 +45,10 @@ struct _WinTCCplSysdmWindow
// UI
//
GtkWidget* notebook_main;
GtkWidget* label_skuname;
GtkWidget* label_skued;
GtkWidget* label_skuver;
};
//
@@ -121,8 +125,24 @@ static void wintc_cpl_sysdm_window_init(
wintc_ctl_cpl_notebook_append_page_from_resource(
GTK_NOTEBOOK(self->notebook_main),
"/uk/oddmatics/wintc/cpl-sysdm/page-gen.ui",
"label-skuname", &(self->label_skuname),
"label-skued", &(self->label_skued),
"label-skuver", &(self->label_skuver),
NULL
);
gtk_label_set_text(
GTK_LABEL(self->label_skuname),
wintc_build_get_sku_name()
);
gtk_label_set_text(
GTK_LABEL(self->label_skued),
wintc_build_get_sku_edition()
);
gtk_label_set_text(
GTK_LABEL(self->label_skuver),
wintc_build_get_tagline()
);
}
//

View File

@@ -271,12 +271,11 @@ static gboolean wintc_desktop_window_draw(
if (!s_tag)
{
gchar* tag = wintc_build_get_tag();
s_tag =
g_strdup_printf("For testing purposes only. Build %s", tag);
g_free(tag);
g_strdup_printf(
"For testing purposes only. Build %s",
wintc_build_get_tag()
);
}
// Default to white, IDK if Windows changes this...

View File

@@ -120,7 +120,6 @@ int main(
// Get kernel info
//
gchar* build_tag = wintc_build_get_tag();
gchar* kernel_version;
uname(&kernel_info);
@@ -129,7 +128,7 @@ int main(
g_strdup_printf(
"Version %s (%s)%s",
kernel_info.release,
build_tag,
wintc_build_get_tag(),
wintc_build_is_debug() ? " (Debug)" : ""
);
@@ -215,7 +214,6 @@ int main(
// Clear mem
//
g_free(build_tag);
g_free(kernel_version);
g_free(system_stats);