Updata AppStream Metadata (Close #126)

This commit is contained in:
TheBrokenRail 2025-03-19 20:07:53 -04:00
parent 73772958fd
commit 3f63087a33
14 changed files with 158 additions and 121 deletions

View File

@ -189,6 +189,7 @@ if(BUILD_NATIVE_COMPONENTS)
# Configure
CMAKE_CACHE_ARGS ${ARM_OPTIONS}
CMAKE_GENERATOR "Ninja Multi-Config"
CONFIGURE_HANDLED_BY_BUILD TRUE
# Build
BUILD_COMMAND
"${CMAKE_COMMAND}" "--build" "<BINARY_DIR>" "--config" "$<CONFIG>"

View File

@ -1,5 +1,5 @@
<p align="center">
<img alt="Start Screen" src="images/start.png">
<img alt="Start Screen" src="images/screenshots/start.png">
</p>
<p align="center">

View File

@ -1,28 +1,9 @@
# Utility Functions
include("${CMAKE_CURRENT_LIST_DIR}/../util/util.cmake")
# Download AppImage Runtime
set(RUNTIME_ARCH "unknown")
if(CPACK_MCPI_ARCH STREQUAL "armhf")
set(RUNTIME_ARCH "armhf")
elseif(CPACK_MCPI_ARCH STREQUAL "arm64")
set(RUNTIME_ARCH "aarch64")
elseif(CPACK_MCPI_ARCH STREQUAL "amd64")
set(RUNTIME_ARCH "x86_64")
endif()
set(RUNTIME "${CPACK_TOPLEVEL_DIRECTORY}/runtime")
safe_download(
"AppImage Runtime"
"https://github.com/AppImage/type2-runtime/releases/download/continuous/runtime-${RUNTIME_ARCH}"
"${RUNTIME}"
)
# Package
set(APPIMAGE_ARCH "unknown")
if(CPACK_MCPI_ARCH STREQUAL "armhf")
set(APPIMAGE_ARCH "arm")
elseif(CPACK_MCPI_ARCH STREQUAL "arm64")
set(APPIMAGE_ARCH "arm_aarch64")
set(APPIMAGE_ARCH "aarch64")
elseif(CPACK_MCPI_ARCH STREQUAL "amd64")
set(APPIMAGE_ARCH "x86_64")
endif()
@ -33,8 +14,6 @@ execute_process(
"VERSION=${CPACK_MCPI_VERSION}"
"appimagetool"
"--updateinformation" "zsync|${CPACK_MCPI_REPO}/releases/download/latest/${CPACK_PACKAGE_FILE_NAME_ZSYNC}${CPACK_MCPI_APPIMAGE_ZSYNC_EXT}"
"--runtime-file" "${RUNTIME}"
"--comp" "zstd"
"${CPACK_TEMPORARY_DIRECTORY}"
"${CPACK_PACKAGE_FILE_NAME}${CPACK_MCPI_APPIMAGE_EXT}"
WORKING_DIRECTORY "${CPACK_PACKAGE_DIRECTORY}"

View File

@ -29,9 +29,13 @@ else()
set(BUILD_MEDIA_LAYER_CORE "${BUILD_ARM_COMPONENTS}")
endif()
# Author
mcpi_option(AUTHOR "Author" STRING "TheBrokenRail")
mcpi_option(AUTHOR_ID "Author ID" STRING "com.thebrokenrail")
# App Information
mcpi_option(APP_NAME "App Name" STRING "minecraft-pi-reborn")
mcpi_option(APP_ID "App ID" STRING "com.thebrokenrail.MCPIReborn")
mcpi_option(APP_ID "App ID" STRING "${MCPI_AUTHOR_ID}.MCPIReborn")
mcpi_option(APP_TITLE "App Title" STRING "Minecraft: Pi Edition: Reborn")
# Skin Server
@ -49,9 +53,6 @@ set_property(
file(STRINGS "${CMAKE_CURRENT_LIST_DIR}/../../VERSION" MCPI_VERSION)
file(TIMESTAMP "${CMAKE_CURRENT_LIST_DIR}/../../VERSION" MCPI_VERSION_DATE "%Y-%m-%d" UTC)
# Author
mcpi_option(AUTHOR "Author" STRING "TheBrokenRail")
# Homepage
mcpi_option(REPO_HOST "Repository Host" STRING "https://gitea.thebrokenrail.com")
mcpi_option(REPO_PATH "Repository Path" STRING "minecraft-pi-reborn/minecraft-pi-reborn")

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

View File

@ -1,48 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop">
<component type="desktop-application">
<id>${MCPI_APP_ID}</id>
<name>${MCPI_APP_TITLE}</name>
<metadata_license>CC0-1.0</metadata_license>
<summary>Fun with Blocks</summary>
<description>
<p>Minecraft: Pi Edition Modding Project.</p>
<p>NOTE: This is not verified by, affiliated with, or supported by Mojang or Microsoft.</p>
</description>
<categories>
<category>Game</category>
<category>Simulation</category>
</categories>
<keywords>
<keyword>sandbox</keyword>
<keyword>world</keyword>
<keyword>mining</keyword>
<keyword>crafting</keyword>
<keyword>blocks</keyword>
<keyword>multiplayer</keyword>
</keywords>
<metadata_license>CC0-1.0</metadata_license>
<project_license>LicenseRef-proprietary</project_license>
<developer id="${MCPI_AUTHOR_ID}">
<name>${MCPI_AUTHOR} &amp; Mojang AB</name>
</developer>
<url type="homepage">${MCPI_REPO}</url>
<url type="help">${MCPI_DISCORD_INVITE}</url>
<screenshots>
<screenshot type="default">
<image>${MCPI_REPO}/raw/branch/master/images/screenshots/start.png</image>
<caption>Start Screen</caption>
</screenshot>
<screenshot>
<image>${MCPI_REPO}/raw/branch/master/images/screenshots/launcher.png</image>
<caption>Launcher</caption>
</screenshot>
</screenshots>
<launchable type="desktop-id">${MCPI_APP_ID}.desktop</launchable>
<provides>
<id>${MCPI_APP_ID}.desktop</id>
<binary>${MCPI_APP_NAME}</binary>
</provides>
<project_license>LicenseRef-proprietary</project_license>
<developer_name>${MCPI_AUTHOR} &amp; Mojang AB</developer_name>
<content_rating type="oars-1.0">
<recommends>
<control>pointing</control>
<control>keyboard</control>
<display_length compare="ge">360</display_length>
</recommends>
<content_rating type="oars-1.1">
<content_attribute id="violence-cartoon">moderate</content_attribute>
<content_attribute id="violence-fantasy">none</content_attribute>
<content_attribute id="violence-realistic">none</content_attribute>
<content_attribute id="violence-bloodshed">none</content_attribute>
<content_attribute id="violence-sexual">none</content_attribute>
<content_attribute id="drugs-alcohol">none</content_attribute>
<content_attribute id="drugs-narcotics">none</content_attribute>
<content_attribute id="drugs-tobacco">none</content_attribute>
<content_attribute id="sex-nudity">none</content_attribute>
<content_attribute id="sex-themes">none</content_attribute>
<content_attribute id="language-profanity">none</content_attribute>
<content_attribute id="language-humor">none</content_attribute>
<content_attribute id="language-discrimination">none</content_attribute>
<content_attribute id="social-chat">intense</content_attribute>
<content_attribute id="social-info">none</content_attribute>
<content_attribute id="social-audio">none</content_attribute>
<content_attribute id="social-location">none</content_attribute>
<content_attribute id="social-contacts">none</content_attribute>
<content_attribute id="money-purchasing">none</content_attribute>
<content_attribute id="money-gambling">none</content_attribute>
</content_rating>
<releases>
<release version="${MCPI_VERSION}" date="${MCPI_VERSION_DATE}" />
</releases>
<screenshots>
<screenshot type="default">
<image>${MCPI_REPO}/raw/branch/master/images/start.png</image>
</screenshot>
</screenshots>
</component>

View File

@ -1,7 +1,8 @@
#!/usr/bin/env node
import * as path from 'node:path';
import * as fs from 'node:fs';
import { info, err, run, createDir, getScriptsDir, getBuildToolsBin, getParallelFlag } from './lib/util.mjs';
import * as os from 'node:os';
import { info, err, run, createDir, getScriptsDir, getBuildToolsBin } from './lib/util.mjs';
import { parseOptions, Enum, Architectures } from './lib/options.mjs';
// CMake Options
@ -100,9 +101,9 @@ if (!options.install) {
// Use Build Tools
const buildTools = getBuildToolsBin();
const makeTool = 'make';
const hasBuildTools = fs.existsSync(path.join(buildTools, makeTool));
if (hasBuildTools) {
const jobserver = 'jobserver_pool.py';
const supportsJobserver = fs.existsSync(path.join(buildTools, jobserver));
if (supportsJobserver) {
function prependEnv(env, value) {
const old = process.env[env];
if (old) {
@ -123,12 +124,11 @@ run(configure);
// Build
const configArg = ['--config', options.debug ? 'Debug' : 'Release'];
if (hasBuildTools) {
fs.writeFileSync(path.join(build, 'Makefile'), `.PHONY: all\nall:\n\t+@cmake --build . ${configArg.join(' ')}\n`);
run([makeTool, '-C', build, getParallelFlag(), '--jobserver-style=fifo']);
} else {
run(['cmake', '--build', build, getParallelFlag(), ...configArg]);
const buildCommand = ['cmake', '--build', build, ...configArg];
if (supportsJobserver) {
buildCommand.unshift(jobserver, '--fifo', path.join(os.tmpdir(), '.jobserver-' + process.pid));
}
run(buildCommand);
// Package
if (options.packageType !== PackageTypes.AppImage) {

View File

@ -1,7 +1,7 @@
#!/usr/bin/env node
import * as path from 'node:path';
import * as fs from 'node:fs';
import { err, run, getDebianVersion, info, doesPackageExist, getBuildToolsDir, createDir, getBuildToolsBin, getParallelFlag } from './lib/util.mjs';
import { err, run, getDebianVersion, info, doesPackageExist, getBuildToolsDir, createDir } from './lib/util.mjs';
import { parseOptions, Enum, Architectures } from './lib/options.mjs';
// Check System
@ -75,9 +75,17 @@ handlers.set(Modes.Build, function () {
addPackageForBuild(
'git',
'cmake' + backportsSuffix,
// For Build Tools
'make',
're2c'
// For Building Ninja
'ninja-build',
're2c',
// For Building AppStream
'libyaml-dev',
'libxmlb-dev',
'liblzma-dev',
'libcurl4-openssl-dev',
'libglib2.0-dev',
'meson',
'gperf'
);
// Compiler
@ -112,10 +120,7 @@ handlers.set(Modes.Build, function () {
addPackageForHost('libglib2.0-dev');
// AppImage Dependencies
addPackageForBuild(
'appstream',
'zsync'
);
addPackageForBuild('zsync');
// Install Packages
installPackages();
@ -126,11 +131,10 @@ handlers.set(Modes.Build, function () {
createDir(buildDir, false);
run([
'cmake',
'-DCMAKE_BUILD_TYPE=Release',
'-DCMAKE_INSTALL_PREFIX=' + getBuildToolsBin(),
'-GNinja',
'-S', buildToolsDir, '-B', buildDir
]);
run(['cmake', '--build', buildDir, getParallelFlag()]);
run(['cmake', '--build', buildDir]);
run(['cmake', '--install', buildDir]);
});

View File

@ -2,7 +2,6 @@ import * as child_process from 'node:child_process';
import * as fs from 'node:fs';
import * as path from 'node:path';
import * as url from 'node:url';
import * as os from 'node:os';
// Logging
const EXIT_FAILURE = 1;
@ -73,8 +72,3 @@ export function getBuildToolsBin() {
createDir(dir, false);
return dir;
}
// Get '-jX' Flag For Build Tools
export function getParallelFlag() {
return '-j' + os.cpus().length;
}

View File

@ -5,9 +5,38 @@ set -e
# Setup
export XDG_SESSION_TYPE=x11
unset MCPI_GUI_SCALE
export PATH="$(pwd)/out/host/usr/bin:${PATH}"
unset MCPI_USERNAME
export PATH="$(pwd)/out/none/host/usr/bin:${PATH}"
# Setup Feature Flags
# Game Directory
export MCPI_PROFILE_DIRECTORY="$(pwd)/.testing-tmp"
rm -rf "${MCPI_PROFILE_DIRECTORY}"
mkdir "${MCPI_PROFILE_DIRECTORY}"
# Take Screenshot
screenshot() {
# Arguments
IMAGE="images/screenshots/$1.png"
TIMER="$2"
shift 2
# Run
minecraft-pi-reborn "$@" &
PID="$!"
# Screenshot
sleep "${TIMER}"
gnome-screenshot --window "--file=${IMAGE}"
# Kill
kill "${PID}"
wait "${PID}" || :
}
# Launcher
screenshot launcher 0.5
# Start Screen
export MCPI_FEATURE_FLAGS="$(
# Get All Feature Flags
minecraft-pi-reborn --print-available-feature-flags |
@ -19,15 +48,4 @@ export MCPI_FEATURE_FLAGS="$(
# Format
tr '\n' '|'
)"
# Run
minecraft-pi-reborn --default --no-cache &
PID="$!"
# Screenshot
sleep 3
gnome-screenshot --window --file=images/start.png
# Kill
kill "${PID}"
wait "${PID}"
screenshot start 3 --default

View File

@ -19,7 +19,7 @@ fi
# Make Test Directory
TEST_WORKING_DIR="$(pwd)/.testing-tmp"
rm -rf "${TEST_WORKING_DIR}"
mkdir -p "${TEST_WORKING_DIR}"
mkdir "${TEST_WORKING_DIR}"
ROOT="$(pwd)"
cd "${TEST_WORKING_DIR}"
@ -34,7 +34,7 @@ if [ "${MODE}" = "server" ]; then
./tmp.AppImage --appimage-extract-and-run --server --only-generate
else
# Client Test
export HOME="${TEST_WORKING_DIR}"
export MCPI_PROFILE_DIRECTORY="${TEST_WORKING_DIR}"
./tmp.AppImage --appimage-extract-and-run --default --no-cache --benchmark --force-headless
fi

View File

@ -1,40 +1,32 @@
cmake_minimum_required(VERSION 3.25.0)
project(tools)
# Utility Functions
include(../cmake/util/util.cmake)
# Force Build Type
force_set(CMAKE_BUILD_TYPE "Release" STRING)
# Project
project(tools)
# Options
force_set(BUILD_TESTING FALSE BOOL)
force_set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/bin" FILEPATH)
force_set(CMAKE_INSTALL_BINDIR "." FILEPATH)
# Versions
set(NINJA_VERSION "jobserver")
set(APPIMAGETOOL_VERSION "continuous")
set(APPSTREAM_VERSION "v1.0.4")
# Ninja
include(FetchContent)
FetchContent_Declare(ninja
GIT_REPOSITORY "https://github.com/digit-google/ninja.git"
GIT_TAG jobserver
GIT_TAG "${NINJA_VERSION}"
)
FetchContent_MakeAvailable(ninja)
# Make
include(ExternalProject)
ExternalProject_Add(make
URL "https://ftp.gnu.org/gnu/make/make-4.4.1.tar.gz"
URL_HASH "SHA256=dd16fb1d67bfab79a72f5e8390735c49e3e8e70b4945a15ab1f81ddb78658fb3"
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
CONFIGURE_COMMAND
"<SOURCE_DIR>/configure"
"--prefix=<INSTALL_DIR>"
"--without-guile"
"--enable-silent-rules"
"--quiet"
"CFLAGS=${CMAKE_C_FLAGS}"
BUILD_IN_SOURCE TRUE
INSTALL_COMMAND ""
)
ExternalProject_Get_Property(make SOURCE_DIR)
install(PROGRAMS "${SOURCE_DIR}/make" DESTINATION "${CMAKE_INSTALL_BINDIR}")
install(PROGRAMS "${ninja_SOURCE_DIR}/misc/jobserver_pool.py" TYPE BIN)
# Download AppImageTool
execute_process(COMMAND uname -m OUTPUT_VARIABLE ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
@ -45,7 +37,7 @@ set(APPIMAGETOOL_NAME "appimagetool")
set(APPIMAGETOOL_BIN "${CMAKE_CURRENT_BINARY_DIR}/${APPIMAGETOOL_NAME}.AppImage")
safe_download(
"AppImageTool"
"https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-${ARCH}.AppImage"
"https://github.com/AppImage/appimagetool/releases/download/${APPIMAGETOOL_VERSION}/appimagetool-${ARCH}.AppImage"
"${APPIMAGETOOL_BIN}"
)
# Fix
@ -58,4 +50,35 @@ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${APPIMAGETOOL_NAME}"
"#!/bin/sh\n"
"exec \"${APPIMAGETOOL_BIN}\" --appimage-extract-and-run \"\$@\"\n"
)
install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/${APPIMAGETOOL_NAME}" DESTINATION "${CMAKE_INSTALL_BINDIR}")
install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/${APPIMAGETOOL_NAME}" TYPE BIN)
# AppStream
include(ExternalProject)
ExternalProject_Add(appstream
GIT_REPOSITORY "https://github.com/ximion/appstream.git"
GIT_TAG "${APPSTREAM_VERSION}"
# Patch
PATCH_COMMAND sed -i "/i18n\\|po\\/\\|data\\/\\|docs\\/\\|tests\\//d" meson.build
# Configure
CONFIGURE_COMMAND
"meson" "setup"
"--reconfigure"
"--prefix=<INSTALL_DIR>"
"--buildtype=release"
"--default-library=static"
"-Dsystemd=false"
"-Dstemming=false"
"-Dgir=false"
"-Dzstd-support=false"
"<BINARY_DIR>" "<SOURCE_DIR>"
CONFIGURE_HANDLED_BY_BUILD TRUE
USES_TERMINAL_CONFIGURE TRUE
# Build
BUILD_COMMAND "meson" "compile"
USES_TERMINAL_BUILD TRUE
# Install
INSTALL_COMMAND "meson" "install" "--quiet"
USES_TERMINAL_INSTALL TRUE
)
ExternalProject_Get_Property(appstream INSTALL_DIR)
install(PROGRAMS "${INSTALL_DIR}/bin/appstreamcli" TYPE BIN)